AP (Average precision) 是主流的目标检测模型的评价指标。再介绍 AP 之前,我们先来回顾一下需要用到的几个概念 precision,recall 以及 IoU。

IoU(Intersection over union

交并比 IoU 衡量的是两个区域的重叠程度,是两个区域重叠部分面积占二者总面积(重叠部分只计算一次)的比例。如下图,两个矩形框的 IoU 是交叉面积(中间图片红色部分)与合并面积(右图红色部分)面积之比。

目标检测中的AP,mAP - 图1

Iou 的定义

在目标检测任务中,如果我们模型输出的矩形框与我们人工标注的矩形框的 IoU 值大于某个阈值时(通常为 0.5)即认为我们的模型输出了正确的

精准率与召回率(Precision & Recall)

Precision 和 Recall 最早是信息检索中的概念,用来评价一个信息检索系统的优劣。Precision 就是检索出来的条目中(比如:文档、网页等)有多大比例是我们需要的,Recall 就是所有我们需要的网页的条目有多大比例被检索出来了。用到目标检测领域,假设我们有一组图片,里面有若干待检测的目标,Precision 就代表我们模型检测出来的目标有多打比例是真正的目标物体,Recall 就代表所有真实的目标有多大比例被我们的模型检测出来了。

我们如何来计算 Precision 和 Recall 的值呢。

目标检测中的AP,mAP - 图2

目标检测 TP,FP, TN, FN 含义

目标检测中的AP,mAP - 图3

图释 TP, FP, TN,FN

首先我们根据上图的规则计算出 TP,FP,TN 的值,则 Precision,Recall 可表示为

目标检测中的AP,mAP - 图4

目标检测中的AP,mAP - 图5

PR 曲线

我们当然希望检测的结果 P 越高越好,R 也越高越好,但事实上这两者在某些情况下是矛盾的。比如极端情况下,我们只检测出了一个结果,且是准确的,那么 Precision 就是 100%,但是 Recall 就很低;而如果我们把所有结果都返回,那么必然 Recall 必然很大,但是 Precision 很低。

因此在不同的场合中需要自己判断希望 P 比较高还是 R 比较高。如果是做实验研究,可以绘制 Precision-Recall 曲线来帮助分析。

这里我们举一个简单的例子,假设我们的数据集中共有五个待检测的物体,我们的模型给出了 10 个候选框,我们按照模型给出的置信度由高到低对候选框进行排序。

目标检测中的AP,mAP - 图6

表格第二列表示该候选框是否预测正确(即是否存在某个待检测的物体与该候选框的 iou 值大于 0.5)第三列和第四列表示以该行所在候选框置信度为阈值时,Precision 和 Recall 的值。我们以表格的第三行为例进行计算:

目标检测中的AP,mAP - 图7
目标检测中的AP,mAP - 图8
目标检测中的AP,mAP - 图9

目标检测中的AP,mAP - 图10

目标检测中的AP,mAP - 图11

由上表以 Recall 值为横轴,Precision 值为纵轴,我们就可以得到 PR 曲线。我们会发现,Precision 与 Recall 的值呈现负相关,在局部区域会上下波动。

目标检测中的AP,mAP - 图12

PR 曲线

AP(Average Precision)

顾名思义 AP 就是平均精准度,简单来说就是对 PR 曲线上的 Precision 值求均值。对于 pr 曲线来说,我们使用积分来进行计算。

目标检测中的AP,mAP - 图13

在实际应用中,我们并不直接对该 PR 曲线进行计算,而是对 PR 曲线进行平滑处理。即对 PR 曲线上的每个点,Precision 的值取该点右侧最大的 Precision 的值。

目标检测中的AP,mAP - 图14

PR 曲线的平滑处理

用公式来描述就是 目标检测中的AP,mAP - 图15
。用该公式进行平滑后再用上述公式计算 AP 的值。

Interplolated AP(Pascal Voc 2008 的 AP 计算方式)

Pascal VOC 2008 中设置 IoU 的阈值为 0.5,如果一个目标被重复检测,则置信度最高的为正样本,另一个为负样本。在平滑处理的 PR 曲线上,取横轴 0-1 的 10 等分点(包括断点共 11 个点)的 Precision 的值,计算其平均值为最终 AP 的值。

目标检测中的AP,mAP - 图16

目标检测中的AP,mAP - 图17

Pascal Voc 2008 AP 计算方式

在我们的例子里

目标检测中的AP,mAP - 图18

Area under curve

上述方法有两个缺陷,第一个是使用 11 个采样点在精度方面会有损失。第二个是,在比较两个 AP 值较小的模型时,很难体现出两者的差别。所以这种方法在 2009 年的 Pascalvoc 之后便不再采用了。在 Pascal voc 2010 之后,便开始采用这种精度更高的方式。绘制出平滑后的 PR 曲线后,用积分的方式计算平滑曲线下方的面积作为最终的 AP 值。

目标检测中的AP,mAP - 图19

目标检测中的AP,mAP - 图20

Pascal voc 2010-2012 AP 计算方式

COCO mAP

最新的目标检测相关论文都使用 coco 数据集来展示自己模型的效果。对于 coco 数据集来说,使用的也是 Interplolated AP 的计算方式。与 Voc 2008 不同的是,为了提高精度,在 PR 曲线上采样了 100 个点进行计算。而且 Iou 的阈值从固定的 0.5 调整为在 0.5 - 0.95 的区间上每隔 0.5 计算一次 AP 的值,取所有结果的平均值作为最终的结果。

比如我们看一下 YOLOv3 的作者在论文中展示的在 coco 数据集上的实验结果

目标检测中的AP,mAP - 图21

我们发现除了 AP,还有 目标检测中的AP,mAP - 图22
, 目标检测中的AP,mAP - 图23
等值,这些事代表什么意思呢?

目标检测中的AP,mAP - 图24
:IoU 阈值为 0.5 时的 AP 测量值

目标检测中的AP,mAP - 图25
:IoU 阈值为 0.75 时的测量值

目标检测中的AP,mAP - 图26
: 像素面积小于 目标检测中的AP,mAP - 图27
的目标框的 AP 测量值

目标检测中的AP,mAP - 图28
: 像素面积在目标检测中的AP,mAP - 图29

  • 目标检测中的AP,mAP - 图30
    之间目标框的测量值

目标检测中的AP,mAP - 图31
: 像素面积大于 目标检测中的AP,mAP - 图32
的目标框的 AP 测量值

注:通常来说 AP 是在单个类别下的,mAP 是 AP 值在所有类别下的均值。在这里,在 coco 的语境下 AP 便是 mAP,这里的 AP 已经计算了所有类别下的平均值,这里的 AP 便是 mAP。

参考文献

mAP (mean Average Precision) for Object Detectionmedium.comCoco APIgithub.com小纸屑:详解 object detection 中的 mAPzhuanlan.zhihu.com目标检测中的AP,mAP - 图33
YOLOv3pjreddie.com准确率(Precision)、召回率(Recall)以及综合评价指标(F1-Measure )www.cnblogs.com目标检测中的AP,mAP - 图34

https://zhuanlan.zhihu.com/p/88896868