2

正如我从下面的解释中了解到的,将有两种类型的图像用于语义分割,即输入和掩码。掩码图像是包含像素值“标签”的图像,它可以是某个整数(ROAD 为 0,TREE 为 1,ROAD 为 (100,100,100),TREE 为 (0,255,0))

语义分割描述了将图像的每个像素与类别标签(例如花、人、路、天空、海洋或汽车)相关联的过程。 https://se.mathworks.com/help/vision/ug/semantic-segmentation-basics.html

根据我的研究,用于语义分割的标记图像有很多种。除了不同的扩展名(.png .jpg .gif .bmp...),其中一些是RGB 标记(3 通道)图像,一些是灰色(1 通道)图像。下面,有两个例子可以更好地解释这种情况。

  1. 带有扩展名“.png”的 RGB

    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

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

就我而言,我有4 个类并尝试进行多类语义分割。我已经在 DataTurks 上标记了大约 600 张图像。这意味着,我只有对象的多边形,我必须自己制作我的标记图像。现在,我的输入图像和掩码图像的扩展名分别是“.jpg”和“.png”。我应该如何标记我的图像以及扩展名?

4

1 回答 1

3

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

于 2019-03-02T11:12:00.140 回答