目标检测任务数据集介绍-MS COCO数据集

本文简要介绍了COCO数据集的下载、数据内容及使用API接口。比较冗长,适合入门了解。

MS COCO数据集简介

  • 简介
  • 数据下载
    • 2014 Train/Val
    • 2017 Train/Val
  • 数据内容与格式
    • 2014Train/Val
  • 使用接口

简介

MS COCO全称Microsoft Common Objects in Context,是一个包含了目标检测、分割、字幕的数据集。包含了以下特点:目标分割、情景中的识别、超像素Stuff分割(相较于Thing Class,即人、汽车、大象这类目标为主的目标检测任务,此任务更专注于Stuff Class,即草、墙、天空此类目标)、33万幅影像(其中超过20万幅有标注信息)、150万对象实例,80个object类别,91个stuff类别,每个影像5个字幕,25万个标注了关键点的人体目标。
官网地址:http://cocodataset.org(可能需要科学上网)。
目标检测任务数据集介绍-MS COCO数据集_第1张图片
打开官网后,依次浏览Dataset,Tasks,Evaluate可以看到数据集,比赛任务、以及提交结果的格式及提交方式等内容。我们最关心的是数据的下载数据内容与格式使用方法,按照这个顺序依次来了解该数据集。
目标检测任务数据集介绍-MS COCO数据集_第2张图片

数据下载

点击Dataset->Download可以看到有数据使用的API接口、Images影像数据、Annotations标注数据。
目标检测任务数据集介绍-MS COCO数据集_第3张图片
在概览中可以看到主要有2014和2017两个数据集,2014年的数据用于Detection(目标检测)、Captioning(字幕标注)、Keypoints(关键点检测)三个任务中,而2017年的数据在此基础之上,多了Stuff和Panoptic分割任务,因此2017年多了Stuff和Panoptic两种annotations标注数据。
目标检测任务数据集介绍-MS COCO数据集_第4张图片

2014 Train/Val

分别点击2014 Train images、2014 Val images、2014 Train/Val Annotations,下载2014年训练影像、验证影像、训练和验证标签,Test测试影像用于比赛,没有标注信息,在平时自己玩模型训练和测试时不需要,可不下载。
目标检测任务数据集介绍-MS COCO数据集_第5张图片
下载完后的压缩包:
在这里插入图片描述

2017 Train/Val

2017的数据相比于2014的数据,多了Stuff annotations(stuff类别分割标签)与Panoptic annotations(全景分割)的标签数据。在Download页面,分别点击2017 Train images、2017 Val images、2017 Train/Val annotations、2017 Stuff Tran/Val annotations、2017 Panoptic Train/Val annotations下载2017数据的训练/验证影像、训练/验证影像的目标检测标签、Stuff类别标签、全景分割标签。
在这里插入图片描述
下载后的压缩包:
目标检测任务数据集介绍-MS COCO数据集_第6张图片

数据内容与格式

标注数据集主要就两部分内容,影像数据和标注数据,我们使用数据时最关心的就是标注数据的格式与内容,在此以2014的数据为例,介绍COCO数据集的标注格式。

2014Train/Val

分别解压2014Train/Val/Annotations数据后得到train2014,val2014,annotations三个文件夹,其中train2014中存有82783张图片,val2014中存有40504张图片,图片格式均为jpg格式。
图片示例:
目标检测任务数据集介绍-MS COCO数据集_第7张图片
Annotations文件夹中就是最重要的标注数据,cations,instances,person_keypoints依次为字幕、目标检测、人体关键点的标注信息,本文主要关注目标检测的内容,以instance_train2014.json文件中的内容说明记录标注的格式。
目标检测任务数据集介绍-MS COCO数据集_第8张图片
在COCO官网,点击Evaluate->Data Format,即可查看数据组织格式。官方介绍中对数据做了如下说明
所有的标注文件都有以下内容:

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

其中info,image,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,
}

不同的标注文件其annotation内容也不同:

  1. Objection Detection目标检测文件。每个目标实例标注都有包括类别id和分割掩码的一系列信息。其中分割掩码的标注格式根据目标是否是单独的对象而有所不同。iscrowd=0时,使用polygons格式(即成对使用x、y坐标标注多边顶点);iscrowd=1时,表示是一个对象集合,使用RLE(Run-Length Encoding,变动长度编码算法)格式标注。categories域中记录了类别id和类别名称以及上级类别名称的映射关系。具体数据结构格式如下:
annotation{
"id" : int, 
"image_id" : int, 
"category_id" : int, 
"segmentation" : RLE or [polygon], 
"area" : float, 
"bbox" : [x,y,width,height], 
"iscrowd" : 0 or 1,
}

categories[{
"id" : int, 
"name" : str, 
"supercategory" : str,
}]
  1. Keypoint Detection关键点检测标注文件。关键点标注文件内容在目标检测文件内容(包括id、bbox等)之上,增加了两个属性值。第一个是“关键点keypoint”,是一个3k长度的数组,其中k指代关键点的数量。每一个关键点有一个x,y坐标和一个是否可视标签v,v的定义为:v=0,则未标记(此情形x=y=0);v=1,已标注,但不可视;v=2,已标注且可视。最后,在每个类别,categories结构多加了两个属性值,“keypoints”,是长度为k的数组,内容为关键点名称;“skeleton”,通过成对的关键点list定义关键点连接关系以用于可视化。目前关键点只标注于人体类别。具体数据结构格式如下:
annotation{
"keypoints" : [x1,y1,v1,...], 
"num_keypoints" : int, 
"[cloned]" : ...,
}

categories[{
"keypoints" : [str], 
"skeleton" : [edge], 
"[cloned]" : ...,
}]

"[cloned]": denotes fields copied from object detection annotations defined above.
  1. Stuff Segmentation,Stuff类别分割。Stuff标注格式内容和上述的object detection目标检测格式相同(除了iscrowd属性没有必要所以默认设置为0)。在JSON格式中,影像中每个类别都用RLE格式标注。
  2. Panoptic Segmentation全景分割。
    全景分割任务的标注数据,其标注数据是逐影像表示,而不是逐目标表示的。每个逐影像表示的标注数据有两个部分(1)一个PNG格式的影像分割图像(2)一个存储了每个分割影像语义信息的JSON数据。其数据格式如下:
annotation{
"image_id" : int, 
"file_name" : str, 
"segments_info" : [segment_info],
}

segment_info{
"id" : int,. 
"category_id" : int, 
"area" : int, 
"bbox" : [x,y,width,height], 
"iscrowd" : 0 or 1,
}

categories[{
"id" : int, 
"name" : str, 
"supercategory" : str, 
"isthing" : 0 or 1, 
"color" : [R,G,B],
}]
  1. Image Captioning图片字幕标注。每个字幕描述了该图片并且每张图片有至少5条字幕。
annotation{
"id" : int, 
"image_id" : int, 
"caption" : str,
}

仅仅通过这些说明,很难get到具体的数据样式(反正我看完了还是一塌糊涂。。。),最直观的方法还是打开一个标注文件,然后一条条的查看其中记录的数据,我们打开标注文件夹中的instances_train2014.json文件:
目标检测任务数据集介绍-MS COCO数据集_第9张图片
数据量非常大,该json文件有317MB,最开始记录了该json标注文件的信息info,其中有描述信息description,链接地址url,版本vision,年份year,贡献者contributor,创建日期data_created.
在这里插入图片描述
然后就是大量的images影像信息,是以列表保存,一个大括号{}里就是一幅影像image的信息(图片中选定的部分就是一幅影像的信息)。每幅影像信息依次记录许可号license,文件名file_name,coco网站影像链接coco_url,影像高度height,影像宽度width,获取日期data_captured,flickr网站影像链接flickr_url,影像标识号id。
目标检测任务数据集介绍-MS COCO数据集_第10张图片
所有的image信息结束后,接下来是使用许可license信息(图片中所选内容即为license信息),这时候已经到了六万多行。。。lincense信息中每一个大括号记录每一个许可的链接url,序号id,名称name。instances_train2014.json文件中共有8种license,截图中均已列出。
目标检测任务数据集介绍-MS COCO数据集_第11张图片
记录完licenses信息后就是真正的标注信息annotations 了,也是我们最需要关注的信息。每一个大括号里记录一个object对象的标注信息,依次为标注分割信息segmentation用polygon多边形或者RLE格式标注对象轮廓,面积area,是否是多目标聚集对象iscrowd,影像序号image_id,边界框bbox,类别序号category_id,该对象序号id。以上内容为一个标注对象的信息,通过这种数据结构,存储了所有标注对象的信息。
目标检测任务数据集介绍-MS COCO数据集_第12张图片
json文件的最后,就是类别信息categories,这时候已经到了17万行了。类别信息记录了所有类别的上级类别supercategory,序号id,名称name三个信息,每个大括号里记录一个类别。
目标检测任务数据集介绍-MS COCO数据集_第13张图片
因为看到在有的博客中提到2014年的目标检测任务序号id不连续,中间有缺的序号,但总数是80类,在此复制所有类别数据过来,整理一下即可求证。可以看到train2014中类别序号id确实不连续,总类别数为80.

supercategoty id name
1 person 1 person
2 vehicle 2 bicycle
3 vehicle 3 car
4 vehicle 4 motorcycle
5 vehicle 5 airplane
6 vehicle 6 bus
7 vehicle 7 train
8 vehicle 8 truck
9 vehicle 9 boat
10 outdoor 10 trafficlight
11 outdoor 11 firehydrant
12 outdoor 13 stopsign
13 outdoor 14 parkingmeter
14 outdoor 15 bench
15 animal 16 bird
16 animal 17 cat
17 animal 18 dog
18 animal 19 horse
19 animal 20 sheep
20 animal 21 cow
21 animal 22 elephant
22 animal 23 bear
23 animal 24 zebra
24 animal 25 giraffe
25 accessory 27 backpack
26 accessory 28 umbrella
27 accessory 31 handbag
28 accessory 32 tie
29 accessory 33 suitcase
30 sports 34 frisbee
31 sports 35 skis
32 sports 36 snowboard
33 sports 37 sportsball
34 sports 38 kite
35 sports 39 baseballbat
36 sports 40 baseballglove
37 sports 41 skateboard
38 sports 42 surfboard
39 sports 43 tennisracket
40 kitchen 44 bottle
41 kitchen 46 wineglass
42 kitchen 47 cup
43 kitchen 48 fork
44 kitchen 49 knife
45 kitchen 50 spoon
46 kitchen 51 bowl
47 food 52 banana
48 food 53 apple
49 food 54 sandwich
50 food 55 orange
51 food 56 broccoli
52 food 57 carrot
53 food 58 hotdog
54 food 59 pizza
55 food 60 donut
56 food 61 cake
57 furniture 62 chair
58 furniture 63 couch
59 furniture 64 pottedplant
60 furniture 65 bed
61 furniture 67 diningtable
62 furniture 70 toilet
63 electronic 72 tv
64 electronic 73 laptop
65 electronic 74 mouse
66 electronic 75 remote
67 electronic 76 keyboard
68 electronic 77 cellphone
69 appliance 78 microwave
70 appliance 79 oven
71 appliance 80 toaster
72 appliance 81 sink
73 appliance 82 refrigerator
74 indoor 84 book
75 indoor 85 clock
76 indoor 86 vase
77 indoor 87 scissors
78 indoor 88 teddybear
79 indoor 89 hairdrier
80 indoor 90 toothbrush

在了解了一个json文件内容后,其他文件内容就好理解多了,同样的方法打开json文件查看其他标注文件内容。

使用接口

官网Dataset->Download中已经提供了COCO API地址以供下载使用该数据集的api接口,不过该版本windows环境下的兼容好像做的不行,所以找了另外一个win环境下的接口下载https://github.com/philferriere/cocoapi,该仓库对win的兼容做了一些小的修改,根据说明配置安装好pycocotools,主要步骤就是

  1. 下载该仓库压缩包文件
  2. cd到PythonAPI文件夹,
    运行一下命令,安装pycocotools即可
python setup.py build_ext install

也可以根据readme文件中指导安装。cd到git常用的文件夹,使用命令

$ pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI

显示以下结果则安装成功。安装过程遇到问题可以参考一些大佬的解决办法https://blog.csdn.net/u010103202/article/details/87905029、https://www.jianshu.com/p/8658cda3d553

(dlwin36coco) Phil@SERVERP E:\repos
$ pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI
Collecting git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI
  Cloning https://github.com/philferriere/cocoapi.git to c:\users\phil\appdata\local\temp\pip-req-build-jn698z8p
Building wheels for collected packages: pycocotools
  Running setup.py bdist_wheel for pycocotools ... done
  Stored in directory: C:\Users\Phil\AppData\Local\Temp\pip-ephem-wheel-cache-rde3oevt\wheels\69\2b\12\2fa959e49f73d26cff202c2f4e5079096c9c57c8a8509fd75c
Successfully built pycocotools
Installing collected packages: pycocotools
Successfully installed pycocotools-2.0

至此我们就对coco数据集内容与使用api的下载安装有了初步的了解,可以尝试在模型中使用coco数据集进行训练了,下篇博文链接中较详细得记录了coco api的使用方法。

你可能感兴趣的:(目标检测数据集,深度学习)