mAP

Author Avatar
cooscao 5月 27, 2018

mAP - 目标检测模型中的性能评估

目标检测问题是指:给定一个图像,找到其中的目标,找到它们的位置,并且对目标进行分类。目标检测模型通常是在一组固定的类上进行训练的,所以模型只能定位和分类图像中的那些类。此外,目标的位置通常是边界矩阵的形式。所以,目标检测需要涉及图像中目标的位置信息和对目标进行分类。 均值平均精度(Mean Average Precision)对于评估模型定位性能、目标检测性能和分割模型性能都是很有用的。

精确率和召回率

要理解精确率(presicion)和召回率(recall)首先要理解以下概念:

  • TP ——- 将正类预测为正类数
  • FN ——- 将正类预测为负类数
  • FP ——— 将负类预测为正类数
  • TN ——- 将负类预测为负类数

举个例子:

假设我们手上有60个正样本,40个负样本,我们要找出所有的正样本,系统查找出50个,其中只有40个是真正的正样本,计算上述各指标 :

  • TP = 40 (检测出的40个为正)
  • FN = 20 (有60个正,只检测出40个为正,所以60-40=20)
  • FP = 10 (找出了50个,但只有40为正,50-40=10)
  • TN = 30 (找出中的50个,只有40个为正,也即其中10个为负,所以40-10=30)

精确率是针对预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP),也就是

召回率是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN):

简单来说,精确率是指对于检测出的样本中,为正的样本所占比例。而召回率是指本来的为正的样本中,检测出的正样本所占的比例。

所以:

精确率(precision) = $ TP/(TP+FP) = 4/5$

召回率(recall) = $ TP/(TP+FN) = 2/3 $

额外:

准确率(accuracy) = 预测对的/所有 = $(TP+TN)/(TP+FN+FP+TN) = \frac{7}{10} $

IoU

loU(交并比)是模型所预测的检测框和真实(ground truth)的检测框的交集和并集之间的比例。这个数据也被称为Jaccard指数。

对于图像中的GroundTruth框$A$,其检测出的矩形框为$B$,则其IoU(Intersection over Union)可以计算如下:

AP

  • 对于PASCAL_VOC2007, 首先设定一组阈值,$[0, 0.1, 0.2, …, 1]$。然后对于$recall$大于每一个阈值(比如$recall>0.3$),我们都会得到一个对应的最大$precision$。这样,我们就计算出了$11$个$precision$。通过对这11个散点做出PR图,AP即为这11个$precision$对于每个$recall$值所做的曲线下的面积。这种方法英文叫做$11-point interpolated average precision$。
  • 当然PASCAL VOC CHALLENGE自2010年后就换了另一种计算方法。新的计算方法假设这$N$个样本中有$M$个正例,那么我们会得到M个$recall$值$(1/M, 2/M, …, M/M)$,对于每个$recall$值$r$,我们可以计算出对应$(r’ > r)$的最大$precision$,然后对这$M$个$precision$值同样做出PR曲线,求此曲线下的面积。

实际多类别分类任务中,我们通常不满足只通过top-5(top-#是指通过score排序得到的预测序列)来衡量一个模型的好坏,而是需要知道从top-1到top-N(N是所有测试样本个数)对应的precision和recall。显然随着我们选定的样本越来也多,recall一定会越来越高,而precision整体上会呈下降趋势。把recall当成横坐标,precision当成纵坐标,即可得到常用的precision-recall曲线。这个例子的precision-recall曲线如下:

mAP

  • 求出每个类别的AP,之后只需要对每个类别的AP相加求平均值,即得到mAP。

具体可参考这篇博文