如何计算多类图像分割的多类骰子系数?

时间:2017-11-02 20:33:46

标签: python image-processing machine-learning deep-learning image-segmentation

我正在尝试为多类分段训练网络,我想使用骰子系数(参见this)作为损失函数而不是交叉熵。

您可以查看公式here(其中 S 是细分, G 是基本事实。)

一个天真的简单解决方案是取每个类的骰子系数的平均值,并将其用于损失函数。这种方法不能区分具有较大面积的类与具有较小像素数(体素)的类。

有人有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果您有多个班级,并且这些班级是无序关系的分类,例如我们并不暗示dog小于cat仅仅是因为我们分别设置了标签12,所以您应该已经在使用一键编码的标签了。因此,使用下面的函数来计算Dice系数非常好

import numpy as np

def dice_coef(y_true, y_pred, epsilon=1e-6):
"""Altered Sorensen–Dice coefficient with epsilon for smoothing."""
y_true_flatten = np.asarray(y_true).astype(np.bool)
y_pred_flatten = np.asarray(y_pred).astype(np.bool)

if not np.sum(y_true_flatten) + np.sum(y_pred_flatten):
    return 1.0

return (2. * np.sum(y_true_flatten * y_pred_flatten)) /\
       (np.sum(y_true_flatten) + np.sum(y_pred_flatten) + epsilon)

这里的额外点是,如果预测标签和真实标签都为空,则得到1