目标检测中的mAP
一、IOU的概念
交集和并集的比例(所谓的交集和并集,都是预测框和实际框的集合关系)。如图:

二、Precision(准确率)和Recall(召回率)的概念
对于二分类问题,可将样例根据其真实类别和预测类别组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)、假反例(false negative)
记为TP、FP、TN、FN,显然有TP + FP + TN + FN = 样例总数。这里着重提一下真正例的含义:预测是正例,实际上也是正例。主要它是准确率P和召回率R的分子
混淆矩阵如下:

准确率P和召回率R分别定义为:


预测的正例:TP + FP
真实的正例:TP + FN
P的含义:真正的正例占预测正例的比例。衡量的是一个分类器预测出的正例是真实正例的概率
R的含义:真正的正例占真实正例的比例。衡量的是一个分类器找出所有正例的能力。
准确率和召回率是一对矛盾的度量。一般来说,准确率高,则召回率低;准确率低,则召回率高。光靠精度还不能衡量分类器的好坏程度。比如50个正样本和50个负样本,我的分类器把49个正样本和50个负样本都分为负样本,剩下一个正样本分为正样本。这样我的准确率也是100%,但是这样的分类器根本就不能用。
两个极端:如果召回率100%,就是所有的正例都被找出来了。(非常简单,就是将所有的例子都判为正例。你看,你不是要我找到所有的正例吗?我不管好坏,全部判为正例,这样所有的正例不都找到了吗?),但是这样的分类器没用,因为它一个反例都没有排除。
如果召回率为0%,就是一个正例都没有找到。同样,将所有的例子判为反例,这样的分类器同样没用。
三、PR曲线
我们将分类器判别的正例分为TP、FP,我们凭什么这么干?IoU阈值就是评价标准。如果IoU的值超过一定的阈值,即分类器认为找到一个正例。而这个阈值是可以设置的。
由此可知,召回率和准确率受到了阈值设置的影响,而且阈值对于两个指标的影响是相反的:阈值增加则准确率增加,召回率降低,反之亦然。那么我们可以通过设置一系列的阈值来得到一系列的(准确率,召回率)的指标对,然后利用这些指标对画出坐标图,这就是PR曲线。
四、举例计算mAP
有3张图如下,要求算法找出face。蓝色框代表实际框(label),绿色框代表算法给出的预测框(prediction),旁边红色的小字代表的是置信度,设定第一张图的预测框为pre1,第一张的标签框叫label1。第二张、第三张同理。



1. 根据IoU计算TP、FP
首先,我们计算每张图的pre和label的IoU,根据IoU是否大于0.5来判断该pre是属于TP、还是FP。显然,pre1是TP、pre2是FP,pre3是TP
2. 排序
根据每个pre的置信度进行从高到低排序,这里pre1、pre2、pre3从高到低
3. 在不同置信度阈值下获得Precision和Recall
首先设置阈值为0.9,无视所有小于0.9的pre。那么检测器检出所有框pre即TP+FP(预测的正例) = 1,并且pre1是TP,那么Precision=1/1,所以Recall=1/3。这样就得到一组P、R值。
然后设置阈值为0.8,无视所有小于0.8的pre。那么检测器检出所有框pre即TP+FP(预测的正例) = 2,并且pre1是TP,那么Precision=1/2。而真实的正例有三个,所以Recall=1/3。这样就又得到一组P、R值。
然后设置阈值为0.7,无视所有小于0.7的pre。那么检测器检出所有框pre即TP+FP(预测的正例) = 3,并且pre1、pre3是TP,那么Precision=2/3。而真实的正例有三个,所以Recall=2/3。这样就又得到一组P、R值。
4. 绘制PR曲线并计算AP值
根据上面3组PR值绘制PR曲线如下,然后每个"峰值点"往左画一条线段直到与上一个峰值点的垂直线相交。这样画出来的红色线段与坐标轴围起来的面积就是AP值
AP = 1*1/3 + (1/3)*(2/3) = 5/9 ≈ 0.56

5. 计算mAP
而mAP就是所有AP的平均值。比如有两个类,A类的AP为0.5,B类的AP为0.3,则mAP = (0.5 + 0.3) / 2 = 0.4
参考地址:
https://blog.csdn.net/hsqyc/article/details/81702437
目标检测中的mAP的更多相关文章
- 目标检测算法(1)目标检测中的问题描述和R-CNN算法
目标检测(object detection)是计算机视觉中非常具有挑战性的一项工作,一方面它是其他很多后续视觉任务的基础,另一方面目标检测不仅需要预测区域,还要进行分类,因此问题更加复杂.最近的5年使 ...
- 目标检测 1 : 目标检测中的Anchor详解
咸鱼了半年,年底了,把这半年做的关于目标的检测的内容总结下. 本文主要有两部分: 目标检测中的边框表示 Anchor相关的问题,R-CNN,SSD,YOLO 中的anchor 目标检测中的边框表示 目 ...
- 目标检测中的IOU和CIOU原理讲解以及应用(附测试代码)
上期讲解了目标检测中的三种数据增强的方法,这期我们讲讲目标检测中用来评估对象检测算法的IOU和CIOU的原理应用以及代码实现. 交并比IOU(Intersection over union) 在目标检 ...
- 目标检测中的anchor-based 和anchor free
目标检测中的anchor-based 和anchor free 1. anchor-free 和 anchor-based 区别 深度学习目标检测通常都被建模成对一些候选区域进行分类和回归的问题.在 ...
- 目标检测中特征融合技术(YOLO v4)(下)
目标检测中特征融合技术(YOLO v4)(下) ASFF:自适应特征融合方式 ASFF来自论文:<Learning Spatial Fusion for Single-Shot Object D ...
- 目标检测中特征融合技术(YOLO v4)(上)
目标检测中特征融合技术(YOLO v4)(上) 论文链接:https://arxiv.org/abs/1612.03144 Feature Pyramid Networks for Object De ...
- Adaboost原理及目标检测中的应用
Adaboost原理及目标检测中的应用 whowhoha@outlook.com Adaboost原理 Adaboost(AdaptiveBoosting)是一种迭代算法,通过对训练集不断训练弱分类器 ...
- 目标检测中proposal的意义
在目标检测中,从很早就有候选区域的说法,也是在2008年可能就有人使用这个方法,在2014年的卷积神经网络解决目标检测问题的文章中,这个候选框方法大放异彩,先前的目标检测方法主要集中在使用滑动窗口的方 ...
- 目标检测中的bounding box regression
目标检测中的bounding box regression 理解:与传统算法的最大不同就是并不是去滑窗检测,而是生成了一些候选区域与GT做回归.
随机推荐
- JDK源码笔记--Object
public final native Class<?> getClass(); public native int hashCode(); public boolean equals(O ...
- PHP反序列化漏洞学习
serialize:序列化 unserialize: 反序列化 简单解释: serialize 把一个对象转成字符串形式, 可以用于保存 unserialize 把serialize序列化后的字符串变 ...
- 【转】Python3 configparse模块(配置)
[转]Python3 configparse模块(配置) ConfigParser模块在python中是用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(s ...
- Tensorflow的Queue读取数据机制
参考链接:http://www.sohu.com/a/148245200_115128
- shell文本左右对齐排版【转】
文本左右对齐排版 有文本4.txt如下: 111111111111111111111 98912 张三 222222222222222222 150020 李四四 333333333333333333 ...
- C#基础巩固之基础类型
注:以下笔记全摘录自CLR via C# 3 1.所有类型都从System.Object派生:”运行时“要求每个类型最终都从System.Object派生. 2.System.Object提供了四个公 ...
- WebStorm 关联 TFS(转)
1.下载插件 TFS integration 2.链接TFS 服务器 3.创建工作区 4. 5.选择一个 工作环境 6.最重要的有点是在VCS里面要选择一个默认的提交方式!!!
- 027_磁盘维护命令du等
一.du查看磁盘空间大小排除指定目录的的用法. 下面的例子为排除/data目录,因为/data目录是单独挂载的磁盘 [pe@jyall-3 /data]$ sudo du --exclude='/da ...
- 文本内容查找grep、文件查找find、正则匹配
一.文本内容查找工具 grep grep egrep (文本过滤) fgrep (不支持正则) 对文本的内容按照指定的匹配模式基于行来进行筛选 格式 grep [选项] 模式 文件 选 ...
- cdh5.15集群添加spark2.3服务(parcels安装)
背景: 机器系统:redhat7.3:已经配置了http服务 集群在安装的时候没有启动spark服务,因为cdh5.15自带的spark不是2.0,所以直接进行spark2.3的安装 参考文档:htt ...