date
Sep 20, 2025
slug
2025-09-20-the-metrics-of-object-detection-modal-mAP-recall-precision
status
Published
tags
CNN
YOLO
summary
对于计算机视觉中的目标检测领域而言,主要的评估指标就是mAP与召回率、准确率。本文对IoU、准确率、召回率、AP以及mAP的概念和计算逻辑进行了详细的整理。
type
Post
category
AI
AI summary
对于计算机视觉中的目标检测领域而言,主要的评估指标就是mAP与召回率、准确率。本文对IoU、准确率、召回率、AP以及mAP的概念和计算逻辑进行了详细的整理。
IOU
IOU:Intersection Over Union。
对于目标检测算法的执行而言,每一张训练图片中的每个待检测物体,都会标注一个该物体位置对应的bounding box,这个标注的bounding box就是真实物体区域对应的检测区域。而目标检测算法对图片中物体所进行的检测和推理,会输出一个检测出来的Bounding box。IOU指标就是通过两个Bouding Box重合的程度,来评估目标检测算法对于该物体的检测精度。标注Bounding Box与检测Bounding Box的重合度越高,表示检测的精度越好。

用下图可以非常直观的解释IoU如何计算。具体的解释就是:系统检测到的物体区域与真实物体区域的交集(如下图中Area of Overlap部分,也就是Intersection部分),除以两个区域之间的并集(如下图中Area of Union部分,也就是Union部分)。

因此,对于一个检测图片中的某个待检物体而言,其IoU指标的计算,就是用检测框与标记框的交集面积,处于两个框的并集面积。这个值的计算结果当然是在0-1之间,0表示检测结果与真实的标记框完全无关,检测完全错误,而1则表示检测框和标记框完全重合,对于算法的评估而言,这个值当然是越高越好。一般使用IoU=0.5来作为判断识别率的基准,大于这个阈值表示是有效的检测,否则是无效的检测。
在理解以上IoU概念的基础上,对一张图片中的多个物体进行目标检测,就可能存在多种检测结果:

- TP(True Positive):算法准确的检测到了图片中的物体,并且两个检测框的IoU重合度大于0.5,因此是一个正确的预测。
- FP(False Positive):算法检测出来的检测框,与该图片所有物体的标记框的重合度都小于0.5,最典型的就是把背景识别成了物体,因此是一种误检的情况。
- TN(True Negative):本身是背景,算法也没有输出对应的检测框,因此是正常现象,在目标检测的指标计算中不需要考虑。
- FN(False Negative):本来需要算法检测出来的物体,算法没有检测出来,所以相当于是漏检的情况。
以上检测结果的分类整理成表格就是:

召回率与准确率
准确率:Precision。召回率:Recall。
有了以上对于IoU以及目标检测算法的各种不同检测结果的类型的理解,关于目标检测算法执行准确率和召回率的概念及其计算就比较简单了。
所谓的准确率,表示的就是:目标检测算法所输出的检测结果中,其类别判断和位置检测(IoU>0.5)均正确的检测所占的比例。准确率的计算公式如下图所示:

而所谓的召回率,则表示的是:目标检测算法对图片中的物体进行的检测,把多少个物体正确地检测(类别判断正确,且IoU>0.5)出来了。召回率的计算公式如下图所示:

以上图中的茶杯的检测为例,准确率表示的就是,算法输出的茶杯检测结果,真的是茶杯的情况所占的比例。而召回率则表示的是,图片中所有的茶杯,被算法准确检测出来所占的比例。
AP与mAP
AP:Average Precision,表示某个类别的检测精度。mAP:mean Average Precision,表示所有类别的平均检测精度。
下面以一个例子来更详细地解释说明AP的计算过程。
以某个数据集进行小狗目标的检测为例。数据集中真实标注的小狗目标有8个,分别对应于GT1-GT8(这里的GT表示Grounded Truth的意思,也就是通过手动标注出来的真实的小狗目标所在的位置)。而通过算法检测到的小狗目标及其位置有10个,使用BB1-BB10来表示(BB表示检测算法检测到的每个小狗目标的Bounding Box)。
使用算法对数据集中小狗目标的检测结果,部分检测位置的Bounding Box只检测到小狗的头或者脚,也就是说IoU很低(例如BB3, BB4, BB5, BB7, BB8这个检测输出的IoU均比较低),而且两个真实的小狗目标GT6和GT7没有能够检测到(FN=(GT7, GT8)),也就是说这两个真实目标漏检了。基于以上信息整理目标检测算法的执行结果如下图所示:需要注意的是,目标检测算法输出的每个检测结果,不仅包含这个检测结果对应的检测类别,Bounding Box的坐标信息,还有一个检测的置信度(Confidence),也就是这个检测目标正确的概率。

从上图可以看到,对于一个真实的待检小狗目标,检测算法可能输出多个独立的检测结果与之对应,例如BB1和BB3对应的都是GT1。而一般情况下,只有在IoU>0.5的情况下,我们才会认为算法输出的检测结果是正确的TN,因此对以上算法检测所输出的10个检测结果BB1-BB10进行IoU判断如下:

然后按照流程,基于检测结果的置信度(即上图中属于狗的概率)对其进行排序:

然后按照以上排序,在不同的rank上计算各自的准确率Precision和召回率Recall。
- 对于Rank1而言,其准确率=(>=rank1的TP数量)/(>=rank1的TP+FP的总数量)=1/1=1,其召回率=(>=rank1的TP数量)/(TP的总数量)=1/8=0.125。
- 对于Rank2而言,其准确率=(>=rank2的TP数量)/(>=rank2的TP+FP的总数量)=2/2=1,其召回率=(>=rank2的TP数量)/(TP的总数量)=2/8=0.25。
- 对于Rank3而言,其准确率=(>=rank3的TP数量)/(>=rank3的TP+FP的总数量)=3/3=1,其召回率=(>=rank3的TP数量)/(TP的总数量)=3/8=0.375。
- 对于Rank4而言,其准确率=(>=rank4的TP数量)/(>=rank4的TP+FP的总数量)=3/4=0.75,其召回率=(>=rank4的TP数量)/(TP的总数量)=3/8=0.375。
- 以此类推,得到rank5的准确率=4/5=0.8,其召回率=4/8=0.5。
- rank6的准确率=5/6=0.833,其召回率=5/8=0.625。
- rank7的准确率=5/7=0.714,其召回率=5/8=0.625。
- rank8的准确率=5/8=0.625,其召回率=5/8=0.625。
- rank9的准确率=5/9=0.556,其召回率=5/8=0.625。
- rank10的准确率=5/10=0.5,其召回率=5/8=0.625。
因此,以上根据目标检测算法输出的10个检测结果,得到10组准确率和召回率的数据如下:

根据10组(Precision,Recall)就可以画出目标检测算法输出以上结果对应的P-R图:

所谓的AP指标计算上的定义,就是上面P-R中标记的蓝色P-R曲线下的面积或者积分。因为Precision和Recall指标都是在0-1之间,所以以上计算出来的AP指标当然也是在0-1之间。

P-R曲线面积或者积分的计算比较复杂,所以可以采用上图提供的两个离散序列公式来计算AP指标。
第一个公式中,P(k) 是第k个rank的准确度,而 Δr(k) 是指第k个rank的召回率与第k-1个rank的召回率的差值,因此按照该公式计算AP指标就是:
第二个公式中,P(k) 是第k个rank的准确度,而 rel(k) 的定义则是,在第k个rank为有效检测TP时, rel(k) 为1,否则为0。number of relevant documents表示总的TP个数,这是是8个(GT1-GT8)。因此基于该公式计算AP指标就是:
所以可以看到,以上的两个公式虽然算式不同,但是最终的结果殊途同归,最后计算出来的AP值都是0.579。
以上AP的计算说完了,那么mAP的计算就比较简单了。上面所进行AP的计算,只是针对小狗这个类别计算出来的AP,一般情况下目标检测算法可以输出多个不同类别的检测结果,例如在COCO数据集中就包含了80个类别的标注信息,那么一个目标检测算法的mAP指标,就是先独立的计算它所支持的每个类别的检测AP指标,然后再把所有的AP值加起来求平均值就是整个算法对所有类别检测性能的mAP指标。

参考资料
- 《深度学习之Pytorch物体检测实战》1.2