【602】语义分割评价指标 mIoU 的计算

参考:语义分割代码阅读---评价指标mIoU的计算


IoU: Intersection over Union 交并比

MIoU: Mean Intersection over Union 均交并比

$i$ 表示真实值

$j$ 表示预测值

$p_{ij}$ 表示将 $i$ 预测为 $j$

 

对像素点进行遍历,然后按照公式进行计算,相当于两组矩阵进行对比,值一样(TP)的作为分子,值不一样的(FN+FP),但是还是包含对应的 class 的值,从而进行计算。

FN:预测错误,预测为 Negative

FP:预测错误,预测为 Positive

TP:预测正确,预测为 Positive 

直观理解:

 

可以通过混淆矩阵进行计算

【602】语义分割评价指标 mIoU 的计算_像素点

  语义分割二分类 IoU 计算:

参考:Dice损失函数基础知识及代码实现

  默认是设置背景物体为 0,前景物体为 1(即使是 255,也会归一化为 1 的),因此在计算 Intersection 的时候,只需计算 [真值矩阵] * [预测值矩阵],然后再求和就行,因为只有两者都为 1 的情况下才会保留值。

$$DiceLoss = 1 - \frac{2|X\capY| + smooth}{|X| + |Y| + smooth}$$

  keras 代码实现:

# 防止分母为0
smooth = 100
 
# 定义Dice系数
def dice_coef(y_true, y_pred):
    y_truef = K.flatten(y_true)  # 将y_true拉为一维
    y_predf = K.flatten(y_pred)
    intersection = K.sum(y_truef * y_predf)
    return (2 * intersection + smooth) / (K.sum(y_truef) + K.sum(y_predf) + smooth)
 
 
# 定义Dice损失函数
def dice_coef_loss(y_true, y_pred):
    return 1-dice_coef(y_true, y_pred)