Meet YOLO26: next-gen vision AI.

Link to this sectionYOLOv5 最佳训练结果技巧#

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

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

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

我们整理了一份完整的指南,供希望在 YOLOv5 训练中获得最佳结果的用户参考。

Link to this section数据集#

  • 每类图像数。 建议每类图像不少于 1500 张
  • 每类实例数。 建议每类不少于 10000 个实例(已标注对象)
  • 图像多样性。 必须能够代表部署环境。对于实际用例,我们建议使用不同时间、不同季节、不同天气、不同光照、不同角度、不同来源(在线抓取、本地收集、不同摄像机)拍摄的图像等。
  • 标注一致性。 必须标注所有图像中所有类的所有实例。部分标注将无法工作。
  • 标注 准确度 标注必须紧密包围每个对象。对象与 边界框 之间不应有间隙。不应遗漏任何对象的标注。
  • 训练/验证集划分原则。 确保验证集和测试集图像绝不会出现在训练集中,以避免指标过于乐观。保持各划分中的类别分布相似。
  • 标注验证。 在训练开始时查看 train_batch*.jpg 以验证标注是否正确,例如查看 示例 马赛克图。
  • 背景图像。 背景图像是指不包含任何对象的图像,添加到数据集中以减少假阳性 (FP)。我们建议添加约 0-10% 的背景图像以帮助减少 FP(参考 COCO 数据集包含 1000 张背景图像,占总数的 1%)。背景图像不需要标注。

COCO dataset class distribution analysis

Link to this section模型选择#

较大的模型(如 YOLOv5x 和 YOLOv5x6)在几乎所有情况下都能产生更好的结果,但参数更多,训练时需要更多的 CUDA 显存,运行速度也较慢。对于 移动端 部署,我们建议使用 YOLOv5s/m;对于 云端 部署,我们建议使用 YOLOv5l/x。查看我们的 README 表格 获取所有模型的完整对比。

YOLOv5 Models

  • 从预训练权重开始。 建议用于中小型数据集(如 VOCVisDroneGlobalWheat)。将模型名称传递给 --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
  • 从头开始训练。 建议用于大型数据集(如 COCOObjects365OIv6)。传递你感兴趣的模型架构 YAML 文件,并配合一个空的 --weights '' 参数:

    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

Link to this section训练设置#

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

  • Epochs 从 300 个 epoch 开始。如果早期出现过拟合,则可以减少 epoch 数量。如果 300 个 epoch 后没有出现 过拟合,则延长训练时间,例如 600、1200 个 epoch 等。
  • 图像大小。 COCO 在 --img 640 的原生分辨率下训练,但由于该数据集中存在大量小对象,在 --img 1280 等更高分辨率下训练可能会受益。如果有许多小对象,自定义数据集在原生或更高分辨率下训练也会受益。最佳推理结果是在与训练时相同的 --img 下获得的,即如果你在 --img 1280 下训练,你也应该在 --img 1280 下测试和检测。
  • Batch size 使用你的硬件允许的最大 --batch-size。小批量会导致较差的 批归一化 统计数据,应予以避免。你可以使用 --batch-size -1 自动为你的 GPU 选择最佳批量大小。
  • Learning rate 默认的学习率调度在大多数情况下表现良好。为了更快收敛,你可以尝试使用 --cos-lr 标志启用余弦退火学习率调度,它会按照余弦曲线在各个 epoch 期间逐渐降低学习率。
  • Data augmentation. YOLOv5 includes various augmentation techniques like mosaic, which combines multiple training images. Adjust augmentation strength via the mosaic hyperparameter in your --hyp file to help stabilize training.
  • 超参数。 默认超参数位于 hyp.scratch-low.yaml 中。我们建议你先使用默认超参数进行训练,再考虑进行任何修改。通常,增加增强超参数会减少和延迟过拟合,从而允许更长时间的训练和更高的最终 mAP。降低损失分量增益超参数(如 hyp['obj'])将有助于减少这些特定损失分量的过拟合。有关优化这些超参数的自动化方法,请参阅我们的 超参数进化教程
  • Mixed precision 训练。 当检测到支持的 GPU 时,YOLOv5 会自动启用自动混合精度 (AMP),从而在不牺牲模型精度的情况下加快训练速度并减少显存占用。
  • 多 GPU 训练。 如果你有多个 GPU,请使用 --device 0,1,2,3 将训练分布到它们上,这可以显著减少训练时间。
  • 提前停止。 如果验证指标在 50 个 epoch 内没有改善,请使用 --patience 50 停止训练,以节省时间并防止过拟合。

Link to this section高级优化技术#

  • Transfer learning 对于专业数据集,从预训练权重开始,并在训练期间逐渐解冻层,以使模型适应你的特定任务。
  • Model pruning 训练后,考虑修剪模型以删除冗余权重并减小模型大小,而不会造成明显的性能损失。
  • Model ensemble 对于关键应用,训练多个配置不同的模型并组合它们的预测结果以提高精度。
  • Test-time augmentation 通过 --augment 在推理期间启用 TTA,通过对输入图像的增强版本的结果进行平均来提高预测精度。

Link to this section延伸阅读#

如果你想了解更多,好的起点是 Karpathy 的《训练 神经网络 的配方》,其中有许多适用于所有 ML 领域的出色训练理念:https://karpathy.github.io/2019/04/25/recipe/

有关训练设置和配置的更详细信息,请参阅 Ultralytics 训练设置文档,其中提供了所有可用参数的全面解释。

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

Link to this section常见问题解答#

Link to this section我如何知道模型是否过拟合?#

如果训练损失持续下降而验证损失开始上升,则模型可能过拟合了。监控验证 mAP - 如果它在训练损失持续改善时趋于平稳或下降,那就是过拟合的迹象。解决方案包括增加更多训练数据、增加数据增强或实施正则化技术。

Link to this sectionYOLOv5 训练的最佳 batch size 是多少?#

最佳 batch size 取决于你的 GPU 显存。较大的 batch size 通常能提供更好的批归一化统计数据和训练稳定性。使用硬件能够处理且不会耗尽显存的最大 batch size。你可以使用 --batch-size -1 自动确定适合你配置的 batch size。

Link to this section如何加快 YOLOv5 训练速度?#

要加快训练速度,请尝试:使用 --device 0,1,2,3 进行多 GPU 训练、使用 --cache 缓存数据集,以及优化你的 batch size(在支持的 GPU 上会自动启用混合精度)。如果绝对精度不是关键,也可以考虑使用更小的模型变体,如 YOLOv5s。

评论