【602】语义分割评价指标 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
直观理解:
可以通过混淆矩阵进行计算
语义分割二分类 IoU 计算:
默认是设置背景物体为 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)