Yolov4模型训练技巧总结
Training Yolo v4 (and v3):
AlexeyAB官方github介绍:
训练对应的yolov4.cfg,cfg/yolov4-custom.cfg,cfg/yolov4-tiny.cfg,需下载对应的yolov4.conv.137,yolov4-tiny.conv.29 预训练模型
How to improve object detection:
1、修改cfg文件中设置 random=1 ,多尺度训练
2、提高网络分辨率,修改cfg文件中的尺寸(height=608,width=608 或者 任何32的倍数),这将会提高精度,尺寸越大,会提高小目标的精度。
3、检查要检测的每个目标在数据集中是否都被强制标记 - 数据集中的所有目标都应该有标签。大部分训练的问题是数据集中有错误标签
4、我的loss很高,map很低,训练错了吗?
在训练命令结尾加上 -show_imgs,训练是否能看到正确的目标标注框,如果不能——你的训练数据是错误的
5、保证样本的多样性。对于您想要检测的每个对象 - 在训练数据集中必须有至少1个相似且大致相同的对象:形状、对象的侧面、相对大小、旋转角度、倾斜、光照。理想情况下,数据集应包括在以下方面各不相同的对象:缩放,旋转,照明,从不同的侧面,在不同的背景上。
6、希望您的训练数据集包括您不想检测的 未标记对象的图像
7、标记物体最好的方法是什么:只标记物体可见的部分,还是标记物体可见和重叠的部分,还是标记比整个物体稍多一点(有一点间隙)?按你喜欢的方式标记-你希望它如何被检测到,就如何标记
8、对于训练的每张图片中有大量的目标,在.cfg文件最后的yolo层或region层加上max = 200或更高的值,YoloV3可以检测到的全局最大对象数为0.0615234375* (宽度 * 高度),其中宽度和高度是cfg-file中[net]部分的参数
9、yolov4.cfg文件 对于小目标的训练(小目标是指:在图像被调整到416x416后小于16x16的目标)
设置 layers = 23 而不是 layers = 54 :https://github.com/AlexeyAB/darknet/blob/6f718c257815a984253346bba8fb7aa756c55090/cfg/yolov4.cfg#L895
设置 stride = 4 而不是 https://github.com/AlexeyAB/darknet/blob/6f718c257815a984253346bba8fb7aa756c55090/cfg/yolov4.cfg#L892
设置 stride = 4 而不是 https://github.com/AlexeyAB/darknet/blob/6f718c257815a984253346bba8fb7aa756c55090/cfg/yolov4.cfg#L989
10、for training for both small and large objects use modified models:
Full-model: 5 yolo layers https://raw.githubusercontent.com/AlexeyAB/darknet/master/cfg/yolov3_5l.cfg
Tiny-model: 3 yolo layers: https://raw.githubusercontent.com/AlexeyAB/darknet/master/cfg/yolov3-tiny_3l.cfg
YOLOv4: 3 yolo layers: https://raw.githubusercontent.com/AlexeyAB/darknet/master/cfg/yolov4-custom.cfg
11、如果您训练模型将左右对象区分为单独的类(比如,在路牌上左转/右转,左转/右转)需要禁用翻转数据增强:https://github.com/AlexeyAB/darknet/blob/3d2d0a7c98dbc8923d9ff705b81ff4f7940ea6ff/cfg/yolov3.cfg#L17
12、一般规则-你的训练数据集应该包括这样一组相对大小的对象,你想检测:
13、每一个:对象的模型,侧面,力,比例,每30度的转弯和倾角-这些是不同的对象从内部的神经网络的视角。因此,要检测的不同对象越多,就应该使用越复杂的网络模型。
14、为了使检测框更加准确,可以在每个[yolo]层中添加3个参数ignore_thresh = .9 iou_normalizer=0.5 iou_loss=giou,它将增加[email protected],但减少[email protected]。
为了加速训练(降低检测精度),在cfg文件中设置第136层的param stopbackward=1
15、除非你是神经检测网络的专家 - 否则需要根据数据集的宽度和高度重新计算anchers从cfg-file:
./darknet detector calc_anchors data/voc.data -num_of_clusters 6 -width 608 -height 608
16、通过在你的。cfg文件中设置(高度=608,宽度=608)或(高度=832,宽度=832)或(32的任意倍数)来增加网络分辨率——这增加了精度并使它能够增强小目标检测