PyTorch深度学习项目教程课件:工业检测图像分割_第1页
PyTorch深度学习项目教程课件:工业检测图像分割_第2页
PyTorch深度学习项目教程课件:工业检测图像分割_第3页
PyTorch深度学习项目教程课件:工业检测图像分割_第4页
PyTorch深度学习项目教程课件:工业检测图像分割_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PyTorch深度学习项目教程

工业检测图像分割IMAGESEGMENTATION要点:UNet、数据标注、第三方框架的使用

项目背景ProjectBackground问题:图像分割是计算机视觉的基本任务之一。图像分割旨在将图像分成若干个互不重叠的区域或像素集合,使得每个区域内的像素具有相似的特征。在工业检测中,图像分割主要用于将感兴趣的目标(如产品、物体或缺陷)与背景进行分离。解决:在传统数字图像处理中,一般采用阈值分割、区域生长、边缘检测、图割等方法,自从深度学习技术普及以来,基于UNet结构的分割模型迅速得到了推广,通过大量的标记数据进行训练,深度学习分割模型的准确性大大超越了传统算法。知识目标KnowledgeObjectives理解图像分割的基本概念及其在工业检测中的应用学习分割数据标注的方法和技巧掌握图像分割检测算法的开发流程和关键步骤学习并深入理解UNet网络结构及其在图像分割中的应用能力目标AbilityGoals能够熟练使用LabelMe等工具完成分割数据的标注工作能够掌握将LabelMe生成的数据格式转换为分割模型所支持的数据格式的方法能够运用UNet网络结构开发图像分割算法,并对其进行优化和调整具备独立解决实际项目中图像分割问题的能力素养目标ProfessionalAttainments具备从实际项目出发,理解项目需求和应用场景的能力能够根据项目需求,独立选取合适的开发工具和算法框架具备良好的创新意识和团队协作能力,能够在项目中发挥积极作用注重核心价值观的培养,将技术应用于产业发展之中目录任务1了解图像分割需求任务2数据集构建任务3图像分割网络训练任务4网络推理及结果评价01任务1了解图像分割需求1.1工业检测的流程实际应用中,需要分离不规则的图像区域,方便进行下一步操作。为了实现硅钢片料的测量,首先需要对图像进行分割处理,然后再进行具体的测量1.2图像分割图像分割是图像分析的第一步,是计算机视觉的基础,是图像理解的重要组成部分,同时也是图像处理中最困难的问题之一。所谓图像分割是指根据灰度、彩色、空间纹理、几何形状等特征把图像划分为若干个互不相交的区域,使得这些特征在同一个区域内表现出一致性或相似性,而在不同区域间表现出明显的不同。简单地说就是在一幅图像中,把目标从背景中分离出来。本质来讲,图像分割是一种将像素分类的过程,分类的依据包括像素间的相似性、非连续性等。图像分割包括语义分割和实例分割两种类型。在语义分割中,所有物体都是同一类型的,所有相同类型的物体都使用一个类标签进行标记,而在实例分割中,相似的物体可以有自己独立的标签,类似于目标检测与语义分割的结合体。原始图像语义分割实例分割02任务2数据集构建2.1数据标注提供的数据集位于:

图像本身存在阴影、图像背景存在明暗变化等,传统的图像分割,例如阈值、分水岭算法等,在本图像上分割效果较差难点:2.1数据标注打开文件目录创建标注多边形框“CTRL+”组合键放大图像“EditPolygons”调整多边形贴合待分割目标LabelMe多边形标注2.2数据格式转换及数据集划分一般标注后的数据需要转为PNG格式的图像,见源代码文件夹下的“labelme2voc.py”文件:2.2数据格式转换及数据集划分还需要进一步将索引格式的PNG转为标签值为[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)标签转为PNG原JPG图像转为PNG2.2数据格式转换及数据集划分拷贝140张图像到“images/training”文件夹拷贝20张图像到“images/validation”下将同名的标准PNG文件分别拷贝到“annotations/training”和“annotations/validation”文件夹内03任务3图像分割网络训练3.1UNet网络概述UNet及其变体包括编码器和解码器两部分。在编码器部分进行特征提取,采用VGG或ResNet网络,每经过一个池化层图像缩小一半,包括原图,一共有5次缩小;在解码器部分进行上采样或反卷积操作,每上采样一次,图像放大一倍,并和特征提取部分对应的通道位置进行矩阵拼接,这种拼接称为特征融合。由于网络结构像U型,所以叫UNet网络3.1UNet网络概述1.编码器(Encoder):卷积块(ConvolutionalBlocks):编码器由多个卷积块组成,每个卷积块包括卷积层(通常是3x3卷积核)、批量归一化(BatchNormalization)和激活函数(通常是ReLU)。这些卷积块帮助网络学习图像的低级特征。

-池化层(PoolingLayer):在每个卷积块之后,通常会添加一个池化层,例如最大池化或平均池化,以减小特征图的大小,同时保留重要信息。2.连接桥(Bridge):中心连接桥(CenterBridge):在编码器的顶部,存在一个中心连接桥,它连接编码器和解码器的对应层。这一层有助于在解码器中还原丢失的空间信息。3.解码器(Decoder):反卷积块(DeconvolutionalBlocks):解码器由多个反卷积块组成,每个块包含反卷积层(也称为转置卷积)、批量归一化和激活函数。这些块有助于学习图像的高级语义信息。

上采样层(UpsamplingLayer):在每个反卷积块之后,可以添加上采样层,以增加特征图的大小,与编码器中的池化层相对应。连接操作(Concatenation):解码器中的每一层都与编码器中相应的层连接,通过skipconnections(跳跃连接),这有助于将底层和高层的语义信息结合在一起。4.输出层:1x1卷积层:最后,通过一个1x1卷积层,将解码器的输出映射为最终的分割结果。这一层的输出通道数量通常等于分割任务中的类别数。UNet的整体结构使其能够同时利用图像的低级和高级特征,从而在图像分割任务中表现出色。这种结构的设计也使得网络对于输入图像的不同尺寸具有一定的鲁棒性。3.2UNet网络的建立UNet网络结构本身并不复杂,但是由于UNet可以内嵌VGG、ResNet等多种网络结构,同时UNet家族网络结构变体较多,因此图像分割一般采用开源框架进行实现SMP框架:

pretrainedmodels==0.7.4efficientnet-pytorch==0.7.1timm==0.9.7albumentationstqdmpillowsix需要安装的软件包:3.2UNet网络的建立环境配置:“File”→“Settings”→“PythonInterpreter”→“AddInterpreter”→“CondaEnvironment”在segmentation_models_pytorch/__init__.py添加from.importutils3.2UNet网络的建立在segmentation_models_pytorch/__init__.py添加from.importutils3.3创建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)

开源框架中对于数据集的格式有自己的要求可以根据示例程序进行修改满足模型训练读写要求即可3.3创建DataSet类SMP框架中引用了第三方的数据增强库,这个库在构建自己的深度学习项目时也可以应用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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论