Я пытаюсь понять сегментацию изображения, используя реализацию SegNet в keras. Я прочитал оригинальную статью, используя архитектуру Conv и Deconv, а также слои Dilated conv. Однако мне сложно понять, как работает маркировка пикселя.
Я рассматриваю следующую реализацию:
https://github.com/nicolov/segmentation_keras
Здесь используются атрибуты набора данных Паскаль:
21 Классы:
# 0=background
# 1=aeroplane, 2=bicycle, 3=bird, 4=boat, 5=bottle
# 6=bus, 7=car, 8=cat, 9=chair, 10=cow
# 11=diningtable, 12=dog, 13=horse, 14=motorbike, 15=person
# 16=potted plant, 17=sheep, 18=sofa, 19=train, 20=tv/monitor
Классы представлены:
pascal_nclasses = 21
pascal_palette = np.array([(0, 0, 0)
, (128, 0, 0), (0, 128, 0), (128, 128, 0), (0, 0, 128), (128, 0, 128)
, (0, 128, 128), (128, 128, 128), (64, 0, 0), (192, 0, 0), (64, 128, 0)
, (192, 128, 0), (64, 0, 128), (192, 0, 128), (64, 128, 128), (192, 128, 128)
, (0, 64, 0), (128, 64, 0), (0, 192, 0), (128, 192, 0), (0, 64, 128)], dtype=np.uint8)
Я пытался открыть помеченные изображения для кота и лодки, поскольку кот находится только в R-пространстве, а лодка только в синем. Я использовал следующие, чтобы показать помеченные изображения:
Для лодки:
label = cv2.imread("2008_000120.png")
label = np.multiply(label, 100)
cv2.imshow("kk", label[:,:,2])
cv2.waitKey(0)
Для кошек:
label = cv2.imread("2008_000056.png")
label = np.multiply(label, 100)
cv2.imshow("kk", label[:,:,0])
cv2.waitKey(0)
Однако не имеет значения, какое пространство я выберу, оба изображения всегда дают одинаковые результаты. то есть следующий код также дает такие же результаты
Для лодки:
label = cv2.imread("2008_000120.png")
label = np.multiply(label, 100)
cv2.imshow("kk", label[:,:,1]) # changed to Green space
cv2.waitKey(0)
Для кошек:
label = cv2.imread("2008_000056.png")
label = np.multiply(label, 100)
cv2.imshow("kk", label[:,:,1]) # changed to Green space
cv2.waitKey(0)
Я предполагал, что я увижу кошку только в красном цвете, а лодку - только в синем. Однако выходной во всех случаях:
Теперь я запутался, как эти пиксели помечены и как они читаются и используются уникальным образом для сопряжения с категориями в процессе создания логитов.
Было бы замечательно, если бы кто-то мог объяснить или поставить некоторые соответствующие ссылки, чтобы понять этот процесс. Я попытался выполнить поиск, но в большинстве учебных пособий обсуждается только архитектура CNN, а не процесс маркировки или то, как эти метки используются в CNN.
Я приложил помеченные изображения кота и лодки для справки.