python工具方法35 实现SWA,再一次提升模型的性能

SWA是一种优化模型的方法,通过平均权重提高模型性能。本文介绍了如何在训练中和结束后使用SWA,特别是在PyTorch和PaddlePaddle框架下的实现,以及在mmdetection和paddledetection中的应用。实验证明,SWA可以提升模型的map值,对于带有BN层的模型,需要更新BN层参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SWA是论文Averaging Weights Leads to Wider Optima and Better Generalization所提出的一种无痛涨点的方式,只需要在模型训练的最后阶段保存模型权重,然后取模型权重的平均值,就可以提升模型的权重。按照论文描述,针对不同的模型基本上可以涨一个点。论文:SWA Object Detection详细描述了实验SWA后,模型的涨点效果。

SWA的论文翻译:https://github.com/timgaripov/swa
SWA的项目地址:https://github.com/timgaripov/swa

为此,博主根据论文描述和SWA作者公布的源码,仿照ema的模型增强技术代码,重新实现了swa。这里的实现支持torch、paddle(博主亲测,tf2模型也应该是支持的,只是要修改权重加载与保存的部分)。这里的实现是针对模型权重,对于pytorch的mmdetection框架,paddle的paddledetection框架中的模型都是支持的。博主亲测,用swa提升了0.5的map。

按照swa论文所述,当模型带bn层时,swa_model中的bn层参数需要重新更新。因此,博主刻意实现了一个forward函数,用于更新bn层的参数【针对mmdetection、paddledetection等框架时无效】。

1、SWA实现

博主这里实现的SWA支持在训练过程中使用,也支持在模型训练完成后选择模型进行权重平均。
针对于用户只需要关注两个函数update和smooth_dir。update用于在训练过程中调用(在合适的epoch中[epoch数大于budget时]进行权重平均),smo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万里鹏程转瞬至

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值