Как проверить, совпадают ли помеченные области на двух изображениях? - PullRequest
0 голосов
/ 31 января 2019

Таким образом, идея заключается в том, чтобы написать метрику точности и отзыва для задачи сегментации.Обычные метрики для задач сегментации вычисляют эту метрику, сравнивая основную правду и маски прогнозирования по пикселям.Я хочу рассчитать, что даже если какая-то часть объекта в истинности земли будет предсказана, тогда весь объект будет считаться истинно положительным.

То, как я сейчас подхожу к этой проблеме, - это то, что я вычисляю логические и основополагающие истины и предсказанные маски.Затем с помощью skimage.measure.label назначьте уникальный идентификатор каждому BLOB-объекту.Затем я вычисляю истинные положительные значения, ложные отрицательные значения и т. Д., Используя количество BLOB-объектов в обоих

and_mask = np.logical_and(gt, pred)
labels1 = measure.label(gt, neighbors=8, background=0)
labels2 = measure.label(and_mask, neighbors=8, background=0)

. Это работает в большинстве случаев, но в случае, когда моя предсказанная маска для BLOB-объекта предсказывается в двух частях, тогдаВыполнение логического_и этого дает мне дополнительный объект.Это сбивает с толку мой расчет метрик.

Есть ли способ предотвратить это, а также, есть ли более простой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Мне удалось это решить.Я использовал measure.label, чтобы получить индивидуальные маски, а затем вычислил iou с помощью масок gt.Вот что я хотел

    labels1 = measure.label(gt, neighbors=8, background=0)
        # loop over the unique components
        for label in np.unique(labels1):
            # if this is the background label, ignore it
            if label == 0:
                continue
            # otherwise, construct the label mask 
            labelMask1 = np.zeros(pred.shape, dtype="uint8")
            labelMask1[labels1 == label] = 255
            c, counts1 = np.unique(np.logical_and(labelMask1, pred, 
             where=255), return_counts=True)
            inter = np.sum(np.logical_and(labelMask1, pred, where=255)) / 
            np.sum(np.logical_or(labelMask1, pred, where=255))

Вот грубый алгоритм, если кому-то интересно.

0 голосов
/ 01 февраля 2019

Оценка сегментации является активной областью исследований, но некоторые метрики уже существуют.Мой любимый вариант информации.Одна из ключевых особенностей заключается в том, что она не зависит от количества меток на каждом изображении или от назначения меток между изображениями.Этого пока нет в scikit-image, но у нас есть открытый запрос на включение, чтобы включить его:

https://github.com/scikit-image/scikit-image/pull/3354

Вы можете проверить эту ветку или скопировать реализацию оттуда, илипросто подождите немного и, надеюсь, это будет в следующем выпуске!

...