yolov4(darknet版)训练自己的VOC格式数据集

一、获取数据集

1、如果可以下载好标注好的数据集,那就直接使用即可,注意查看一下数据集的组织格式是否和VOC的格式相同。

2、如果没有现成的数据集,那么可能需要自己去标注,这个以后有机会再细说吧。需要使用一些标注工具,如labelImg,具体使用方法可以参考以下两篇文章!!!

windows下使用labelImg标注图像

labelImg 安装使用说明

二、下载并编译darknet(Ubuntu下)

1、下载编译

git clone https://github.com/AlexeyAB/darknet
cd darknet
make

注意: 这里下载的是最新的darknet源码,上一篇文章下载的是旧的darknet源码。不过新的darknet无论是yolov3还是yolov4都是支持的,所以如果你想要训练yolov3,也完全可以使用最新的darknet。但是旧的darknet是不支持yolov4的,这一点还是要注意一下!!!

2、编译完成之后,可以使用下面的命令来检验一下

./darknet

如果没有问题,就会输出以下信息:

usage: ./darknet <function>

3、如果想要支持GPU和OPENCV,可以在编译之前修改Makefile,将所需编译的项的值修改为1即可,如下所示:
在这里插入图片描述

三、VOC数据集格式转YOLO数据格式

上篇文章已经详细说明了,传送门:VOC格式数据集转yolo(darknet)格式

另外说明一点,可以在转换好格式后,在VOCdevkit同级目录下,运行以下命令:

cat 2007_train.txt 2007_val.txt  > train.txt

目的是将训练数据和验证数据合并成一个文件,都用来做训练,这个不是必须的,不过我看别人都是这么弄的,emmm!!!

四、参数修改

需要修改的地方主要有以下几项:

1、cfg/voc.data文件:根据自己的实际路径修改即可。backup是用来存放训练之后的权重的。
在这里插入图片描述
2、data/voc.names文件:根据自己数据集的实际种类和类别的名字进行修改。
在这里插入图片描述
3、cfg/yolov4-custom.cfg文件

  • 把第6行的batch改为batch=64

  • 把第7行的subdivisions改为 subdivisions=16

  • 将第20行的max_batch更改为(数据集标签种类数(classes)*2000 但不小于4000 )

  • 将第22行的steps改为max_batch0.8倍和0.9

  • 把第8.9两行设为width=416 height=416或者其他32的倍数

[net]
# Testing
#batch=64  
#subdivisions=16 
# Training
batch=64 # 显存不够的图像可以改为16,32等
subdivisions=16 # 这里需要改
width=416 #可以改为32的倍数
height=416 	#可以改为32的倍数
channels=3
momentum=0.949
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1

learning_rate=0.001
burn_in=1000
max_batches = 4000 #改为classses*2000,但不小于4000
policy=steps
steps=3200,3600	#改为max_batch的0.8倍和0.9倍
scales=.1,.1
  • filtersclasses参数;一共有三个部分,快捷的办法就是直接搜索yolo,然后将其上面的filtersclasses改为自己所需的实际值。这两个值满足以下公式:
filters = 3*(5+len(classes));
classes = len(classes)

在这里插入图片描述

五、训练

1、下载yolov4.conv.137的预训练模型

因为需要科学上网,所以,这里把网盘链接发出来吧,emmm!!!

链接:https://pan.baidu.com/s/1IWyTILlHUOgBGeDUIi4HhQ 
提取码:w8x4 

2、开始训练:

./darknet detector train cfg/voc.data cfg/yolov4-custom.cfg yolov4.conv.137

六、小结

如果你不想使用yolov4-custom.cfg也是可以的,只需要选择自己想要使用的网络结构,然后找到其对应的配置文件和预训练权重即可。如下图所示(链接奉上:传送门):
在这里插入图片描述
例如为了模型小一些,你可以选择yolov4-tiny.cfg,只要记住训练完成之后产生的权重文件对应的是yolov4-tiny即可。这样,你在加载该权重文件的时候,将加载该权重的模型的结构也设置成yolov4-tiny就可以。

并且可以看到,这里面也包括yolov3的相关配置文件和预训练权重,同样可以训练yolov3,相关设置都是差不多的。

注意: 还有一点需要说明的是,这里的数据集处理的方式和官方文档中说的是不一样的,你也可以参考官方文档里面的步骤:

https://github.com/AlexeyAB/darknet#how-to-train-tiny-yolo-to-detect-your-custom-objects

猜你喜欢

转载自blog.csdn.net/qq_39507748/article/details/110850178