Dice Loss

转载自:https://zhuanlan.zhihu.com/p/86704421

Dice Loss 最先是在VNet 这篇文章中被提出,后来被广泛的应用在了医学影像分割之中。

1、Dice系数与Dice Loss

Dice系数是一种集合相似度度量函数,通常用于计算两个样本的相似度,取值范围在[0,1]:

Dice LossDice Loss

其中 |X∩Y| 是X和Y之间的交集,|X|和|Y|分表表示X和Y的元素的个数,其中,分子的系数为2,是因为分母存在重复计算X和Y之间的共同元素的原因。

Dice Loss:

Dice LossDice Loss

Laplace smoothing:

Laplace smoothing 是一个可选改动,即将分子分母全部加 1:

Dice LossDice Loss

带来的好处:

(1)避免当|X|和|Y|都为0时,分子被0除的问题

(2)减少过拟合

2、Dice 系数计算

首先将 |X∩Y| 近似为预测图pred和label GT 之间的点乘,并将点乘的元素的结果相加:

(1)预测分割图与 GT 分割图的点乘:

Dice LossDice Loss

(2)逐元素相乘的结果元素的相加和:

Dice LossDice Loss

对于二分类问题,GT分割图是只有0,1两个值的,因此 |X∩Y| 可以有效的将在 Pred 分割图中未在 GT 分割图中**的所有像素清零. 对于**的像素,主要是惩罚低置信度的预测,较高值会得到更好的 Dice 系数.

(3)计算|X|和|Y|,这里可以采用直接元素相加,也可以采用元素平方求和的方法:

Dice LossDice Loss

3、Dice Loss VS CE

语义分割中一般用交叉熵来做损失函数,而评价的时候却使用IOU来作为评价指标,(GIOU这篇文章中说道:给定优化指标本身与代理损失函数之间的选择,最优选择就是指标本身。)为什么不直接拿类似IOU的损失函数来进行优化呢?

(1)首先采用交叉熵损失函数,而非 dice-coefficient 和类似 IoU 度量的损失函数,一个令人信服的愿意是其梯度形式更优:

交叉熵损失函数中交叉熵值关于 logits 的梯度计算形式类似于p−t,其中,p是 softmax 输出;t为 target;而关于 dice-coefficient 的可微形式,loss 值为 2pt/(p^2+t^2) 或 2pt/(p+t),其关于p的梯度形式是比较复杂的:2t^2/(p+t)^2 或 2t*(t^2−p^2)/(p^2+t^2)^2. 极端场景下,当p和t的值都非常小时,计算得到的梯度值可能会非常大. 通常情况下,可能导致训练更加不稳定.

(2) 直接采用 dice-coefficient 或者 IoU 作为损失函数的原因,是因为分割的真实目标就是最大化 dice-coefficient 和 IoU 度量. 而交叉熵仅是一种代理形式,利用其在 BP 中易于最大化优化的特点.

Dice Loss 存在的问题:

(1)训练误差曲线非常混乱,很难看出关于收敛的信息。尽管可以检查在验证集上的误差来避开此问题。


代码:

dilligencer-zrj/code_zoogithub.comDice Loss

参考:

医学图像分割之 Dice Losswww.aiuai.cnDice LossDice-coefficient loss for image segmentationblog.masterliu.netDice Loss