Yolov3 darknet(darknet-master)操作指南

主要参考https://github.com/AlexeyAB/darknet

步骤1:yolov3 darknet输入数据准备
打标:
(图片均需要转换为JPG格式)
标注软件:https://github.com/tzutalin/labelImg
下载标注软件解压后,打开labelImg.py,配置interpreter环境,然后run。之后会出现一个界面可以开始进行打标。
标注后数据处理:
标注后的文件为xml文件,保存在图片目录。
提取xml文件保存至
/darknet-master/build/darknet/x64/data/voc/tpy/Annotations
原始图片保存至
/darknet-master/build/darknet/x64/data/voc/tpy/JPEGImages
在/darknet-master/build/darknet/x64/data/voc/tpy/ImageSets/Main/
创建需要训练的图片列表txt文件,详见train.txt。
并在terminal终端进入到/darknet-master/build/darknet/x64/data/voc/目录输入python voc_label.py将xml文件转换成yolov3 darknet训练所需要的txt文件。Txt文件保存在/darknet-master/build/darknet/x64/data/voc/tpy/labels。
(voc_label.py需要做一些更改,如果保存位置需要改变)

步骤2:训练
进入/darknet-master,更改Makefile文件,GPU=1,CUDNN=1,CUDNN_HALF=1,OPENCV=1,前三项开启GPU加速,最后一项开启OPENCV训练过程平均损失曲线可视化。
打开terminal终端,进入/darknet-master,输入make,产生darknet文件。

打开terminal终端,进入/darknet-master,输入
./darknet detector train data/myv3.data cfg/yolov3.cfg darknet53.conv.74
在darknet53.conv.74权重下训练yolov3于之前保存好的图片以及相对应标注
myv3.data为保存图片路径,探测目标种类名称,保存权重路径的描述文件。
cfg/目录下还有其他模型,如tiny-yolo,yolo,yolov2,densenet201-yolo等等。在使用时需要更改某些参数,详见https://blog.csdn.net/lilai619/article/details/79695109。
darknet53.conv.74为yolov3训练初始权重

改变种类后需要更改的文件:

  1. voc_label.py
  2. yolov3.cfg
  3. myv3.data
  4. myv3.names

步骤3:探测
探测单张图片:
./darnet detector test data/myv3.data cfg/yolov3.cfg darknet53.conv.74 1.img -dont_show
-ext_output -thresh 0
img在/darknet-master路径下。
成像结果保存在同路径prediction.png文件。
-ext_output(可选)为输出探测图片的坐标及其种类结果
-dont_show(可选)不显示损失窗口
-thresh 0(可选)显示阈值大于0的探测对象

探测多张图片
./darknet detector test data/myv3.data cfg/yolov3.cfg darknet53.conv.74-dont_show -ext_output < data/train.txt > result.txt
data/train.txt 为需要探测图片保存路径集合的txt文件,result.txt为结果保存文件,文件结果为每张需要探测图片的探测到对象的坐标及其种类。
探测多张图片命令暂时不能保存多张探测后的成像图片。

探测视频
./darknet detector demo

附录1
Yolov3-增加精度;增加探测小样本的准确率

  1. 多尺度训练
    increase precision by training Yolo for different resolutions
    set flag random=1 in your .cfg-file
  2. 增加模型输入尺寸
    increases the precision and makes it possible to detect small objects
    Increase network-resolution by set in your .cfg-file (height=608 and width=608) or (height=832 and width=832) or (any value multiple of 32)
  3. 重新计算anchors
    recalculate anchors for your dataset
    darknet.exe detector calc_anchors data/obj.data -num_of_clusters 9 -width 416 -height 416
  4. 增加正样本多样性,增加负样本
  5. for training for small objects - set layers = -1, 11 instead of https://github.com/AlexeyAB/darknet/blob/6390a5a2ab61a0bdf6f1a9a6b4a739c16b36e0d7/cfg/yolov3.cfg#L720 and set stride=4 instead of https://github.com/AlexeyAB/darknet/blob/6390a5a2ab61a0bdf6f1a9a6b4a739c16b36e0d7/cfg/yolov3.cfg#L717

附录2
训练的权重不一定越到后期越好,所以有必要比较不同时期的权重
./darknet detector map data/obj.data yolo-obj.cfg backup\yolo-obj_700.weights
./darknet detector map data/obj.data yolo-obj.cfg backup\yolo-obj_800.weights
./darknet detector map data/obj.data yolo-obj.cfg backup\yolo-obj_900.weights
输出 mAP, F1, IoU, Precision-Recall,采用最好的权重。

附录3
./darknet为linux环境下make生成的命令,在windows下的话在
darknet-master\build\darknet目录下有darknet_no_gpu.sln或darknet.sln,需要在vs下进行集成为exe文件,具体操作流程参见https://github.com/AlexeyAB/darknet。在windows下另一种生成exe文件的方法就是直接在Cygwin64 Terminal下make生成exe文件。

猜你喜欢

转载自blog.csdn.net/weixin_42388228/article/details/86129735