最近研究了下怎么用深度学习做缺陷检测。
学习参考了一篇博客的方法,自己重现了下,效果还不错
博客地址 https://blog.csdn.net/qq_27871973/article/details/85009026
我的测试效果
这里我使用数据集的是德国DAGM 2007的数据集
官方网址:https://hci.iwr.uni-heidelberg.de/node/3616
网盘地址:
链接:https://pan.baidu.com/s/1idj4OeAybYLdz3Ghv0RFfw
提取码:e2dc
实现步骤
1.图像大小格式转换
我用的数据集图像大小是512x512的png,tiny yolo v3输入416x416的jpg,直接用python写段代码转换就行。
import os
from skimage import io
from skimage import transform
dataset_dir=r'D:\mytestDL\test_png' #原图路径
dataset_dir2=r'D:\mytestDL\test' #处理后图片路径
image_list = os.listdir(dataset_dir)
print(image_list)
num=len(image_list)
for index in range(num):
path=dataset_dir+'/'+image_list[index]
path2=dataset_dir2+'/'+image_list[index][0:-3]+'jpg'
img=io.imread(path)
img2=transform.resize(img,(416,416))
io.imsave(path2,img2)
2.标注图像
这里用到labelImg这个标注工具。github链接 https://github.com/tzutalin/labelImg
解压出来,运行 labelImg.py这个文件,一般情况下会有很多库没有安装,根据错误提示 pip install xx(要安装的库)
还有个指令 安装资源, 到在cmd中到labelImg.py这个文件目录下,输入
pyrcc5 -o resources.py resources.qrc
最后运行labelImg.py这个文件就能打开了。
如下图,左边的按钮看看基本能明白,快捷键w框框,每次框完位置save下,save文件的位置就是左边第三个选择的。
会得到一堆xml文件,这些就是保存了对应图像的框框数据
3.开始跑tiny-yolo-v3,训练数据
上面的准备工作已经做好了,已经有训练图像数据,即很多416x416的图片。以及一些对应的xml文件。
我还没怎么研究那个博主的代码,先不管了,这里直接使用吧,他的github地址https://github.com/Eatzhy/tiny-yolov3
把那些需要训练的图片放在JPEGImages文件夹下,把xml文件放在Annotations文件夹下。运行test,会在VOC2007/ImageSets/Main下产生几个txt文档,
还有在model_data文件夹下找到voc_classes.txt 打开,默认是class1 class2 class3三个,删除,改成你用标注工具那边标注的名字,我这里是xx
回到tiny-yolov3-master目录,打开voc_annotation.py
我这里classes=["xx"] 自己安装自己标注的缺陷改,改完运行它,会在当前目录下得到三个txt文件,以2007开头命名的。
对应的分别改名字为 train.txt、test.txt 、val.txt
这里可以将test.txt和val.txt内的内容复制到train.txt中,反正就是训练一个train.txt文件,不搞也没事。
train.txt内容是图片路径和框框、类别序号
一切准备完毕,运行tiny_train.py
我显卡是gtx1060 6G的,训练这个没问题,一百多张标记图像,一轮8秒,挂机跑了3000轮。
可以根据自己的机子配置修改下tiny_train.py的代码,比如改改batch_size啥的
4.测试效果
开头已经放过测试效果。
测试方法是,将需要测试的图片,412x412的jpg图像,放到 VOC2007/Images下
运行yolo_test_batch.py 就在测试了,测试结果在VOC2007/SegmentationClass下
OK!