背景

在二分类中,常常使用Precision, Recall, ROC 曲线,AUC来评价一个模型的性能,然而这些指标很难对多分类模型进行准确的评价,详见 http://sfau.lt/b5bhMsv
那么在多分类中,我们该怎么评价一个模型对于所有的类别的性能哪,如何才能保证每一个类别都被同等的重视,而不失偏颇,这就是MAP(Mean Average Precision)要做的事情。
MAP,即Mean Average Precision,从名字上看,它是Average Precision(AP)的平均值,那么我们首先来计算AP

MAP的计算

回顾Precision的计算

对于一个二分类问题,对于分类结果,我们根据Groundtruth和Predicted来讲结果分为TP(True Postive), FP(False Postive), TN(True Negative), FN(False Negative)
那么Precision 和 Recall的计算方式如下:
$$Precision=TP/(TP + FP)$$
$$Recall=TP/(TP + FN)$$

计算AP

什么是AP?


AP是指的在所有Recall的可能取值情况下,得到的所有的Precision的平均值。即假设某一类的GroundTruth中有100个正样本,那么根据分类阈值的划分,Recall将会有100个取值,即[0.01, 0.02, ... 1.0], 我们可以使用$$[R_{0.01}, R_{0.02}, ... ,R_{1.0}]$$,对应于Precision, 则有$$[P_{0.01}, P_{0.02}, ..., P_{1.0}]$$,那么$$AP = \sum_{\alpha=0.01}^{1.0}{P_\alpha}$$
以Recall为横轴,Precision为纵轴画出来一条曲线,即PR曲线,

我们可以看到该曲线是单调递减的,随着Recall逐渐增大,Precision逐渐减小。
详细计算过程如下:

  1. 对于任意一个二分类的分类结果,我们对其分类结果将依照分类得分进行从大到小的排序,此时,我们可以取当TP=1时,TP=2时,计算响应的FP,FN,然后计算Precision;
  2. 然后对于所有类别我们都可以按照上面这样计算,可以得到所有类别的AP;
  3. 再将所有类别的AP求均值,那么得到的就是MAP;

AP衡量的是我们训练得到的模型在每个类别上的好坏,MAP衡量的是该模型在所有类别上的好坏,
得到AP后,MAP的计算就变得很简单了,就是取所有AP的平均值。

MAP 的应用

信息检索中的应用


在信息检索中,给定一个query,返回N个answer,假设N个answer中有M个是正相关的,那么可以计算Recall=1/M, Recall=2/M,...,Recall=1时所对应的Precision, 将这些Precision进行平均,那么就得到的对于这一个特定的query的AP,那么多个query的AP的均值,就是MAP

目标检测中的应用


在计算机视觉(CV)中,评价一个目标检测系统的性能常常使用MAP,例如在PASCAL VOC 竞赛, MS COCO竞赛中,都是使用MAP来衡量模型的性能。
在目标检测中预测得到的bbox往往数目是不固定的,但是Groundtruth bbox是固定的,那么什么是TP, 什么是FP, 什么是FN哪?
对于预测的所有框,记为DTs(Detection Target), 每一个DT包含它的位置坐标和分类得分,我们按照上面所述的,对DTs按照分类得分由大到小进行排序,为了表示方便,仍旧记为DTs, 对于真实的Ground Truth, 我们记为GTs, 按照顺序,对于DTs中的每一个DT,都计算它和GTs的IOU值,如果最大的IOU值大于阈值,那么就认为检测成功,算作TP,并且最大IOU值的GT被认为是匹配成功,需要将其从GTs中移除;如果该最大的IOU值小于阈值,那么就意味着该DT与所有的GTs都匹配失败,是一个误检,自然就算作FP了;会出现多个检测结果DT同一个GT相匹配,那么分数最高(不是IOU值最高,而是该DT的分类得分)的被认为是TP,其余的检测结果被认为是FP,那么遍历完所有的DTs, 我们就知道哪些是TP,哪些是FP,而此时,如果GTs中仍然还有剩下的(因为匹配上的都被移走了)被认为是FN。