我正在从事一个多类语义分割任务,并且想定义一个自定义的加权指标来计算我的NN的表现。
我正在使用U-net将我的图像分为8个类别之一,其中1-7是特定类别,0是背景。如何使用在Keras metrics页上定义的标准自定义指标模板,以便仅获得仅通道1-7的IoU乘以(1,7)权重数组?我尝试使用
删除自定义指标中的背景频道y_true, y_pred = y_true[1:,:,:], y_pred[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具有以渠道方式实施的各种类型的指标。