有关图像语义分割的一系列改进loss
常用loss:
- CE
- BCE
- WCE
- Focal loss
- Dice loss
- IOU loss
- Tversky loss
- 敏感性–特异性 loss
- Generalized Dice loss
- BCE + Dice loss
- Dice + Focal loss
- Exponential Logarithmic loss
以上部分有一篇博客讲得比较清楚:
原文博客链接: (https://blog.csdn.net/m0_37477175/article/details/83004746)
- Lov´asz-Softmaxloss
请看我的另一篇博客:(https://blog.csdn.net/weixin_41134246/article/details/103280203)对采样进行改进的loss
Boundary loss
提出generalized Dice loss,对Dice loss在计算中加上权重,主要是为了解决样本不平衡问题。
根据这一个权重函数可以看出来,$r_{ln}$代表这一个类的label map之和,当这一个类别像素值少的时候权重会变大,像素值大的时候权重会变小。
主要还是应用权重来解决不平衡的问题。
- 还有一个部分是边界损失
想法比较简单,用groundtruth计算出边界部分,然后在预测值对这一部分进行损失计算,对各像素损失求和。
代码链接:(https://github.com/LIVIAETS/surface-loss)
ConservativeLoss
核心思想是为了在不同领域的适应能力中,有较强的泛化性。对表现极度好的结果进行惩罚,从而鼓励中等表现得结果。
如图所示,根据置信度来计算CL loss,相应得进行惩罚。$\lambda$为5, $a$为$e$。
combo loss
代码地址:https://github.com/asgsaeid/ComboLoss/blob/master/combo_loss.py
dice loss + weighted ce
$\beta$控制 假阳性和假阴性的权重,大于0.5惩罚假阳性,小于0.5惩罚假阴性。
$a$控制dice loss 和weighted ce loss的权重。
边界部分有权重的loss
Active Contour Loss
代码地址:(https://github.com/xuuuuuuchen/Active-Contour-Loss/blob/master/Active-Contour-Loss.py)
- 最终的loss是Length 和Region 的和,代码中$\lambda$设为的1,这是一个超参数。
- 首先看一下整个损失,它的计算方式都是用的差的平方的形式。
- 然后Length loss部分,只用了pred的信息,最小化梯度的大小,在这里我的理解是,它想达到的目的是让物体的内部尽量平滑,只有边界部分有这个梯度的变化。
- 接着是Region部分,使用label的监督信息对每一个点进行监督训练。
- 总结一下整个地方,感觉在边界部分,这两个Loss有冲突的地方,Length损失在边界部分会变大,但是它因为没有监督信息,它趋向于对所有位置都平滑处理,但是Region部分有监督信息,为了让边界部分损失变小会将物体和边界分开。也因为是用的差的平方的形式,边界部分的预测值概率应该是平滑下降的,骤降的loss太大,也就是惩罚太大。感觉是对整个预测结果作了一个平滑处理。
Distance Map Loss Penalty Term for Semantic Segmentation
$\phi$代表 边界的距离图,如图所示:
结合上面的公式,就代表着边界部分的权重会高于其他地方,其他的没有改动。
NonAdjacencyLoss
代码地址:https://github.com/trypag/NonAdjLoss
创新点是加入了各个类之间的邻接矩阵,用一个子网络去预测这个矩阵。即可以监督学习也可以半监督的学习。
前面一部分是一般的损失,如dice或交叉熵等,后面是用邻接矩阵加的限定损失。
求$a_{ij}\left( \phi \right)$这个过程是离线的过程,根据总的有标签的数据求一个最后求和的邻接矩阵“模板”。形成一个先验的知识,对于半监督无标签时,这个G(w)这一项的损失也可以根据这个“模板”进行计算。对于医疗图像来说,这样做也是有一定道理的。
但是我自己认为这样做会无法考虑到空间中的信息,只是考虑了类与类之间的信息。