前言
相信刚刚接触目标检测的小伙伴也是有点疑惑吧,目标检测的知识点和模型属实有点多,想要工作找CV的话,目标检测是必须掌握的方向了。我记得在找实习的时候,面试官就问到了我目标检测的指标是什么,答:mAP!问:mAP是什么?我:.......!☺
所以在本文中我也是详细说一下mAP 的含义,有什么不对的或者不全的欢迎大家指正!
mAP是mean of Average Precision的缩写,意思是平均精确度(average precision)的平均(mean),是object detection中模型性能的衡量标准。object detection中,因为有物体定位框,分类中的accuracy并不适用,因此才提出了object detection独有的mAP指标,但这也导致mAP没有分类中的accuracy那么直观。但也没有那么复杂。首先,简单回顾几个基础概念。
一、查准率(Precision)和查全率(Recall)
查准率:预测所有为正的结果中,真正正确的结果的比例。
查全率:所有正例中被正确预测的比例,即预测正确的覆盖率。
来一张别人总结过的图片:
好的,看得有点懵没关系,大体有个印象就好,后面还会进行总结升华的!
关于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曲线如下图:
AP(Average Precision)的计算基本等同于计算PR曲线下的面积,但略有不同。需要先将PR曲线平滑化。方法是,查全率r对应的查准率p,取查全率大于等于r时最大的查准率p。即,
平滑后的曲线如下图中的绿色曲线:
PASCAL VOC挑战赛计算AP的老标准VOC07是:等间距选取11个recall[0.0,0.1,0.2...0.8,0.9,1.0],然后取这11个recall点对应的Precision值做平均。
以上图为例,AP的计算过程为
2010年后的是取所有不同新标准的recall点对应的Precision值做平均,如下图所示。新标准算出的AP更准。
根据新标准,AP计算可以定义为经过插值的precision-recall曲线与X轴包络的面积。这种方式称为:AUC (Area under curve)
r1,r2,...,rn是按升序排列的Precision插值段第一个插值处对应的recall值。
三、mAP
AP值计算仅仅是针对一个类别,得到AP后mAP的计算就变得很简单了,就是计算所有类别的AP,然后取平均值。mAP衡量的是训练出来的模型在所有类别上的检测能力的好坏。假设有K种类别,K>1,那么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(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