一、采集数据。
采集好的数据如下图所示:
由于训练模型需要至少50张以上,所以需要对以上数据做数据增强(PS:建议从颜色、饱和度、亮度等方面进行)。
二、制作sku清单。
根据系统上的sku信息对上面的图制作清单xls,如下图所示。
三、下载精灵标注工具进行图片标注。
请查看图片标注流程。(PS:标注完后,记得导出pascal-voc数据哦。)
四、利用darknet版的yolov3来训练自己的数据模型。
(1)进入darknet源码路径VOC下,cp一份以VOCdevkit_自定义后缀名。如下图所示:
(ps:注意观察文件命名格式,有木有发现啥哈)
(2)首先看到的是下图所示:
voc_label.py:处理voc图片文件与xml的,同时会生成下边的train.txt文件。
train.txt:要训练的图片路径。
sku_chongqing_qiaokeli_dic.txt:sku标注的字典文件。
VOC2007:所有的图片、xml都是放在这个文件夹下。
3)接着打开VOC2007,你会看到如下图:
其中SegmentationObject和SegmentationClass这两个文件,我们不用管。
labels:图片标注文件都是在这个下边。最开始是空的,执行完上层的voc_label.py后,才会生成相应标注文件。
JPEGImages:训练的图片都是在这下边,通过Xftp将要训练的图片拉进来。
Annotations:训练的xml都是在这下边,通过Xftp将要参与训练的xml拉进来。
在/ImageSets/Main路径下,有个test.txt,这个是存了xml的文件名,也是imageid,这个文件在voc_label.py中有用到。
等JPEGImages和Annotations的文件都拉进来后,根据自己的实际路径修改voc_label.py,修改完后执行python voc_label.py,接着就会生成train.txt和labels下边的一些数据文件。
4)接着修改darknet下cfg和data文件下的信息。
首先cfg文件夹下:
voc.data :cp一份并自定义命名,接着修改该文件内容:
classes是要训练的图片有多少种sku品类。train是要训练的数据路径,一般是由voc_label.py生成的。names是要训练的图片标签路径,将自己要训练的图片标签文件放至data目录下。backup是模型训练后存放模型的路径。如图所示:
yolov3-wumei.cfg:cp 一份并自定义命名,接着修改其内容。打开cfg文件后,搜索下yolo,调至yolo附近,如下
yolo附近有两个字段需要修改,filters=(classes+5)*3,classes就是sku种类数。
voc_wumei.names:cp一份并自定义命名,修改其中的内容为自己的数据标签。
另外根据硬件配置和自己数据的实际情况来修改steps。如下所示:
一般一个货架标注26张图片,通过数据增强2倍,最终共78张,训练10000steps大概7-8小时后即可收敛。当然可以试试训练5000steps看看模型效果。
5)接着就可以训练模型了,命令如下:
前台执行:
./darknet detector train cfg/voc_wumei.data cfg/yolov3-wumei.cfg darknet53.conv.74
后台执行:
nohup ./darknet detector train cfg/voc_wumei.data cfg/yolov3-wumei.cfg darknet53.conv.74 params1 > /dev/null 2>&1 &
(后台执行:记得记录程序的pid,可以终端输入nvidia-smi查看)