扩增的Pascal VOC 语义分割数据集制作

参考的文献和博客:

[1] B. Hariharan, P. Arbeláez, L. Bourdev, S. Maji, and J. Malik, 
“Semantic contours from inverse detectors,” in ICCV, 2011.

[2] https://cloud.tencent.com/developer/article/1391917

[3] https://blog.csdn.net/u014451076/article/details/79700653

[4] https://blog.csdn.net/zz2230633069/article/details/84769339

首先介绍下Pascal VOC 语义分割数据集的结构:

语义分割方面的所关系的文件夹是

1. JPEGImage文件夹(包含了分割所要用的原图片)

2. SegmentationClass文件夹(里面包含了分割所要用的标签图)

3. ImageSets文件夹下的Segmentation文件夹(里面包含了所需图片的图片名字的集合TXT文件)

 

JPEGImage文件夹:包含了所有的原图片总共17125张且shape=h x w x 3,mode=RGB,format=JPEG,大小不一致

SegmentationClass文件夹:包含了语义分割的所有标签图2913张且shape=h x w ,mode=P,format=PNG,大小不一致(这里需要注意,mask图直接读成numpy是h x w x 3大小的彩色图,还需要根据colormap映射回类别,而先用Image.open读进来再转成numpy是h x w大小的,值就是类别值,使用的时候推荐这种读取方法,比较方便。)

ImageSets/Segmentation/train.txt:总共有1464行也就是1464张训练图片的名字

ImageSets/Segmentation/val.txt:总共有1449行也就是1449张验证图片的名字

ImageSets/Segmentation/trainval.txt:总共有2913行也就是2913张训练验证图片,上面两个的并集

总共20类如下:

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

mask label的类别与颜色的对照关系如下图所示:(原版的VOC语义分割数据集label的mask是一张HxWx1的伪彩色图(每个像素用8bit表示RBG三个通道的信息,根据colormap进行解码后显示为彩色)

下面是类别与颜色的对应关系:一张标签图片总共有22种数字(0-20,255)其中0表示背景,255表示白色边界,所以语义图总共有22种颜色,20个类别+黑色背景+白色边界 

原话:

pixel indices correspond to classes in alphabetical order (0=background,  1=aeroplane, 2=bicycle, 3=bird, 4=boat, 5=bottle, 6=bus, 7=car , 8=cat, 9=chair, 10=cow, 11=diningtable, 12=dog, 13=horse, 14=motorbike, 15=person, 16=potted plant, 17=sheep, 18=sofa, 19=train, 20=tv/monitor,  255='void' or unlabelled)

分布如下:

制作扩增的Pascal VOC  语义分割数据集:

说明: 由于原版的Pascal VOC 中有大量图片没有分割的标签,而伯克利对VOC中没有分割标注的图片进行了标注,所以通常大家使用扩增后的VOC进行训练。

下面开始制作扩增的VOC语义分割数据集(示例中的路径需要根据自己的实际情况进行更改)

相关的两个脚本和最后的trainval.txt list:

https://github.com/Cloveryww/make-augmented-PascalVOC-semantic-segmentation-dataset-tool

1. 下载两个数据集:

# augmented PASCAL VOC
cd $DATASETS
wget http://www.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/semantic_contours/benchmark.tgz # 1.3 GB
tar -zxvf benchmark.tgz
mv benchmark_RELEASE VOC_aug

# original PASCAL VOC 2012
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar # 2 GB
tar -xvf VOCtrainval_11-May-2012.tar
mv VOCdevkit/VOC2012 VOC2012_orig && rm -r VOCdevkit

2.  由于augmented PASCAL VOC 数据集的 ground truth labels 是以 Matlab data files的格式存在的,所以需要转换为png格式:

cd $DATASETS/VOC_aug/dataset
mkdir cls_png
cd $TOOLS_DIR
python mat2png.py $DATASETS/VOC_aug/dataset/cls $DATASETS/VOC_aug/dataset/cls_png

3. 上面一步获得的png格式的ground truth label是灰度图,每个像素的值就是类别值, 但 original PASCAL VOC 2012中的 ground truth label 是以RGB伪彩色图像的形式保存的,因此需要统一格式(也可以将扩增的VOC的label转化为原版类型的,这里采用都统一为灰度图格式的方法):

灰度图类型的mask:(由于灰度值为0~20比较小,所以看的不是很清楚)

为彩色图类型的mask: 

cd $DATASETS/VOC2012_orig
mkdir SegmentationClass_1D
cd $DATASETSDIR
./convert_labels.py $DATASETS/VOC2012_orig/SegmentationClass/ \
  $DATASETS/VOC2012_orig/ImageSets/Segmentation/trainval.txt \
  $DATASETS/VOC2012_orig/SegmentationClass_1D/

 4. 合并两个数据集:

主要是合并JPEGImages和Segmentation这两个目录,即原图和mask图。具体是将pascal voc的原图和mask图copy到SBD数据集中进行覆盖,最终的文件数分别为原图17125和mask图12031。

另外需要准备一个类似trainval.txt 的list用来训练,可以自己制作,也可以直接用github中提前准备好的。

现在扩增的VOC语义分割数据集就做好了!!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值