3.1 配置cfg文件
3.1.1 复制yolov3.cfg(...\darknet-master\cfg目录下)文件并重命名为yolo-obj.cfg(或者其他名字,只要各处对应即可),复制到darknet.exe相同目录下(或者其他目录,输入命令时对应即可)。
3.1.2 修改batch=64,subdivisions=8。
3.1.3 修改classes和filters,共三处。如果检测两类物体,则classes=2,
filters=(classess+5)*3=(2+5)*3=21。
3.1.4 上述修改具体行数参考github即可。
3.2 配置obj.name文件和obj.data文件(命名也可以为其他,只要对应即可)
新建obj.names文件和obj.data文件,放在目录...\darknet-master\build\darknet\x64\data下。
obj.names内容(每行一个类的名字,名字随便写,随时可以改)
obj.data内容(valid是为了训练完成后测试模型效果)
3.3 准备图片和对应的标签文件
每张图片对应一个同名txt文件,txt文件存储的是类的坐标信息(详见github),可以在官网上下载专用的软件yolo_mark标记,放在目录...\darknet-master\build\darknet\x64\data\obj下。
txt文件内容
标记标签的软件界面:
3.4 准备存储图片路径的文件
新建train.txt文件(名字要和obj.data中对应)放在目录...\darknet-master\build\darknet\x64\data下(命名和路径与obj.data中对应)存储的数据为训练的图片相对于darknet.exe的位置,每行一条数据。
在github下载darknet53.conv.74后放在目录...\darknet-master\build\darknet\x64下即可。
3.6 训练过程
3.6.1 训练命令(需要首先进入darknet.exe同一目录):
darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74
默认显示avg loss的图像,添加-dont_show则不显示
darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 -dont_show
命令解释:
darknet.exe detector train:表示训练(train改为test为测试)
data/obj.data:data文件的路径
yolo-obj.cfg:cfg文件的路径
darknet53.conv.74:使用的预模型路径
3.6.2 可能出现的错误情况:
可能出现内存不足的情况,解决:
修改cfg文件:
修改subdivisions为16或32或64;
如果依旧不足,修改三个[yolo](修改classes的那个地方)下的random,修改为0(含义 :关闭多尺度训练)
3.6.3 训练界面
、
3.6.4 训练历程与部分参数解释
每迭代100次会存储一个模型,avg loss是一个错误率的指标,越低越好,刚开始会很大,下降也很快,最终降到0.***,每个类一般迭代2000次,所以实训项目需要4000次。使用GTX 950m,大约每100次迭代耗时70分钟。
Region xx: cfg文件中yolo-layer的索引;
Avg IOU:当前迭代中,预测的box与标注的box的平均交并比,越大越好,期望数值为1;
Class: 标注物体的分类准确率,越大越好,期望数值为1;
obj: 越大越好,期望数值为1;
No obj: 越小越好;
.5R: 以IOU=0.5为阈值时候的recall; recall = 检出的正样本/实际的正样本
0.75R: 以IOU=0.75为阈值时候的recall;
count:正样本数目。
3.6.5 直观地查看训练结果(输出图片)
darknet.exe detector test data/obj.data yolo-obj.cfg yolo-obj_8000.weights
yolo-obj_8000.weights:查看的模型的路径。
输入后会提示输入图片路径,输入即可。
3.6.6 中断后在之前的基础上继续训练:
darknet.exe detector train data/obj.data yolo-obj.cfg yolo-obj_2000.weights
yolo-obj_2000.weights:之前的模型路径。
3.6.7 查看模型精确效果(输出数据)
按照准备训练数据的方法准备测试数据(图片与对应标签,存储图片路径的文件);
修改data文件的valid;
使用如下命令测试:
darknet.exe detector map data/obj.data yolo-obj.cfg backup\yolo-obj_7000.weights
backup\yolo-obj_7000.weights:测试的模型的路径(相对于darknet.exe)。
界面:
由于可能出现过拟合的情况,所以最好的模型不一定在后边,
可以多测试几组,选择一个性能较好的模型。
3.6.8 训练结果展示
迭代100次、400次、800次效果
迭代1200次、1600次、2300次效果