如何使用 YOLOv5 生成最佳的 mAP 和训练结果
官网中文翻译,指导怎么训练更好的yolo模型
哈喽!本指南解释了如何使用 YOLOv5 生成最佳的 mAP 和训练结果。更新于 2022 年 5 月 25 日。
大多数情况下,只要你的数据集具有足够大和良好的标签,在不改变模型或训练设置的情况下,就可以获得良好的结果。如果一开始你没有得到好的结果,你可以采取一些步骤来改进,但是我们总是建议用户在考虑任何改变之前首先使用所有默认设置进行训练,这有助于建立性能基线和发现需要改进的领域。
如果你对你的训练结果有疑问,我们建议你提供尽可能多的信息,如果你期望得到有用的回应,包括结果图 (训练损失,val 损失,p,R,mAP) ,PR 曲线,混淆矩阵,训练拼图,测试结果和数据集统计图像,如 labels.png。所有这些都位于项目/名称
目录中,通常是 yolov5/run/train/exp
。
我们已经为那些希望在 YOLOv5 训练中获得最佳效果的用户提供了一个完整的指南。
Dataset 数据集
-
每个类的图片数量推荐≥1500 张图像
-
每个类的实例推荐≥10000 个实例 (标记对象)
-
图片多样性
必须是部署环境的代表。对于真实世界的用例,我们推荐来自一天中的不同时间、不同季节、不同天气、不同光线、不同角度、不同来源的图片 (在线剪切、本地收集、不同相机) 等等
-
标签一致性
所有图像中所有类的所有实例都必须标记。部分标记将不起作用
-
标签的准确性
标签必须紧密地包围每个对象。一个物体和它的边界盒之间不应该存在空间。任何对象都不应缺少标签
-
标签确认
在训练一开始检查你的标签
train_batch*.jpg
看起来是否正确,例如 mosaic. -
背景图片
背景图像是没有对象的图像,这些图像被添加到数据集中以减少误报 (FP)。我们建议大约 0-10% 的背景图像,以帮助减少 FP (COCO 有 1000 个背景图像作为参考,占总数的 1%)。背景图像不需要标签
Model Selection 模型选择
像 YOLOv5x 和 YOLOv5x6 这样的大型模型在几乎所有情况下都会产生更好的结果,但是它们有更多的参数,需要更多的 CUDA 内存来训练,并且运行速度更慢。对于移动部署,我们推荐 YOLOv5s/m,对于云部署,我们推荐 YOLOv5l/x。
-
Start from Pretrained weights. 从预训练的权重开始
建议对于中小型数据集 (即 VOC, VisDrone, GlobalWheat),将模型的名称传递给
--weights
参数.模型将自动从 YOLOv5 的最新版本下载
即,小数据集传 模型架构+权重
python train.py --data custom.yaml --weights yolov5s.pt
yolov5m.pt
yolov5l.pt
yolov5x.pt
custom_pretrained.pt
-
Start from Scratch. 从头开始训练
建议用于大型数据集 (即 COCO, Objects365, OIv6).
传递您感兴趣的模型架构 yaml,同时传递一个空的
--weights ''
参数:即,大数据集只传 模型架构
python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
yolov5m.yaml
yolov5l.yaml
yolov5x.yaml
Training Settings 训练设置
在修改任何内容之前,首先使用默认设置训练以建立性能基线。train. py的完整设置列表可以在train. py
中找到。
-
Epochs
从 300 个迭代代数开始。如果这很早就过拟合,那么你可以减少代数。如果在 300 个代数之后还没有发生过拟合,则训练更长的时间,例如 600、1200 等代数
-
Image size
coco以
--img 640
的原生分辨率训练,尽管由于数据集中有大量的小对象,它也可以受益于更高分辨率的训练,例如--img 1280
.如果有许多小对象,那么自定义数据集将受益于原生或更高分辨率的训练。
同时最佳的推断结果也是在和训练时的分辨率相同的情况下得到,也就是说,如果你是在
--img 1280
的图片下做的训练,那么你也应该在--img 1280
的图片下验证和测试 -
Batch size
使用你设备允许的尽量大的
--batch-size
小Batch size会产生很差的batchnorm statistics,应该要避免
-
Hyperparameters
默认的超参数已经存在 hyp.scratch-low.yaml.
在考虑修改任何超参数之前,我们建议您首先使用默认的超参数进行训练。一般来说,增加强化超参数将减少和延迟过拟合,允许更长的训练和更高的最终 mAP。
损耗分量增益超参数(loss component gain hyperparameters)的降低,例如
hyp['obj']
,将有助于减少这些特定损失组件(specific loss components)的过拟合。有关优化这些超参数的自动化方法,请参阅我们的超参数演化教程。Hyperparameter Evolution Tutorial 超参数进化教程.
Further Reading 进一步阅读
如果你想知道更多,可以从《卡帕西的 “训练神经网络的秘诀》(Karpathy’s ‘Recipe for Training Neural Networks’) 开始,这本书对训练神经网络有很好的想法,可以广泛应用于所有机器学习领域: http://Karpathy.github.io/2019/04/25/Recipe/
祝你好运,如果你还有其他问题,请告诉我们!