这里我使用的是pascal voc2007+2012联合训练的。
(1)下载数据
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
(2)
将以上压缩包放在同一文件夹中进行解压,解压后,所有的数据都会解压到VOCdevkit文件夹中。将VOCdevkit文件夹放在darknet目录中就行。
(注意:因为VOCtest_06-Nov-2007和VOCtrainval_06-Nov-2007解压后都是VOC2007,所以要先解压VOCtest_06-Nov-2007,然后将文件名由VOC2007改成VOC2007_test,然后再解压VOCtrainval_06-Nov-2007)
解压后,VOCdevkit文件夹中主要有:
VOC2007
VOC2007_test
VOC2012
VOCcode
.........
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar
tar xvf VOCtrainval_11-May-2012.tar
(3)生成darknet需要的label文件
将darknet/scripts目录下的voc_label.py文件,拷贝至darknet目录。打开voc_label.py文件,修改第7行,将列表的最后一个元组修改为('2007_test', 'test'):
修改第58行,将2007_test改为2007_test_test:
运行voc_label.py文件:
python voc_label.py
运行后,darknet目录下会生7个文件,分别为:
2007_train.txt,2007_val.txt,2007_test_test.txt,2012_train.txt,2012_val.txt,train.txt,train.all.txt
将这7个txt文件放到darknet/VOCdevkit中。
(4)修改配置文件cfg/voc.data
将下图:
修改成:
(5)下载backbone权重文件:
wget https://pjreddie.com/media/files/darknet53.conv.74
将darknet53.conv.74放在darknet目录中即可。
(6)修改配置文件yolov3-voc.cfg:
用yolov3训练pascal voc,就要用到yolov3-voc.cfg,这时候就要修改darknet/cfg/yolov3-voc.cfg
将下图batch和subdivisions前的#去掉
改成:
其中,batch值可以根据自己的显存大小进行调整。但是batch不能太小,如果batch太小或者等于1,最终训练得到的模型可能会无法收敛。
在文件中,使用Ctrl+F搜索yolo,一共出现三个地方。修改yolo下面的classes,以及yolo上面的filters:
(7)开始训练
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
训练结束后,训练好的模型会放在darknet/backup中。
(8)测试
./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc.weights