首页IT科技目标检测map怎么计算出来的(目标检测指标mAP详解)

目标检测map怎么计算出来的(目标检测指标mAP详解)

时间2025-09-19 13:58:27分类IT科技浏览6235
导读:前言 相信刚刚接触目标检测的小伙伴也是有点疑惑吧,目标检测的知识点和模型属实有点多,想要工作找CV的话,目标检测是必须掌握的方向了。我记得在找实习的时候,面试官就问到了我目标检测的指标是什么,答: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版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
queue jump(Queue在python的实例化)