语义细分的自定义指标

时间:2019-09-04 10:15:24

标签: python-3.x tensorflow keras

我正在从事一个多类语义分割任务,并且想定义一个自定义的加权指标来计算我的NN的表现。

我正在使用U-net将我的图像分为8个类别之一,其中1-7是特定类别,0是背景。如何使用在Keras metrics页上定义的标准自定义指标模板,以便仅获得仅通道1-7的IoU乘以(1,7)权重数组?我尝试使用

删除自定义指标中的背景频道
y_true, y_pred = y_true[1:,:,:], y_pred[1:, :,:]

但是看起来不是我想要的。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

必要的更改

def dice_coef_multilabel(y_true, y_pred, numLabels=CLASSES):
    dice=0
    for index in range(numLabels):
        dice -= dice_coef(y_true[:,:,index], y_pred[:,:,index])
    return dice

如果需要,可以使用两个嵌套循环在所有通道组合上循环,从而在通道之间计算骰子系数。我还包括骰子系数的计算。

def dice_coef(y_true, y_pred):
    y_true_f = K.flatten(y_true)
    y_pred_f = K.flatten(y_pred)
    intersection = K.sum(y_true_f * y_pred_f)
    return (2. * intersection + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth)

FWIW,this github link具有以渠道方式实施的各种类型的指标。