PASCAL Context数据集[1]由两部分组成:
PASCAL Context 总共有459个标注类别,包含 10103 张图像,其中 4998 用于训练集,5105 用于验证集。现在最广泛地用法是使用其中出现频率最高的 59 个类别最为语义标签,其余类别标记为背景即background。采用这一做法的论文有[1][2][3][4]等。
首先需要下载 PASCAL VOC 2010 语义分割数据集 :
然后去 PASCAL Context 的官网(如下图所示)下载 Context 标注。如果使用 59+background 作为语义标签的话,还需要下载59_lables.txt
。然后和所有 class-label (即数字 - 类别名映射,如:3: air conditioner)的映射做对比,拿到59个类别的数字索引。为了方便,这里笔者已经整理好了,可以供大家制作数据集的时候直接使用:
[ 0, 2, 259, 260, 415, 324, 9, 258, 144, 18, 19, 22,
23, 397, 25, 284, 158, 159, 416, 33, 162, 420, 454, 295, 296,
427, 44, 45, 46, 308, 59, 440, 445, 31, 232, 65, 354, 424,
68, 326, 72, 458, 34, 207, 80, 355, 85, 347, 220, 349, 360,
98, 187, 104, 105, 366, 189, 368, 113, 115]
另外,由于Context 的原始标注是matlab的.mat
格式,如果需要在python中使用,还需要将其转换成常见的灰度图标注格式。这里我们使用Github上已有的代码:https://github.com/xmojiao/deeplab_v2/blob/master/pascal-context/convert_rawmat_labels.py
将 PASCAL VOC 2010 训练/验证/测试数据集解压合并,然后删除语义分割中不需要使用的部分,仅保留JPEGImages
文件夹即可。请注意这里JPEGImages
是融合了测试图片的。
使用上文提到的convert_rawmat_labels.py
将.mat
格式的标注转换为.png
的常见灰度标注,并将转换后的结果放在JPEGImages
同级目录下,命名为PASCALContexts
。
到此,原始图片和标注数据都已获取完毕,那么如何实现上述的 4998+5105 的训练/验证划分呢?
这里需要使用CVPR’17 PASCAL in Detail Challenge 中实现的Detail
接口。其github地址为:https://github.com/ccvl/detail-api
具体使用方法可以参考其提供的文档,这里不再赘述。
[1] R. Mottaghi, X. Chen, X. Liu, N.-G. Cho, S.-W. Lee, S. Fi- dler, R. Urtasun, and A. Yuille. The role of context for object detection and semantic segmentation in the wild. In CVPR 2014.
[2] L. Chen, et al. DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs. TPAMI, 2018.
[3] G. Lin, A. Milan, C. Shen, and I. D. Reid. Refinenet: Multi- path refinement networks for high-resolution semantic seg- mentation. In CVPR, 2017.
[4] H. Zhang, K. Dana, J. Shi, Z. Zhang, X. Wang, A. Tyagi, and A. Agrawal. Context encoding for semantic segmentation. In CVPR, 2018.