前文:推荐一个很好的github仓库,里面几乎有所有图像分割loss的实现,且目前仍在更新:
https://github.com/JunMa11/SegLoss
一、Distributation-based loss
1、Binary Cross-Etropy(二进制交叉熵损失函数)
交叉熵定义为对给定随机变量或事件集的两个概率分布之间的差异的度量。它被广泛用于分类任务,并且由于分割是像素级分类,因此小郭很好。在多分类任务中,经常采用softmax激活函数+交叉熵损失函数,因此交叉熵描述了两个概率分布的差异,然而神经网络输出的向量,并不是概率分布的形式。所以需要将softmax激活函数将一个向量进行“归一化”成概率分布的习惯是,再采用交叉熵损失函数计算loss。
2、WCE Loss
带权重的交叉熵loss — Weighted cross-entropy (WCE)
R为标准的分割图,其中rn为label 分割图中的某一个像素的GT。P为预测的概率图,pnp_npn为像素的预测概率值,背景像素图的概率值就为1-P。
只有两个类别的带权重的交叉熵为:
w为权重。
这种损失函数的缺点是需要认为的调整困难样本的权重,增加调参难度。
3、Focal loss
focal loss的提出是在目标检测领域,为了解决正负样本比例严重失衡的问题。是由log loss改进而来的,为了于log loss进行对比,公式如下:
4、Distance penalized CE loss
5、Log loss
(不同于交叉熵,具体区别可见夕小瑶文章)对于二分类而言,对数损失函数如下公式所示:
log loss
其中,yi为输入实例xi的真实类别, pi为预测输入实例 xi属于类别 1 的概率. 对所有样本的对数损失表示对每个样本的对数损失的平均值, 对于完美的分类器, 对数损失为 0。
此loss function每一次梯度的回传对每一个类别具有相同的关注度!所以极易受到类别不平衡的影响,在图像分割领域尤其如此。
例如目标在整幅图像当中占比也就仅仅千分之一,那么在一副图像中,正样本(像素点)与父样本的比例约为1~1000,如果训练图像中还包含大量的背景图,即图像当中不包含任何的疾病像素,那么不平衡的比例将扩大到>10000,那么训练的后果将会是,网络倾向于什么也不预测!生成的mask几乎没有病灶像素区域!
此处的案例可以参考airbus-ship-detection
二、基于区域的loss
1、Dice loss
dice loss 的提出是在U-net中,其中的一段原因描述是在感兴趣的解剖结构仅占据扫描的非常小的区域,从而使学习过程陷入损失函数的局部最小值。所以要加大前景区域的权重。
Dice 可以理解为是两个轮廓区域的相似程度,用A、B表示两个轮廓区域所包含的点集,定义为:
也可表示为
实际实现时可照以下公式实现:
2、IOU loss
3、Tversky loss
公式如下
α=β=0.5时,Tversky Loss是DICE loss(分子分母同乘2) 。 α=β=1时,Tversky Loss是IOU loss。
同时我们也应注意到 ,如果设A是预测区域,B是真实区域,|A-B|代表着假阳,|B-A|代表着假阴。在这种情况下,我们改变α和β的取值就能够改变我们优化时是希望假阳少一点还是假阴少一点。
4、Generalized Dice loss
在计算DICE loss时,针对每一类都有一个dice loss,这样就会考虑各个类。这个loss可以解决训练数据集不均衡的问题。
5、sensitivity-specificity loss
6、Penalty loss
7、Lovász-Softmax loss
三、基于边界的Loss
1、Boundary loss
2、Hausdorff distance(HD) loss
(1)HD介绍:
在谈论距离时,我们通常指的是最短的距离:例如,如果说一个点X在多边形P的距离D处,我们通常假设D是从X到P的最近点的距离。
相同的逻辑也适用于多边形:如果两个多边形A和B彼此相距一定距离,我们通常将距离理解为A的任意点与B的任意点之间的最短距离。通常,这称为minimin function。该距离A和B之间的D由下式给出
(2)HD loss
由CNN的输出预测HD,并将预测出来的HD当作loss来优化