11

Как вычислить среднее значение IU (среднее пересечение над соединением) оценка как в this бумага?Как рассчитать средний показатель IU в сегментации изображения?

Длинные, Джонатан, Эван Шелхамер и Тревор Даррелл. «Полностью сверточные сети для семантической сегментации».

+0

Смотрите также: [как вычислить Iou с Python] (http://stackoverflow.com/a/42874377/562769) –

ответ

18

Для каждого класса Пересечения над Union (IU) ИВК является:

истинный положительный/(истинный положительный + ложноположительный + ложноотрицательный)

означает, IU является просто средним по всем классам.


Что касается обозначений в статье:

  • n_cl: число классов
  • t_i: общее количество пикселей в классе я
  • n_ij: количество пикселей класса i Предполагается, что они относятся к классу j. Так что для класса я:

    • n_ii: число правильно классифицированных пикселей (истинные позитивы)
    • n_ij: число пикселей ошибочно классифицированных (ложных срабатываний)
    • n_ji: число пикселей ошибочно не классифицирован (ложноотрицательные)

Вы можете найти код MatLab, чтобы вычислить это непосредственно в DevKit Pascak here

+0

Есть ли версия питона того же кода ? –

+0

@stochastic_zeitgeist check [this] (http://www.pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/) – Miki

+2

Я думаю, что это только для прямоугольных ограничивающих прямоугольников. Для нерегулярных фигур, я думаю, [это] (https://gist.github.com/meetshah1995/6a5ad112559ef1536d0191f8b9fe8d1e) должен работать. –

1

Это должно помочь

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) 
+0

Какой смысл использовать argmax в коде? – Eliethesaiyan

+1

Выход 'y_pred' имеет форму' n_classes * h * w', мы хотим преобразовать их в одно изображение, где значения пикселей равны классу в этом пикселе, и именно поэтому мы берем arg max по оси класса. –

+0

спасибо .... я понимаю сейчас – Eliethesaiyan

 Смежные вопросы

  • Нет связанных вопросов^_^