深度学习darknet框架训练模型

深度学习

前言

前面我们配置好了深度学习的环境,也准备好了数据集。

一、训练准备

训练自己的数据集前,需要修改一些配置文件

1.新建 data/voc.names 文件

可以复制原有的 data/voc.names 内容再根据自己情况修改,可以重新命名, 如 data/voc-dp.names。内容是所有的类别名称,其中名称顺序需要和上一节格 式转换时保持一致。
在这里插入图片描述

2.新建 cfg/voc.data 文件

可以复制原有的 cfg/voc.data 内容再根据自己情况修改,可以重新命名,如 cfg/voc-dp.data。各参数解释如下:
classes:类别总数,视情况修改。
train:训练集路径,是上一节格式转换内容中生成的 2007_train.txt 文件路径, 视情况修改。
valid:测试集路径,是上一节格式转换内容中生成的 2007_val.txt 文件路径, 视情况修改。
names:第①点新建的.names 文件路径,可以写相对路径,如下图所示 data/ voc-dp.names。 backup:训练时的权重文件保存路径,一般直接填 backup 即可
在这里插入图片描述

3.新建 cfg/yolov3.cfg 文件

可以复制 cfg/yolov3.cfg 或 cfg/yolov3-tiny.cfg 内容再根据自己情况的修改; 可以重新命名 cfg/yolov3-tiny-dp.cfg。 这个.cfg 文件用于配置网络参数,yolov3.cfg 和 yolov3-tiny.cfg 分别是两个不 同的模板,yolov3-tiny.cfg 的网络层数比 yolov3.cfg 要少,精简化配置,占用资源较少,训练出来的权重文件适合用在 nano 上,所以我们 采用的是 yolov3-tiny.cfg 模板。
在这里插入图片描述
一般需要视情况修改的参数说明如下:
训练时,把“Testing”下面的 batch 和 subdivisions 注释,把“Training”下 面的 batch 和 subdivisions 取消注释;而后续测试时则相反。
训练时建议 batch=64,subdivisions=16;如果 GPU 显存大 subdivisions 可以 填 8,显存小时可以填 32。

width 和 height 可以填 416,或者 608 等,需要是 32 的倍数。 max_batches 是最大训练次数,可以设置为 classes*2000,例如一共 5 类别就 设置 10000,初次训练后可以再视情况调整。

steps 改为 max_batches 的 80% and 90%。

另外.cfg 文件里还有[yolo]层和他前一层[convolutional]卷积层需要修改,如 果是 yolov3.cfg 模板则有三层 yolo 层,而 yolov3-tiny.cfg 模板则有两层。
在这里插入图片描述
[yolo]层中 classes 视情况修改类别数,每一个[yolo]层前的[convolutional]层 中的 filters =(类别数+5)* 3,如 classes=5,filters =(5+5)* 3=30。这个一定要修改,否则会给你报错。

4.anchor聚类

最后,anchors 锚框尺寸也可以修改,我们可以在自己的数据集上进行聚类, 使锚框尺寸更适合我们的数据。可以运行一下代码获取聚类结果

./darknet detector calc_anchors cfg/voc-dp.data -num_of_clusters 6 -width 512 -height 512

其中第一处粗体标注 cfg/voc-dp.data 是②步骤新建的文件,视情况修改,第 二处粗体标注是-num_of_clusters 的参数值,如果使用 yolov3.cfg 则填 9,使用 yolov3-tiny.cfg 模板填 6。
聚类的结果如下,将红框部分的数据替换.cfg 文件[yolo]层的 anchors 参数
在这里插入图片描述

5.下载预训练权重文件

存放在 darknet 目录下

wget https://pjreddie.com/media/fifiles/darknet53.conv.74

二、开始训练

完成以上步骤后,即可在 darknet 目录下打开终端,运行命令进行训练:

./darknet detector train cfg/voc-dp.data cfg/yolov3-tiny-dp.cfg darknet53.conv.74

在这里插入图片描述

三、测试

权重文件.weights 会边训练会边生成,最终跑完所有训练次数以后,会有以 下几个权重文件。
在这里插入图片描述
可以用一下指令计算权重文件的 AP 值,查看我们模型的训练效果

./darknet detector map cfg/voc-dp.data cfg/yolov3-tiny-dp.cfg backup/yolov3-tiny-dp_last.weights

或者我们训练过程中,通过实时更新的 chart_yolov3-tiny-dp.png 窗口 mAP 值也可以评估训练效果。以下是完成整个训练后生成的 chart_yolov3-tiny-dp.png 图片。(运行上面训练的指令就会出现)
在这里插入图片描述
训练效果达到我们的要求时,即可将文件拷贝到 nano 端进行使用

总结

我们下次在进行训练的时候
1.准备数据集,转成yolo格式(注意的是,需要在 voc_label.py 第九行,修改为自己的类别名称)
2.新建 data/voc.names 文件,存放类别名称
3.新建 cfg/voc.data 文件 ,存放类别数量,训练数据集路径,测试数据集路径(转成yolo格式时会生成)
4.新建 cfg/yolov3.cfg 文件,具体看上面要求,记得[yolo]层中 classes 视情况修改类别数(一定要修改)
5.anchor聚类
6.开始训练

猜你喜欢

转载自blog.csdn.net/qq_51963216/article/details/124239087