目标检测map怎么计算出来的(目标检测指标mAP详解)
前言
相信刚刚接触目标检测的小伙伴也是有点疑惑吧 ,目标检测的知识点和模型属实有点多 ,想要工作找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
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!