[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
语义分割方面的所关系的文件夹是
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 中有大量图片没有分割的标签,而伯克利对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语义分割数据集就做好了!!