Skip to content

最佳训练结果技巧

📚 本指南解释了如何使用YOLOv5 🚀 获得最佳的mAP和训练结果。

大多数情况下,只要数据集足够大且标注良好,无需更改模型或训练设置即可获得良好的结果。如果一开始没有得到好的结果,您可以采取一些步骤来改进,但我们始终建议用户首先使用所有默认设置进行训练,然后再考虑任何更改。这有助于建立性能基准并发现改进的领域。

如果您对训练结果有疑问,我们建议您尽可能提供详细的信息,以便获得有帮助的回复,包括结果图(训练损失、验证损失、P、R、mAP)、PR曲线、混淆矩阵、训练马赛克图像、测试结果和数据集统计图像,如labels.png。所有这些都位于您的project/name目录中,通常是yolov5/runs/train/exp

我们为希望在其YOLOv5训练中获得最佳结果的用户准备了一份完整指南,如下所示。

数据集

  • 每类图像数量。 每类推荐≥ 1500张图像
  • 每类实例数量。 每类推荐≥ 10000个实例(标注对象)
  • 图像多样性。 必须代表部署环境。对于实际用例,我们推荐不同时间段、不同季节、不同天气、不同光照、不同角度、不同来源(在线抓取、本地收集、不同相机)等的图像。
  • 标签一致性。 所有图像中的所有类别的所有实例都必须标注。部分标注将不起作用。
  • 标签准确性 标签必须紧密包围每个对象。对象与其边界框之间不应有空隙。不应有对象缺少标签。
  • 标签验证。 在训练开始时查看train_batch*.jpg以验证您的标签是否正确,例如示例马赛克。
  • 背景图像。 背景图像是没有任何对象的图像,添加到数据集中以减少误报(FP)。我们建议大约0-10%的背景图像以帮助减少FP(COCO有1000张背景图像作为参考,占总数的1%)。背景图像不需要标签。

COCO分析

模型选择

像YOLOv5x和YOLOv5x6这样的大型模型在几乎所有情况下都会产生更好的结果,但参数更多,需要更多的CUDA内存进行训练,并且运行速度较慢。对于移动部署,我们推荐YOLOv5s/m,对于部署,我们推荐YOLOv5l/x。请参阅我们的README 表格以获取所有模型的完整比较。

YOLOv5模型

python train.py --data custom.yaml --weights yolov5s.pt
                                             yolov5m.pt
                                             yolov5l.pt
                                             yolov5x.pt
                                             custom_pretrained.pt
  • 从头开始。 推荐用于大型数据集(例如COCOObjects365OIv6)。传递您感兴趣的模型架构YAML,并使用空的--weights ''参数:
    python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
                                                          yolov5m.yaml
                                                          yolov5l.yaml
                                                          yolov5x.yaml
    

训练设置

在修改任何内容之前,首先使用默认设置进行训练以建立性能基线。完整的 train.py 设置列表可以在 train.py argparser 中找到。

  • Epochs(周期)。 从 300 个周期开始。如果这导致早期过拟合,则可以减少周期。如果在 300 个周期后没有发生过拟合,则训练更长时间,例如 600、1200 等周期。
  • 图像尺寸。 COCO 在原生分辨率 --img 640 下进行训练,但由于数据集中小物体数量众多,训练时使用更高的分辨率(如 --img 1280)可能会受益。如果自定义数据集中有许多小物体,则从原生或更高分辨率进行训练会受益。最佳推理结果是在与训练时相同的 --img 下获得的,即如果你在 --img 1280 下训练,你也应该在 --img 1280 下进行测试和检测。
  • Batch size(批量大小)。 使用硬件允许的最大 --batch-size。小批量大小会产生糟糕的批量归一化统计数据,应避免使用。
  • 超参数。 默认超参数在 hyp.scratch-low.yaml 中。我们建议你首先使用默认超参数进行训练,然后再考虑修改任何参数。一般来说,增加数据增强超参数将减少并延迟过拟合,允许更长时间的训练和更高的最终 mAP。减少损失分量增益超参数(如 hyp['obj'])将有助于减少这些特定损失分量的过拟合。有关自动优化这些超参数的方法,请参阅我们的超参数进化教程

进一步阅读

如果你想了解更多,一个好的起点是 Karpathy 的“训练神经网络的配方”,其中包含适用于所有机器学习领域的训练的优秀想法:https://karpathy.github.io/2019/04/25/recipe/

祝你好运 🍀,如果你有任何其他问题,请告诉我们!


📅 Created 11 months ago ✏️ Updated 20 days ago

Comments