PASCAL 5i(PASCAL VOC 2012 Aug)数据集构建:小样本语义分割复现踩坑总结

目录

1. 数据集组成

1.1 训练集:10582/5923张图片怎么来的

1.1.1 训练集版本一:10582张

1.1.2 训练集版本二:5923张

1.2 验证集

2. 数据集下载

3. 数据集处理

3.1 使用convert_labels.py转换出错:numpy.AxisError: axis 2 is out of bounds for array of dimension 0

3.2 转换方法错误导致复现结果不佳:转换过程中标注的边界被忽略


1. 数据集组成

PASCAL 5i (PASCAL VOC 2012 Aug) 增强数据集由PASCAL VOC 2012数据集和SBD组成,两个数据集的图片数如下表所示

数据集训练集(train)验证集(val)测试集(test)
VOC 201214641449一般用不上
SBD849828570

整个PASCAL 5i增强数据集一共有12031个样本和标注能够使用,从中划分训练集和验证集,具体组成如下:

1.1 训练集:10582/5923张图片怎么来的

pascal-5i增强数据集的训练集(aug_train)在使用中有两个版本,一个版本为10582个样本,另一个版本为5923个样本

1.1.1 训练集版本一:10582张

10582张样本的训练集的组成如下:

Aug_{train}=VOC_{train}+SBD_{train}+SBD_{val}

即由 PASCAL VOC 2012的训练集SBD的训练集SBD的验证集组成,并去除其中的重复样本,最终数量为10582个样本。这里可以理解为,验证一般只用原VOC 2012的验证集进行验证,因此可以把SBD的验证集用来训练,增加训练集样本数量。

具体的list见这位大佬的博客:How to use 10,582 trainaug images on DeeplabV3 code? | Starsky's Blog - 11zHexo (sun11.me)list内容在这里trainaug.txt

1.1.2 训练集版本二:5923张

5923张样本的训练集的组成如下:

Aug_{train}=VOC_{train}+SBD_{train}

即由 PASCAL VOC 2012的训练集SBD的训练集组成,并去除其中的重复样本,最终数量为5923个样本。这个版本直接把SBD的验证集弃用了,不用于训练也不用于验证。

 PFENet给出了5923张训练集的list:去重后训练集list

1.2 验证集

pascal-5i增强数据集的验证集(aug_val)共有1449张图片,与PASCAL VOC 2012的验证集(voc_val)一致,直接使用即可

2. 数据集下载

PASCAL VOC 2012数据集可前往官网下载:官网链接

向下找到Development Kit,下载训练/验证集training/validation data

(注意:测试集test需要单独下载,但官方并未公布测试集的groundtruth,也就是只有图片没有标注,一般不用下载)

SBD原来的下载页面现在变成了作者的个人简介,大部分博客使用的都是原来的下载链接。我没找到新的官方链接,只能在其他大佬的博客中,通过云盘分享来下载

有些博客分享了处理完成的数据集,但有些处理方法可能会导致复现结果不佳,具体看下文3.2

3. 数据集处理

这一步是最容易出错的地方

VOC 2012数据集用的是彩色的标注图片,SBD数据集用的是.mat格式的标注,为了统一,需要把两种都转换成灰度图,SBD的官方文件内有两种转换脚本可以使用,具体操作不再赘述,可以参考大佬们的博客https://blog.csdn.net/pangyunsheng/article/details/87360238PASCAL VOC2012 & 增强数据集_segmentationclassaug voc2012-CSDN博客

最终文件夹内应该要有12031张图片和灰度图(10582张train+1449张val,train和val通过对应的list区分),但是需要注意以下两个问题

3.1 使用convert_labels.py转换出错:numpy.AxisError: axis 2 is out of bounds for array of dimension 0

参考博客:http://t.csdnimg.cn/oQxSM

参考博客:PASCAL VOC2012 & 增强数据集_segmentationclassaug voc2012-CSDN博客的评论区

convert_labels.py里面img = imread(img_name)改成img = imread(img_name)[:,:,0:3]

3.2 转换方法错误导致复现结果不佳:转换过程中标注的边界被忽略

发现这个问题是源于对小样本语义分割PFENet的复现,复现结果的mIoU始终比论文相差5个点左右,后续对GFS-Seg的CAPL复现仍然有差距,然后在PFENet的github的issue里面发现了原因:https://github.com/dvlab-research/PFENet/issues/6

在转换成灰度图过程中,PASCAL VOC的边界区域应该被标记为255,以2007_000032.png举例来说,可以看以下对比:

2007_000032.png转换前
转换后(不标记边界)
转换后(边界区域被标记为255)

 如果你处理完后,图片像中间那样没有把边界区域标成白色,那么复现结果很可能会有一定差距

印象中我是使用了SBD的官方转换工具进行转换,得到了中间那种只标注类、不标注边界的灰度图(肉眼能模糊看得见person类),但有些大佬的博客中的结果是下图那种标注了白色边界的灰度图,可能是因为我下载的SBD数据集是错误的?

Any way,如果你处理完了没有白色边界,可以按以下解决办法重新转换一遍:

进入SBD转换工具的utils.py文件,找到pascal_palette()方法,如下:

 在palette后面加上:

(224, 224, 192) : 255

 如下图所示:

 随后再重新运行一遍convert_lables.py,应该就会生成带白色边界的灰度图,文件夹内如下图所示:

正确的灰度图标注

使用带白色边界的灰度图进行复现,复现结果会很明显有好转,以对CAPL的复现结果举例,相比于不带白边的标注,使用带白边的标注结果很明显更好,能够复现原论文表现

CAPL复现结果
1shot5shot
论文54.3855.72
复现(标注无白边)50.4352.56
复现(标注有白边)54.7257.06

  • 25
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值