1. 从零开始:理解YOLOv5的超参数与数据增强
如果你刚接触YOLOv5,可能会被那一堆配置文件里的数字搞得头晕。别担心,我刚上手的时候也一样。简单来说,超参数就是你在训练模型之前需要手动设定好的“旋钮”,它们控制着模型怎么学习、学多快、以及用什么“花样”来看待训练数据。而数据增强,就是给模型看的“花样”,通过随机改变训练图片的颜色、角度、位置等,让模型见识更广,变得更“聪明”、更“健壮”,不至于在真实复杂场景里“掉链子”。
YOLOv5把这两套系统做得非常清晰。所有的超参数都放在 data/hyps/ 目录下的YAML文件里,比如 hyp.scratch-low.yaml。数据增强的逻辑则主要在 utils/datasets.py 和 utils/augmentations.py 中实现。官方很贴心地提供了三套预设:低、中、高强度数据增强,分别对应不同的应用场景。比如你用的是一个标注非常精准、场景单一的工业数据集,可能用低增强就够了,避免“画蛇添足”。但如果你做的是自动驾驶,需要处理各种天气、光照、角度的街景,那中高强度的增强就是必须的,它能逼着模型去学习那些本质特征,而不是记住某张图片的特定样子。
我刚开始做无人机目标检测项目时,直接用了默认参数,结果模型在测试集的晴天图片上表现很好,一到阴天或多云图片,漏检率就飙升。这就是典型的过拟合——模型只记住了训练集里的“好天气”。后来我系统调整了超参数并增强了数据,特别是增加了色调和亮度的扰动,模型的鲁棒性才有了质的提升。所以,花时间琢磨这些“旋钮”和“花样”,绝对是性价比最高的投入。
2. 庖丁解牛:核心超参数详解与调优实战
YOLOv5的超参数大致可以分为四类:优化器相关、损失函数权重、训练策略和数据增强。我们一个个来看,并说说怎么调。
2.1 学习率与优化器:训练过程的“油门”和“方向盘”
lr0(初始学习率)和 lrf(最终学习率因子)是最关键的参数之一。你可以把学习率想象成下山找最低点的步长。步长太大(学习率太高),可能会在山谷两边跳来跳去,无法收敛;步长太小(学习率太低),下山速度慢,还可能卡在某个小坑里(局部最优)。YOLOv5默认使用 OneCycleLR 策略,它像一个聪明的教练:训练开始先慢慢热身(warmup_epochs),然后逐渐加速到峰值(lr0),再慢慢减速到终点(lr0 * lrf)。这个策略在实践中非常有效,通常不需要大改。
lr0: 0.01 # 初始学习率 (SGD用1E-2, Adam用1E-3)
lrf: 0.01 # 最终学习率 = lr0 * lrf
warmup_epochs: 3.0 # 热身3个epoch
怎么调? 如果你从预训练模型微调,lr0 可以设小一点,比如 0.001(Adam)或 0.005(SGD),因为模型已经有个不错的基础。如果是从头训练,可以用默认值。如果你发现训练损失震荡很厉害,可以尝试减小 lr0;如果损失下降很慢,可以适当增大。warmup_epochs 对于稳定训练初期很有帮助,数据集特别小或者批次(batch size)设得很大时,可以稍微增加这个值。
momentum(动量)和 weight_decay(权重衰减)是优化器的“稳定器”。动量帮助参数更新保持惯性,冲过一些局部的小坑,默认值 0.937 在大多数情况下很好。权重衰减是一种正则化,防止模型参数变得过大而过拟合,默认 0.0005 是个温和的起点。如果你的模型在训练集上表现完美,在验证集上却很差(过拟合),可以尝试稍微增加 weight


939

被折叠的 条评论
为什么被折叠?



