F W I o U FWIoU FWIoU
FWIoU(Frequency Weighted Intersection over Union):加权交并比
在MIoU上的基础上做的提升,对每一个类根据出现的频率为其设置权重
实现
gt_image = np.array([
[0,1,2,4],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]
])
pre_image = np.array([
[0,1,2,4],
[0,1,0,0],
[0,1,0,0],
[0,0,1,0]
])
def generate_matrix(gt_image, pre_image,num_class=8):
mask = (gt_image >= 0) & (gt_image < num_class)#ground truth中所有正确(值在[0, classe_num])的像素label的mask
label = num_class * gt_image[mask].astype('int') + pre_image[mask]
# np.bincount计算了从0到n**2-1这n**2个数中每个数出现的次数,返回值形状(n, n)
count = np.bincount(label, minlength=num_class**2)
confusion_matrix = count.reshape(num_class, num_class)#21 * 21(for pascal)
return confusion_matrix
matrix =generate_matrix(gt_image,pre_image)
def Frequency_Weighted_Intersection_over_Union(confusion_matrix):
freq = np.sum(confusion_matrix, axis=1) / np.sum(confusion_matrix)
iu = np.diag(confusion_matrix) / (
np.sum(confusion_matrix, axis=1) + np.sum(confusion_matrix, axis=0) -
np.diag(confusion_matrix))
FWIoU = (freq[freq > 0] * iu[freq > 0]).sum()
return FWIoU
Frequency_Weighted_Intersection_over_Union(matrix)