Semantic Segmentation(语义分割数据集解析)

FCN数据集VOC:

For example below:

                                Semantic Segmentation(语义分割数据集解析)_第1张图片Semantic Segmentation(语义分割数据集解析)_第2张图片

一般情况下,彩色图像都是rgb格式,所以应该是24位,但这里是8位,其实这表明图像是索引格式。 
里面8位存放的是索引值,区间范围[0,255]。图像应该还包含一个map,对应着每个索引的颜色。 
我们用matlab 查看索引:

类别名称 R G B 
background 0 0 0 背景 
aeroplane 128 0 0 飞机 
bicycle 0 128 0 
bird 128 128 0 
boat 0 0 128 
bottle 128 0 128 瓶子 
bus 0 128 128 大巴 
car 128 128 128 
cat 64 0 0 猫 
chair 192 0 0 
cow 64 128 0 
diningtable 192 128 0 餐桌 
dog 64 0 128 
horse 192 0 128 
motorbike 64 128 128 
person 192 128 128 
pottedplant 0 64 0 盆栽 
sheep 128 64 0 
sofa 0 192 0 
train 128 192 0 
tvmonitor 0 64 128 显示器

我的理解是由于分割是像素级别的分类,即每个像素都应有个标签,所以我们输入网络的是索引图,而我们看到的彩色png标注图是为了可视化好看。

在https://blog.csdn.net/m_buddy/article/details/78667813博客看到的例子

Semantic Segmentation(语义分割数据集解析)_第3张图片

我们输入的的是灰度图(注意我们voc是灰度图),像素是我们的类别数,比如我们的分割类别只有三类,所以我们的灰度图的像素值只有0,1.故看起来会非常黑。

制作标签:
假如我有两类,背景为0,目标为1,标签图就是单通道的灰度图。其中,背景的灰度值为0,目标的灰度值为1(从0开始,背景为0,连续的灰度值)这样制作完之后,标签图看起来是全黑(8位深),接下来,再将标签图制成索引图,至于什么是索引图,简单来说,就是做了一个map的映射,比如,将我前面设置的灰度值为0的背景,映射成一个自己设置的新的颜色(r,g,b),将灰度值为1的,映射成一个新的颜色(r,g,b)。索引图形式的label是P格式的,有新颜色的,此时的位深就等于制作索引图事对应了几个颜色,比如我的对应了0,1,此时的位深是1,如果对应了0,1,2,3,4,此时的位深是4。下面的这段代码可以帮助你查看图片的信息,如果输出[0,1]说明制作正确。

自定义数据的方法,包括: 
1. 使用labelme标注图像,生成灰度图像 
2. 将灰度标签图像转化为rgb 24位图像,根据pascal voc的colormap,使用函数label2rgb 
3. 将24位png图转换为8位png图。生成索引图像

Tip:先记录的就是这些,我特意看了下FCN的voc_layer.py和infer.py 在图片的读入层和预测输出可视化都有索引图和标签图相互转化的部分。代码我就不贴了,github上有。

你可能感兴趣的:(Semantic Segmentation(语义分割数据集解析))