如何获取COCO的检测或分割结果。MS-COCO共有哪些类,有哪些标注。今天来看一下MS-COCO数据集的内容说明,数据的定义,标注信息

http://cocodataset.org/#download 官网地址
本文的目的是获取所有图像的分割结果并保存的工作。

Mask API 中介绍
COCO为每个目标实例都提供了分割Msak,instance_train201X.json表示的是整个数据集的结构,下面这部分主要介绍他有哪些数据以及其数据类型

{
 "info" : info,
 "images" : [image],
 "annotations" : [annotation],
 "licenses" : [license],
}

info{
"year" : int,
 "version" : str,
 "description" : str,
 "contributor" : str,
 "url" : str,
 "date_created" : datetime,
}

image{
"id" : int,
 "width" : int,
 "height" : int,
 "file_name" : str,
 "license" : int,
 "flickr_url" : str,
 "coco_url" : str,
 "date_captured" : datetime,
}

license{
"id" : int,
 "name" : str,
 "url" : str,
}

刚介绍完他的数据类型,现介绍下具体到json文件中的每一部分的具体形式
解析下instance_train2014.json文件,最后我们讲一下如何获取并展示分割结果。

{
     "info":      #第一个info信息
          {       #数据集信息
                  "description": "COCO 2014 Dataset",
                  "url": "http://cocodataset.org",
                  "version": "1.0",
                  "year": 2014,
                  "contributor": "COCO Consortium",
                  "date_created": "2017/09/01"
         },



      "images":  #第二个图片信息,数组包含了多张图像
      [   {      #每张图像的具体信息
                  "license": 5,
                  "file_name": "COCO_train2014_000000057870.jpg",
                  "coco_url": "http://images.cocodataset.org/train2014/COCO_train2014_000000057870.jpg",
                  "height": 480,
                  "width": 640,
                  "date_captured": "2013-11-14 16:28:13",
                  "flickr_url": "http://farm4.staticflickr.com/3153/2970773875_164f0c0b83_z.jpg",
                  "id": 57870
           },
          ......
          ......   #此处省略很多图片
         {
                  "license": 4,
                  "file_name": "COCO_train2014_000000475546.jpg",
                  "http://images.cocodataset.org/train2014/COCO_train2014_000000475546.jpg",
                  "height": 375,
                  "width":500,;、
                  "date_captured": "2013-11-25 21:20:23",
                  "flickr_url": "http://farm1.staticflickr.com/167/423175046_6cd9d0205a_z.jpg",
                  "id": 475546
           }],         #图像描述结束,下面开始介绍licenses


    "licenses":
         [ {
                  "url": "http://creativecommons.org/licenses/by-nc-sa/2.0/",
                  "id": 1,
                  "name": "Attribution-NonCommercial-ShareAlike License"
           },
            .....#此处省略七个license
            .....
         {
                  "url": "http://creativecommons.org/licenses/by-nc-nd/2.0/",
                  "id": 8,
                  "name": "Attribution-NonCommercial-NoDerivs License"
         }],



      "annotations":
      [   { 
#如果你想了解这个annotations中segment里面是什么,首先它是通过压缩处理后的分割区域的一个表示,TFRecord

                 "segmentation":[[312.29,562.89,402.25,511.49,400.96,425.38,398.39,372.69,
                                  388.11,332.85,318.71,325.14,295.58,305.86,269.88,314.86,
                                  258.31,337.99,217.19,321.29,182.49,343.13,141.37,348.27,
                                  132.37,358.55,159.36,377.83,116.95,421.53,167.07,499.92,
                                  232.61,560.32,300.72,571.89]],
                "area": 54652.9556,
                "iscrowd": 0,
                "image_id": 480023,
                "bbox": [116.95,305.86,285.3,266.03],
                "category_id": 58,"id": 86
          },
            .....#此处省略很多图像的分割标签
            .....
                "segmentation":[[312.29,562.89,402.25,511.49,400.96,425.38,398.39,372.69,
                                388.11,332.85,318.71,325.14,295.58,305.86,269.88,314.86,
                                258.31,337.99,217.19,321.29,182.49,343.13,141.37,348.27,
                                132.37,358.55,159.36,377.83,116.95,421.53,167.07,499.92,
                                232.61,560.32,300.72,571.89]],
              "area": 54652.9556,
              "iscrowd": 0,
              "image_id": 480023,
              "bbox": [116.95,305.86,285.3,266.03],
              "category_id": 58,
              "id": 86
          },


      "categories":#类别信息
     [   {
              "supercategory": "person",
              "id": 1,
              "name": "person"
          },
              .......#此处省略很多图像的类标签
              .......
          {
              "supercategory": "vehicle",
              "id": 2,
              "name": "bicycle"
          },
        {
              "supercategory": "kitchen",#大类
              "id": 50,
              "name": "spoon"
        }

首先,下载COCOAPI中的pythonAPI到coco文件夹中

git clone https://github.com/cocodataset/cocoapi.git

然后,cd到pythonApi下,执行make,可能会出现下面情况

cd coco/PythonAPI
make
#错误提示pycocotools/_mask.c:没有那个文件或目录
pip install cython  #解决方式
make#再次执行make,如果你没有出现上面的错误,可以跳过
#接下来,验证cocoApi是否安装成功
python
>>>import pycocotools
#不报错就成功了一半了

接下来,在coco文件夹,下载好image和anotation。

这里介绍我们的分割结果图获取方法

官方给的使用示例在下载目录下的pycocoDemo.ipynb文件下https://github.com/dengdan/coco/blob/master/PythonAPI/pycocoDemo.ipynb

那么我们首先了解一下,之前为什么要引入pycocotools,因为这个问件下包含了对coco数据的json文件的解析工具,他定义了coco.py这个文件,中包含一下几个接口。

#  decodeMask - Decode binary mask M encoded via run-length encoding.
#  encodeMask - Encode binary mask M using run-length encoding.
#  getAnnIds  - Get ann ids that satisfy given filter conditions.
#  getCatIds  - Get cat ids that satisfy given filter conditions.
#  getImgIds  - Get img ids that satisfy given filter conditions.
#  loadAnns   - Load anns with the specified ids.
#  loadCats   - Load cats with the specified ids.
#  loadImgs   - Load imgs with the specified ids.
#  annToMask  - Convert segmentation in an annotation to binary mask.
#  showAnns   - Display the specified annotations.
#  loadRes    - Load algorithm results and create API for accessing them.
#  download   - Download COCO images from mscoco.org server.
# Throughout the API "ann"=annotation, "cat"=category, and "img"=image.

------ 首先,我们获取COCO数据集中共有多少类,需要在pythonAPI下新建一个python文件,命名为segcoco.py用于获取分割图,先执行下面这段话,获取下COCO中共有多少类别

import numpy as np
import skimage as io
import matplotlib as mpl
mpl.use('Agg')
#这里为了防止linux没有GUI报错
import matplotlib.pyplot as plt
import pylab
import urllib
import numpy as np
from io import BytesIO
import requests as req
from PIL import Image

pylab.rcParams['figure.figsize'] = (8.0, 10.0)

dataDir='..'
dataType='val2014'  #这里改为train2017的话,类别是相同的
annFile='{}/annotations/instances_{}.json'.format(dataDir,dataType)

coco=COCO(annFile)


cats = coco.loadCats(coco.getCatIds())
#这里loadCats就是coco提供的接口,获取类别
nms=[cat['name'] for cat in cats]
print('COCO categories: \n{}\n'.format(' '.join(nms)))

nms = set([cat['supercategory'] for cat in cats])
#cat['supercategory'],从这里可以看出来,cat是一个包含多个属性的数组\说是字典更好
print('COCO supercategories: \n{}'.format(' '.join(nms)))

显示

loading annotations into memory...
Done (t=5.08s)
creating index...
index created!
COCO categories: 
person bicycle car motorcycle airplane bus train truck boat traffic light fire hydrant stop sign
 parking meter bench bird cat dog horse sheep cow elephant bear zebra giraffe backpack 
umbrella handbag tie suitcase frisbee skis snowboard sports ball kite baseball bat baseball glove 
skateboard surfboard tennis racket bottle wine glass cup fork knife spoon bowl banana apple 
sandwich orange broccoli carrot hot dog pizza donut cake chair couch potted plant bed dining 
table toilet tv laptop mouse remote keyboard cell phone microwave oven toaster sink refrigerator 
book clock vase scissors teddy bear hair drier toothbrush



COCO supercategories: 
outdoor food indoor appliance sports person animal vehicle furniture accessory electronic kitchen


接下来,获取分割图,按照github的示例,我们在之前代码的基础上,添加一下代码

imgIds = coco.getImgIds(imgIds=[324158])
img = coco.loadImgs(imgIds[np.random.randint(0, len(imgIds))])[0]
print(img)
print(img['flickr_url'])

response = req.get(img['flickr_url'])
#这里跟github中不一样,通过request来获取的图像url来得到图像的,因为发现如果使用coco_url会下载不了图片,可能跟外网有关
image = Image.open(BytesIO(response.content))

plt.imshow(image)
#在这里,如果在linux服务器上,由于没有GUI,会导致错误,所以, 在前面导包的时候加了import matplotlib as mpl
mpl.use('Agg')
plt.axis('off')

annIds = coco.getAnnIds(imgIds=img['id'])
anns = coco.loadAnns(annIds)
#print(anns)
ax=coco.showAnns(anns)
#如果这里提示了TKL的错误

注意,在linux服务器上,由于没有GUI,除非你有Xmanager,否则会导致错误TKL...,所以, 在coco.py前面导包的时候加了
import matplotlib as mpl
mpl.use('Agg')
如果在没有GUI的情况下,是在想看的话,那你就在coco.py的showAnns(ans)这个方法后面,加上plt.save('起个名.jpg'),再次执行,就能够看到这个图的分割结果了。

image.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 2,926评论 1 3
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,421评论 6 428
  • 明天就是元宵节了,刚好公公去广州的车票买在明天上午。上午和婆婆一起带着孩子去附近新开的超市买点吃的给公公明天带上。...
    宽雅阅读 240评论 0 0
  • 晨冬清亦幽 群山如墨勾 曲径通何处 尽是思乡愁
    哇哈哈哈哈阅读 160评论 0 0