043、YOLOv11训练涨点技巧——EMA指数移动平均与SWA随机权重平均的即插即用策略与mAP提升
一个让我深夜debug的真实故事
上个月调YOLOv11,跑COCO子集,训练到第200个epoch,验证集mAP卡在52.3%死活上不去。学习率调了、数据增强换了、甚至把backbone换成RepViT,结果还是纹丝不动。直到我翻出之前写的一个小工具——EMA权重保存脚本,把训练过程中平滑后的权重拿出来做验证,mAP直接跳到53.8%。那一刻我意识到,很多时候模型不是学得不好,而是最后的权重选得不对。
EMA(指数移动平均)和SWA(随机权重平均)这两个技巧,在YOLOv11里其实已经被部分实现,但官方默认配置并没有完全释放它们的潜力。今天这篇笔记,我会把这两个即插即用的策略拆开揉碎,讲清楚它们为什么能涨点、怎么在YOLOv11里正确接入、以及我踩过的那些坑。
EMA指数移动平均——为什么你的验证权重选错了
YOLOv11训练过程中,权重更新是震荡的。SGD+Momentum的优化器本质上是沿着梯度方向做修正,但每个batch的噪声会导致权重在最优解附近来回跳动。EMA的核心思想很简单:维护一份模型参数的影子副本,每次更新时按照θ_ema = α * θ_ema + (1-α) * θ的方式平滑更新,其中α通常取0.999或0.9999。
这个影子权重在训练后期比当前权重更稳定,因为它相当于对过去N步的权重做了加权平均,抑制了高频震荡。我在YOLOv11上实测,EMA权重在验证集上的mAP普