1.构建数据集
dataset
——JPEGImages # 图片路径
——Annotations # xml标签路径
——ImageSets
——Main # 生成分组的txt路径
——labels(自动生成) # xml转化成符合标准的txt标签路径
运行covert_to_txt.py,在Main路径下生成四个txt,完成数据集分组,修改voc_label.py中对应的sets, classes以及路径,将Anno路径下的所有标签转换至labels下,并将分组后的txt文件写在dataset路径下。
2. 改配置文件
修改Makefile,使用GPU的话nvcc路径(所有cuda-8.0都要)也要修改
修改darknet/data/voc.names标签名;
修改darknet/cfg/voc.data对应路径;
修改darknet/cfg/yolov3.cfg:
a. Testing&Training模式要切换(要注释掉);
b. max_batches为总迭代次数;
c. [yolo]中classes改成自己的类别,filters=3*(5+len(classes));
其他参数的含义,这篇博客里解释的很清楚(关键还是要理解算法QAQ):
https://blog.csdn.net/qq_43211132/article/details/91978149
如果要修改一些输出,例如保存训练log、保存模型的条件(这一项如果改变了步长,应该要和cfg中学习率变动的步长对应上,否则变动的策率就不生效了),则在darknet/example/detector.c中修改源码:
https://blog.csdn.net/lingyunxianhe/article/details/102518957
这篇博客通过保存日志的方式画出了loss曲线图;
此外,可以通过darknet/src/image.c修改输出的预测结果,比如把置信度添在目标上…
最后记得:每次改完源码都要重新编译每次改完源码都要重新编译每次改完源码都要重新编译。
3. 下载预训练权重、训练
wget https://pjreddie.com/media/files/darknet53.conv.74
./darknet detector train cfg/voc.data cfg/yolov3.cfg darknet53.conv.74 -gups 0,1,2,3
./darknet detector test cfg/voc.data cfg/yolov3.cfg backup/yolov3_final.weights data/*.jpg