MS COCO 2014数据集获取类别semantic segmentation

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33000225/article/details/78985635

MS COCO 2014 数据集的cocoapi只能获得 instance mask(下图右);但是要是想获得 class semantic segmentation(下图左),现在的官方cocoapi貌似并没提供这个api。

这里写图片描述


实现环境:

  • Python

实现方法:

coco官网的2017年数据集中可以发现有Stuff Segmentation,同时提供了新版的能获取Stuff Segmentation的cocoapi:link 。里面的 PythonAPI/cocostuff/cocoSegmentationToPngDemo.py 可以获得类别的Segmentation,但是这个是仅针对2017年的dataset的(博主发现直接使用会报错或者只能得到一片黑的图)。

在研究了2017的dataset和新版cocoapi后,发现2017的dataset的 category ids 与2014的dataset不一样,变成:

 1-91      % thing categories (not used for stuff segmentation) 
 92-182    % stuff categories 
 183       % other category (all thing pixels)

新版cocoapi根据stuff categories来对同一个class赋予颜色,直接使用原来的category ids(1-91)无法进行stuff分类(所以一片黑),因此对代码稍作改动即可作用于2014的数据集!


实现步骤:

1、下载新版cocoapihttps://github.com/nightrome/cocoapi

2、进入PythonAPI/pycocotools/cocostuffhelper.py,改动:

(1) Line141:

from:

    labelMap = cocoSegmentationToSegmentationMap(coco, imgId, includeCrowd=includeCrowd)

to:

    labelMap = cocoSegmentationToSegmentationMap(coco, imgId, checkUniquePixelLabel=False, includeCrowd=includeCrowd)

(2) Line142 后面加上:

    labelMap = labelMap + 91

3、进入 PythonAPI/

make

4、使用 PythonAPI/cocostuff/cocoSegmentationToPngDemo.py ,设置好 annPath 为你自己的 coco/annotations/instances_train2014.json 路径;然后把 Line75-Line88 注释掉

5、运行即可


结果:

这里写图片描述
这里写图片描述
这里写图片描述


常见问题:

  1. “Exception: Error: Some pixels have more than one label”

    • 原因:2014的dataset可能存在一个pixel对应多个label的情况,2017的Stuff Segmentation应该不存在这个问题,所以新版cocoapi会检查异常
    • 解决方法:不检查异常(多个label则由后者覆盖),即看一下 Line141 有没有加上checkUniquePixelLabel=False (查看上方实现步骤2-(1))
  2. 得到的图像全黑

    • 原因:检查原来 Line142的 labelMap 有没有加上91。若没加上,category ids仍为1-91,无法着色。
    • 解决方法:查看上方实现步骤2-(2)

References:

[1] coco dataset官网:http://cocodataset.org/#download
http://cocodataset.org/#stuff-eval
[2] cocoapi(旧版):https://github.com/cocodataset/cocoapi
[3] cocoapi(新版):https://github.com/nightrome/cocoapi

猜你喜欢

转载自blog.csdn.net/qq_33000225/article/details/78985635