PyTorch深度學(xué)習(xí)項目教程課件:工業(yè)檢測圖像分割_第1頁
PyTorch深度學(xué)習(xí)項目教程課件:工業(yè)檢測圖像分割_第2頁
PyTorch深度學(xué)習(xí)項目教程課件:工業(yè)檢測圖像分割_第3頁
PyTorch深度學(xué)習(xí)項目教程課件:工業(yè)檢測圖像分割_第4頁
PyTorch深度學(xué)習(xí)項目教程課件:工業(yè)檢測圖像分割_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

PyTorch深度學(xué)習(xí)項目教程

工業(yè)檢測圖像分割I(lǐng)MAGESEGMENTATION要點:UNet、數(shù)據(jù)標(biāo)注、第三方框架的使用

項目背景ProjectBackground問題:圖像分割是計算機視覺的基本任務(wù)之一。圖像分割旨在將圖像分成若干個互不重疊的區(qū)域或像素集合,使得每個區(qū)域內(nèi)的像素具有相似的特征。在工業(yè)檢測中,圖像分割主要用于將感興趣的目標(biāo)(如產(chǎn)品、物體或缺陷)與背景進行分離。解決:在傳統(tǒng)數(shù)字圖像處理中,一般采用閾值分割、區(qū)域生長、邊緣檢測、圖割等方法,自從深度學(xué)習(xí)技術(shù)普及以來,基于UNet結(jié)構(gòu)的分割模型迅速得到了推廣,通過大量的標(biāo)記數(shù)據(jù)進行訓(xùn)練,深度學(xué)習(xí)分割模型的準(zhǔn)確性大大超越了傳統(tǒng)算法。知識目標(biāo)KnowledgeObjectives理解圖像分割的基本概念及其在工業(yè)檢測中的應(yīng)用學(xué)習(xí)分割數(shù)據(jù)標(biāo)注的方法和技巧掌握圖像分割檢測算法的開發(fā)流程和關(guān)鍵步驟學(xué)習(xí)并深入理解UNet網(wǎng)絡(luò)結(jié)構(gòu)及其在圖像分割中的應(yīng)用能力目標(biāo)AbilityGoals能夠熟練使用LabelMe等工具完成分割數(shù)據(jù)的標(biāo)注工作能夠掌握將LabelMe生成的數(shù)據(jù)格式轉(zhuǎn)換為分割模型所支持的數(shù)據(jù)格式的方法能夠運用UNet網(wǎng)絡(luò)結(jié)構(gòu)開發(fā)圖像分割算法,并對其進行優(yōu)化和調(diào)整具備獨立解決實際項目中圖像分割問題的能力素養(yǎng)目標(biāo)ProfessionalAttainments具備從實際項目出發(fā),理解項目需求和應(yīng)用場景的能力能夠根據(jù)項目需求,獨立選取合適的開發(fā)工具和算法框架具備良好的創(chuàng)新意識和團隊協(xié)作能力,能夠在項目中發(fā)揮積極作用注重核心價值觀的培養(yǎng),將技術(shù)應(yīng)用于產(chǎn)業(yè)發(fā)展之中目錄任務(wù)1了解圖像分割需求任務(wù)2數(shù)據(jù)集構(gòu)建任務(wù)3圖像分割網(wǎng)絡(luò)訓(xùn)練任務(wù)4網(wǎng)絡(luò)推理及結(jié)果評價01任務(wù)1了解圖像分割需求1.1工業(yè)檢測的流程實際應(yīng)用中,需要分離不規(guī)則的圖像區(qū)域,方便進行下一步操作。為了實現(xiàn)硅鋼片料的測量,首先需要對圖像進行分割處理,然后再進行具體的測量1.2圖像分割圖像分割是圖像分析的第一步,是計算機視覺的基礎(chǔ),是圖像理解的重要組成部分,同時也是圖像處理中最困難的問題之一。所謂圖像分割是指根據(jù)灰度、彩色、空間紋理、幾何形狀等特征把圖像劃分為若干個互不相交的區(qū)域,使得這些特征在同一個區(qū)域內(nèi)表現(xiàn)出一致性或相似性,而在不同區(qū)域間表現(xiàn)出明顯的不同。簡單地說就是在一幅圖像中,把目標(biāo)從背景中分離出來。本質(zhì)來講,圖像分割是一種將像素分類的過程,分類的依據(jù)包括像素間的相似性、非連續(xù)性等。圖像分割包括語義分割和實例分割兩種類型。在語義分割中,所有物體都是同一類型的,所有相同類型的物體都使用一個類標(biāo)簽進行標(biāo)記,而在實例分割中,相似的物體可以有自己獨立的標(biāo)簽,類似于目標(biāo)檢測與語義分割的結(jié)合體。原始圖像語義分割實例分割02任務(wù)2數(shù)據(jù)集構(gòu)建2.1數(shù)據(jù)標(biāo)注提供的數(shù)據(jù)集位于:

圖像本身存在陰影、圖像背景存在明暗變化等,傳統(tǒng)的圖像分割,例如閾值、分水嶺算法等,在本圖像上分割效果較差難點:2.1數(shù)據(jù)標(biāo)注打開文件目錄創(chuàng)建標(biāo)注多邊形框“CTRL+”組合鍵放大圖像“EditPolygons”調(diào)整多邊形貼合待分割目標(biāo)LabelMe多邊形標(biāo)注2.2數(shù)據(jù)格式轉(zhuǎn)換及數(shù)據(jù)集劃分一般標(biāo)注后的數(shù)據(jù)需要轉(zhuǎn)為PNG格式的圖像,見源代碼文件夾下的“l(fā)abelme2voc.py”文件:2.2數(shù)據(jù)格式轉(zhuǎn)換及數(shù)據(jù)集劃分還需要進一步將索引格式的PNG轉(zhuǎn)為標(biāo)簽值為[0,1,2,…]的PNG:ann_dir=r'F:\sinline-data\voc\SegmentationClass'

ann_dest_dir=r'F:\sinline-data\voc\ann’

defgen_ann():

ann_files=os.listdir(ann_dir)

forann_fileinann_files:

file_ext=os.path.splitext(ann_file)

iffile_ext[1]=='.png':

#判斷是否為png文件

imgfile=ann_dir+'\\'+ann_file

destfile=ann_dest_dir+'\\'+ann_file

img=cv2.imread(imgfile,0)

newann=np.where(img!=0,1,img)

#print(np.max(new_matrix))

cv2.imwrite(destfile,newann)

jpg_dir=r'F:\sinline-data\voc\JPEGImages'

png_dest_dir=r'F:\sinline-data\voc\img'

defgen_png():

jpg_files=os.listdir(jpg_dir)

forjpg_fileinjpg_files:

file_ext=os.path.splitext(jpg_file)

iffile_ext[1]=='.jpg':

#判斷是否為png文件

imgfile=jpg_dir+'\\'+jpg_file

pngfile=png_dest_dir+'\\'+file_ext[0]+'.png'

img=cv2.imread(imgfile,0)

img=cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

#print(np.max(new_matrix))

cv2.imwrite(pngfile,img)標(biāo)簽轉(zhuǎn)為PNG原JPG圖像轉(zhuǎn)為PNG2.2數(shù)據(jù)格式轉(zhuǎn)換及數(shù)據(jù)集劃分拷貝140張圖像到“images/training”文件夾拷貝20張圖像到“images/validation”下將同名的標(biāo)準(zhǔn)PNG文件分別拷貝到“annotations/training”和“annotations/validation”文件夾內(nèi)03任務(wù)3圖像分割網(wǎng)絡(luò)訓(xùn)練3.1UNet網(wǎng)絡(luò)概述UNet及其變體包括編碼器和解碼器兩部分。在編碼器部分進行特征提取,采用VGG或ResNet網(wǎng)絡(luò),每經(jīng)過一個池化層圖像縮小一半,包括原圖,一共有5次縮?。辉诮獯a器部分進行上采樣或反卷積操作,每上采樣一次,圖像放大一倍,并和特征提取部分對應(yīng)的通道位置進行矩陣拼接,這種拼接稱為特征融合。由于網(wǎng)絡(luò)結(jié)構(gòu)像U型,所以叫UNet網(wǎng)絡(luò)3.1UNet網(wǎng)絡(luò)概述1.編碼器(Encoder):卷積塊(ConvolutionalBlocks):編碼器由多個卷積塊組成,每個卷積塊包括卷積層(通常是3x3卷積核)、批量歸一化(BatchNormalization)和激活函數(shù)(通常是ReLU)。這些卷積塊幫助網(wǎng)絡(luò)學(xué)習(xí)圖像的低級特征。

-池化層(PoolingLayer):在每個卷積塊之后,通常會添加一個池化層,例如最大池化或平均池化,以減小特征圖的大小,同時保留重要信息。2.連接橋(Bridge):中心連接橋(CenterBridge):在編碼器的頂部,存在一個中心連接橋,它連接編碼器和解碼器的對應(yīng)層。這一層有助于在解碼器中還原丟失的空間信息。3.解碼器(Decoder):反卷積塊(DeconvolutionalBlocks):解碼器由多個反卷積塊組成,每個塊包含反卷積層(也稱為轉(zhuǎn)置卷積)、批量歸一化和激活函數(shù)。這些塊有助于學(xué)習(xí)圖像的高級語義信息。

上采樣層(UpsamplingLayer):在每個反卷積塊之后,可以添加上采樣層,以增加特征圖的大小,與編碼器中的池化層相對應(yīng)。連接操作(Concatenation):解碼器中的每一層都與編碼器中相應(yīng)的層連接,通過skipconnections(跳躍連接),這有助于將底層和高層的語義信息結(jié)合在一起。4.輸出層:1x1卷積層:最后,通過一個1x1卷積層,將解碼器的輸出映射為最終的分割結(jié)果。這一層的輸出通道數(shù)量通常等于分割任務(wù)中的類別數(shù)。UNet的整體結(jié)構(gòu)使其能夠同時利用圖像的低級和高級特征,從而在圖像分割任務(wù)中表現(xiàn)出色。這種結(jié)構(gòu)的設(shè)計也使得網(wǎng)絡(luò)對于輸入圖像的不同尺寸具有一定的魯棒性。3.2UNet網(wǎng)絡(luò)的建立UNet網(wǎng)絡(luò)結(jié)構(gòu)本身并不復(fù)雜,但是由于UNet可以內(nèi)嵌VGG、ResNet等多種網(wǎng)絡(luò)結(jié)構(gòu),同時UNet家族網(wǎng)絡(luò)結(jié)構(gòu)變體較多,因此圖像分割一般采用開源框架進行實現(xiàn)SMP框架:

pretrainedmodels==0.7.4efficientnet-pytorch==0.7.1timm==0.9.7albumentationstqdmpillowsix需要安裝的軟件包:3.2UNet網(wǎng)絡(luò)的建立環(huán)境配置:“File”→“Settings”→“PythonInterpreter”→“AddInterpreter”→“CondaEnvironment”在segmentation_models_pytorch/__init__.py添加from.importutils3.2UNet網(wǎng)絡(luò)的建立在segmentation_models_pytorch/__init__.py添加from.importutils3.3創(chuàng)建DataSet類classDatasetGuigang(BaseDataset):

""“GuiGangDataset.Readimages,applyaugmentationandpreprocessingtransformations.

Args:

images_dir(str):pathtoimagesfolder

masks_dir(str):pathtosegmentationmasksfolder

class_values(list):valuesofclassestoextractfromsegmentationmask

augmentation(albumentations.Compose):datatransfromationpipeline

(e.g.flip,scale,etc.)

preprocessing(albumentations.Compose):datapreprocessing

(e.g.noralization,shapemanipulation,etc.)

"""

CLASSES=['background','guigang',]

def__init__(

self,

images_dir,

masks_dir,

classes=None,

augmentation=None,

preprocessing=None,

):

self.ids=os.listdir(images_dir)

self.images_fps=[os.path.join(images_dir,image_id)forimage_idinself.ids]

self.masks_fps=[os.path.join(masks_dir,image_id)forimage_idinself.ids]

#convertstrnamestoclassvaluesonmasks

self.class_values=[self.CLASSES.index(cls.lower())forclsinclasses]

self.augmentation=augmentation

self.preprocessing=preprocessing

def__getitem__(self,i):

#readdata

image=cv2.imread(self.images_fps[i])

image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)

mask=cv2.imread(self.masks_fps[i],0)

#extractcertainclassesfrommask(e.g.chips)

masks=[(mask==v)forvinself.class_values]

mask=np.stack(masks,axis=-1).astype('float')

#applyaugmentations

ifself.augmentation:

sample=self.augmentation(image=image,mask=mask)

image,mask=sample['image'],sample['mask']

#applypreprocessing

ifself.preprocessing:

sample=self.preprocessing(image=image,mask=mask)

image,mask=sample['image'],sample['mask']

returnimage,mask

def__len__(self):

returnlen(self.ids)

開源框架中對于數(shù)據(jù)集的格式有自己的要求可以根據(jù)示例程序進行修改滿足模型訓(xùn)練讀寫要求即可3.3創(chuàng)建DataSet類SMP框架中引用了第三方的數(shù)據(jù)增強庫,這個庫在構(gòu)建自己的深度學(xué)習(xí)項目時也可以應(yīng)用importalbumentationsasalbudefget_training_augmentation():

train_transform=[

albu.HorizontalFlip(p=0.5),

#albu.PadIfNeeded(min_height=512,min_width=512,always_apply=True,border_mode=0),

#albu.PadIfNeeded(2112,2112),

albu.Resize(height=1024,width=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論