yolov4训练自己的数据集
在最近几天(截至2023年9月1日),yolov5以非常高的热度发布,并且本人亲自体验了一番,并将相关经验进行记录。
环境
Ubuntu 16.04
Python3.5
cuda 9
首先下载代码文件。可以通过以下命令获取该文件:bash ./get_code.sh或者通过点击上方提供的链接来获取。
git clone https://github.com/AlexeyAB/darknet.git
1.编译
若需启用GPU加速,则应先打开项目内的makefile文件并调整相关参数设置。
GPU 置为 1;
CUDNN 置为 1;
CUDNN\_HALF 置为 1;
OPENCV 置为 1;
OPENMP 置为 1;
LIBSO 置为 1;
DEBUG 置为 1。
# cd到darknet-master目录下
make
或者 make -j8
请查看一下[开源权重]项目中的具体实现
# 测试图片,结果保存在darknet-master/predictions.jpg
./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jpg

3.准备自己要训练的数据集,以voc数据集的格式存放

按照上述格式准备好数据
4.制作yolov4需要的label以及txt
目前仅依赖于voc数据集构建的数据格式未能满足我们的需求,请先访问build/darknet/x64/data/voc/voc_label.py文件,并对其中代码进行相应调整。具体操作如下:首先移除与2012相关联的七行代码,并将第九行更新为自定义类别设置。

接着给每个路径前面加个data,如下图


运行位于darknet-master根目录的脚本之前,请确保已准备好了必要的配置文件。如果不希望继续执行该操作,则其他文件将会被生成于build/darknet/x64/data directories中。运行该脚本后,请检查其result directories中会产生多个txt files。此外,在darknet-master root directory的data/VOCdevkit/VOC2007子directory中将创建一个label files夹。
5.修改配置文件
<a.>在cfg/目录中将coco.data移动并命名为obj.data。随后处理以下内容

在配置文件目录中执行复制操作,并将coco.names重命名为obj,并将其命名为对应自己的类别名称

<c.>复制cfg/yolov4-custom.cfg,并且重命名为yolo-obj.cfg,同时修改一下内容

将宽度与高度设定为416;将最大batch迭代次数设定为6,000;调整学习率下降频率,在每一批次大小的80%-90%时进行设置。
然后三个classes的地方要修改

还有三个filters=255的地方要修改成自己的。

6.开始训练自己的数据集
./darknet detector train cfg/obj.data cfg/yolo-obj.cfg yolov4.conv.137
如果发生此错误提示,则需修改配置文件中的第26行。具体来说,在'yolo-obj.cfg'中将'mosaic=1'设置为'mosaic=0'或选择性地取消该行的配置。

7.预测
./darknet detector test cfg/obj.data cfg/yolo-obj.cfg yolo-obj_xxxx.weights
通过图像分析得出的预测结果如图所示。经测试显示,基于大量数据集进行深度学习训练所得的yolov4模型参数表现优异。

———————————————————————————————————————————
备注:上面的测试命令是基于编译生成的darknet框架来预测的,在工程环境中使用时显得不太方便;然而可以通过以下这个链接中的代码来使用模型。
8.用自己训练的权重作为预训练
在训练过程中,有时会突然中断 halfway 阶段。这使得重新开始 training 成为一种耗时的操作。然而,在直接加载该权重文件时(如 yolo-obj_last.weights),通常会导致错误。我们需要利用之前保存的权重来作为 pre-trained weights 的起始点。
#首先用第一行代码将yolo-obj_last.weights转化为olo-obj_last.conv.23
./darknet partial cfg/yolo-obj.cfg backup/yolo-obj_last.weights backup/yolo-obj_last.conv.23 23
#第二行将我们刚转化好的yolo-obj_last.conv.23作为预训练权重训练
./darknet detector train cfg/obj.data cfg/yolo-obj.cfg backup/yolo-obj_last.conv.23
