mAP是mean of Average Precision的缩写,意思是平均精确度(average precision)的平均(mean),是object detection中模型性能的衡量标准。object detection中,由于有物体定位框,分类中的accuracy并不适用,所以才提出了object detection独有的mAP指标,但这也致使mAP没有分类中的accuracy那么直观。但也没有那么复杂,本文将详细解释mAP的计算方法。首先,简单回顾几个基础概念。git
查准率(Precision)是指在全部预测为正例中真正例的比率,也即预测的准确性。 查全率(Recall)是指在全部正例中被正确预测的比率,也即预测正确的覆盖率。 一个样本模型预测按正确与否分类以下:github
则,查准率和查全率计算公式:算法
交并比IoU衡量的是两个区域的重叠程度,是两个区域重叠部分面积占两者总面积(重叠部分只计算一次)的比例。以下图,两个矩形框的IoU是交叉面积(中间图片红色部分)与合并面积(右图红色部分)面积之比。bash
这里须要注意的是IoU=0.5,并不意味着每一个框恰好有50%与另一个框交叉部分,而是每一个框大约有2/3被交叉。有点反直觉。ide
我当初看到IoU,很是疑惑为啥不按交叉面积占每一个框的比例(也即IoA Intersection over Area)取大值计算重叠度,更符合直觉。其实这种算法只反应小图片的被遮盖度,并不能反映互相之间的重叠度,通常状况下不可取。以下图,橙色部分较小,IoA很大,但对于蓝色部分,IoA就很小,只按橙色取IoA显然有失偏驳。性能
物体检测中的每个预测结果包含两部分,预测框(bounding box)和置信几率(Pc)。bounding box一般以矩形预测框的左上角和右下角的坐标表示,即x_min, y_min, x_max, y_max,以下图。置信几率Pc有两层意思,一是所预测bounding box的类别,二是这个类别的置信几率,以下图中的P_dog=0.88,表明预测绿色框为dog,而且置信几率为88%。测试
那么,怎么才叫预测正确呢?显而易见的,必须知足两个条件:ui
而在衡量模型性能时,IoU_threshold先取一个定值,而后综合考虑各类P_threshold取值时的性能,进而获得一个与P_threshold选定无关的模型性能衡量标准。spa
AP是计算单类别的模型平均准确度。3d
假如目标类别为Dog,测试了5张照片后,获得了Dog的10个预测结果,选定IoU_threshold=0.5,而后按confidence从高到低排序,以下(BB表示BoundingBox序号,IoU>=0.5时GT=1):
Rank | BB | confidence | GT
----------------------------
1 | BB1 | 0.9 | 1
----------------------------
2 | BB2 | 0.8 | 1
----------------------------
3 | BB1 | 0.8 | 1
----------------------------
4 | BB3 | 0.5 | 0
----------------------------
5 | BB4 | 0.4 | 0
----------------------------
6 | BB5 | 0.4 | 1
----------------------------
7 | BB6 | 0.3 | 0
----------------------------
8 | BB7 | 0.2 | 0
----------------------------
9 | BB8 | 0.1 | 1
----------------------------
10 | BB9 | 0.1 | 1
----------------------------
复制代码
所以,咱们有 TP=5 (BB1, BB2, BB5, BB8, BB9),FP=5 (重复检测到的BB1也算FP)。除了表里检测到的5个GT之外,咱们还有2个GT没被检测到,所以: FN = 2,GT=7.
而后依次从上到下设定对应的rank为正反分界线,此rank以前(包含此rank)的预测为正,此rank以后的预测为反,而后计算对应的Precision和Recall:
rank=1 precision=1.00 and recall=0.14
--------------------------------------
rank=2 precision=1.00 and recall=0.29
--------------------------------------
rank=3 precision=0.66 and recall=0.29
--------------------------------------
rank=4 precision=0.50 and recall=0.29
--------------------------------------
rank=5 precision=0.40 and recall=0.29
--------------------------------------
rank=6 precision=0.50 and recall=0.43
--------------------------------------
rank=7 precision=0.43 and recall=0.43
--------------------------------------
rank=8 precision=0.38 and recall=0.43
--------------------------------------
rank=9 precision=0.44 and recall=0.57
--------------------------------------
rank=10 precision=0.50 and recall=0.71
--------------------------------------
复制代码
好比rank=4时,TP=2 (BB1, BB2),则
Precision=2/4=0.5,Recall=TP/GT=2/7=0.29
复制代码
能够看出,随着预测正反分割线的向下移动,Recall稳步变大,Precision总体减少,局部上下跳动,PR曲线以下图:
AP(Average Precision)的计算基本等同于计算PR曲线下的面积,但略有不一样。须要先将PR曲线平滑化。
方法是,查全率r对应的查准率p,取查全率大于等于r时最大的查准率p。即,
平滑后的曲线以下图中的绿色曲线:
对于AP(Average Precision)的计算有两种方法:
AP =(平滑后PR曲线上,Recall分别等于0,0.1,0.2,… , 1.0等11处Precision的平均值)。
这里则有:
AP=(1 + 1 + 1 + 0.5 + 0.5 + 0.5 + 0.5 + 0.5 + 0 + 0 + 0) / 11 = 0.5
复制代码
AP=平滑后PR曲线下包围的面积 这里则有:
AP = (0.14-0) * 1 + (0.29-0.14) * 1 + (0.43-0.29) * 0.5 + (0.57-0.43) * 0.5 + (0.71-0.57) * 0.5 + (1-0.71) * 0 = 0.5
复制代码
这里两种方案得出的AP值相同,但一般是不一样的。
须要注意的是上述AP的计算并无显式设定P_threshold,而是经过从上到下依次指定每个rank为正反分界线来变相的反映P_threshold不一样取值。
上述计算的AP只是针对dog这个类别,物体检测一般有多个类别,模型性能确定是多个类别准度的综合度量。
好比, A模型在IoU_threshold=0.5时,mAP=0.4。 B模型在IoU_threshold=0.7时,mAP一样为0.4。 依据VOC的标准,AB模型的性能同样,但显然B模型的框更准,性能更优。 COCO在VOC标准的基础上,取IoU_threshold=0.5,0.55, 0.6,… , 0.95时各个mAP的均值。
下图给出了当前mAP最佳结果。
mAP虽然综合考虑了P_threshold和IoU_threshold各个取值时的平均模型准确度,使得模型优劣的评判标准不随P_threshold和IoU_threshold取值变化而变化,但在工程应用中,物体是否被正确检测到,仍是须要具体的P_threshold和IoU_threshold,工程上更关心在固定的P_threshold和IoU_threshold下的准确率。这就须要咱们本身实现与具体应用相符的评判标准。
参考文章