如何将标记图像用于语义分割?

问题描述 投票:0回答:1

根据我从下面的解释中理解,将存在两种用于语义分割的图像,它们是输入和掩模。掩模图像是包含像素值中的“标签”的图像,其可以是某个整数(对于ROAD为0,对于TREE为1或对于TREE为(100,200,100)对于ROAD(0,255,0))。

语义分割描述了将图像的每个像素与类标签(例如花,人,道路,天空,海洋或汽车)相关联的过程。 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

如果我的图像标记为灰度等级,我基本上通过将此灰色通道的每个值复制为3 RGB通道来使其成为RGB。恰恰相反,通过平均RGB通道,我可以将标记图像设置为灰度等级。有什么不同?哪一个更适合哪个任务(二进制分割还是其他)?

在我的例子中,我有4个类,并尝试进行多类语义分割。 I've already labelled about 600 images on DataTurks。这意味着,我只有对象的多边形,我必须自己制作带标签的图像。目前,我的输入图像和蒙版图像的扩展分别是'.jpg'和'.png'。我该如何标记我的图像以及哪个扩展名?

rgb file-extension grayscale labeling semantic-segmentation
1个回答
1
投票

您可以将掩码保存为灰度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]#这将根据蒙版图像中存在的类数量而变化

© www.soinside.com 2019 - 2024. All rights reserved.