Pascal voc 2012数据集可以用于分类、检测和分割。这篇文章主要介绍其在语义分割任务上的使用。原始的Pascal voc 2012数据集仅仅包含1464个训练数据集,然而在很多paper上,大家都使用了包含10582个训练集的增强版数据集进行训练,因此,这篇文章将会详细介绍原版和增强版的Pascal voc 2012数据集以及它们的使用方法。
+ VOCdevkit
+ VOC2012
+ Annotations
+ ImageSets
+ JPEGImages
+ SegmentationClass
+ SegmentationObject
+ benchmark_RELEASE
+ cls
+ img
+ inst
+ tools
train.txt
val.txt
VOC 2012数据集分为20类,算上背景一共21类,分别如下:
Person: person
Animal: bird, cat, cow, dog, horse, sheep
Vehicle: aeroplane, bicycle, boat, bus, car, motorbike, train
Indoor: bottle, chair, dining table, potted plant, sofa, tv/monitor
在分割任务上,需要用到原始图像和对应的标签。语义分割任务对同一类的物体在label上都填充都有一个特定的颜色,一共20种颜色,比如摩托车用蓝色表示,人用红色表示。
更详细的介绍可以查看该数据集的官网:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/index.html,接下来主要介绍下载的目录中每个文件夹都是做什么的,我们主要用到下面加粗的文件目录。
增强版的VOC跟原版没什么区别,只是增加了数据。下面还是一一介绍下载的文件夹中每个文件的作用。
大多数paper中使用的数据集是以上两个数据集的融合,因此,在这部分将要介绍如何融合以上两个数据集来训练。
由于pascal voc 2012增强版的数据集的label是.mat格式的文件,需要将其转换为.png格式的图片。转化后的图片是8-bit的灰度图。
1)在benchmark_RELEASE目录下创建一个名为cls_png的目录用于存放转化后的png图片
2)在benchmark_RELEASE目录下执行mat2png.py脚本
python tools/mat2png.py cls cls_png
原始pascal voc 2012数据集中label为三通道RGB图像,为了统一,我们也将其转化为8-bit的灰度png图像。
1)在VOCdevkit/VOC2012目录下创建一个名为SegmentationClass_1D的文件夹用于存放转化后的图片
2)将benchmark_RELEASE/tools目录下的convert_labels.py和utils.py脚本拷贝到VOCdevkit/VOC2012目录下,并执行convert_labels.py脚本
python convert_labels.py SegmentationClass ImageSets/Segmentation/trainval.txt SegmentationClass_1D
现在,我们将原始的PASCAL VOC 2012数据集和增强版的数据集合并到一起。目前已有数据文件如下:
1.VOCdevkit/VOC2012为原始PASCAL VOC 2012数据集
2.benchmark_RELEASE为增强数据集
将JPEGImages中用于分割的2913张图片拷贝到img目录下(写个简单的脚本就可实现),将SegmentationClass_1D中的2913张图片拷贝到cls_png目录下,如遇到重复,替换即可。
将融合后的img文件名重命名为JPEGImages,共12031张原始JPG图片
将融合后的cls_png文件名重命名为SegmentationClassAug,共12031张PNG标签图片
整个数据集可分为train, val, trainval, test。需要有索引文件来指定某个样本属于哪个集,因此最后还需要得到每个数据集的索引文件,可以写个简单的脚本生成。也可以在我这里直接下载。https://pan.baidu.com/s/1e_dKDtwl3Gx7-qUsuot7yg 提取码:jn4x