python 图像语义分割mIOU代码详解

mIOU公式在此不赘述。
python 图像语义分割mIOU代码详解_第1张图片
python 图像语义分割mIOU代码详解_第2张图片
1、fast_hist(label.flatten(), pred.flatten(), num_classes)
python 图像语义分割mIOU代码详解_第3张图片
2、生成关于像素的混淆矩阵
k = (a >= 0) & (a < n)这句用来过滤噪声像素
在这里插入图片描述
np.bincount(n*a[k].astype(int)+b[k],minlength=n**2).reshape(n,n)解释如下:
(1) n*a[k].astype(int)+b[k]中n=2,a= label.flatten(),b= pred.flatten(),经过此式计算可得:
在这里插入图片描述
图中0表示TN(标签为0,预测为0);1表示FP(标签为0,预测为1);2表示FN(标签为1,预测为0);3表示TP(标签为1,预测为1)。
(2) np.bincount()统计上图中0, 1, 2, 3的个数,可得[8, 2, 3, 3]。
(3) [8, 2, 3, 3]经过reshape(n, n),可得关于像素的混淆矩阵:
python 图像语义分割mIOU代码详解_第4张图片
3、计算前景像素、背景像素的MIOU:
在这里插入图片描述
hist=图1中的混淆矩阵;
np.diag(hist)获取混淆矩阵中对角线,得到数组[8(TN) 3(TP)];
hist.sum(1)获取混淆矩阵的行和,得到数组[10(TN+FP) 6(FN+TP)];
hist.sum(0)获取混淆矩阵的列和,得到数组[11(TN+FN) 5(FP+TP)];
np.maximum()取两个数中最大的一个,作用:防止分母为0;
因此per_class_iu(hist)返回的值为(下图应用矩阵除法):
python 图像语义分割mIOU代码详解_第5张图片

你可能感兴趣的:(实用,python,计算机视觉)