使用yolov3训练自己的数据集(c++ vs2017 win10)

参考: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的路径,类名路径,训练产生的文件保存位置)

使用yolov3训练自己的数据集(c++ vs2017 win10)_第1张图片

2.voc.name

使用yolov3训练自己的数据集(c++ vs2017 win10)_第2张图片

3.yolov3.cfg

使用yolov3训练自己的数据集(c++ vs2017 win10)_第3张图片

前面的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张数据集速度差不多,应该是显卡性能问题

你可能感兴趣的:(深度学习)