语义分割损失函数

Posted

技术标签:

【中文标题】语义分割损失函数【英文标题】:Semantic Segmentation Loss functions 【发布时间】:2018-11-04 04:05:11 【问题描述】:

对于二元分割问题,以加权方式结合交叉熵损失和骰子分数是否有意义?

优化骰子分数会产生过度分割的区域,而交叉熵损失会为我的应用程序产生分割不足的区域。

【问题讨论】:

如果有人需要二进制分割玩具问题:osf.io/snb6p 【参考方案1】:

我认为将这两种损失结合起来并没有什么坏处,因为它们彼此非常“正交”;交叉熵将每个像素视为一个独立的预测,而 dice-score 则以更“全面”的方式查看生成的掩码。 此外,考虑到这两种损失会产生明显不同的掩码,每个掩码都有自己的优点和错误,我认为结合这些互补信息应该是有益的。 确保对损失进行加权,以使两个损失的梯度大致处于相同的比例,这样您就可以从两者中同等受益。

如果你成功了,我很想听听你的实验和结论;)

【讨论】:

如何缩放两个损失,以使两个损失的梯度具有相同的比例?我也在做类似的事情。我只是根据数据集的不平衡传入了一个 class_weights 向量。因此,加权损失变成类似于 weight*(BCE-DICE) 的东西,其中每个类的权重都在变化。但是有没有更好的方法呢? 如何make sure you weight the losses such that the gradients from the two losses are roughly in the same scale,假设loss = alpha * bce + beta * dice 嗨@Shai,你说损失函数是“正交的”是什么意思?这是否与梯度流有关,因为您假设它们每个都引导网络学习不同的独立特征(例如,骰子损失将训练网络学习整体结构,而熵损失将针对像素级一致性?)

以上是关于语义分割损失函数的主要内容,如果未能解决你的问题,请参考以下文章

Pytorch 语义分割损失函数

为啥训练多类语义分割的unet模型中的分类交叉熵损失函数非常高?

PyTorch使用交叉熵作为语义分割损失函数遇到的坑

使用 tensorflow 进行语义分割 - 损失函数中的 ValueError (sparse-softmax)

语义分割 Keras 的交叉熵损失

具有不平衡数据的二元类的语义分割损失不收敛