您的位置:首页 > 其它

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

2018-01-05 22:11 1236 查看
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、运行即可

结果:







常见问题:

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

原因:2014的dataset可能存在一个pixel对应多个label的情况,2017的Stuff Segmentation应该不存在这个问题,所以新版cocoapi会检查异常

解决方法:不检查异常(多个label则由后者覆盖),即看一下 Line141 有没有加上
checkUniquePixelLabel=False
(查看上方实现步骤2-(1))

得到的图像全黑

原因:检查原来 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息