Advertisement

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

全部评论 (0)

还没有任何评论哟~