多 class 的 mIoU
mIoU for multi-class
我想了解 mIoU 是如何计算多class class化的。每个 class 的公式是
IoU formula
然后在 classes 上取平均值以获得 mIoU。但是,我不明白未表示的 classes 会发生什么。公式变成除以 0,所以我忽略它们并且只计算所表示的 classes 的平均值。
问题在于,当预测错误时,准确率确实会降低。它添加了另一个 class 来计算平均值。例如:在语义分割中,图像的基本事实由 4 classes (0,1,2,3) 和 6 classes 表示在数据集上。预测也由 4 classes (0,1,4,5) 组成,但所有项目 class 在 2 和 3(在地面实况中)被 class 化在 4 和 5(在预测中)。在这种情况下,我们应该计算超过 6 classes 的 mIoU 吗?即使 4 classes 是完全错误的并且相应的 IoU 是 0 ?所以问题是,如果 class 中只有一个像素被预测,而不是 ground_truth,我们必须除以一个更高的分母,它会降低很多分数。
这是为 multi-class(和语义分割)计算 mIoU 的正确方法吗?
我不是计算每个图像的 miou,然后计算所有图像的“平均”miou,而是将 miou 作为一个大图像来计算。如果 class 不在图像中并且未被预测,我将相应的 iou 设置为 1。
从零开始:
def miou(gt,pred,nbr_mask):
intersection = np.zeros(nbr_mask) # int = (A and B)
den = np.zeros(nbr_mask) # den = A + B = (A or B) + (A and B)
for i in range(len(gt)):
for j in range(height):
for k in range(width):
if pred[i][j][k]==gt[i][j][k]:
intersection[gt[i][j][k]]+=1
den[pred[i][j][k]] += 1
den[gt[i][j][k]] += 1
mIoU = 0
for i in range(nbr_mask):
if den[i]!=0:
mIoU+=intersection[i]/(den[i]-intersection[i])
else:
mIoU+=1
mIoU=mIoU/nbr_mask
return mIoU
使用gt
ground truth 标签数组和pred
关联图像的预测(必须在数组中对应且大小相同)。
我想了解 mIoU 是如何计算多class class化的。每个 class 的公式是
IoU formula
然后在 classes 上取平均值以获得 mIoU。但是,我不明白未表示的 classes 会发生什么。公式变成除以 0,所以我忽略它们并且只计算所表示的 classes 的平均值。
问题在于,当预测错误时,准确率确实会降低。它添加了另一个 class 来计算平均值。例如:在语义分割中,图像的基本事实由 4 classes (0,1,2,3) 和 6 classes 表示在数据集上。预测也由 4 classes (0,1,4,5) 组成,但所有项目 class 在 2 和 3(在地面实况中)被 class 化在 4 和 5(在预测中)。在这种情况下,我们应该计算超过 6 classes 的 mIoU 吗?即使 4 classes 是完全错误的并且相应的 IoU 是 0 ?所以问题是,如果 class 中只有一个像素被预测,而不是 ground_truth,我们必须除以一个更高的分母,它会降低很多分数。
这是为 multi-class(和语义分割)计算 mIoU 的正确方法吗?
我不是计算每个图像的 miou,然后计算所有图像的“平均”miou,而是将 miou 作为一个大图像来计算。如果 class 不在图像中并且未被预测,我将相应的 iou 设置为 1。
从零开始:
def miou(gt,pred,nbr_mask):
intersection = np.zeros(nbr_mask) # int = (A and B)
den = np.zeros(nbr_mask) # den = A + B = (A or B) + (A and B)
for i in range(len(gt)):
for j in range(height):
for k in range(width):
if pred[i][j][k]==gt[i][j][k]:
intersection[gt[i][j][k]]+=1
den[pred[i][j][k]] += 1
den[gt[i][j][k]] += 1
mIoU = 0
for i in range(nbr_mask):
if den[i]!=0:
mIoU+=intersection[i]/(den[i]-intersection[i])
else:
mIoU+=1
mIoU=mIoU/nbr_mask
return mIoU
使用gt
ground truth 标签数组和pred
关联图像的预测(必须在数组中对应且大小相同)。