COCO数据集介绍

COCO数据集主页:http://cocodataset.org
COCO数据集是大规模的数据集,用于Object Detection + Segmentation + Localization + Captioning。
数据集下载:http://cocodataset.org/#download
目前常用的是2017 Train images [118K/18GB]2017 Val images [5K/1GB]。这些图片可以对应如下的标注信息应用:
2017 Train/Val annotations [241MB]:

  • instances:目标检测
  • captions:图像描述
  • person_keypoints:关键点检测

2017 Stuff Train/Val annotations [1.1GB]: 素材分割(Stuff Segmentation)
2017 Panoptic Train/Val annotations [821MB]: 全景分割(Panoptic Segmentation)
还有测试集2017 Test images [41K/6GB],这部分数据不知道annotations,分为test-dev集和test集,相当于A,B榜,前者可以提交到evaluation server去查看结果并得到反馈,后者用于评判最终的比赛结果。

五部分json格式的详细信息可见如下链接:http://cocodataset.org/#format-data
在这里重点Object Detection相关的标注信息:

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,
}]

每个对象实例的标注都包含一系列字段,包括对象的类别ID(category_id)和分段掩码(segmentation)。 segmentation的编码格式取决于实例是表示单个对象(iscrowd = 0,在这种情况下使用polygen)还是对象集合(iscrowd = 1,在这种情况下使用RLE)。 请注意,单个对象(iscrowd = 0)可能需要多个多边形,例如,如果被遮挡。 人群注释(iscrowd = 1)用于标记大组对象(例如一群人)。 此外,为每个对象提供一个封闭的边界框(框坐标是从左上角的图像角测量的,并且是0索引的)。 其中“bbox”属性为实例的边界框(bounding box)。这四个数字的含义为左上角横坐标左上角纵坐标宽度高度,这个框为大致画出。最后,标注结构的 categories 字段存储 category id 到 category 和 supercategory 名称的映射。

Object Detection Metrics

参考链接:http://cocodataset.org/#detection-eval

计算mAP

参考链接:https://blog.csdn.net/l7H9JA4/article/details/80745028
训练好的目标检测模型会给出大量的预测结果,但是其中大多数的预测值都会有非常低的置信度(confidence score),因此我们只考虑那些置信度高于某个阈值的预测结果。为了获得True Positives and False Positives,我们需要使用IoU。计算IoU,我们从而确定一个检测结果(Positive)是正确的(True)还是错误的(False)。最常用的阈值是0.5,即如果IoU> 0.5,则认为它是True Positive,否则认为是False Positive。而COCO数据集的评估指标建议对不同的IoU阈值进行计算,但为简单起见,我们这里仅讨论一个阈值0.5,这是PASCAL VOC数据集所用的指标。

以下给出一个样例,假设一共有6个正样本需要被预测到,则可以根据置信度得到所有样本的预测排序,以下的例子中在第20位才能全部预测到6个样本。

11-point interpolated AP

VOC数据集在2007年提出的mAP计算方法。首先设定一组阈值,[0, 0.1, 0.2, …, 1],对于每一个recall值r∈[0,0.1,0.2,…,1]r\in [0, 0.1, 0.2, …, 1]r∈[0,0.1,0.2,…,1],在满足,r~≥r\tilde{r}\geq rr~≥r取r~\tilde{r}r~中对应的最大precision,r~\tilde{r}r~即:
pinter(r)=max⁡r~:r~≥rp(r~)p_{inter}(r)=\max_{\tilde{r}:\tilde{r}\geq r}p(\tilde{r})pinter​(r)=r~:r~≥rmax​p(r~)
根据上图的实际数据,r~=[1/6,2/6,3/6,…,6/6]\tilde{r}=[1/6, 2/6, 3/6, …, 6/6]r~=[1/6,2/6,3/6,…,6/6],对应的pinter(r)=[1,1,1,1,3/6,3/6,4/7,5/11,5/11,6/16,6/16]p_{inter}(r)=[1,1,1,1,3/6,3/6,4/7,5/11,5/11,6/16,6/16]pinter​(r)=[1,1,1,1,3/6,3/6,4/7,5/11,5/11,6/16,6/16]
将11组阈值对应的precision求平均即可得到AP AP=111∑r∈[0,0.1,0.2,…,1]pinter(r)AP=\frac{1}{11}\sum_{r\in [0, 0.1, 0.2, …, 1]}p_{inter}(r)AP=111​r∈[0,0.1,0.2,…,1]∑​pinter​(r)
AP衡量的是学出来的模型在每个类别上的好坏,mAP衡量的是学出的模型在所有类别上的好坏,得到AP后mAP的计算就变得很简单了,就是取所有AP的平均值

2010新方法

VOC数据集在2010之后却使用了所有数据点,而不是仅使用11个recall值来计算AP。对mmm个正例,那么我们会得到mmm个recall值(1m,2m,...,mm,)(\frac{1}{m},\frac{2}{m},...,\frac{m}{m},)(m1​,m2​,...,mm​,),对于每个recall值rrr,我们可以计算出对应r~>r\tilde{r}> rr~>r的最大precision,然后对这mmm个precision值取平均即得到最后的AP值。对于上述用例来说,最终的AP为:AP=111[1+1+3/6+4/7+5/11+6/16]AP=\frac{1}{11}[1+1+3/6+4/7+5/11+6/16]AP=111​[1+1+3/6+4/7+5/11+6/16]

COCO指标

COCO给出了如下的12个指标可以使用:


以上的AP全都代表mAP,10 IoU thresholds of .50:.05:.95.的平均为最终的mAP。small,medium和large根据面积分为小,中和大目标,area用segmentation mask的像素数来衡量。AR is the maximum recall given a fixed number of detections per image,AR代表最大的recall值在给定检测次数的情况下。

来自COCO官方实例:
(1)导入包

import matplotlib.pyplot as plt
from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval
import numpy as np
import skimage.io as io
import pylab
pylab.rcParams['figure.figsize'] = (10.0, 8.0)

(2)以目标检测框bbox为例:

annType = ['segm','bbox','keypoints']
annType = annType[1]      #specify type here
prefix = 'person_keypoints' if annType=='keypoints' else 'instances'
print 'Running demo for *%s* results.'%(annType)

(3)初始化COCO ground truth文件:

#initialize COCO ground truth api
dataDir='../'
dataType='val2014'
annFile = '%s/annotations/%s_%s.json'%(dataDir,prefix,dataType)
cocoGt=COCO(annFile)

(4)设定结果文件路径

#initialize COCO detections api
resFile='%s/results/%s_%s_fake%s100_results.json'
resFile = resFile%(dataDir, prefix, dataType, annType)
cocoDt=cocoGt.loadRes(resFile)

(5)取出前100张并进行打乱:

imgIds=sorted(cocoGt.getImgIds())
imgIds=imgIds[0:100]
imgId = imgIds[np.random.randint(100)]

(6)进行评测

# running evaluation
cocoEval = COCOeval(cocoGt,cocoDt,annType)
cocoEval.params.imgIds  = imgIds
cocoEval.evaluate()
cocoEval.accumulate()
cocoEval.summarize()

输出结果:

Running per image evaluation...
DONE (t=0.46s).
Accumulating evaluation results...
DONE (t=0.38s).Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.505Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.697Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.573Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.586Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.519Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.501Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.387Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.594Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.595Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.640Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.566Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.564

数据集COCO在目标检测的介绍与使用相关推荐

  1. 使用合成数据集来做目标检测:目标检测的介绍

    作者:Sergey Nikolenko 编译:ronghuaiyang 来源:AI公园 导读 本文讨论使用生成数据集来做目标检测的一些基础概念. 今天,我们开始一系列专门讨论一个特定的机器学习问题,这 ...

  2. 干货|使用合成数据集来做目标检测

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨Sergey Nikolenko 来源丨AI公园 编辑丨极市平 ...

  3. kitti数据集在3D目标检测中的入门

    数据集官网下载地址: http://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=3d 3D目标检测数据集由7481个训练图像 ...

  4. CCPD数据集处理(目标检测和文本识别)

    文章目录 前言 一.CCPD数据集介绍 二.下载地址 三.格式解读 四.生成对应lable 总结 前言   最近,用到了CCPD数据集,但是开源的CCPD数据集并不是拿来就能用的,所以自己就参考图片格 ...

  5. Win10下用TensorFlow训练自己的数据集来做目标检测

    本文主要来源于YouTube博主 EdjeElectronics的视频https://www.youtube.com/watch?v=Rgpfk6eYxJA (对于视频看不了的朋友,我把视频录制下来放 ...

  6. rcnn 回归_基础目标检测算法介绍:CNN、RCNN、Fast RCNN和Faster RCNN

    每次丢了东西,我们都希望有一种方法能快速定位出失物.现在,目标检测算法或许能做到.目标检测的用途遍布多个行业,从安防监控,到智慧城市中的实时交通监测.简单来说,这些技术背后都是强大的深度学习算法. 在 ...

  7. voc2007数据集_【目标检测数据集】PASCAL VOC制作

    [VOC2007+2012] 数据集地址:https://pjreddie.com/projects/pascal-voc-dataset-mirror/ PASCAL VOC为图像识别和分类提供了一 ...

  8. 基于MMRotate训练自定义数据集 做旋转目标检测 2022-3-30

    本文目录 简述 1.MMrotate下载 2.环境安装 3.自定义数据集制作 3.1 roLabelImg 打标签 3.2 生成DOTA数据集格式的标签 3.3 数据集裁剪(split) 4.修改配置 ...

  9. 开源数据集汇总 | 小目标检测、图像分类、图像识别

    编辑丨极市平台 宠物图像数据集 数据集下载地址:http://m6z.cn/5TAgdC 一个包含 37 个类别的宠物数据集,每个类别大约有 200 张图像.这些图像在比例.姿势和照明方面有很大的变化 ...

最新文章

  1. 编译nginx时的两个报错
  2. 5分钟从零构建第一个 Apache Flink 应用
  3. Android Studio 超级简单的打包生成apk
  4. 机器学习中的度量——字符串距离
  5. 3.过滤——比较过滤结果、2D中的移动平均线_2
  6. 小区居民投诉要拆除通信基站 三大运营商联手“封杀”...
  7. wps二次开发无法创建对象wps.application的解决方案
  8. mysql2008 密钥_怎么查看sql server 2008密钥
  9. Hive面试题汇总大全
  10. 简单的 thymeleaf 前端网页模板
  11. 留在一线,逃离一线?我从上海举家回成都的生活经历告诉你
  12. 非常棒的口才训练方法
  13. 前端清空标签内子类的数据
  14. DAB-Deformable-DETR代码学习记录之模型构建
  15. 如何在 Linux 下关闭 i386 架构
  16. 连接正常(或者能上QQ)但是上不了网
  17. 手机获取仪器数据_手机电子数据提取操作规范(20151120)
  18. 【专精特新周报】北交所进入“百企”时代 ,上市后备军充足;贝特瑞拟定增资50亿元,创北交所最大规模再融资记录;上海:年内……...
  19. 数论——————最简分数
  20. windows下nodejs下载及环境变量配置,运行vue项目

热门文章

  1. 彻底卸载2345王牌输入法的方法
  2. javaweb接入QQ登录
  3. 水卡解码 ,pn532
  4. 注意GetMessage()的返回值
  5. 新手上路,请多关照!
  6. pycharm如何修改字体大小和背景成护眼色
  7. 四川省食品药品学校计算机考试,【四川省食品药品学校】学费标准|分数线|招办电话|学校地址 - 高铁职业学校...
  8. Mybatis传递单个参数
  9. note20220419
  10. 程序员财富自由之路 自媒体篇 | 3000字干货分享