Pascal Voc中segmentation的ground truth咋处理呢

在PIL中,图像有很多种模式,如\u0026#39;L\u0026#39;模式,\u0026#39;P\u0026#39;模式,还有常见的\u0026#39;RGB\u0026#39;模式。模式\u0026#39;P\u0026#39;为8位彩色图像,它的每个像素用8个bit表示,其对应的彩色值是按照调色板索引值查询出来的。pascal voc的标签图像的模式正是\u0026#39;P\u0026#39;模式。
Pascal Voc中segmentation的ground truth咋处理呢

上图是我从VOC07中随意取了一张,用PIL读取:
Pascal Voc中segmentation的ground truth咋处理呢

PIL使用\u0026#39;P\u0026#39;模式将其读入,其像素值正是0-20这21个类别(0是背景),此外物体周围还有一圈白色边缘,其像素值为255,在训练时会被忽略。
voc标签图片的调色板为:
Pascal Voc中segmentation的ground truth咋处理呢

形象一点就是这样:
Pascal Voc中segmentation的ground truth咋处理呢

其他问题可以参考这篇文章:https://zhuanlan.zhihu.com/p/22976342

■网友
PASCAL VOC 中的ground truth使用的是 调色板 技术,也就是 gt 中存在的真实值是 1-20 的label值。同时图片编码时,会带上调色板,也就是每个类别指定一个颜色。
你可以使用 PIL 中的 P 模式来读取,但是 我更喜欢使用 opencv 中的 cv2.IMREAD_GRAYSCALE 模式读取(注意:opencv读取出来的通道顺序是 bgr)
ground truth 中白色边缘区域的值是255,是忽略计算的区域。

■网友
这个你看一下FCN的代码就知道了.
1.Pascal Voc的ground truth虽然是彩色的,但是你导入到程序中发现他其实是label数据,也就是他的范围就是1-20,而且是单通道的。这个部分相当神奇,应该是做了某种索引。
2. 白色边缘在FCN代码中是可以被忽略的

■网友
pascal voc的label文件是“p model”的,可以用PIL读进来,然后就可以直接当np数组用了,自己转一份纯数字的png文件即可。
【Pascal Voc中segmentation的ground truth咋处理呢】 边界是数值是255(纯白),如果你用caffe,在softmaxwithloss层设置ignore_label:255即可。意思是忽略边界,训练的时候不走loss


    推荐阅读