Tips for Best Training Results
👋 Hello! 📚 This guide explains how to produce the best mAP and training results with YOLOv5 🚀. UPDATED 25 May 2022.
大多数情况下,只要数据集足够大且标记良好,就可以在不改变模型或训练设置的情况下获得良好的结果。
如果一开始你没有得到好的结果,你可以采取一些步骤来改进,但我们始终建议用户在考虑任何更改之前先使用所有默认设置进行训练。
这有助于建立性能基线和指出需要改进的地方。
如果你对训练结果有疑问,我们建议你提供尽可能多的信息,如果你希望得到有用的回复(包括结果图(train losses、val losses、P、R、mAP)、 PR曲线、混淆矩阵、train mosaices、测试结果 和 数据集统计图像,如labels.png。所有这些都位于 project/name 目录中,通常是 yolov5/runs/train/exp。
数据集
- 每个类的图像。 >= 1500 张图片。
- 每个类的实例。≥ 建议每个类10000个实例(标记对象)
- 图片形象多样。必须代表已部署的环境。对于现实世界的使用案例,我们推荐来自一天中不同时间、不同季节、不同天气、不同照明、不同角度、不同来源(在线采集、本地采集、不同摄像机)等的图像。
- 标签一致性。必须标记所有图像中所有类的所有实例。部分标记将不起作用。
- 标签准确性。
- 标签必须紧密地包围每个对象。对象与其边界框之间不应存在任何空间。任何对象都不应缺少标签。
- 标签验证。查看train_batch*.jpg 在 训练开始验证标签是否正确,即参见 mosaic。
- 背景图像。背景图像是没有添加到数据集以减少 False Positives(FP)的对象的图像。我们建议使用大约0-10%的背景图像来帮助减少FPs(COCO有1000个背景图像供参考,占总数的1%)。背景图像不需要标签。
模型选择
类似于YOLOv5x和YOLOv5x6的大型模型在几乎所有情况下都会产生更好的结果,但参数更多,需要更多的CUDA内存进行训练,运行速度较慢。
对于移动部署,我们推荐YOLOv5s/m,对于云部署,我们建议YOLOV5l/x。
有关所有模型的完整比较,请参阅详细表
- 从预先训练的权重开始训练。建议用于中小型数据集(即VOC、VisDrone、GlobalWheat)。将模型的名称传递给--weights参数。模型自动从latest YOLOv5 releasse 。
python train.py --data custom.yaml --weights yolov5s.pt
yolov5m.pt
yolov5l.pt
yolov5x.pt
custom_pretrained.pt
- 从头开始训练,推荐用大的数据集(即 COCO、Objects365、OIv6 ) 传递您感兴趣的模型架构 yaml文件 以及空的--weights ' ' 参数:
python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
yolov5m.yaml
yolov5l.yaml
yolov5x.yaml
训练配置
在修改任何内容之前,首先使用默认设置进行训练,以建立性能基线。训练参数的完整列表,能够发现在train.py文件中。
-
Epochs : 从300个epochs开始。如果早期过拟合,则可以减少训练。如果在300个周期后未发生过拟合,则训练更长,即600、1200个epochs。
-
Image size: COCO以 --img 640,的分辨率进行训练,但由于数据集中有大量的小对象,它可以从更高分辨率(如--img 1280)的训练中训练。 如果有许多小对象,则自定义数据集将从更高分辨率的训练中获益。最好的推断结果是在相同的--img 处获得的 ,即如果在-img 1280处进行训练,也应该在--img 1280处进行测试和检测。
-
Batch Size: 使用更大的 --batch-size 最大批量。小批量会产生较差的batchnorm统计,应该能避免。
-
Hyperparameters: 默认超参数在hyp.scratch-low.yaml文件中。我们建议您在考虑修改任何超参数之前,先使用默认超参数进行训练。一般来说,增加增强超参数将减少和延迟过度拟合,允许更长的训练和得到更高mAP值。减少损耗分量增益超参数,如hyp['obj'],将有助于减少这些特定损耗分量中的过度拟合。有关优化这些超参数的自动化方法,请参阅我们的超参数演化教程。
进一步阅读
如果您想了解更多,Karpaty的"神经网络训练方法"是一个很好的起点,该方法对广泛应用于所有ML领域的训练有很好的应用:karpathy.github.io/2019/04/25/…
Good luck 🍀 and let us know if you have any other questions!