学习笔记|语义分割常用损失函数

参考:https://mp.weixin.qq.com/s/ra2qpFSbSuuJPDj39A5MWA

源于GiantPandaCV ,作者BBuf

文章仅为学习笔记,感谢文章各位贡献者,侵删


交叉熵loss

M表示类别数,为one-hot向量(即元素只取0、1,若与样本类别相同则取1,否则取0)

缺点:若前景像素远小于背景像素,损失函数中y=0部分会占据主导,模型严重偏向背景

代码实现:

#二值交叉熵,input需要经过sigmoid处理

nn.BCELoss(F.sigmoid(input), target)

#多分类交叉熵

nn.CrossEntropyLoss(input, target)


带权交叉熵loss

添加权重参数,计算公式为,N表示总的像素数,Nc表示gt类别为c的像素个数,对于样本不均衡可以获得更好的效果


Focal Loss

retinanet引入focal loss解决难易样本不均衡的问题。一阶段目标检测器会产生10k数量级的候选框,但只有少数是正样本。计算分类时常用的交叉熵损失公式为:

为了解决政府样本不均衡的问题,利用加权的形式:

由于候选目标包含容易区分的和不易区分样本,由于易分样本占大多数(易分样本指置信度高的样本),尽管损失很低,但是仍然主导了损失韩式。易分样本对模型效果提升很少,应该主要关注难分样本——focal loss:

focal loss pytorch代码:

参考网址


dice loss

dice系数:

上述函数用来度量集合的相似度。分子2是由于分母重复计算并集的原因,s取值[0,1]。针对分割任务,X、Y指gt和预测的图像。还可以改写为:

dice loss 定义公式:

注意一般情况下使用dice loss会对反向传播不利,使得训练不稳定。一般用于样本极度不均衡的情况

原因说明:参考网址


IOU loss

定义:(1-jaccard系数)

与dice loss一样属于metric learning的衡量方式,一样存在训练过程不稳定的问题,在分割任务中不怎么使用


Tversky loss

dice loss实质上属于tversky loss的特殊形式。

Tversky系数:是dice系数和jaccard系数的广义系数

alpha和β均为0.5时为dice系数,为1时为jaccard系数。A-B为假阳性,B-A为假阴性


Generalized Dice loss

由于dice loss对小目标预测十分不利,一旦小目标有部分像素预测错误就可能引起dice系数巨大波动(分母),导致梯度变化大训练不稳定。又因为dice loss针对的是某一个特定类别的分割的损失,多个类别要用到多个dice loss。GDL就是对多个dice loss 进行加权整合。


BCE + Dice loss

适用于数据均衡的情况下,若数据不均衡,容易退化成dice loss


Focal loss + Dice loss

https://arxiv.org/pdf/1808.05238.pdf


Exponential Logarithmic loss

https://arxiv.org/abs/1809.00076

整合focal loss和dice loss。表达式:

其中


Lovasz-Softmax Loss

https://arxiv.org/pdf/1705.08790.pdf

iou loss的扩展

你可能感兴趣的:(学习笔记|语义分割常用损失函数)