目标检测的评价指标mAP是什么
目标检测旨在检测图像中是否有我们关注的物体存在,并且准确定位出这些物体在图像中的具体位置。但是我们怎么评价训练好的模型检测的准确不准确呢?mAP(mean Average Precision),相信目标检测领域的同学们都是耳熟能详。mAP顾名思义,就是各类别AP的平均值。AP是PR曲线下的面积,PR曲线就是以Precision(查准率)以纵坐标、Recall(查全率)为横坐标的坐标系下绘出的曲线,即Precision-Recall曲线,如图1所示。
图1. PR曲线
PR曲线上某一点的意义为:在某一阈值下,模型将大于该阈值的结果判定为正样本,小于该阈值的结果判定为负样本。再根据判定结果统计出TP、FP、TN以及FN,根据这四个统计量计算出对应的precision和recall。计算方式如下:
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
Precision=\frac{TP}{TP+FP}
Precision=TP+FPTP
R
e
c
a
l
l
=
T
P
T
P
+
F
N
Recall =\frac{TP}{TP+FN}
Recall =TP+FNTP
所以PR曲线反映了模型在不同的阈值设定下(阈值的顺序为从高到低,这一点很重要,下文讲解mAP的计算方式时需要将confidence按照从高到低的顺序排列检测器输出的检测框信息,这里的confidence就是我们说的阈值)取得的precision和recall,可以说明模型的有效性和鲁棒性,适合用于评估模型的综合性能。
在目标检测任务中,模型的预测结果是一系列的矩形检测框集合,这其中包括了矩形检测框的中心点(或左上角顶点)的坐标,长宽、还有置信度(框内包含物体的概率)注意:置信度便与我们上边说的PR曲线计算的阈值有关,下面mAP的计算过程中会详细介绍。这里我们把矩形检测框的匹配形容为二分类问题,矩形检测框为正样本,ground truth(GT)为负样本。那么,什么样的预测框我们可以把它判定为TP呢?答案是当矩形检测框与GT的IOU大于某一我们设定值(通常为0.5)时,我们判定该检测框为TP,则IOU小于等于设定值的检测框判定为FP,需要注意的是FP也包含同一GT的重复检测框。FN便是没有被检测框与其IOU大于设定值的GT数量。如表1所示。具体的例子看图2。
表1. 目标检测中TP、FP、FN的定义
属性 | 含义 |
---|---|
TP | IOU>设定值的检测框数量 |
FP | IOU<=设定值的检测框数量,也包含检测到同一GT的重复检测框数量 |
FN | 未被检测到的GT数量 |
图2. 目标检测中TP、FP以及FN的判定方式示例(以行人为例)
那么对于数据集中某一特定类别的物体,我们统计出其在不同置信度的阈值下的TP、FP以及FN,并计算出相应的precision和recall,根据计算出的一系列的precision和recall,我们便可以绘制出该类别下的PR曲线,接下来计算PR曲线下的面积就得到了我们要的AP(注意:计算AP的方式有多种,下文会讲到)
为什么要用mAP做评估指标
机器学习和深度学习模型中性能评估的几个重要参数有accuracy,precision和recall。目标检测器也是一样的,因为毕竟是一个领域里的。precision和recall是一个简单直观的统计量,但是在上文中我们也说了,目标检测中有所不同的是即使我们的目标检测器在图像中检测到物体,如果我们仍无法找到它所在的图像中的哪个位置也是无用的。由于我们需要预测图像中的目标的发生和位置,所以在计算precision和recall与普通的二分类有所不同(如上文描述的那样)。因此,在图像分类问题中所使用的标准度量不能直接应用于目标检测问题。在目标检测中的类别很多,因此我们要按照上边说的思路计算所有类别的AP,然后计算这些AP的平均值就得到了mAP。注意AP的计算方式,这是mAP的核心,下文讲解。
mAP的计算方式
假设,对于图2中的行人类别,我们检测网络有以下输出(BB表示BoundingBox序号,设定IoU>0.5时Res=1,即被判定为TP):
BB | confidence | IOU | Res |
---|---|---|---|
1 | 0.9 | 0.6 | 1 |
2 | 0.9 | 0.8 | 1 |
1 | 0.8 | 0.9 | 1 |
3 | 0.7 | 0.3 | 0 |
4 | 0.7 | 0.4 | 0 |
5 | 0.7 | 0.7 | 1 |
6 | 0.7 | 0.3 | 0 |
7 | 0.7 | 0.1 | 0 |
8 | 0.7 | 0.9 | 1 |
9 | 0.7 | 0.6 | 1 |
因此,我们有 TP = 5 (BB1, BB2, BB5, BB8, BB9), FP=5 (重复检测到的BB1也算FP)。假设除了表里检测到的5个GT以外,我们还有2个GT没被检测到,因此FN = 2. 这时我们要计算不同阈值(confidence)下的precision和recall,而且confidence还要按照从高到低的顺序。 例如首先选取confidence=0.9,第一个检测框Res=1,判定为TP,此时总共预测了一个GT,而且预测正确,所以precision=1/(1+0) = 1;此时总共预测了一个GT,但是共有7个GT,所以recall=1/(5+2)=0.14。之后就可以按照Confidence从高到低的顺序给出各处的Precision和Recall的值,如下:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
BB | confidence | IOU | Res | precision | recall |
---|---|---|---|---|---|
1 | 0.9 | 0.6 | 1 | 1.00 | 0.14 |
2 | 0.9 | 0.8 | 1 | 1.00 | 0.29 |
1 | 0.8 | 0.9 | 1 | 0.66 | 0.29 |
3 | 0.7 | 0.3 | 0 | 0.50 | 0.29 |
4 | 0.7 | 0.4 | 0 | 0.40 | 0.29 |
5 | 0.7 | 0.7 | 1 | 0.50 | 0.43 |
6 | 0.7 | 0.3 | 0 | 0.43 | 0.43 |
7 | 0.7 | 0.1 | 0 | 0.38 | 0.43 |
8 | 0.7 | 0.9 | 1 | 0.44 | 0.57 |
9 | 0.7 | 0.6 | 1 | 0.50 | 0.71 |
根据我们计算出来的一组precision和recall的值,我们便可以绘制出PR曲线,从而计算出该类别下的AP值。
VOC2010之前计算AP的方法:
我们选取Recall >= 0, 0.1, 0.2,0.3,…, 1这11处Percision的最大值:1, 1, 1, 0.5, 0.5, 0.5, 0.5, 0.5, 0, 0, 0。此时该类别的 AP = 5.5 / 11 = 0.5
VOC2010及以后的方法:
对于Recall >= 0, 0.14, 0.29, 0.43, 0.57, 0.71, 1,我们选取此时Percision的最大值:1, 1, 1, 0.5, 0.5, 0.5, 0。此时该类别的 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
【敲黑板,数学基础薄弱的同学在此处回忆初学微积分时的场景,计算函数曲线下的面积】
mAP就是对每一个类别都计算出AP,然后再计算AP平均值就好了