Recall, Precision, AP, mAP的计算方法(看一次就懂系列)

Recall, Precision, AP, mAP的计算方法(看一次就懂系列)

 mAP全称是mean Average Precision,这里的Average Precision,是在不同recall下计算得到的,所以要知道什么是mAP,要先了解recall(召回率)和precision(精确率)。

Recall and Precision

 recall和precision是二分类问题中常用的评价指标,通常以关注的类为正类,其他类为负类,分类器的结果在测试数据上有4种情况:

Recall, Precision, AP, mAP的计算方法(看一次就懂系列)_第1张图片
Recall, Precision, AP, mAP的计算方法(看一次就懂系列)_第2张图片
Recall, Precision, AP, mAP的计算方法(看一次就懂系列)_第3张图片
举例说明:
 假设我们在数据集上训练了一个识别猫咪的模型,测试集包含100个样本,其中猫咪60张,另外40张为小狗。测试结果显示为猫咪的一共有52张图片,其中确实为猫咪的共50张,也就是有10张猫咪没有被模型检测出来,而且在检测结果中有2张为误检。因为猫咪更可爱,我们更关注猫咪的检测情况,所以这里将猫咪认为是正类:
所以TP=50,TN=38,FN=10,FP=2,P=50/52,R=50/60,acc=(50+38)/(50+38+10+2)

为什么要引入recall和precision?

 recall和precision是模型性能两个不同维度的度量:
 在图像分类任务中,虽然很多时候考察的是accuracy,比如ImageNet的评价标准。但具体到单个类别,如果recall比较高,但precision较低,比如大部分的汽车都被识别出来了,但把很多卡车也误识别为了汽车,这时候对应一个原因。如果recall较低,precision较高,比如检测出的飞机结果很准确,但是有很多的飞机没有被识别出来,这时候又有一个原因。

Recall度量的是「查全率」所有的正样本是不是都被检测出来了。比如在肿瘤预测场景中,要求模型有更高的recall,不能放过每一个肿瘤。
Precision度量的是「查准率」在所有检测出的正样本中是不是实际都为正样本。比如在垃圾邮件判断等场景中,要求有更高的precision,确保放到回收站的都是垃圾邮件。

mAP(mean Average Precision)

 在查找资料的过程中,发现从信息检索的角度出发更容易理解mAP的含义。
 在信息检索当中,比如我们搜索一个条目,相关的条目在数据库中一共有5条,但搜索的结果一共有10条(包含4条相关条目)。这个时候精确率precision=返回结果中相关的条目数/返回总条目数,在这里等于4/10。召回率recall=返回结果中相关条目数/相关条目总数,在这里等于4/5。但对于一个搜索系统,相关条目在结果中的顺序是非常影响用户体验的,我们希望相关的结果越靠前越好。比如在这个例子中,4个条目出现在位置查询一(1,2,4,7)就比在查询二(3,5,6,8)效果要好,但两者的precision是相等的。这时候单单一个precision不足以衡量系统的好坏,于是引入了AP(Average Precision)——不同召回率上的平均precision。对于上面两个例子。
查询一:
Recall, Precision, AP, mAP的计算方法(看一次就懂系列)_第4张图片
查询二:
Recall, Precision, AP, mAP的计算方法(看一次就懂系列)_第5张图片
 AP(查询一) = (1+1+3/4+4/7+0)/5 = 0.664

 AP(查询二) = (1/3+2/5+3/6+4/8+0)/5 = 0.347

 这个时候mAP = (0.664+0.347)/2 = 0.51

 分析:对于上面的例子,最好的结果就是5个条目全部被检索到,并且分别排在rank=1、2、3、4、5的位置,这时AP=1。所以可以得出即使条目被全部检索到,但结果的先后顺序决定了一个系统的好坏。这个结论会用在目标检测当中。

目标检测中的mAP

 图像分类任务通常用accuracy来衡量模型的准确率,对于目标检测任务,比如测试集上的所有图片一共有1000个object(这里的object不是图片的数量,因为一张图片中可能包含若干个object),两个模型都正确检测出了900个object(IOU>规定的阈值)。与图像分类任务不同的是,目标检测因为可能出现重复检测的情况,所以不是一个n to n的问题。
 在上面的例子中也就不能简单用分类任务的accuracy来衡量模型性能,因为模型A有可能是预测了2000个结果才中了900个,而模型B可能只预测了1200个结果。模型B的性能显然要好于A,因为模型A更像是广撒网,误检测的概率比较高。想象一下如果将模型A用在自动驾驶的汽车上,出现很多误检测的情况对汽车的安全性和舒适性都有很大影响。
 那在目标检测任务中,应该怎样衡量模型的性能?其中一个标准就是信息检索那样,不仅要衡量检测出正确目标的数量,还应该评价模型是否能以较高的precision检测出目标。也就是在某个类别下的检测,在检测出正确目标之前,是不是出现了很多判断失误。AP越高,说明检测失误越少。对于所有类别的AP求平均就得到mAP了。

MAP计算方法:

 这里讲一下VOC2007和VOC2010的计算方法。

voc2007的计算方法:

 在计算AP时,首先要把结果按照置信度排序(排序是为了方便计算,后面看例子很好懂不难),公式如下:
在这里插入图片描述
 其实也叫11点法,就是将结果先按置信度顺序排序,然后分别将recall大于0,大于0.1,大于0.2的…大于1的数据找出来,然后分别取这11组数据中的precision最大的找出来,这时,我们将会得到11个precision值。将其加起来除11j即为mAP了。

voc2010的计算方法:

 比起07年,10年以后的新方法是取所有真实的recall值,按照07年的方法得到所有recall/precision数据点以后,计算recall/precision曲线下的面积。差不多的方法吧,改成了求面积。

举例说明:
 目标检测中,这里假设我们算一个目标的AP。我们有以下输出(BB表示Bounding Box序号,IOU>0.5时GT=1):
Recall, Precision, AP, mAP的计算方法(看一次就懂系列)_第6张图片
 因此,我们有 TP=5 (BB1, BB2, BB5, BB8, BB9), FP=5 (重复检测到的BB1也算FP)。除了表里检测到的5个GT以外,我们还有2个GT没被检测到,因此: FN = 2. 这时我们就可以按照Confidence的顺序给出各处的PR值,如下:
Recall, Precision, AP, mAP的计算方法(看一次就懂系列)_第7张图片
Recall, Precision, AP, mAP的计算方法(看一次就懂系列)_第8张图片
Recall, Precision, AP, mAP的计算方法(看一次就懂系列)_第9张图片

 计算出每个类别的AP以后,对于所有类别的AP取均值就得到mAP了。

参考链接:https://zhuanlan.zhihu.com/p/43068926

你可能感兴趣的:(CV,人工智能,深度学习)