参考:https://blog.csdn.net/la_fe_/article/details/81564420
https://blog.csdn.net/qq_31442743/article/details/81087346
如果是在已有的基础上继续训练数据集,参考:https://mp.csdn.net/postedit/102964648
1.准备好数据集,训练图片、验证图片和他们对应的路径名txt文件
和faster-rcnn不太一样的是,yolo还需要几个txt文件运行这个脚本voc_label2.py即可生成(见最上面的参考博客)
要把这三个文件夹里的路径里的\替换成/
还会生成D:\software_engineer\darknet\darknet\scripts\VOCdevkit\VOC2007\labels这个文件夹
voc_label2.py:
2.准备配置文件,需要3个配置文件
1.voc.data(类别数,步骤一中的两个txt的路径,类名路径,训练产生的文件保存位置)
2.voc.name
3.yolov3.cfg
前面的batch和subdivisions在训练的时候把testing下面的注释掉,测试的时候把training下面的注释掉
这里还要改一些参数:
[convolutional]
size=1
stride=1
pad=1
filters=30 //修改最后一层卷积层核参数个数,每个yolo层上面的convolutional层,有三处
//计算公式是依旧自己数据的类别数filter=num×(classes + coords + 1)=5×(1+4+1)=30
// YOLOv3版本中 filter=3×(classes + coords + 1)=3×(1+4+1)=18,即3*(类别数 + 5)
activation=linear
[region]
anchors = 1.08,1.19, 3.42,4.41, 6.63,11.38, 9.42,5.11, 16.62,10.52
bias_match=1
classes=1 //类别数,本例为1类
coords=4
num=5
softmax=1
jitter=.2
rescore=1
object_scale=5
noobject_scale=1
class_scale=1
coord_scale=1
absolute=1
thresh = .6
random=1
2.训练
在D:\software_engineer\darknet\darknet\build\darknet\x64里面执行
./darknet detector train D:/software_engineer/darknet/darknet/cfg/voc.data D:/software_engineer/darknet/darknet/cfg/yolov3.cfg
如果有预训练模型就把它放到darknet.exe同文件夹里,然后在指令最后加上预训练模型的名字,例如:darknet53.conv.74,
要在已有的基础上训练的话,不能直接在最后添加训练好的文件名,要多运行下面这句话,做一个微调,将yolov3_last.weights变为yolov3_last.conv.23,否则会报错(dont show)
./darknet partial cfg/darknet19_448.cfg yolov3_last.weights yolov3_last.conv.23 23
然后运行训练./darknet detector train D:/software_engineer/darknet/darknet/cfg/voc.data D:/software_engineer/darknet/darknet/cfg/yolov3.cfg yolov3_last.conv.23
3测试(测试前把yolov3.cfg文件改一下)
(1)单张图片测试
./darknet detector test D:/software_engineer/darknet/darknet/cfg/voc.data D:/software_engineer/darknet/darknet/cfg/yolov3.cfg D:/software_engineer/darknet/darknet/backup/yolov3_last.weights -i 0 -thresh 0.5 D:/work_place/门锁项目/计数项目深度学习目标识别/VOCdevkit/VOC2007/JPEGImages/00089.jpg
yolov3_last.weights是训练好的文件,在backup里面,不想输它的路径的话可以把它拷贝到和darknet.exe同一个文件夹里
(2)test参数换成valid,然后把图片名去掉(即路径为图片集文件夹路径),可以批量测试 测试集里的数据,保存到results文件夹下,是txt格式,不直观。这个批量测试只跑测试集。
(3)测试视频 参数换成demo
./darknet detector demo data/coco.data cfg/yolov3.cfg yolov3.weights video_003.avi
遇到的问题:
1.测试yolov3时报错:cuda error: out of memory darknet: ./src/cuda.c:36: check_error: Assertion `0' failed.
我训练到800次的时候突然报这个错,但好在此时已经开始收敛,训练的结果可以用
2.batchsize调到64之后训练速度超级慢,和数据集大小关系好像不大,训练上万张voc2007数据集和自己的200张数据集速度差不多,应该是显卡性能问题