作者丨派星
源丨cv集线器
YOLOv3的Github地址:
359 github.com/CV Huber /检测-入门
模型测试(Linux环境下)
-1010 (1)首先在本地克隆Github代码git clone https://github.com/cv Huber /检测-开始
)2)进入项目文件夹,安装项目执行环境
CD检测-获取-开始/#将进入项目文件夹
pip安装- r要求. txt #安装执行环境
(3)模型权重下载
cd weights/#将位于weights文件夹中
bash download_weights.sh #下载模型的权重
下载模型权重后,/weights文件夹下有三个模型权重文件。
在
一、环境安装与模型下载
检测-入门-开始的项目文件夹下,运行脚本:python detect.py--图像_文件夹数据/示例/
模型的测试结果保存在./output文件夹中。
二、模型测试
训练Pascal Voc2007数据集
(1)目标检测常用的通用数据集有Pascal Voc、MSCOCO、谷歌开放图像、ImageNet、DOTA数据集等。 本文采用Pascal Voc2007数据集。 其数据集比较小(训练和验证集共439M,测试集共431M ) ) ) ) ) ),因此,可以立即穿透检测模型验证模型!Pascal Voc2007数据集下载链接:
359 pj reddie.com /项目/透视- VOC -数据组-镜像/
2 )培训集/测试集下载完成后解压:
这里,JPEGImages是图像,Annotations是目标检测标签,SegmentationClass和SegmentationObject分别是分类和分割的标签; 所以我们只需要拿JPEGImages和Annotations。
一、数据集下载
(1)./在/data文件夹下创建新的voc2007文件夹,在voc2007文件夹下将训练集和测试集分别存储在新的train文件夹和test文件夹中,然后训练集/测试集
)2)运行/utils文件夹下的gen_classes.py脚本,统计数据集中存在的被检测目标,将目标名称写入classes.names,生成classes.names
cd utils/#将位于utils文件夹中
python gen_classes.py #执行脚本
)3)运行./utils文件夹下的voc.py脚本
python voc.py
将在./data文件夹下创建新的“custom文件夹,cu”
stom文件夹包含了YOLOv3模型所需要的数据:注释:其中images是训练集和验证集的图片(从JPEGImages复制而来);annotation是训练集和验证集的原始标注文件(从Annotations复制而来);train.txt存放训练图片的绝对路径;valid.txt存放验证图片的绝对路径;labels文件夹下存放了每张图片的检测框信息,检测框信息由
(classes_id, x_center_norm, y_center_norm, width_norm, height_norm)组成:
x_center_norm = [(xmin + xmax) / 2.0] / img_widthy_center_norm = [(ymin + ymax) / 2.0] / img_heightwidth_norm = [(xmax - xmin) / 2.0] / img_widthheight_norm = [(ymax - ymin) / 2.0] / img_height三、配置文件
(1)在./config文件夹下运行如下脚本:
bash create_custom_model.sh 20其中20是数据集中存在的待检测目标数目(因为Pascal Voc2007数据集共20个类别,所以填20),运行上脚本之后之后,在./config文件夹下会生成模型配置文件yolov3-custom.cfg:
注释:yolov3-custom.cfg模型配置文件里存放了模型的超参数,可以自己调节这些超参数,比如图片的输入尺寸,初始学习率,ignore_thresh阈值,还有一些卷积参数等等。
(2)修改./config文件夹下的custom.data,修改后的数据如下:
四、模型训练
在项目文件夹下运行如下脚本:
python train.py --data_config config/custom.data --model_def config/yolov3-custom.cfg --device_id 0如果要加载预训练模型进行训练,则添加--pretrained_weights weights/darknet53.conv.74即可
模型训练情况:
五、模型评估
在项目文件夹下运行如下脚本对刚刚训练得到的模型进行性能评估:
python test.py --weights_path /checkpoints/yolov3_ckpt_10.pth --model_def config/yolov3-custom.cfg --data_config config/custom.data --class_path data/custom/classes.names如若运行成功,会出现如下信息:
六、模型预测
如果要使用训练好的模型进行图片预测,并将预测结果保存,则运行如下脚本,预测结果保存在./output文件夹下:
python detect.py --image_folder data/voc2007/test/JPEGImages --model_def config/yolov3-custom.cfg --weights_path /checkpoints/yolov3_ckpt_10.pth --class_path data/classes.names训练自己的数据集
一、自定义数据集
比如公司要你实现一个检测算法:在某特定业务场景下,检测出印刷电路板上的缺陷具体位置并将缺陷进行归类。
比如,下面这几块电路板分别存在short,missing_hole和mouse_bit这三种类别的缺陷,图片引自于[1]
当采集了大量的数据之后,需要对数据集进行label制作,常用的目标检测label制作工具有:
(1)LabelImg:https://github.com/tzutalin/labelImg(最常用)
(2)BBox-Label-Tool:https://github.com/puzzledqs/BBox-Label-Tool
(3)Labelme:https://github.com/wkentaro/labelme
(4)CasiaLabeler:https://github.com/msnh2012/CasiaLabeler
我们一般选择LabelImg进行目标检测框的标注,通过LabelImg,我们可以制作Pascal Voc格式的标注文件。
二、模型训练
接下来,将数据集图片存入./data/voc2007/train/JPEGImages文件夹下,将制作好的Label存入./data/voc2007/train/Annotations文件夹下,之后的训练过程就和训练Pascal Voc2007数据集的一样了!
注意:如果使用另一个标注工具进行Label制作,则只需要自己写好脚本将Label转换为Pascal Voc格式的标注文件即可,后续训练流程同上!
模型改进思路
如果任务比较简单,可以将特征提取网络Darknet53替换成更加轻量级的特征提取网络首先观察数据集,如果待检测目标物体尺度变化较大,则三个预测分支是比较合适的,甚至还可以多加一个检测分支,形成四个检测分支去检测目标;如果待检测目标尺度单一,则可以去掉另外两个检测分支,只考虑一个检测分支,这对精度影响是很小的对于待检测目标尺度变化较大问题,可以考虑加入多尺度上下文信息提取模块ASPP或者PSP,并结合通道注意力SE block,有时候会有奇效;同时也可以将FPN架构加入到特征提取器的头部用来解决多尺度目标问题可以将边框回归损失MSE替换为IOU-->GIOU-->DIOU-->CIOU(这几种边框回归损失函数需要好好掌握理解,面试常问)将通道/空间注意力应用到网络中不同位置,尝试效果Reference:
[1] [https://github.com/Ixiaohuihuihui/Tiny-Defect-Detection-for-PCB]