其他分享
首页 > 其他分享> > Darknet yolov4训练过程

Darknet yolov4训练过程

作者:互联网

目录

一、准备项目代码

项目代码https://github.com/AlexeyAB/darknet


二、创建标注文件

可以使用LabelImg,Labme,Labelbox, CVAT来标注数据,对于目标检测而言需要标注bounding box即可。然后需要将标注转换为和darknet format相同的标注形式,每一个图像生成一个*.txt的标注文件(如果该图像没有标注目标则不用创建*.txt文件)。创建的*.txt文件遵循如下规则:

  1. 每一行存放一个标注类别
  2. 每一行的内容包括class x_center y_center width height
  3. Bounding box 的坐标信息是归一化之后的(0-1)class label转化为index时计数是从0开始的

三、划分训练集、验证集与对应标签

在上一步已经制作好了标注的数据集,接下来按照训练、测试的比例进行划分
在data/下,新建文件夹命名为“mydatasets”。即:data/mydatasets/,再划分train文件夹(训练数据集),labels文件夹(标签集),test文件夹。数据集、测试集与标签分别放到对应位置。如下图所示:

3.1.split_data.py

将数据按照训练测试的比例(训练:测试=8:2)

3.2 xml2txt.py

yolo的标签格式是txt格式,所以我们还需将xml标签转为txt格式。先新建txt_train、txt_valid文件夹,用于存放转换后的txt标签文件。
注意:

  1. 第一次运行xml2txt.py,得到训练集的txt文件,再修改/labels/train/为/labels/valid/,得到验证集的txt文件。
  2. 转换完成后将原来的train,valid文件夹删除,并将txt_train,txt_valid文件夹重命名为train,valid。

3.3 creattxt.py

这一步需要生成train.txt和valid.txt
得到的txt文件格式部分内容如下:


四、cfg文件修改

创建yolov4-mydatasets.cfg,因为我用了yolov4.cfg训练太耗显存,根据自己设备设置batchsize。其主要原因是mish函数太占显存了。
修改的地方:
将mish函数替代为relu函数,大大降低显存使用!
另外filters设置为:(class数目 + 4 +1) × 3 = 45(我这里10个类别)分别对应三个detect header
classes=10 修改为类别数目,我这里是10(所以这里和filters一共修改6处)
其他的超参数可以适当修改。

[convolutional]
size=1
stride=1
pad=1
filters=45
activation=linear

[yolo]
mask = 0,1,2
anchors = 12, 16, 19, 36, 40, 28, 36, 75, 76, 55, 72, 146, 142, 110, 192, 243, 459, 401
classes=10
num=9
jitter=.3
ignore_thresh = .7
truth_thresh = 1
scale_x_y = 1.2
iou_thresh=0.213
cls_normalizer=1.0
iou_normalizer=0.07
iou_loss=ciou
nms_kind=greedynms
beta_nms=0.6

备注:剩下的2个anchor的地方对应修改,总共是6处


五、data/下新建配置文件

在data下新建mydatasets.names文件,把自己的类别写进去即可


六、训练

完成上述步骤后即可训练,在train.py下运行


七、推理

运行detect.py


八、出现上述错误,还是读取训练集路径存在问题

标签:yolov4,训练,Darknet,py,train,txt,data,标注
来源: https://blog.csdn.net/zhibing_ding/article/details/123591494