1. Ubuntu中创建了虚拟环境后,环境切换命令
workon yolov3_py2 #切换到python2的环境
2. 准备工作
(1)首先手动拷贝VOC2007数据
(2)在darknet/scripts/VOCdevkit/VOC2007文件夹中,打开终端(yolov3_py2环境),运行python xml2txt.py
文件,得到Main文件夹中的4个完整txt文件。
(3)在darknet/scripts文件夹中,运行python voc_label.py
在VOC2007文件夹中产生labels文件夹。
(4)修改darknet/cfg文件夹中两个文件:voc.data和yolov3-voc.cfg,修改data下的一各类别名称文件:xxx.names
3. 单GPU训练
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg weights/darknet53.conv.74 | tee dingall.txt
4.开始测试
(1)准备工作:修改cfg中yolov3-voc.cfg中test中的batchsize = 1,下一行也是1,train中注释掉这两行
(2)测试单张图片:
./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights data/xxx.jpg
(3)训练过程可视化:将darknet文件夹下的dingall.txt拷贝到keshihua文件夹中的IOU_Loss文件夹中的30000文件夹中,与iouLoss.py放在一起,运行这个py文件python iouLoss.py
,得到两幅图和两个文件,保存图片至本文件夹。(有时会出现没有pandas模块,解决办法:pip install wheel; pip install pandas)。
5.测试test数据集
(1)清空result文件夹下的文件(不删也行,会覆盖)
(2)首先修改examples/detector.c:validate_detector函数中,约为424行,将comp4_det_val_改成comp4_det_test_,然后重新编译。
(3)批量测试——输出文本检测结果(first) (输出在results文件夹中comp4_det_test_类名.txt)
./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights
(4)批量测试——输出图片检测结果(second)(输出在data/out-img文件夹中)
./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights
Enter Image Path: scripts/2007_test.txt
(5)计算recall(执行这个命令需要修改detector.c文件,修改信息请参考“detector.c修改”)
./darknet detector recall cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights
(6)计算各类别的AP和mAP:工作环境切换成tensorflow_py3,生成plk文件用于画PR曲线:执行下列命令前一定要注意把darknet/scripts/VOCdevkit/annotations_cache这个文件夹删掉,否则影响新的文件输出(参考)
python reval_voc.py --voc_dir /home/dj/dingjing/darknet/scripts/VOCdevkit --year 2007 --image_set test --classes /home/dj/dingjing/darknet/data/dingall.names x #(x是自己新建的文件夹名称,用来保存最后生成的.txt文件)
6. 在此基础上测试其他模型:
(1)终端1(yolov3_py2):批量测试——输出文本检测结果:
./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights
(2)终端2(tensorflow_py3):计算recall:
./darknet detector recall cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights
(3)终端2(tensorflow_py3):计算各类别的AP和mAP: 屏蔽掉VOCdevkit/annotations_cache这个文件夹。
python reval_voc.py --voc_dir /home/dj/dingjing/darknet/scripts/VOCdevkit --year 2007 --image_set test --classes /home/dj/dingjing/darknet/data/dingall.names x
7. 测试val数据集 (与5.测试test数据集类似)
(1)首先修改examples/detector.c:validate_detector函数中,约为424行,将comp4_det_test_改成comp4_det_val_,然后重新编译:
(2)批量测试——输出文本检测结果(first)(输出在results文件夹中comp4_det_val_类名.txt)
./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights
(3)(与test数据集没有区别)批量测试——输出图片检测结果(second)(输出在data/out-img文件夹中)
./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights
Enter Image Path: scripts/2007_val.txt
(4)(与test数据集没有区别)计算recall(执行这个命令需要修改detector.c文件,修改信息请参考“detector.c修改”)
./darknet detector recall cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights
(5)(切换成python3)计算各类别的AP和mAP:生成plk文件用于画PR曲线:执行下列命令前一定要注意把darknet/scripts/VOCdevkit/annotations_cache这个文件夹屏蔽掉,否则影响新的文件输出(参考https://blog.csdn.net/weixin_41143397/article/details/83831839)
python reval_voc.py --voc_dir /home/dj/dingjing/darknet/scripts/VOCdevkit --year 2007 --image_set val --classes /home/dj/dingjing/darknet/data/dingall.names x(x是自己新建的文件夹名称,用来保存最后生成的.txt文件)
8. 测试视频
./darknet detector demo cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_25000.weights data/1.mp4
9. 断点继续训练
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc.backup | tee dingall.txt