在使用MMCV的框架时出现题目所示问题,是由于AFFormer中 它的 EncoderLayer 中的 EncoderBlock 共享了同一个 cpe 和 crpe。导致出现问题
在MMCV解析优化器参数时,没有走 torch的 model.parameters(),如果走了torch的解析方法,它是对参数是有去重的。所以递归添加参数的时候,共享的layer的参数被添加了多次。
optim_wrapper = dict(
# _delete_=True,
type='OptimWrapper',
optimizer=dict(
type='AdamW', #Optimizer
lr=0.00006,
betas=(0.9, 0.999),
weight_decay=0.01),
paramwise_cfg=dict(
custom_keys={
'absolute_pos_embed': dict(decay_mult=0.),
'relative_position_bias_table': dict(decay_mult=0.),
'norm': dict(decay_mult=0.)
# 'dpconv': dict(decay_mult=0.)
}))
为了解决这个问题,MMCV也提出了解决办法,在配置中添加 bypass_duplicate=True去重