如何计算图像分割中的平均IU分数?

hkc*_*cqr 20 computer-vision image-segmentation evaluation-strategy

如何计算平均IU(平均路口过联盟)得分在这个文件?

很长,Jonathan,Evan Shelhamer和Trevor Darrell."用于语义分割的完全卷积网络."

Mik*_*iki 28

对于每个班级,交叉联盟(IU)得分为:

真阳性/(真阳性+假阳性+假阴性)

平均IU是简单的平均值的所有类.


关于文件中的符号:

  • n_cl:类的数量
  • t_i:类i中的像素总数
  • n_ij:预测属于类j的类i的像素数.因此,对于类:

    • n_ii:正确分类的像素数(真阳性)
    • n_ij:错误分类的像素数(误报)
    • n_ji:错误地没有分类的像素数(假阴性)

你可以找到MATLAB代码直接在Pascak的devkit计算这个位置

  • 我认为这只适用于矩形边框.对于不规则的形状,我认为[this](https://gist.github.com/meetshah1995/6a5ad112559ef1536d0191f8b9fe8d1e)应该可行. (3认同)
  • 如果我为数据集中的每个图像计算 IOU,如“真阳性 /(真阳性 + 假阳性 + 假阴性)”,下一步该怎么办?我应该计算所有图像 IOU 的平均值吗?如果在某些图像上某些类未呈现且未预测,因此“I = 0”和“U = 0”怎么办,那么在平均 IOU 时是否需要为每个类单独制作“计数器”? (2认同)

小智 13

 from sklearn.metrics import confusion_matrix  
 import numpy as np

 def compute_iou(y_pred, y_true):
     # ytrue, ypred is a flatten vector
     y_pred = y_pred.flatten()
     y_true = y_true.flatten()
     current = confusion_matrix(y_true, y_pred, labels=[0, 1])
     # compute mean iou
     intersection = np.diag(current)
     ground_truth_set = current.sum(axis=1)
     predicted_set = current.sum(axis=0)
     union = ground_truth_set + predicted_set - intersection
     IoU = intersection / union.astype(np.float32)
     return np.mean(IoU)
Run Code Online (Sandbox Code Playgroud)