PaddleSeg分割实战——汽车活塞卡簧检测项目

最近工作中遇到一个项目需要使用深度学习分割进行缺陷检测,一开始通过查百度使用了MRCNN算法,但运行过程中发现由于算法框架太陈旧,在搭建环境的时候会遇到各种千奇百怪的问题,遂放弃并转而投向百度Paddle的PaddleSeg分割算法。该笔记主要用于记录从搭建环境到运行结果的全过程和这其中遇到的一些坑,作为记录使用。

1、背景及硬件条件:

训练内容:汽车弹簧检测的附铜缺陷检测;

训练环境:单卡GTX3060 12G+CUDA11.2+CUDNN8.X+Win10;

训练算法:基于PaddlePaddle的PaddleSeg算法;

数据情况:附铜照片(1024*1024)处理后约91张,划分70张训练集,10张测试集、11张验证集;使用labelme进行标注,标注完成后运行paddleseg里的脚本进行数据集制作,详情看教程。

2、环境搭建

PaddleSeg是基于百度飞浆PaddlePaddle框架的分割算法,由于算法比较新,更新维护得比较多,所以在搭建环境时遇到的问题不算很多。首先在PaddleSeg 的Github主页(https://github.com/PaddlePaddle/PaddleSeg)下载PaddleSeg的代码下下来,然后cd到文件夹中执行一条pip指令下载其所需要的环境包。

这里需要注意的一个点是,在下载paddlepaddle包的时候,一定要去到paddle官网去找对应cuda版本的paddlepaddle,不要直接用pip的版本!比如,该项目环境的是CUDA11.2,需要去到官网找到对应版本下的Paddle版本,然后复制黏贴红色方框里的内容到运行命令符进行下载。在这里paddle版本2.2.2.post112,的postxxx指的是对应的CUDA版本,此处使用的是11.2所以是post112。如果没有下载正确版本,会在后续启动训练时报类似找不到cudartXX.dll这样的错误,在此处需要特别注意。

PaddleSeg分割实战——汽车活塞卡簧检测项目_第1张图片

至此,PaddleSeg的环境搭建基本完成,可以进行数据的准备工作了。 

3、 数据集标注及准备

PaddleSeg支持标注精灵和labelme的分割标注,这里使用labelme进行数据标注,安装labelme:

 直接运行命令符labelme就可以启动标注软件:

PaddleSeg分割实战——汽车活塞卡簧检测项目_第2张图片

 具体的标注过程就不多赘述,但需要注意的是标记的时候需要相对非常精确,否则会对后面模型的结果产生影响。

完成标注后,需要将labelme标注的结果转换为paddlepaddle可以识别的格式。将标注结果 json文件与原图像数据放在同一文件夹下,参照docs/data/transform.md中的教程,在cmd中运行如下脚本,进行数据的转换。

 其中,为图片以及LabelMe产出的json文件所在文件夹的目录,同时也是转换后的标注集所在文件夹的目录,完成该步骤后数据集目录如下。

PaddleSeg分割实战——汽车活塞卡簧检测项目_第3张图片

 完成转换后,数据文件结构如下:

PaddleSeg分割实战——汽车活塞卡簧检测项目_第4张图片

 

 最后一步,需要将数据集划分为训练集、验证集与测试集,根据docs/data/data_prepare.md中的教程,按照6:2:2的比例划分数据集,并生成训练所需的txt文档。

 至此数据准备工作完成。

4、模型训练

Paddle框架训练模型时,可直接通过修改配置文件来“调参”,该项目中由于数据的背景相对简单,缺陷尺寸不算很小,参考了PaddleSeg 官网项目工业质检的配置文档,采用DeeplabV3P算法,BackBone使用了ResNet50_vd,loss值使用了dice loss,具体可参照config文件夹里的配置文件。需要注意的是,yml配置文档内的class_num是包含背景一类的,所以如果数据要预测的类型是n, class_num = n+1。比如我的数据集里只有一种预测类型,那么我的class_num就是2。

运行以下指令进行模型训练,还可以通过paddle的训练可视化软件 VisualDL来对整个训练过程进行可视化监视。

PaddleSeg分割实战——汽车活塞卡簧检测项目_第5张图片

5、训练完成

训练完成后可以通过,下面两个指令对模型进行评估与预测,这里就不过多赘述。

PaddleSeg分割实战——汽车活塞卡簧检测项目_第6张图片

以下是训练出来的结果,可以对比看看,总体来说还是比较准确的。

 

PaddleSeg分割实战——汽车活塞卡簧检测项目_第7张图片

PaddleSeg分割实战——汽车活塞卡簧检测项目_第8张图片

你可能感兴趣的:(图像分割,paddlepaddle,深度学习,人工智能)