目标检测中常提到的IoU和mAP究竟是什么?
看完这篇就懂了。
IoU
intersect over union,中文:交并比。指目标预测框和真实框的交集和并集的比例。

mAP
mean average precision。是指每个类别的平均查准率的算术平均值。即先求出每个类别的平均查准率(AP),然后求这些类别的AP的算术平均值。其具体的计算方法有很多种,这里只介绍PASCAL VOC竞赛(voc2010之前)中采用的mAP计算方法,该方法也是yolov3模型采用的评估方法,yolov3项目中如此解释mAP,暂时看不明白可以先跳过,最后再回过头来看就能明白了。

比如我们现在要在一个给定的测试样本集中计算猫这个类别的AP,过程如下:
首先,AP要能概括P-R曲线的形状,其被定义为采用如下公式来计算:

那么,我们先来看看P-R曲线是什么:用蓝色笔迹遮住的部分不需要关注。

图中的曲线C就是一条P-R曲线,P表示纵轴的查准率precision,R表示横轴的召回率或称为查全率recall。P-R曲线下的面积可以用于评估该曲线对应的模型的能力,也就是说比较2个目标检测模型哪个更好,可以用P-R曲线面积来比较,面积越大模型越好。然而可能是因为这个面积并不好计算,所以定义了公式(1)来计算出一个叫AP的东西,反正这个东西也能体现出precision和recall对模型能力的综合影响。
从公式(2)可以知晓,Pinterpo(r)表示所有大于指定召回率r的召回率rhat所对应的的p的最大值。大于某个r的rhat有很多,我们要找到这些rhat中所对应的p是最大的那个,然后返回这个p。公式(1)中规定了r会从0-1.0以0.1为步长取11个值,然后将这11个r对应的11个p累加求算术平均值就得到了AP。所以我们要先得到一组rhat和p,这需要我们先了解recall和precision是如何计算的。
我们先来看看P(precision)和R(recall)的计算公式:
precision = TP / (TP+FP)
recall = TP / (TP+FN)
TP是检测对了的正样本,FP是检测错了的正样本,FN是漏检的正样本。
对于目标检测模型一般最后都会输出一个置信度(如果样本图片中有不止一个目标,本例中只选择猫类别的置信度即可),所以可以设置一个置信度阈值,比如0.6,那么高于0.6的就认为该样本被检测为了正样本(即检测为猫),这样我们会得到0.6阈值下的一组正样本。
然后在这组正样本的基础上,设定一个IoU的阈值,其值为0.5(意思是检测为猫的目标的预测边界框和真实边界框的交并比要大于0.5),大于该阈值的认为是TP,其它的认为是FP。然后用测试样本中真实的正样本数量减去TP,就得到了FN。
这样,在置信度阈值为0.6的情况下,我们就得到了一对P(precision)和R(recall),接着我们取不同的置信度阈值,得到更多的P-R对,然后根据公式(2)找到所有大于指定召回率r的召回率rhat所对应的的p的最大值(采用这种方法是为了保证P-R曲线是单调递减的,避免摇摆),作为当前指定召回率r条件下的最大查准率p,然后根据公式(1)计算出AP。这个AP就是猫这个类别的AP,接着我们可以计算其它类别的AP,然后对这些AP求算术平均值,就得到了mAP。
了解了mAP之后,我们就容易理解为什么目标检测模型的度量指标不能像图像分类模型那样直接计算一遍precision和recall,因为目标检测任务中会包含多个类别的目标,并且除了给目标分类,还要预测目标的边界框,所以要加入IoU的概念,并考虑多个类别,而mAP就是在考虑了IoU和多类别之后计算出的度量指标。
参考文献:
http://homepages.inf.ed.ac.uk/ckiw/postscript/ijcv_voc09.pdf
https://github.com/AlexeyAB/darknet
推荐阅读:
目标检测中常提到的IoU和mAP究竟是什么?的更多相关文章
- 目标检测中的IOU和CIOU原理讲解以及应用(附测试代码)
上期讲解了目标检测中的三种数据增强的方法,这期我们讲讲目标检测中用来评估对象检测算法的IOU和CIOU的原理应用以及代码实现. 交并比IOU(Intersection over union) 在目标检 ...
- 目标检测算法(1)目标检测中的问题描述和R-CNN算法
目标检测(object detection)是计算机视觉中非常具有挑战性的一项工作,一方面它是其他很多后续视觉任务的基础,另一方面目标检测不仅需要预测区域,还要进行分类,因此问题更加复杂.最近的5年使 ...
- 目标检测 1 : 目标检测中的Anchor详解
咸鱼了半年,年底了,把这半年做的关于目标的检测的内容总结下. 本文主要有两部分: 目标检测中的边框表示 Anchor相关的问题,R-CNN,SSD,YOLO 中的anchor 目标检测中的边框表示 目 ...
- 【计算机视觉】目标检测中的指标衡量Recall与Precision
[计算机视觉]目标检测中的指标衡量Recall与Precision 标签(空格分隔): [图像处理] 说明:目标检测性能指标Recall与Precision的理解. Recall与Precision ...
- 目标检测中的anchor-based 和anchor free
目标检测中的anchor-based 和anchor free 1. anchor-free 和 anchor-based 区别 深度学习目标检测通常都被建模成对一些候选区域进行分类和回归的问题.在 ...
- Adaboost原理及目标检测中的应用
Adaboost原理及目标检测中的应用 whowhoha@outlook.com Adaboost原理 Adaboost(AdaptiveBoosting)是一种迭代算法,通过对训练集不断训练弱分类器 ...
- 目标检测中proposal的意义
在目标检测中,从很早就有候选区域的说法,也是在2008年可能就有人使用这个方法,在2014年的卷积神经网络解决目标检测问题的文章中,这个候选框方法大放异彩,先前的目标检测方法主要集中在使用滑动窗口的方 ...
- 目标检测中的bounding box regression
目标检测中的bounding box regression 理解:与传统算法的最大不同就是并不是去滑窗检测,而是生成了一些候选区域与GT做回归.
- 目标检测中特征融合技术(YOLO v4)(下)
目标检测中特征融合技术(YOLO v4)(下) ASFF:自适应特征融合方式 ASFF来自论文:<Learning Spatial Fusion for Single-Shot Object D ...
随机推荐
- Python爬虫运用正则表达式
我看到最近几部电影很火,查了一下猫眼电影上的数据,发现还有个榜单,里面有各种经典和热映电影的排行榜,然后我觉得电影封面图还挺好看的,想着一张一张下载真是费时费力,于是突发奇想,好像可以用一下最近学的东 ...
- ajax中的后台返回数据data的意义
- 轻松pick移动开发第一篇,flex布局
一.什么是flex布局 首先提问一个问题,一般童鞋都会让子元素水平居中,那么怎么让子元素垂直居中呢?这里就要用到我们的flex布局了. 1.flex 是 flexible Box 的缩写,意为&quo ...
- 服务注册发现、配置中心集一体的 Spring Cloud Consul
前面讲了 Eureka 和 Spring Cloud Config,今天介绍一个全能选手 「Consul」.它是 HashiCorp 公司推出,用于提供服务发现和服务配置的工具.用 go 语言开发,具 ...
- centos7不能连接外网
1. 首先保证虚拟机是NAT模式 2. 打开cmd窗口,输入ipconfig,查看vmnet8的ipv4地址是多少,DNS也需要记下,后面会用到 注意:vmnet8的ip要与虚拟机的网关IP在同一 ...
- Redis学习总结(九)-- Redis常用技巧
这里会记录下Redis 常用的小技巧 全局使用 redis-cli 等命令 在之前我们都在做 Redis 命令目录下通过 ./redis-cli这种形式访问,如果使用 redis-cli 的话就会报命 ...
- python内建Exception类型
1.Exception类型及分层结构如下: BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Excep ...
- CodeForces 804C Ice cream coloring
Ice cream coloring 题解: 这个题目中最关键的一句话是, 把任意一种类型的冰激凌所在的所有节点拿下来之后,这些节点是一个连通图(树). 所以就不会存在多个set+起来之后是一个新的完 ...
- codeforces 284 D. Cow Program(记忆化搜索)
题目链接:http://codeforces.com/contest/284/problem/D 题意:给出n个数,奇数次操作x,y都加上a[x],偶数次操作y加上a[x],x减去a[x],走出了范围 ...
- poj 1182 食物链(种类并查集 ‘初心者’)
题目链接:http://poj.org/problem?id=1182 借着这题可以好好理解一下种类并查集,这题比较简单但挺经典的. 题意就不解释了,中问题. 关于种类并查集结局方法也是挺多的 1扩增 ...