Darknet yolov4训练过程
作者:互联网
目录
一、准备项目代码
项目代码https://github.com/AlexeyAB/darknet
二、创建标注文件
可以使用LabelImg,Labme,Labelbox, CVAT来标注数据,对于目标检测而言需要标注bounding box即可。然后需要将标注转换为和darknet format相同的标注形式,每一个图像生成一个*.txt的标注文件(如果该图像没有标注目标则不用创建*.txt文件)。创建的*.txt文件遵循如下规则:
- 每一行存放一个标注类别
- 每一行的内容包括class x_center y_center width height
- 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标签文件。
注意:
- 第一次运行xml2txt.py,得到训练集的txt文件,再修改/labels/train/为/labels/valid/,得到验证集的txt文件。
- 转换完成后将原来的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