简体中文 | English
损失函数中,针对不同类别使用不同的权重,可以有效解决数据类别不均衡的问题。
语义分割常见的损失函数,比如CrossEntropyLoss和DiceLoss,都支持设置权重。
举例如下,如果背景和前景像素分别标注为0和1,则可以在CrossEntropyLoss
字段中设置weight
,分别表示对应下标类别的权重大小。注意,weight
的长度需要等于类别数。
loss:
types:
- type: CrossEntropyLoss
weight: [0.2, 0.8]
coef: [1]
很多分割模型Backbone是加载大规模数据集上预训练的权重,所以Backbone模块的学习率可以比Head模块的学习率更小一些。
在optimizer
配置字段中设置backbone_lr_mult
,可以设置模型Backbone和Head使用不同学习率。
举例如下,backbone
模块的学习率是learning_rate * backbone_lr_mult
,其他模块的学习率是learning_rate
。
optimizer:
type: sgd
momentum: 0.9
weight_decay: 4.0e-5
backbone_lr_mult: 0.1
lr_scheduler:
type: PolynomialDecay
learning_rate: 0.01
end_lr: 0
power: 0.9
线性学习率热身(Warmup)是对学习率进行初步调整,在正常调整学习率之前,先从小逐步增大学习率。
在lr_scheduler
配置字段中设置warmup_iters
和warmup_start_lr
,开启线性学习率热身Warmup。
warmup_iters
表示Warmup的轮数,warmup_start_lr
表示最开始学习率,更多信息请参考文档。
lr_scheduler:
type: PolynomialDecay
learning_rate: 0.01
end_lr: 0
power: 0.9
warmup_iters: 1500
warmup_start_lr: 1.0e-6