background

系统:ubantu18.4
机器:HP-Z840-Workstation
处理器:Intel® Xeon® CPU E5-2660 v3 @ 2.60GHz × 40
显卡:Quadro K5200/PCIe/SSE2
opencv 3.3.0
cuda 9.0
cudnn 7.0(在本机器上未连接好)

数据集文件布局

VOCdevkit 
——VOC2018        #文件夹的年份可以自己取,但是要与你其他文件年份一致,看下一步就明白了
————Annotations  #放入所有的xml文件
————ImageSets    
——————Main       #放入train.txt,val.txt文件
————JPEGImages   #放入所有的图片文件
 
Main中的文件分别表示test.txt是测试集,train.txt是训练集,val.txt是验证集,trainval.txt是训练和验证集,反正我只建了两个

初始化train.txt,val.txt文本文件

运行voc_label.py(与VOCdevkit放置于同一目录下 ),生成:train.txt,train.all.txt

修改cfg/voc.data文件

classes= 1 # 自己数据集的类别数
train = /home/xxx/darknet-master/train.txt # train文件的路径
valid = /home/xxx/darknet-master/2018_test.txt # test文件的路径 
names = /home/xxx/darknet-master/data/voc.names #用绝对路径 
backup = backup #模型保存的文件夹

修改cfg/yolov3-voc.cfg

1.Testing下面的batch和subdivisions注释“#”掉
#batch=1
#subdivisions=1
#Training下面的batch和subdivisions注释“#”取消掉
batch=64
subdivisions=16

2.将yolo层次(3个地方)附近的filters和classes修改

filters=30        #---------------修改为3*(classes+5)即3*(5+5)=30
activation=linear
[yolo]
mask = 6,7,8
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
classes=5        #---------------修改为标签类别个数,5类

训练语句

测试语句:./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg yolov3-voc_final.weights 000381.jpg
训练语句:./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
首先在训练开始的时候需要把终端信息记录到文件,这里使用的命令是| tee train_log.txt
调用自己的权重实时检测
./darknet detector demo cfg/voc.data cfg/yolov3-voc.cfg yolov3-voc_final.weights
保存训练结果的训练语句
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 | tee train_yolov3.log
训练语句
./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg yolov3-voc_final.weights 000381.jpg
调用自己的权重进行视频的检测
./darknet detector demo cfg/voc.data cfg/yolov3-voc.cfg yolov3-voc_final.weights VID_20181107_114017.mp4

调错

cuda out of memory 已死亡:调小subdivisions

注意

cfg文件test和train的subdivisions和batch不同

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐