今天介绍了过去五年中常用的15种分割损失函数,大致分成四类:基于分布,基于区域,基于边界和基于合成,实现代码链接:
https://github.com/shruti-jadon/Semantic-Segmentation-Loss-Functions。
1、损失函数类别
损失函数的引入源于传统机器学习,这些损失函数是根据标签的分布得出的,例如从伯努利分布导出二值交叉熵,从Multinoulli分布导出多类交叉熵。
2、14种损失函数
2.1、二值交叉熵损失函数
交叉熵的定义是两个概率分布差异的测量指标。二值交叉熵定义如下:
2.2、加权二值交叉熵损失函数
加权二值交叉熵是二值交叉熵的变种,是针对正样本增加一个权重系数。Beta用来调整假阴和假阳,如果要减少假阴就将beta设置成大于1,如果要减少假阳就将beta设置成小于1。
2.3、平衡二值交叉熵损失函数
平衡二值交叉熵与加权二值交叉熵相似,对正样本和负样本都增加一个权重系数。
其中beta为
2.4、Focal 损失函数
Focal损失也是二类交叉熵的变种。减少简单样本的贡献权重,从而使模型更专注于学习困难样本。
alpha用来平衡正负样本的重要性,gamma用来控制减少简单样本的损失,更关注于困难样本。
2.5、dice损失函数
Dice是用来计算两张图像的相似性。
2.6、tversky损失函数
tversky是dice的一般化表示。对假阳和假阴增加了权重系数beta。
2.7、focal tversky损失函数
与focalloss相似,通过减少简单样本的权重来聚焦于困难样本。gamma范围是1到3。
2.8、SSL(敏感特异性损失)函数
与dice相似,敏感特异性用来评价分割预测结果。通过参数W来解决类别不平衡问题。
2.9、形状感知损失函数
形状感知损失计算预测分割的曲线点与金标准曲线点间的平均点到曲线的欧几里德距离,并将其用作交叉熵损失函数的系数。
Ei表示网络学习产生预测模板与训练形状是相似的。
2.10、组合损失函数
组合损失是dice损失和改进的交叉熵损失的加权求和。利用了dice类不平衡损失的灵活性,同时使用交叉熵进行曲线平滑。
Lmbce是改进的二值交叉熵损失,DL是dice损失。
2.11、指数对数损失函数
指数对数损失函数专注于使用Dice损失和交叉熵损失的组合公式来预测不太准确的结构。对Dice损失和交叉熵损失都进行指数和对数转换,以合并更精细的决策边界和准确的数据分布。定义如下:
2.12、距离map损失惩罚项函数
距离图可以定义为金标准图和预测图之间的距离(欧几里得,绝对值)。整合距离图的方法有2种,一种是创建神经网络架构,在这种结构中重建分割,或者将其引入到损失函数中。遵循相同的理论,从金标准模板中得出的距离图,用其创建基于损失函数的自定义惩罚项。使用这种方法,很容易引导网络关注于难分割的边界区域。定义如下:
Phi是生成的距离map。常量1是为了防止梯度消失问题。
2.13、Hausdorff距离损失
Hausdorff距离(HD)是分割方法用来跟踪模型性能的度量。任何分割模型的目的是为了最大化Hausdorff距离,但由于其非凸性,没有广泛用作损失函数。
2.14、CMSS损失(相关最大化结构相似性)
结构相似性损失(SSL),在金标准图和预测图之间实现高度正线性相关。分为3个步骤:结构比较,确定交叉熵权重系数和小批量损失定义。结构比较,计算e系数来测量金标准与预测之间的线性相关程度,C4是固定因子为0.01(经验值)。µy和σy是金标准y的局部均值和标准差,y位于局部区域的中心,p是预测概率。在计算相关度之后,使用了它作为交叉熵损失函数的系数。
使用下面公式,
损失函数将放弃那些具有一定价值的预测。简单来说,损失函数会自动放弃这些像素级别的预测,这些像素在结构上并没有显著的相关性。用这个系数函数,SSL损失定义如下:
最后小批次上损失计算公式如下:
2.15、log-cosh dice损失函数
Dice系数是一种广泛用于评估分割输出的指标。它经过修改,可以用作损失函数,因为它可以实现分割目标的数学表示。但是因其非凸性,多次都无法获得最佳结果。Lovsz softmax损失旨在通过使用Lovsz添加平滑性来解决非凸损失函数的问题。Log Cosh方法已广泛用于基于回归的问题中来平滑曲线。在深度学习中根据非线性(例如tanh层)使用了双曲函数,它们既易处理又易于微分。Cosh(x)曲线如下所示,cosh(x)范围可以达到无穷大,其导数是sinh(x)。
为了在范围内获取cosh(x),使用了log空间性质,可以得到log-cosh函数。定义:L(x) = log(coshx),根据链式法则,L’(x)如下所示,也就是L’(x)= tanhx。
使用这种概念证明,损失将是连续的并且在确定的范围内,因此Log-Cosh Dice由于其易处理的性质,同时封装了dice系数的特征。
3、结论
损失函数在模型性能中起着重要作用。对于分割等复杂目标,无法确定通用损失函数。在大多数情况下,这取决于用于训练的数据集的属性,例如分布,偏度,边界等。不能生成通用的损失函数。但是,高度不平衡的分割针对损失函数的改进会更有效,类似地,二进制交叉熵对平衡的数据集最有效,而轻度偏斜的数据集可以在平滑或广义dice系数会工作更好。