Как должно быть помеченное изображение для семантической сегментации? - PullRequest
0 голосов
/ 02 марта 2019

Как я понимаю из приведенного ниже объяснения, для семантической сегментации будут два типа изображений: входные данные и маски.Масковые изображения - это изображения, которые содержат 'метку' в значении пикселя, которая может быть целым числом (0 для ROAD, 1 для TREE или (100 100 100) для ROAD (0,255,0) для TREE) .

Семантическая сегментация описывает процесс связывания каждого пикселя изображения с меткой класса (например, цветок, человек, дорога, небо, океан или автомобиль).https://se.mathworks.com/help/vision/ug/semantic-segmentation-basics.html

Согласно моим исследованиям, существует множество типов помеченных изображений для семантической сегментации.Наряду с различными расширениями (.png .jpg .gif .bmp ...), некоторые из них являются RGB-метками (3-канальными) изображениями, а некоторые являются СЕРЫМИ (1-канальными) изображений.Ниже приведены два примера, объясняющих эту ситуацию лучше.

  1. RGB с расширением '.png'

    https://github.com/divamgupta/image-segmentation-keras#user-content-preparing-the-data-for-training

  2. СЕРЫЙ масштаб с надписью «.gif»

    https://www.kaggle.com/kmader/vgg16-u-net-on-carvana/#data

Если мое изображениепомечен как СЕРЫЙ масштаб, я в основном делаю его RGB, копируя каждое значение этого серого канала для канала 3 RGB.Напротив, усредняя каналы RGB, я могу сделать помеченное изображение серым.В чем разница?Какой из них больше подходит для какой задачи (бинарная сегментация или что-то еще)?

В моем случае у меня есть 4 класса и я пытаюсь выполнить мультиклассовую семантическую сегментацию. Я уже пометил около 600 изображений на DataTurks .Это означает, что у меня просто есть многоугольники объекта, и я должен сделать свое помеченное изображение самостоятельно.На данный момент расширение моих входных изображений и изображений масок - '.jpg' и '.png' соответственно. Как маркировать мои изображения вместе с тем, какое расширение?

1 Ответ

0 голосов
/ 02 марта 2019

Вы можете сохранить маску как изображения в градациях серого в формате png со значениями, равными 0,1,2,3 (поскольку у вас есть 4 класса) в каждом местоположении, соответствующем классу (дерево, куст и т. Д.) Значений пикселейво входных изображениях.

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

import cv2
import numpy as np
lbl_img = '<path_to_mask_image>'
mask = cv2.imread(lbl_img, 0)
print(np.unique(mask))

[0 1 2 3] # это будет зависеть от количества классов, присутствующих в изображении маски

...