182、SWA 随机权重平均在 YOLOv11 训练后应用:多 checkpoint 平均的精度提升

182、SWA 随机权重平均在 YOLOv11 训练后应用:多 checkpoint 平均的精度提升

182、SWA 随机权重平均在 YOLOv11 训练后应用:多 checkpoint 平均的精度提升

从一次令人抓狂的调参说起

上个月帮团队调一个工业检测项目,YOLOv11s 在验证集上 mAP50 卡在 0.832 死活上不去。学习率从 0.01 试到 0.0001,warmup 轮数调了三轮,甚至把 backbone 的 depth 从 0.33 改到 0.50——结果呢?mAP 反而掉到 0.821。那几天我盯着 TensorBoard 的 loss 曲线,发现验证 loss 在最后 20 个 epoch 开始震荡,典型的过拟合前兆。

后来翻出两年前在 Detectron2 里用过的 SWA(Stochastic Weight Averaging)老把戏,抱着死马当活马医的心态试了一下。结果验证集 mAP50 直接跳到 0.847,涨了 1.5 个点。更离谱的是,这个改进不需要改模型结构、不需要调学习率、不需要额外训练——就是训练结束后,把最后几个 checkpoint 的权重做个平均。

SWA 到底在干什么

别被“随机权重平均”这个高大上的名字唬住。本质上,SGD 训练出来的模型权重在 loss landscape 上会绕着局部极小值震荡,SWA 就是把这些震荡点位的权重取个均值,相当于把模型“推”到更平坦的谷底。平坦极小值的泛化能力比尖锐极小值好得多——这是 2019 年那篇 SWA 论文的核心发现。

在 YOLOv11 上,这个现象尤其明显。因为 YOLO 的 loss 函数里包含分类、回归、D