前言

相信刚刚接触目标检测的小伙伴也是有点疑惑吧,目标检测的知识点和模型属实有点多,想要工作找CV的话,目标检测是必须掌握的方向了。我记得在找实习的时候,面试官就问到了我目标检测的指标是什么,答:mAP!问:mAP是什么?我:.......!☺

所以在本文中我也是详细说一下mAP 的含义,有什么不对的或者不全的欢迎大家指正!

mAP是mean of Average Precision的缩写,意思是平均精确度(average precision)的平均(mean),是object detection中模型性能的衡量标准。object detection中,因为有物体定位框,分类中的accuracy并不适用,因此才提出了object detection独有的mAP指标,但这也导致mAP没有分类中的accuracy那么直观。但也没有那么复杂。首先,简单回顾几个基础概念。

一、查准率(Precision)和查全率(Recall)

查准率:预测所有为正的结果中,真正正确的结果的比例。

查全率:所有正例中被正确预测的比例,即预测正确的覆盖率。

来一张别人总结过的图片:

目标检测指标mAP详解

好的,看得有点懵没关系,大体有个印象就好,后面还会进行总结升华的!

关于IOU的部分在这里我就不多做介绍了,感兴趣的 朋友可以看看我这篇文章:NMS及IOU原理讲解和代码解析

二、一个类别的AP计算

物体检测中的每一个预测结果包含两部分,预测框(bounding box)和置信概率(Pc)。bounding box通常以矩形预测框的左上角和右下角的坐标表示,即x_min, y_min, x_max, y_max,如下图。置信概率Pc有两层意思,一是所预测bounding box的类别,二是这个类别的置信概率,如下图中的P_dog=0.88,代表预测绿色框为dog,并且置信概率为88%。

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
----------------------------

 因此,如果设置P_threshold=0,则有 TP=5 (BB1, BB2, BB5, BB8, BB9),FP=5 (重复检测到的BB1也算FP)。除了表里检测到的5个GT以外,我们还有2个GT没被检测到,因此: FN = 2.

然后依次从上到下设定对应的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曲线如下图:

目标检测指标mAP详解

AP(Average Precision)的计算基本等同于计算PR曲线下的面积,但略有不同。需要先将PR曲线平滑化。方法是,查全率r对应的查准率p,取查全率大于等于r时最大的查准率p。即,

目标检测指标mAP详解

 平滑后的曲线如下图中的绿色曲线:

目标检测指标mAP详解

PASCAL VOC挑战赛计算AP的老标准VOC07是:等间距选取11个recall[0.0,0.1,0.2...0.8,0.9,1.0],然后取这11个recall点对应的Precision值做平均。

目标检测指标mAP详解

 以上图为例,AP的计算过程为

目标检测指标mAP详解

2010年后的是取所有不同新标准的recall点对应的Precision值做平均,如下图所示。新标准算出的AP更准。 

目标检测指标mAP详解

根据新标准,AP计算可以定义为经过插值的precision-recall曲线与X轴包络的面积。这种方式称为:AUC (Area under curve) 

目标检测指标mAP详解

r1,r2,...,rn是按升序排列的Precision插值段第一个插值处对应的recall值。

三、mAP 

AP值计算仅仅是针对一个类别,得到AP后mAP的计算就变得很简单了,就是计算所有类别的AP,然后取平均值。mAP衡量的是训练出来的模型在所有类别上的检测能力的好坏。假设有K种类别,K>1,那么mAP的计算公式:

目标检测指标mAP详解

当K=1时,mAP = AP。

Pascal VOC新标准定义的mAP计算方式可以认为是mAP的标准计算方式。

COCO挑战赛定义了12种mAP计算方式,典型的有:

mAP(IoU@0.5),跟Pascal VOC mAP标准计算方式一致;

mAP(IoU@[0.5:0.05:0.95]),需要计算10个IoU阈值下的mAP,然后计算平均值。这个评估指标比仅考虑通用IoU阈值(0.5)评估指标更能体现出模型的精度。

目标检测指标mAP详解

mAP(IoU@0.75),这是一个对检测能力要求更高的标准。

除了根据不同的IoU阈值来计算mAP外,还可以根据检测目标的大小来计算。

mAP@small,检测目标的面积 ≤ 32x32

mAP@medium,32x32 < 检测目标的面积 ≤ 96x96

mAP@Large,96x96 < 检测目标的面积

总结

查准率其实就是精确度,当Precision=1的时候就意味着我找一个对一个,Precision=0.1的时候意味着我找了十个检测框才对了一个,所以我们需要这个值越大越好,but要是只限制这一个指标的时候,然而这就会出现找不全的情况。即一共十个目标,我只找了一个检测框,这个检测框是对的,这时候我的precision也是1,所以为了避免这种情况的出现,就加了另外一个定义:查全率--召回率。Recall是预测为正实际为正占总体正样本的比例,Recall可以视作是模型在数据集中,检测出目标类型数据的能力,即是否把想找出来的都找出来了,Recall=1表示已经把想找出来的数据全部找出来了。所以就加了这个限制,也是为什么在这两个坐标轴下呈现下降的情况,所以我们需要的最好的情况就是precision=1 AND Recall=1而在这种情况下AUC就是最容易计算的一种方式。

参考:目标检测算法的评估指标:mAP定义及计算方式

           详解object detection中的mAP

发表回复