1. 基本要求

从直观理解,一个目标检测网络性能好,主要有以下表现:

  • 把画面中的目标都检测到——漏检少
  • 背景不被检测为目标——误检少
  • 目标类别符合实际——分类准
  • 目标框与物体的边缘贴合度高—— 定位准
  • 满足运行效率的要求——算得快

下图是从 Tensorflow Object Detection API 的 Model Zoo 中截取的部分模型列表。

算得快这一点通过 Speed 来体现。而其他因素,使用了mAP (mean average Precision) 这一个指标来综合体现。

mean 和 average 都有平均的意思,因此从字面理解,mAP 指标至少从两个方面进行了平均。

2. mAP指标计算

mAP 的计算大致可以分解为以下几步:

阶段 输出 关键变量
针对单个目标 TP、FP、FN IOU(交并比)
针对单个类别 PR-Cureve、AP Confidence(置信度)
针对测试集全集 mAP

2.1 输出检测结果

针对不同类型的目标检测网络,模型推理的原始输出可能的形式多种多样。

首先需要完成目标解码,生成标准化的目标列表,至少包含每个目标的:

  • 类别
  • 2DBBox
  • 置信度

这里的置信度与推理使用时的置信度阈值有差别,没有固定的阈值,只要在该通道有响应,都输出为目标。

不同类型的网络,置信度数值的含义也不同,因此也无法设定一个统一的阈值。

2.2 针对单个目标

针对单个目标,问题简化为分类结果的判定。

首先将 GT (Ground Truth) 和 Predictions 分别按照各自的类别分组。

在每一个类别内,对 GTPredictions 两组数据进行匹配,匹配的依据是 IOU

匹配结果可能有如下几种:

  • TP (True Positive):一个正确的检测,IOU ≥ threshold。即预测的目标分类正确,且边框与 GT 重合度够高。

  • FP (False Positive):一个错误的检测,没有匹配上 GT 的目标,或IOU < threshold。即预测的目标分类不正确,或边框与 GT 重合度不够高。

  • FN (False Negative):漏检的 GT。即没有被匹配上目标的 Ground Truth。

2.3 针对单个类别

完成对整个测试集上每个目标的判断后,分类别统计 PrecisionRecall

  • Precision:准确率(查准率),模型只找正确目标的能力。

    Precision = TP / (TP + FP),其中 TP+FP 即模型找到的所有目标。

  • Recall:召回率(查全率),模型找到所有目标的能力。

    Recall = TP / (TP + FN),其中 TP+FN 即所有的 GT

在单个目标的处理步骤中,只需要记录TP。则对于所有检测目标,非TP即为FP,对于所有 GT,非TP即为FN。

当设定不同的 Confidence 阈值时,输出的检测目标数量不同,由此计算得到的 PrecisionRecall 也不同。

根据不同的阈值,可以得到一系列 PrecisionRecall 的值,连起来即可得到PR曲线。

在实际操作中,将所有目标按照置信度从高到低排序,每一步都只累加一个目标,统计当前的P-R值。

PR曲线示例如上图所示。

PR曲线会有折线的原因。每累加一步,如果:

  • 当前累加的目标是FP,则 Recall 值不变, Precision 值变小,对应图中竖直向下的线段;

  • 当前累加的目标是TP,则 Recall 和 Precision 都变大,对应图中斜向右上方的线段。

2.4 针对全集

至此,针对每一个类别,都计算得到一条PR曲线。

PR曲线与x轴所围成的面积,即为当前类别的AP值。

Average 是指对不同 Confidence 阈值下的结果进行平均。

所有类别AP值的均值,即为 mAP。

mean 是指对不同类别之间结果进行平均。

3. 存在问题及改进思路

3.1 问题

(1)误检/漏检少、分类准、定位准,这些要求并没有在 mAP 的整个计算过程中一直传导到最终结果。

首先按照目标类别进行分类处理。

在对单个目标的处理中,将IOU作为匹配的指标,将检测到的目标二分类为TP/FP。在选定IOU阈值后,TP/FP的分配也就确定了。在后续的步骤中,目标被抽象为正确/错误两类,但正确或错误的程度被忽略了。

下图为 IOU=0.5 时的极限情况示意:

类似的IOU值实际可能代表的不同情况:

在对所有目标的处理中,主要考察不同的 Confidence 阈值下,检测出正确目标的能力。

因此,误检/漏检少、分类准、定位准这几个要求是按照一种串行的方式,分阶段组织起来的。

(2)问题是多样化的,只用一个指标,没法知道目前的性能瓶颈在哪里。

根据 mAP 的高低,我们只能较为概括地知道网络整体性能的好坏,但比较难分析问题具体在哪。

举几个例子:

  • 如果网络输出的框很贴合,选择合适的 Confidence 阈值时,检出和召回也较均衡,但是目标的类别判断错误较多。由于首先根据类别结果分类处理,只要类别错了,定位、检出和召回都很好,mAP 指标也不会高。但从结果观察,并不能很明确知道,问题出在类别判断上。

    比如 Faster-RCNN 系列网络,如果 RPN 部分效果很好,但是 RCNN 部分效果很差,只根据 mAP, 是无法判断出来的。

  • 如果两个网络的其他性能表现都类似,但是输出框的定位精度不同。对于大部分判定为 TP 的目标,一个网络的目标 IOU 值很高,框非常贴合 GT;另一个网络的目标 IOU 值刚刚超过阈值。理论上这样两个网络计算出来的 mAP 值是类似的,但实际使用的表现是有差别的。

(3)mAP 指标关注的点,与实际应用时关注的点,并不完全吻合

mAP 会统计所有 Confidence 值下的 PR值,而实际使用时,会设定一个 Confidence 阈值,低于该阈值的目标会被丢弃,这部分目标在统计 mAP 时也会有一定的贡献。部分针对比赛刷榜的涨点技巧,会关注这部分检测结果对 mAP 的影响。

此外,在 ADAS 应用(特别是车辆检测)中一些比较关心的点,mAP 指标并没有很好地体现。比如:

  • 最关心正前方近处的目标,对远处侧面的目标关注度相对低
  • 关注目标框的下沿和宽度,而对上沿的要求不高
  • 关注连续帧中,同一个目标检测结果的稳定性和连续性
  • 不同的类别错判,严重程度不同(比如卡车误判为客车问题不大,行人误判为车辆问题就比较大)

3.2 改进

(1)考察不同 IOU 阈值下的性能表现

在 VOC 标准的 mAP 计算中,只取 IOU=0.5 一个阈值。

MS-COCO 标准对此进行了改进,取0.5:0.05:0.95等间隔的11个阈值,分别统计:

  • AP:在所有11个 IOU 阈值上计算出来的 mAP 的均值(最主要的度量指标)
  • AP@.5IOU:阈值取0.5时的 mAP 值(等价于 VOC mAP)
  • AP@.75IOU:阈值取0.75时的 mAP 值

此外还针对目标大小分别进行了统计:

  • AP(small):像素面积小于322的目标,在所有11个 IOU 阈值上的AP
  • AP(medium):像素面积介于322和962之间的目标,在所有11个 IOU 阈值上的AP
  • AP(medium):像素面积大于962的目标,在所有11个 IOU 阈值上的AP

此外,还有 AR (Average Recall) 相关的一系列指标。

可见, COCO mAP 对检测性能进行了更全面的评估,改进了单一 IOU 阈值的问题。

COCO mAP 的计算可以直接使用pycocotools,将检测结果按照规定的格式提供,即可自动完成计算。

(2)统一训练和评测的指标

在网络训练过程中,location 分支的输出通常会用IOU Loss去进行优化,目前已经升级到DIOUCIOU

那么在测试过程中,也可以将 IOU 指标替换为类似 DIOU 或 CIOU 的版本,实现更合理的评价,以及训练和评测的统一。

(3)设计更多自定义的指标

mAP 是一个基准指标,属于规定动作,可以用来比较不同网络,包括与开源模型、外部团队开发的模型等进行比较。

此外,基于我们关心的模型性能表现,可以设计一些额外的指标。包括:

  • mAP 计算过程中,可拆分出来的的一些中间指标
  • mAP 没有涵盖到的指标

(4)模型使用时的阈值选择

使用模型进行推理时,在目标解码过程中涉及 Confidence 阈值的选取。通常是采用一刀切的方式,选择一个统一的阈值。

在 mAP 的计算过程中,会输出每个类别的PR曲线。一个典型PR曲线的示意如下:

根据PR曲线,既可以找到一个数学意义上的最优点,也可以根据实际使用时,对于误检和漏检的不同容忍程度,选定一个权衡值。

可以根据每个类别的不同情况,选取不同的 Confidence 阈值,来让每一个类别的检测结果达到最优。

在实际操作中,可先根据 class 通道的结果,判定类别,再根据 conf 通道的结果和不同的阈值,筛选检出的目标。

对于类别性质差异较大,类别不均衡现象较为严重的案例,可以实现更理想的输出。

比如,在ADAS应用中,对于车辆目标、行人目标、交通标识目标的识别要求可能存在差异。根据各自的PR曲线去定制阈值,是一个更合理的选择。

参考:

  1. https://zhuanlan.zhihu.com/p/94597205
  2. https://www.jianshu.com/p/d7a06a720a2b
  3. https://www.cnblogs.com/laozhanghahaha/p/12383363.html

目标检测性能评价——关于mAP计算的思考的更多相关文章

  1. 目标检测中的mAP

    一.IOU的概念 交集和并集的比例(所谓的交集和并集,都是预测框和实际框的集合关系).如图: 二.Precision(准确率)和Recall(召回率)的概念 对于二分类问题,可将样例根据其真实类别和预 ...

  2. 评价目标检测(object detection)模型的参数:IOU,AP,mAP

    首先我们为什么要使用这些呢? 举个简单的例子,假设我们图像里面只有1个目标,但是定位出来10个框,1个正确的,9个错误的,那么你要按(识别出来的正确的目标/总的正确目标)来算,正确率100%,但是其实 ...

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

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

  4. 目标检测算法Faster R-CNN

    一:Faster-R-CNN算法组成: 1.PRN候选框提取模块: 2.Fast R-CNN检测模块. 二:Faster-R-CNN框架介绍 三:RPN介绍 3.1训练步骤:1.将图片输入到VGG或Z ...

  5. 【目标检测】用Fast R-CNN训练自己的数据集超详细全过程

    目录: 一.环境准备 二.训练步骤 三.测试过程 四.计算mAP 寒假在家下载了Fast R-CNN的源码进行学习,于是使用自己的数据集对这个算法进行实验,下面介绍训练的全过程. 一.环境准备 我这里 ...

  6. 定位、识别;目标检测,FasterRCNN

    定位: 针对分类利用softmax损失函数,针对定位利用L2损失函数(或L1.回归损失等) 人关节点检测 针对连续变量和离散变量需要采用不同种类的损失函数. 识别: 解决方案: 1.利用滑动窗口,框的 ...

  7. 平均精度均值(mAP)——目标检测模型性能统计量

    在机器学习领域,对于大多数常见问题,通常会有多个模型可供选择.当然,每个模型会有自己的特性,并会受到不同因素的影响而表现不同. 每个模型的好坏是通过评价它在某个数据集上的性能来判断的,这个数据集通常被 ...

  8. 目标检测模型的性能评估--MAP(Mean Average Precision)

    目标检测模型中性能评估的几个重要参数有精确度,精确度和召回率.本文中我们将讨论一个常用的度量指标:均值平均精度,即MAP. 在二元分类中,精确度和召回率是一个简单直观的统计量,但是在目标检测中有所不同 ...

  9. 目标检测评价指标(mAP)

    常见指标 precision 预测出的所有目标中正确的比例 (true positives / true positives + false positives). recall 被正确定位识别的目标 ...

随机推荐

  1. 「NGK每日快讯」2021.1.11日NGK第69期官方快讯!

  2. JUC并发集合类CopyOnWriteList

    CopyOnWriteList简介 ArrayList是线程不安全的,于是JDK新增加了一个线程并发安全的List--CopyOnWriteList,中心思想就是copy-on-write,简单来说是 ...

  3. efficient c++核心点

    整本书写的有点啰嗦,读下核心要点就好. 转载自:https://www.cnblogs.com/opama/p/6446523.html 这是一本讲C++性能优化的书,我差点以为是effective ...

  4. 09_MySQL数据库的索引机制

    CREATE TABLE t_message( id INT UNSIGNED PRIMARY KEY, content VARCHAR(200) NOT NULL, type ENUM(" ...

  5. Differences between Stack and Heap

    本文转载自Differences between Stack and Heap Stack vs Heap So far we have seen how to declare basic type ...

  6. Elasticsearch简介、倒排索引、文档基本操作、分词器

    lucene.Solr.Elasticsearch 1.倒排序索引 2.Lucene是类库 3.solr基于lucene 4.ES基于lucene 一.Elasticsearch 核心术语 特点: 1 ...

  7. Linux安装与使用

    1.安装 1.1安装VMware 1.1.1VM12版本安装 1)下载:网盘:链接:https://pan.baidu.com/s/1Jnr--KIy3bSTvRhtB8nfiQ 提取码:czna 2 ...

  8. HTTPS:网络安全攻坚战

    本文为<三万长文50+趣图带你领悟web编程的内功心法>第五个章节. 5.HTTPS 我们知道,明文传输和不安全是HTTP的其中一个特点,但是随着越来越多机密的业务交易转移到线上,如银行转 ...

  9. Virtual DOM 简直就是挥霍

    彻底澄清"Virtual DOM 飞快"的神话. 注意:原文发表于2018-12-27,随着框架不断演进,部分内容可能已不适用. 近年来,如果你有使用过 JavaScript 框架 ...

  10. LeetCode-二叉搜索树的范围和

    二叉搜索树的范围和 LeetCode-938 首先需要仔细理解题目的意思:找出所有节点值在L和R之间的数的和. 这里采用递归来完成,主要需要注意二叉搜索树的性质. /** * 给定二叉搜索树的根结点 ...