YOLOv3-Darknet 训练手册
本文档主要介绍如何使用 YOLOv3 进行目标检测训练,以陶瓷片裂痕为例。
一、下载并编译 Darknet
1. 下载 Darknet
1 | git clone https://github.com/pjreddie/darknet |
2. 配置 Makefile
编辑 Makefile
:
1 | GPU=1 # 使用GPU为1,CPU为0 |
3. 编译 Darknet
1 | make |
4. 下载 YOLOv3 预训练权重
1 | wget https://pjreddie.com/media/files/yolov3.weights |
二、准备数据集
使用 VoTT 工具进行标注,保存格式选择为 YOLO,即可自动生成对应的 *.txt
文件。
示意图如下:
三、配置模型文件
1. 修改配置文件
复制 YOLOv3-tiny 的默认配置:
1 | cp cfg/yolov3-tiny.cfg cfg/my_yolov3-tiny.cfg |
编辑两个 [yolo]
层:
classes=1
:表示陶瓷裂痕为一个类别filters=18
:使用公式filters = 3 × (5 + classes)
anchors=39,39
:如使用统一方形框random=0
:原来是1,如果显存不足可设置为0。(是否要多尺度输出)
2. 修改网络输入参数
在 [net]
部分将训练部分启用,注释掉测试部分:
1 | [net] |
四、开始训练
1 | ./darknet detector train cfg/my_data.data cfg/my_yolov3-tiny.cfg yolov3-tiny.conv.15 -gpus 2,3 |
说明:
my_data.data
:包含类别路径、训练集、验证集、备份路径等yolov3-tiny.conv.15
:用于微调的预训练模型-gpus 2,3
:指定使用第 2 和第 3 个 GPU
训练日志示意:
日志字段说明:
1 | Region 16 Avg IOU: |
这是两个尺度下的目标检测预测框的平均 IOU(交并比);
YOLOv3-tiny 使用两个不同的检测尺度来预测不同大小的目标框:
Region 23:对应网络中的第 23 层卷积,是最大的预测尺度,使用较大的 anchor mask,但能预测出较小的物体;
Region 16:对应网络中的第 16 层卷积,是最小的预测尺度,使用较小的 anchor mask,适合预测较大的物体;
如果某个尺度频繁出现
nan
,说明该尺度检测效果不佳,可以忽略。
对于训练日志中最后一行的输出信息,如下所示(由 detector.c
生成):
1 | 25667: 0.035626, 0.044029 avg, 0.000100 rate, 11.142451 seconds, 6570752 images |
各字段含义如下:
25667:当前训练迭代次数;
0.035626:本次迭代的 Loss(总损失);
0.044029 avg:当前的平均 Loss(越小越好,表明模型稳定性提升);
0.000100 rate:当前的学习率,该值由
.cfg
文件中的策略控制;11.142451 seconds:当前 batch(一个 mini-batch)训练所用的时间(单位:秒);
6570752 images:到目前为止累计参与训练的图片数量,计算方式为迭代次数 × batch 大小。
五、模型测试
1. 单张图片测试
单张图片测试命令:
1 | ./darknet detector test cfg/my_data.data cfg/my_yolov3-tiny.cfg backup/my_yolov3-tiny_60000.weights /path/to/image.png |
结果示意图:
六、常用命令汇总
权重转换(提取前15层)
1 | ./darknet partial cfg/my_yolov3-tiny.cfg backup/tiny-yolo.backup yolov3-tiny.conv.15 15 |
训练命令
1 | # 从头训练(带预训练权重) |
测试命令
单张图片检测
1 | ./darknet detector test cfg/my_data.data cfg/my_yolov3-tiny.cfg backup/my_yolov3-tiny_60000.weights 59.png |
批量检测并输出结果为 TXT
1 | ./darknet detector valid cfg/my_data.data cfg/my_yolov3-tiny.cfg backup/my_yolov3-tiny_60000.weights ./results |
或者通用格式:
1 | ./darknet detector valid <data_cfg> <test_cfg> <weights> <output_dir> |
Windows 示例(yolo_console_dll.exe)
1 | .\yolo_console_dll.exe data/obj.names cfg/yolov3.cfg yolov3.weights C:\Users\Administrator\Desktop\nl\NL |
YOLOv4 支持命令
单张预测
1 | ./darknet detector test data/obj.data cfg/my_yolov4-tiny.cfg my_yolov4-tiny_final.weights 127.png |
训练命令
1 | ./darknet detector train data/obj.data cfg/my_yolov4-tiny.cfg backup/my_yolov4-tiny_2000.weights -gpus 0 -dont_show |
七、CUDA 环境变量配置(GPU 报错时)
若出现如下报错:
1 | ./darknet: error while loading shared libraries: libcudart.so.10.0 |
请设置 CUDA 环境变量:
1 | export PATH=$PATH:/usr/local/cuda-10.0/bin |