MS COCO数据集
简介MS COCO数据集是目标检测领域中另一个非常有名的大型数据集(前面介绍过 PASCAL VOC ),其中COCO是Common Objects in COntext的缩写,由微软公司...
简介
MS COCO数据集是目标检测领域中另一个非常有名的大型数据集(前面介绍过 PASCAL VOC ),其中COCO是Common Objects in COntext的缩写,由微软公司构建,其中包含了detection、segmentation、keypoints等任务,目前主要的赞助者有Microsoft、Facebook、Google等大厂。
与 PASCAL VOC数据集相比,MS COCO中的图片数据,目标更多,尺寸更小且图片背景更加复杂,因此,在此数据集上的任务就显得更难。对于现在的检测算法来讲,在MS COCO上的检测结果俨然成为了衡量模型好坏的事实标准。
MS COCO总共包含91个stuff categories,80个object cagegories也就是我们常说的物体类别,下图是与PASCAL VOC的一个类别及数据量对比

评估标准
MS COCO的评估标准比PASCAL VOC更加严格,跟PASCAL VOC使用mAP不同,MS COCO的主要评价指标是AP

从上图中可以看到:
-
MS COCO中的AP是在10个IOU(0.5开始,步长0.05,直到0.95) 层面以及80个类别层面的平均值 -
针对三种不同大小(
small、medium、large)提出了不同的测量标准 -
除了
AP,还提出了AR即(Average Recall)的评价标准,它的计算方法跟AP是类似的
标注格式
不同于PASCAL VOC,一张图片对应一个xml文件,MS COCO是直接将所有图片以及对应的bbox信息写在了一个json文件里。标注的json文件是这样的
{
"info": info,
"images": [image],
"annotations": [annotation],
"licenses": [license],
"categories": [category]
}
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,
}
{
"id": int,
"name": str,
"supercategory": str,
"keypoints": [str],
"skeleton": [edge]
}
annotation{
"id": int,
"image_id": int,
"category_id": int,
"segmentation": RLE or [polygon],
"area": float,
"bbox": [x,y,width,height],
"iscrowd": 0 or 1,
}
这里有几个关键字,解释一下
-
info:记录数据集的基本信息 -
license:版权信息,也就是图片的出处 -
images:包含每一张图片的信息,主要包括文件名、宽、高、id等 -
categories:类别信息,id编号从1开始,0是背景,还有个supercategory,比如说狗和猫,supercategory就是动物 -
annotations:训练集(或测试集)中bbox的数量
MS COCO数据集中共有3种标注类型,分别是object instances、object keypoints和image captions,其中,info、licenses和images三种结构是共享的,在不同的json文件中这三个类型是一样的,而annotation和category是不同的
数据集下载
主要有2014和2017两个数据集,2014年的数据用于Detection目标检测、Captioning字幕标注、Keypoints关键点检测三个任务中,而2017年的数据在此基础之上,多了Stuff和Panoptic分割任务。
train2017val2017test2017
标注工具
推荐 labelme,直接使用 pip install labelme就可以完成安装。使用方法也很简单,跟labelImg差不太多

PASCAL VOC和MS COCO相互转化
可以使用下面这个开源工具 https://github.com/veraposeidon/labelme2Datasets
COCO API
MS COCO提供了相关的API,用来进行数据集的操作,地址是:https://github.com/cocodataset/cocoapi,它提供了Python、Lua和Matlib的接口,这里以Python为例
首先是安装
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
make
下面是官方给出的一个使用示例
from pycocotools.coco import COCO
import numpy as np
import skimage.io as io
import matplotlib.pyplot as plt
import pylab
pylab.rcParams['figure.figsize'] = (8.0, 10.0)
dataDir='..'
dataType='val2017'
annFile='{}/annotations/instances_{}.json'.format(dataDir,dataType)
# 通过instance annotations的json文件得到coco对象
coco=COCO(annFile)
cats = coco.loadCats(coco.getCatIds())
nms=[cat['name'] for cat in cats]
# 输出目标类别
print('COCO categories: \n{}\n'.format(' '.join(nms)))
nms = set([cat['supercategory'] for cat in cats])
# 输出大类别,supercategory
print('COCO supercategories: \n{}'.format(' '.join(nms)))
# get all images containing given categories, select one at random
catIds = coco.getCatIds(catNms=['person','dog','skateboard']);
imgIds = coco.getImgIds(catIds=catIds );
imgIds = coco.getImgIds(imgIds = [324158])
# 得到img对象,图片信息都在这里
img = coco.loadImgs(imgIds[np.random.randint(0,len(imgIds))])[0]
# 读取图片并显示出来
# I = io.imread('%s/images/%s/%s'%(dataDir,dataType,img['file_name']))
# use url to load image
I = io.imread(img['coco_url'])
plt.axis('off')
plt.imshow(I)
plt.show()
代码执行后显示

参考资料
-
https://cocodataset.org/#home
-
https://arxiv.org/abs/1405.0312
-
https://github.com/wkentaro/labelme
-
https://github.com/veraposeidon/labelme2Datasets
-
https://github.com/cocodataset/cocoapi
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)