跳至内容

取得最佳训练效果的技巧

本指南介绍了如何使用YOLOv5 🚀 生成最佳 mAP 和训练效果。

大多数情况下,只要数据集足够大且标签齐全,无需更改模型或训练设置就能获得良好的结果。如果一开始效果不佳,您可以采取一些措施来改进,但我们始终建议用户在考虑任何更改之前,先使用所有默认设置进行训练。这有助于建立性能基线,发现需要改进的地方。

如果您对训练结果有疑问 我们建议您提供尽可能多的信息 如果您希望得到有用的回复,请提供结果图(train losses、val losses、P、R、mAP)、PR 曲线、混淆矩阵、训练镶嵌图、测试结果和数据集统计图像(如 labels.png)。所有这些都位于您的 project/name 目录,通常是 yolov5/runs/train/exp.

我们为希望在YOLOv5 培训中获得最佳效果的用户准备了一份完整的指南。

数据集

  • 建议每班≥ 1500 张图片
  • 建议每类≥ 10000 个实例(标记对象
  • 图像种类。必须能代表部署环境。对于真实世界的使用案例,我们建议使用不同时间、不同季节、不同天气、不同光线、不同角度、不同来源(网上搜索、本地收集、不同摄像头)等的图像。
  • 标签一致性。所有图像中所有类别的所有实例都必须贴上标签。部分标注将不起作用。
  • 标签准确性。标签必须紧密包围每个对象。对象与边界框之间不得有空隙。任何对象都不能缺少标签。
  • 标签验证。 查看 train_batch*.jpg 在火车启动时验证标签是否正确,即查看 范例 马赛克
  • 背景图像。背景图片是没有物体的图像,添加到数据集中可以减少误报(FP)。我们建议使用约 0-10% 的背景图片来帮助减少误报率(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
  • 从零开始 建议用于大型数据集(即 COCO, 对象365, OIv6).传递您感兴趣的模型架构 YAML 以及空的 --weights '' 争论:
python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
                                                      yolov5m.yaml
                                                      yolov5l.yaml
                                                      yolov5x.yaml

培训设置

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

  • 纪元。从 300 个历元开始。如果早期出现过拟合,则可以减少历时。如果 300 个历元后没有出现过拟合,则可以延长训练时间,如 600、1200 等历元。
  • 图像大小 COCO 列车的原始分辨率为 --img 640但由于数据集中有大量的小物体,在更高分辨率下进行训练会更有帮助,如 --img 1280.如果有很多小物体,那么以原始分辨率或更高分辨率训练自定义数据集将更有优势。在相同分辨率下,可获得最佳推理结果。 --img 进行训练,即如果你在 --img 1280 您还应在 --img 1280.
  • 批量大小。 使用最大的 --batch-size 在硬件允许的范围内。小批量会产生较差的批次规范统计,应避免使用。
  • 超参数 默认超参数在 hyp.scratch-low.yaml.我们建议您在考虑修改任何超参数之前,先使用默认超参数进行训练。一般来说,增加增强超参数可以减少和延缓过拟合,从而延长训练时间和提高最终 mAP。减少损失分量增益超参数,如 hyp['obj'] 将有助于减少这些特定损失成分的过度拟合。有关优化这些超参数的自动方法,请参阅我们的 超参数演化教程.

更多阅读

如果您想了解更多信息,Karpathy 的 "训练神经网络的秘诀 "是一个很好的开始,其中的训练理念可广泛应用于所有 ML 领域:https://karpathy.github.io/2019/04/25/recipe/

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



创建于 2023-11-12,更新于 2024-01-12
作者:glenn-jocher(3)

评论