对于使用机器学习解决的大多数常见问题,通常有多种可用的模型。每个模型都有自己的独特之处,并随因素变化而表现不同。

每个模型在“验证/测试”数据集上来评估性能,性能衡量使用各种统计量如准确率(accuracy),精确率(precision),召回率(recall)等。选择的统计量通常针对特定应用场景和用例。 对于每个应用场景,选择一个能够客观比较模型的度量指标非常重要。

本文将介绍目标检测(Object Detection)问题中的最常用评估指标-Mean Average Precision(平均精确率),即mAP。

大多数时候,这些指标很容易理解和计算。例如,在二元分类中,精确率 P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP​和召回率 R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP​是一个一个简单直观的统计量。然而,目标检测是一个非常不同且有趣的问题。即使你的目标检测器在图片中检测到猫,但如果你无法定位,它也没有用处。由于你要预测的是图像中各个物体是否出现及其位置,如何计算mAP将非常有趣。

在讲解mAP之前,我们先定义目标检测问题。

目标检测问题

在目标检测问题中,给定一个图像,找到它所包含的物体,找到它们的位置并对它们进行分类。目标检测模型通常是在一组特定的类集合上进行训练的,所以模型只会定位和分类图像中的那些类。另外,对象的位置通常采用矩形边界框表示。因此,目标检测涉及图像中物体的定位和分类。


下面所述的Mean Average Precision特别适用于同时预测物体位置及类别的算法。 因此,从图1可以看出,它对评估定位模型、目标检测模型和分割模型非常有用。

评估目标检测模型

mAP?mAP!
目标检测问题中的每个图片都可能包含一些不同类别的物体。如前所述,需要评估模型的物体分类和定位性能。因此,用于图像分类问题的标准指标precision不能直接应用于此。 这就是为什么需要mAP。

Ground Truth
对于任何算法,评估指标需要知道ground truth(真实标签)数据。 我们只知道训练、验证和测试数据集的ground truth。对于目标检测问题,ground truth包括图像中物体的类别以及该图像中每个物体的真实边界框。

这里给出了一个实际图片(jpg、png等格式),以及相应的文本注释(边界框坐标 (x, y, w, h) 和类别c),如图中红色框以及文本标签所示。

对于这个特殊例子,模型在训练时需要原始的图片:

以及ground truth的3个坐标及类别(这里假定图片大小是1000x800px,所有的坐标值都是以像素为单位的近似值):

下面让我们动一下手,去看如何计算mAP。这里我们不谈论不同的目标检测算法,假定我们已经有了一个训练好的模型,现在只需要在验证集上评估其性能。

mAP含义及计算

前面展示了原始图像和以及对应的ground truth。训练集和验证集中所有图像都以此方式标注。

训练好的目标检测模型会给出大量的预测结果,但是其中大多数的预测值都会有非常低的置信度(confidence score),因此我们只考虑那些置信度高于某个阈值的预测结果。

将原始图片送入训练好的模型,在经过置信度阈值筛选之后,目标检测算法给出带有边界框的预测结果:

现在,由于我们人类是目标检测专家,我们可以知道这些检测结果大致正确。但我们如何量化呢?我们首先需要判断每个检测的正确性。这里采用IoU(Intersection over Union),它可以作为评价边界框正确性的度量指标。 这是一个非常简单的指标。从名称看,有些人会发现这个名字是自解释的,但我们需要更好的解释。这里会以简短的方式解释IoU。

IoU(交并比)

IoU是预测框与ground truth的交集和并集的比值。这个量也被称为Jaccard指数,并于20世纪初由Paul Jaccard首次提出。为了得到交集和并集,我们首先将预测框与ground truth放在一起,如图所示。

对于每个类,预测框和ground truth重叠的区域是交集,而横跨的总区域就是并集。其中horse类的交集和并集如下图所示(这个例子交集比较大):

其中蓝绿色部分是交集,而并集还包括橘色的部分。那么,IoU可以如下计算:

鉴别正确的检测结果并计算precision和recall

为了计算precision和recall,与所有机器学习问题一样,我们必须鉴别出True Positives(真正例)、False Positives(假正例)、True Negatives(真负例)和 False Negatives(假负例)。

为了获得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数据集所用的指标。

为了计算Recall,我们需要Negatives的数量。由于图片中我们没有预测到物体的每个部分都被视为Negative,因此计算True Negatives比较难办。但是我们可以只计算False Negatives,即我们模型所漏检的物体。

另外一个需要考虑的因素是模型所给出的各个检测结果的置信度。通过改变置信度阈值,我们可以改变一个预测框是Positive还是 Negative,即改变预测值的正负性(不是box的真实正负性,是预测正负性)。基本上,阈值以上的所有预测(Box + Class)都被认为是Positives,并且低于该值的都是Negatives。

对于每一个图片,ground truth数据会给出该图片中各个类别的实际物体数量。我们可以计算每个Positive预测框与ground truth的IoU值,并取最大的IoU值,认为该预测框检测到了那个IoU最大的ground truth。然后根据IoU阈值,我们可以计算出一张图片中各个类别的正确检测值(True Positives, TP)数量以及错误检测值数量(False Positives, FP)。据此,可以计算出各个类别的precision:
既然我们已经得到了正确的预测值数量(True Positives),也很容易计算出漏检的物体数(False Negatives, FN)。据此可以计算出Recall(其实分母可以用ground truth总数):

计算mAP

mAP这个术语有不同的定义。此度量指标通常用于信息检索和目标检测领域。然而这两个领域计算mAP的方式却不相同。这里我们只谈论目标检测中的mAP计算方法。

在目标检测中,mAP的定义首先出现在PASCAL Visual Objects Classes(VOC)竞赛中,这个大赛包含许多图像处理任务。

前面我们已经讲述了如何计算Precision和Recall,但是,正如前面所述,至少有两个变量会影响Precision和Recall,即IoU和置信度阈值。IoU是一个简单的几何度量,可以很容易标准化,比如在PASCAL VOC竞赛中采用的IoU阈值为0.5,而COCO竞赛中在计算mAP较复杂,其计算了一系列IoU阈值(0.05至0.95)下的mAP。但是置信度却在不同模型会差异较大,可能在我的模型中置信度采用0.5却等价于在其它模型中采用0.8置信度,这会导致precision-recall曲线变化。为此,PASCAL VOC组织者想到了一种方法来解决这个问题,即要采用一种可以用于任何模型的评估指标。在paper中,他们推荐使用如下方式计算Average Precision(AP):

For a given task and class, the precision/recall curve is computed from a method’s ranked output. Recall is defined as the proportion of all positive examples ranked above a given rank. Precision is the proportion of all examples above that rank which are from the positive class. The AP summarises the shape of the precision/recall curve, and is defined as the mean precision at a set of eleven equally spaced recall levels [0,0.1,…,1]:

可以看到,为了得到precision-recall曲线,首先要对模型预测结果进行排序(ranked output,按照各个预测值置信度降序排列)。那么给定一个rank,Recall和Precision仅在高于该rank值的预测结果中计算,改变rank值会改变recall值。这里共选择11个不同的recall([0, 0.1, …, 0.9, 1.0]),可以认为是选择了11个rank,由于按照置信度排序,所以实际上等于选择了11个不同的置信度阈值。那么,AP就定义为在这11个recall下precision的平均值,其可以表征整个precision-recall曲线(曲线下面积)。

另外,在计算precision时采用一种插值方法(interpolate):

The precision at each recall level r is interpolated by taking the maximum precision measured for a method for which the corresponding recall exceeds r:
The intention in interpolating the precision/recall curve in this way is to reduce the impact of the “wiggles” in the precision/recall curve, caused by small variations in the ranking of examples.

及对于某个recall值r,precision值取所有recall>=r中的最大值(这样保证了p-r曲线是单调递减的,避免曲线出现摇摆):

对于各个类别,分别按照上述方式计算AP,取所有类别的AP平均值就是mAP。这就是在目标检测问题中mAP的计算方法。可能有时会发生些许变化,如COCO数据集采用的计算方式更严格,其计算了不同IoU阈值和物体大小下的AP。

当比较mAP值,记住以下要点:

1.mAP通常是在一个数据集上计算得到的。

2.虽然解释模型输出的绝对量化并不容易,但mAP作为一个相对较好的度量指标可以帮助我们。 当我们在流行的公共数据集上计算这个度量时,该度量可以很容易地用来比较目标检测问题的新旧方法。

3.根据训练数据中各个类的分布情况,mAP值可能在某些类(具有良好的训练数据)非常高,而其他类(具有较少/不良数据)却比较低。所以你的mAP可能是中等的,但是你的模型可能对某些类非常好,对某些类非常不好。因此,建议在分析模型结果时查看各个类的AP值。这些值也许暗示你需要添加更多的训练样本。

参考:https://zhuanlan.zhihu.com/p/37910324
http://tarangshah.com/blog/2018-01-27/what-is-map-understanding-the-statistic-of-choice-for-comparing-object-detection-models/

目标检测的评估指标mAP的那些事儿相关推荐

  1. 绝对不容错过:最完整的检测模型评估指标mAP计算指南(附代码)在这里!

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前言 本文翻译自Measuring Object Detectio ...

  2. 最完整的检测模型评估指标mAP计算指南(附代码)在这里!

    http://baijiahao.baidu.com/s?id=1605049172612184744&wfr=spider&for=pc

  3. 目标检测模型的评估指标mAP详解(附代码)

    https://zhuanlan.zhihu.com/p/37910324 对于使用机器学习解决的大多数常见问题,通常有多种可用的模型.每个模型都有自己的独特之处,并随因素变化而表现不同. 每个模型在 ...

  4. 【目标检测】什么是mAP?如计算模型的mAP?(mAP的相关概念以及求法)

    文章目录 什么是mAP 相关概念 如何得到PR曲线 如何计算AP以及mAP 详细步骤分析 什么是mAP mAP(mean Average Precision 平均精度),是一个经常被用来衡量目标检测模 ...

  5. 目标检测模型的评价指标 mAP

    在使用机器学习解决实际问题时,通常有很多模型可用.每个模型都有自己的怪癖(quirks),并且基于各种因素,性能会有所不同. 模型性能的评定都是在某个数据集上进行的,通常这个数据集被称为 " ...

  6. 《南溪的目标检测学习笔记》——目标检测的评价指标(mAP)

    1 介绍 在本文中我们将介绍目标检测任务中的mAP~ 2 COCO-mAP 在介绍mAP时,我们选择的是COCO-mAP,这是现在最为流行的指标: 关于COCO-mAP的形象解释,请参考视频<霹 ...

  7. KITTI 3D目标检测离线评估工具包说明

    KITTI 3D目标检测离线评估工具包说明 本文是KITTI 3D目标检测离线评估工具包的使用说明和相关代码学习文件,从这里可以下载.更新于2018.09.20. 文章目录 KITTI 3D目标检测离 ...

  8. 目标检测中NMS和mAP指标中的的IoU阈值和置信度阈值

    有时候路走的太远,会忘了为什么要出发. 学习亦如是 在目标检测中,经常看到置信度阈值和IoU阈值这两个关键参数,且NMS计算和mAP计算中都会有这两个,那它们的区别是什么?本文就这个问题做一次总结. ...

  9. 【深度学习】——模型评估指标MAP计算实例计算

    目录 一.知识储备 1.IOU--交集面积与并集面积之比 2.混淆矩阵(TP.FP.FN.TN) 问题1:上面的TP等具体是如何计算得到的? 3.精度precision&召回率recall 二 ...

最新文章

  1. selenium webdriver中执行js(java)
  2. php 如何将字体转为gb,利用php怎么将utf-8与GB2312相互转换
  3. 阿里云云效发布研发协同工具,以新的产研协同工作方式助力实现BizDevOps
  4. JavaScript中带有示例的Math.max()方法
  5. mysql 存储过程 sql变量_SQL基础-变量 存储过程和函数
  6. web前端从无到有html标签,.NET MVC 扩展 HtmlHelper 从无到有(一)
  7. shell基础命令管理
  8. [Git] GitHub 上使用 md 的几点问题
  9. SQL语句学习之路7
  10. 防盗链Nginx设置图片防盗链,设置无效的请仔细看红字
  11. 实验一 第1关:从自然数中取3个数进行组合之循环算法
  12. sticky 失效问题
  13. 微信QQ支付宝三合一收款二维码实现原理
  14. 网上兼职编程赚钱的那点事
  15. 写给成为高手之路上的朋友们
  16. 计算机样板教程,FrontPage使用教程之样板主题
  17. 小米商城html代码_小米6 WiFi验证门户中的RCE漏洞
  18. python写软件实例-30分钟学会用Python编写简单程序
  19. 电商宝一个月用户增长10万 创SaaS行业新纪录
  20. 高速多通道误码测试仪BERT

热门文章

  1. leetcode 两数相加,在ubuntu上编译通过,显示结果了,在leetcode上报错了,找错在哪?
  2. AndroidStudio相对布局
  3. 用C语言实现一个矩阵
  4. 线程池的四种拒绝策略
  5. 数据采集简繁体快速转换
  6. FFT频谱分析(matlab代码)
  7. php7 zip libzip,Docker中Centos7+PHP7.4.6安装libzip
  8. 钉钉“宜搭”,产品经理的需求管理利器
  9. c++设计地铁售票系统_用C++(用三个类)地铁自动售票系统,,我不会弄,有人弄过么...
  10. Python-从笛卡尔坐标插值到极坐标