9.8 KiB
迁移 MMCV 参数调度器到 MMEngine
MMCV 1.x 版本使用 LrUpdaterHook 和 MomentumUpdaterHook 来调整学习率和动量。 但随着深度学习算法训练方式的不断发展,使用 Hook 修改学习率已经难以满足更加丰富的自定义需求,因此 MMEngine 提供了参数调度器(ParamScheduler)。 一方面,参数调度器的接口与 PyTroch 的学习率调度器(LRScheduler)对齐,另一方面,参数调度器提供了更丰富的功能,详细请参考参数调度器使用指南。
学习率调度器(LrUpdater)迁移
MMEngine 中使用 LRScheduler 替代 LrUpdaterHook,配置文件中的字段从原本的 lr_config
修改为 param_scheduler
。
MMCV 中的学习率配置与 MMEngine 中的参数调度器配置对应关系如下:
学习率预热(Warmup)迁移
由于 MMEngine 中的学习率调度器在实现时增加了 begin 和 end 参数,指定了调度器的生效区间,所以可以通过调度器组合的方式实现学习率预热。MMCV 中有 3 种学习率预热方式,分别是 'constant'
, 'linear'
, 'exp'
,在 MMEngine 中对应的配置应修改为:
常数预热(constant)
MMCV-1.x | MMEngine |
---|---|
|
|
线性预热(linear)
MMCV-1.x | MMEngine |
---|---|
|
|
指数预热(exp)
MMCV-1.x | MMEngine |
---|---|
|
|
fixed 学习率(FixedLrUpdaterHook)迁移
MMCV-1.x | MMEngine |
---|---|
|
|
step 学习率(StepLrUpdaterHook)迁移
MMCV-1.x | MMEngine |
---|---|
|
|
poly 学习率(PolyLrUpdaterHook)迁移
MMCV-1.x | MMEngine |
---|---|
|
|
exp 学习率(ExpLrUpdaterHook)迁移
MMCV-1.x | MMEngine |
---|---|
|
|
CosineAnnealing 学习率(CosineAnnealingLrUpdaterHook)迁移
MMCV-1.x | MMEngine |
---|---|
|
|
FlatCosineAnnealing 学习率(FlatCosineAnnealingLrUpdaterHook)迁移
像 FlatCosineAnnealing 这种由多个学习率策略拼接而成的学习率,原本需要重写 Hook 来实现,而在 MMEngine 中只需将两个参数调度器组合即可
MMCV-1.x | MMEngine |
---|---|
|
|
CosineRestart 学习率(CosineRestartLrUpdaterHook)迁移
MMCV-1.x | MMEngine |
---|---|
|
|
OneCycle 学习率(OneCycleLrUpdaterHook)迁移
MMCV-1.x | MMEngine |
---|---|
|
|
需要注意的是 by_epoch
参数 MMCV 默认是 False
, MMEngine 默认是 True
LinearAnnealing 学习率(LinearAnnealingLrUpdaterHook)迁移
MMCV-1.x | MMEngine |
---|---|
|
|
动量调度器(MomentumUpdater)迁移
MMCV 使用 momentum_config
字段和 MomentumUpdateHook 调整动量。 MMEngine 中动量同样由参数调度器控制。用户可以简单将学习率调度器后的 LR
修改为 Momentum
,即可使用同样的策略来调整动量。动量调度器只需要和学习率调度器一样添加进 param_scheduler
列表中即可。举一个简单的例子:
MMCV-1.x | MMEngine |
---|---|
|
|
参数更新频率相关配置迁移
如果在使用 epoch-based 训练循环且配置文件中按 epoch 设置生效区间(begin
,end
)或周期(T_max
)等变量的同时希望参数率按 iteration 更新,在 MMCV 中需要将 by_epoch
设置为 False。而在 MMEngine 中需要注意,配置中的 by_epoch
仍需设置为 True,通过在配置中添加 convert_to_iter_based=True
来构建按 iteration 更新的参数调度器,关于此配置详见参数调度器教程。
以迁移CosineAnnealing为例:
MMCV-1.x | MMEngine |
---|---|
|
|
你可能还想阅读参数调度器的教程或者参数调度器的 API 文档。