目标检测中的AP,mAP

目标检测中的AP,mAP

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

IoU(Intersection over union

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

Iou的定义

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

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

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

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

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

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

Precision=\frac{TP}{TP+FP }

Recall=\frac{TP}{TP+FN}

PR曲线

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

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

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

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

TP=2 FP=1 TN=3

Precision=\frac{2}{2+1}=0.67

Recall=\frac{2}{2+3}=0.4

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

PR曲线

AP(Average Precision)

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

AP=\int_{0}^{1}p(r)dr

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

PR曲线的平滑处理

用公式来描述就是 P_{smooth}(r)=\max_{r' >= r}{P(r')} 。用该公式进行平滑后再用上述公式计算AP的值。

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

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

AP = \frac{1}{11}\sum_{0,0.1...1.0}{P_{smooth}(i)}

Pascal Voc 2008 AP计算方式

在我们的例子里

AP = \frac{1}{11}(5\times0.1 + 4\times0.57+2\times0.5)=0.753

Area under curve

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

AP=\int_{0}^{1}p_{smooth}(r)dr

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,还有 AP_{50} , AP_{75} 等值,这些事代表什么意思呢?

AP_{50}:IoU阈值为0.5时的AP测量值

AP_{75}:IoU阈值为0.75时的测量值

AP_S : 像素面积小于 32^2 的目标框的AP测量值

AP_M : 像素面积在32^2- 96^2之间目标框的测量值

AP_L : 像素面积大于 96^2 的目标框的AP测量值

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

参考文献

发布于 2019-10-31 12:15