一、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. 目标检测算法(1)目标检测中的问题描述和R-CNN算法

    目标检测(object detection)是计算机视觉中非常具有挑战性的一项工作,一方面它是其他很多后续视觉任务的基础,另一方面目标检测不仅需要预测区域,还要进行分类,因此问题更加复杂.最近的5年使 ...

  2. 目标检测 1 : 目标检测中的Anchor详解

    咸鱼了半年,年底了,把这半年做的关于目标的检测的内容总结下. 本文主要有两部分: 目标检测中的边框表示 Anchor相关的问题,R-CNN,SSD,YOLO 中的anchor 目标检测中的边框表示 目 ...

  3. 目标检测中的IOU和CIOU原理讲解以及应用(附测试代码)

    上期讲解了目标检测中的三种数据增强的方法,这期我们讲讲目标检测中用来评估对象检测算法的IOU和CIOU的原理应用以及代码实现. 交并比IOU(Intersection over union) 在目标检 ...

  4. 目标检测中的anchor-based 和anchor free

    目标检测中的anchor-based 和anchor free 1.  anchor-free 和 anchor-based 区别 深度学习目标检测通常都被建模成对一些候选区域进行分类和回归的问题.在 ...

  5. 目标检测中特征融合技术(YOLO v4)(下)

    目标检测中特征融合技术(YOLO v4)(下) ASFF:自适应特征融合方式 ASFF来自论文:<Learning Spatial Fusion for Single-Shot Object D ...

  6. 目标检测中特征融合技术(YOLO v4)(上)

    目标检测中特征融合技术(YOLO v4)(上) 论文链接:https://arxiv.org/abs/1612.03144 Feature Pyramid Networks for Object De ...

  7. Adaboost原理及目标检测中的应用

    Adaboost原理及目标检测中的应用 whowhoha@outlook.com Adaboost原理 Adaboost(AdaptiveBoosting)是一种迭代算法,通过对训练集不断训练弱分类器 ...

  8. 目标检测中proposal的意义

    在目标检测中,从很早就有候选区域的说法,也是在2008年可能就有人使用这个方法,在2014年的卷积神经网络解决目标检测问题的文章中,这个候选框方法大放异彩,先前的目标检测方法主要集中在使用滑动窗口的方 ...

  9. 目标检测中的bounding box regression

    目标检测中的bounding box regression 理解:与传统算法的最大不同就是并不是去滑窗检测,而是生成了一些候选区域与GT做回归.

随机推荐

  1. DataGrid 查出一个列 按要求显示格式 例如:操作人(地点)

    这是转换DataGrid显示格式之后 连接字符串的方法 显示:操作人(地点) public static ObservableCollection<CListModel> AllUserL ...

  2. Web从入门到放弃<1>

    HTML大法: <01> <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  3. k64 datasheet学习笔记50---GPIO

    1.前言 GPIO模块支持8bit 16bit 32bit访问,当被配置为GPIO功能时,GPIO数据方向和数据寄存器控制了每个引脚的输出方向和输出数据 不管GPIO配置为何种功能,GPIO输入寄存器 ...

  4. MIPI协议学习总结(一)【转】

    转自:https://www.cnblogs.com/EaIE099/p/5200341.html 一.MIPI 简介: MIPI(移动行业处理器接口)是Mobile Industry Process ...

  5. UrlDecode

    void Decode(char *p){int i=0;while(*(p+i)){ if ((*p=*(p+i)) == '%') { *p=*(p+i+1) >= 'A' ? ((*(p+ ...

  6. js模板引擎-art-template常用总结(转)

    原文:https://www.cnblogs.com/shiyou00/p/6841801.html art-template javascript 模板引擎,官网:https://github.co ...

  7. Apollo-3.0本地编译

    Apollo-3.0本地编译 用docker编译所用的dev.x86_64.dockerfile文件(具体位置在apollo/docker/build)中有所有的依赖库或包, 还会执行一些shell脚 ...

  8. shell 学习之if语句

    bash中如何实现条件判断?条件测试类型:    整数测试    字符测试    文件测试 一.条件测试的表达式:    [ expression ]  括号两端必须要有空格    [[ expres ...

  9. win10安装MarkdownPad 2报错This view has crashed的处理及md简单语法

    # #开头是段落的意思 不带#号是普通内容 # 下划线的写法是两个#号 ## # 列表的写法,以*号开头 * spring * summer * autumn * winter # 以竖线开头 > ...

  10. jetty去掉项目名称访问

    对于web项目,访问路径是否包含项目名称等修改访问路径的配置方式: 我所使用的是maven进行管理,只需要在pom.xml中进行如下配置 <!-- jetty插件 jetty:run--> ...