web-dev-qa-db-ja.com

画像セグメンテーションで平均IUスコアを計算する方法は?

this 論文のようにmean IU(平均ユニオンの交差)スコアを計算する方法は?

ロング、ジョナサン、エヴァンシェルハマー、トレバーダレル。 「セマンティックセグメンテーションのための完全な畳み込みネットワーク。」

18
hkcqr

各クラスのUnion上の交差点(IU)スコアは次のとおりです。

真陽性/(真陽性+偽陽性+偽陰性)

mean IUは、単にすべてのクラスの平均です。


論文の表記について:

  • n_cl:クラスの数
  • t_i:クラス内のピクセルの総数i
  • n_ij:クラスiのクラスに属すると予測されるクラスのピクセル数j。クラスiの場合:

    • n_ii:正しく分類されたピクセルの数(真陽性)
    • n_ij:誤って分類されたピクセル数(誤検知)
    • n_ji:誤って分類されていないピクセル数(偽陰性)

Pascak DevKitでこれを直接計算するmatlabコードを見つけることができます here

26
Miki
 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)
12
Alex-zhai

これは役立つはずです

def computeIoU(y_pred_batch, y_true_batch):
    return np.mean(np.asarray([pixelAccuracy(y_pred_batch[i], y_true_batch[i]) for i in range(len(y_true_batch))])) 

def pixelAccuracy(y_pred, y_true):
    y_pred = np.argmax(np.reshape(y_pred,[N_CLASSES_Pascal,img_rows,img_cols]),axis=0)
    y_true = np.argmax(np.reshape(y_true,[N_CLASSES_Pascal,img_rows,img_cols]),axis=0)
    y_pred = y_pred * (y_true>0)

    return 1.0 * np.sum((y_pred==y_true)*(y_true>0)) /  np.sum(y_true>0)