获得YOLOv5 最佳训练效果的技巧
本指南介绍了如何使用YOLOv5 🚀 生成最佳 mAP 和训练效果。
大多数情况下,只要数据集足够大且标签齐全,无需更改模型或训练设置就能获得良好的结果。如果一开始效果不佳,您可以采取一些措施来改进,但我们始终建议用户在考虑任何更改之前,先使用所有默认设置进行训练。这有助于建立性能基线,发现需要改进的地方。
如果您对训练结果有疑问 我们建议您提供尽可能多的信息 如果您希望得到有用的回复,请提供结果图(列车损耗、阀损耗、P、R、mAP)、PR 曲线、 混淆矩阵、训练马赛克、测试结果和数据集统计图像(如 labels.png)。所有这些都位于您的 project/name
目录,通常是 yolov5/runs/train/exp
.
我们为希望在YOLOv5 培训中获得最佳效果的用户准备了一份完整的指南。
数据集
- 建议每班≥1500 张图片
- 建议每类 ≥10000 个实例(标记对象
- 图像种类。必须能代表部署环境。对于真实世界的使用案例,我们建议使用不同时间、不同季节、不同天气、不同光线、不同角度、不同来源(网上搜索、本地收集、不同摄像头)等的图像。
- 标签一致性。所有图像中所有类别的所有实例都必须贴上标签。部分标注将不起作用。
- 标签准确性。标签必须紧密包围每个对象。对象与边界框之间不能有空隙。任何对象都不能缺少标签。
- 标签验证。 查看
train_batch*.jpg
在列车启动时验证您的标签是否正确,即查看 范例 马赛克 - 背景图像。背景图片是没有物体的图像,添加到数据集中可以减少误报(FP)。我们建议使用约 0-10% 的背景图片来帮助减少误报率(COCO 有 1000 张背景图片供参考,占总数的 1%)。背景图片不需要标签。
机型选择
较大的模型(如 YOLOv5x 和YOLOv5x6)几乎在所有情况下都能产生更好的结果,但参数较多,需要更多的CUDA 内存来训练,而且运行速度较慢。对于移动部署,我们推荐使用 YOLOv5s/m;对于云部署,我们推荐使用 YOLOv5l/x。有关所有模型的全面比较,请参见我们的 README表格。
- 从预处理权重开始 建议用于中小型数据集(即 挥发性有机化合物, VisDrone, 全球小麦).将模型名称传递给
--weights
争论。模型会自动从 最新发布YOLOv5.
python train.py --data custom.yaml --weights yolov5s.pt
python train.py --data custom.yaml --weights yolov5m.pt
python train.py --data custom.yaml --weights yolov5l.pt
python train.py --data custom.yaml --weights yolov5x.pt
python train.py --data custom.yaml --weights custom_pretrained.pt
python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
python train.py --data custom.yaml --weights '' --cfg yolov5m.yaml
python train.py --data custom.yaml --weights '' --cfg yolov5l.yaml
python train.py --data custom.yaml --weights '' --cfg yolov5x.yaml
培训设置
在修改任何设置之前,首先使用默认设置进行训练,以建立性能基准。train.py 设置的完整列表可在train.pyargparser 中找到。
- 纪元。从 300 个历元开始。如果早期出现过拟合,则可以减少历时。如果 300 个历元后没有出现过拟合,则可以延长训练时间,如 600、1200 等历元。
- 图像大小 COCO 列车的原始分辨率为
--img 640
但由于数据集中有大量的小物体,在更高分辨率下进行训练会更有帮助,如--img 1280
.如果有很多小物体,那么以原始分辨率或更高分辨率训练自定义数据集将更有优势。在相同分辨率下,可获得最佳推理结果。--img
进行训练,即如果你在--img 1280
您还应在--img 1280
. - 批量大小。 使用最大的
--batch-size
在硬件允许的范围内。小批量生产效果差 批量正常化 因此应避免使用。您可以使用--batch-size -1
自动为GPU 选择最佳批次大小。 - 学习率。 在大多数情况下,默认的学习率计划都很有效。如果想加快收敛速度,可以尝试使用
--cos-lr
标记,以启用余弦学习率调度,该调度可根据历时的余弦曲线逐步降低学习率。 - 数据扩充。 YOLOv5 包含多种增强技术,如马赛克技术,可将多幅训练图像组合在一起。对于最后几个历元,可以考虑使用
--close-mosaic 10
来禁用马赛克增强,这有助于稳定训练。 - 超参数 默认超参数在 hyp.scratch-low.yaml.我们建议您在考虑修改任何超参数之前,先使用默认超参数进行训练。一般来说,增加增强超参数可以减少和延缓过拟合,从而延长训练时间和提高最终 mAP。减少损失分量增益超参数,如
hyp['obj']
将有助于减少这些特定损失成分的过度拟合。有关优化这些超参数的自动方法,请参阅我们的 超参数演化教程. - 混合精度训练。 通过以下功能实现混合精度训练
--amp
以加快训练速度,减少内存使用量,同时不影响模型的准确性。 - GPU GPU 培训。 如果有多个 GPU,请使用
--device 0,1,2,3
在它们之间分配培训,这样可以大大缩短培训时间。 - 提前停止。 使用
--patience 50
如果 50 个历元的验证指标没有改善,就会停止训练,从而节省时间并防止过度拟合。
高级优化技术
- 迁移学习。对于专业数据集,可从预训练权重开始,在训练过程中逐步解冻层,使模型适应特定任务。
- 模型修剪。训练结束后,可考虑修剪模型,删除冗余权重,在不明显降低性能的情况下缩小模型规模。
- 模型组合。对于关键应用,可训练具有不同配置的多个模型,并将它们的预测结果组合起来,以提高准确性。
- 测试时间增强。 在推理过程中使用
--augment
通过对输入图像的增强版本进行平均,提高预测的准确性。
更多阅读
如果您想了解更多信息,Karpathy 的 "训练神经网络的秘诀 "是一个很好的开始,其中的训练理念可广泛应用于所有 ML 领域:https://karpathy.github.io/2019/04/25/recipe/。
有关训练设置和配置的详细信息,请参阅Ultralytics 训练设置文档,其中对所有可用参数进行了全面解释。
祝你好运🍀,如果还有其他问题,请告诉我们!
常见问题
如何判断模型是否过度拟合?
如果训练损失持续减少,而验证损失开始增加,那么您的模型可能是过度拟合。监控验证 mAP - 如果它趋于平稳或下降,而训练损失不断增加,这就是过拟合的迹象。解决方法包括添加更多训练数据、增加数据扩充或实施正则化技术。
训练YOLOv5 的最佳批次规模是多少?
最佳批次大小取决于GPU 内存。较大的批次大小通常能提供更好的批次归一化统计数据和训练稳定性。在不耗尽内存的情况下,使用硬件所能处理的最大批次大小。您可以使用 --batch-size -1
自动确定最适合您设置的批量大小。
如何加快YOLOv5 训练?
要加快训练速度,请尝试:使用以下方法启用混合精度训练 --amp
使用多个 GPU --device 0,1,2,3
缓存数据集 --cache
并优化批量大小。如果对绝对精度要求不高,也可以考虑使用 YOLOv5s 等更小的型号。