Как найти IoU из масок сегментации?

Я выполняю задачу сегментации изображений и использую набор данных, который имеет только истинные факты, но не имеет ограничивающих рамок или многоугольников.

У меня есть 2 класса (игнорируя 0 для фона) и выходные данные и метки заземления в массиве, как

Прогнозируемый -/--- Этикетки

0|0|0|1|2 0|0|0|1|2 0|2|1|0|0 0|2|1|0|0 0|0|1|1|1 0|0|1|1|1 0|0|0|0|1 0|0|0|0|1

Как мне рассчитать IoU из них?

PS: я использую Python3 с API Pytorch

2 ответа

Решение

Поэтому я только что узнал, что jaccard_simility_score считается IoU.

Так что решение очень простое,

from sklearn.metrics import jaccard_similarity_score jac = jaccard_similarity_score(predictions, label, Normalize = True/False)

Ссылка на источник: http://scikit-learn.org/stable/modules/generated/sklearn.metrics.jaccard_similarity_score.html

Вы можете создавать бинарные карты для данного класса.

          def calculate_iou(self, gt_mask, pred_mask, class=1):
    if threshold:
        pred_mask = (pred_mask == class) * 1
        gt_mask = (gt_mask == class) * 1

    overlap = pred_mask * gt_mask  # Logical AND
    union = (pred_mask + gt_mask)>0  # Logical OR
    iou = overlap.sum() / float(union.sum())
    return iou

Обратите внимание, что такое представление создается путем создания двоичных вероятностей для каждого класса. Итак, модели создают 4 карты вероятностей для 4 классов. Затем наибольшая вероятность для каждого пикселя считается наибольшим классом вероятности.

Другие вопросы по тегам