加微信进交流群:xituxiaoshutong100

MS COCO数据集

ML/DL 迷途小书童 0评论

简介

MS COCO数据集是目标检测领域中另一个非常有名的大型数据集(前面介绍过 PASCAL VOC ),其中COCOCommon Objects in COntext的缩写,由微软公司构建,其中包含了detectionsegmentationkeypoints等任务,目前主要的赞助者有MicrosoftFacebookGoogle等大厂。

PASCAL VOC数据集相比,MS COCO中的图片数据,目标更多,尺寸更小且图片背景更加复杂,因此,在此数据集上的任务就显得更难。对于现在的检测算法来讲,在MS COCO上的检测结果俨然成为了衡量模型好坏的事实标准。

MS COCO总共包含91个stuff categories,80个object cagegories也就是我们常说的物体类别,下图是与PASCAL VOC的一个类别及数据量对比

MS COCO

评估标准

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

MS COCO

从上图中可以看到:

  • MS COCO中的AP是在10个IOU (0.5开始,步长0.05,直到0.95) 层面以及80个类别层面的平均值
  • 针对三种不同大小(smallmediumlarge)提出了不同的测量标准
  • 除了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 instancesobject keypointsimage captions,其中,infolicensesimages三种结构是共享的,在不同的json文件中这三个类型是一样的,而annotationcategory是不同的

数据集下载

主要有2014和2017两个数据集,2014年的数据用于Detection目标检测、Captioning字幕标注、Keypoints关键点检测三个任务中,而2017年的数据在此基础之上,多了StuffPanoptic分割任务。

train2017
val2017
test2017

标注工具

推荐 labelme,直接使用 pip install labelme就可以完成安装。使用方法也很简单,跟labelImg差不太多

MS COCO

PASCAL VOC和MS COCO相互转化

可以使用下面这个开源工具 https://github.com/veraposeidon/labelme2Datasets

COCO API

MS COCO提供了相关的API,用来进行数据集的操作,地址是: https://github.com/cocodataset/cocoapi,它提供了PythonLuaMatlib的接口,这里以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()

代码执行后显示

MS COCO

参考资料

喜欢 (1)
发表我的评论
取消评论

表情