本文简要介绍了COCO数据集的下载、数据内容及使用API接口。比较冗长,适合入门了解。
MS COCO全称Microsoft Common Objects in Context,是一个包含了目标检测、分割、字幕的数据集。包含了以下特点:目标分割、情景中的识别、超像素Stuff分割(相较于Thing Class,即人、汽车、大象这类目标为主的目标检测任务,此任务更专注于Stuff Class,即草、墙、天空此类目标)、33万幅影像(其中超过20万幅有标注信息)、150万对象实例,80个object类别,91个stuff类别,每个影像5个字幕,25万个标注了关键点的人体目标。
官网地址:http://cocodataset.org(可能需要科学上网)。
打开官网后,依次浏览Dataset,Tasks,Evaluate可以看到数据集,比赛任务、以及提交结果的格式及提交方式等内容。我们最关心的是数据的下载、数据内容与格式及使用方法,按照这个顺序依次来了解该数据集。
点击Dataset->Download可以看到有数据使用的API接口、Images影像数据、Annotations标注数据。
在概览中可以看到主要有2014和2017两个数据集,2014年的数据用于Detection(目标检测)、Captioning(字幕标注)、Keypoints(关键点检测)三个任务中,而2017年的数据在此基础之上,多了Stuff和Panoptic分割任务,因此2017年多了Stuff和Panoptic两种annotations标注数据。
分别点击2014 Train images、2014 Val images、2014 Train/Val Annotations,下载2014年训练影像、验证影像、训练和验证标签,Test测试影像用于比赛,没有标注信息,在平时自己玩模型训练和测试时不需要,可不下载。
下载完后的压缩包:
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类别标签、全景分割标签。
下载后的压缩包:
标注数据集主要就两部分内容,影像数据和标注数据,我们使用数据时最关心的就是标注数据的格式与内容,在此以2014的数据为例,介绍COCO数据集的标注格式。
分别解压2014Train/Val/Annotations数据后得到train2014,val2014,annotations三个文件夹,其中train2014中存有82783张图片,val2014中存有40504张图片,图片格式均为jpg格式。
图片示例:
Annotations文件夹中就是最重要的标注数据,cations,instances,person_keypoints依次为字幕、目标检测、人体关键点的标注信息,本文主要关注目标检测的内容,以instance_train2014.json文件中的内容说明记录标注的格式。
在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内容也不同:
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,
}]
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.
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],
}]
annotation{
"id" : int,
"image_id" : int,
"caption" : str,
}
仅仅通过这些说明,很难get到具体的数据样式(反正我看完了还是一塌糊涂。。。),最直观的方法还是打开一个标注文件,然后一条条的查看其中记录的数据,我们打开标注文件夹中的instances_train2014.json文件:
数据量非常大,该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。
所有的image信息结束后,接下来是使用许可license信息(图片中所选内容即为license信息),这时候已经到了六万多行。。。lincense信息中每一个大括号记录每一个许可的链接url,序号id,名称name。instances_train2014.json文件中共有8种license,截图中均已列出。
记录完licenses信息后就是真正的标注信息annotations 了,也是我们最需要关注的信息。每一个大括号里记录一个object对象的标注信息,依次为标注分割信息segmentation用polygon多边形或者RLE格式标注对象轮廓,面积area,是否是多目标聚集对象iscrowd,影像序号image_id,边界框bbox,类别序号category_id,该对象序号id。以上内容为一个标注对象的信息,通过这种数据结构,存储了所有标注对象的信息。
json文件的最后,就是类别信息categories,这时候已经到了17万行了。类别信息记录了所有类别的上级类别supercategory,序号id,名称name三个信息,每个大括号里记录一个类别。
因为看到在有的博客中提到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,主要步骤就是
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的使用方法。