目标检测精度相关概念和AP计算方法

文章介绍了AP(AveragePrecision)在目标检测中的重要性,它是结合Precision和Recall的评价指标,以及mAP(meanAveragePrecision)在多类别检测中的应用。文中通过实例解释了为什么不能单纯依赖Precision或Recall,并展示了AP的计算方法,包括P-R曲线和置信度排序的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

在目标检测文章中经常看到结论表格中出现AP这一指标来对模型预测精度进行评价。那么AP到底是什么?AP如何计算?

相关概念

AP即Average Precision的缩写,直译为平均精度;
IOU即Intersection over Union,交并比为预测框和真实框相交的面积除以两者的并集。在三维检测中,直接替换三维框的体积即可,若只关注某一平面上的投影,则可以利用投影框来算IOU;
在这里插入图片描述
GT即Ground Truth,是指目标的真实标注框,是目标检测中的真值,通常是以人工标注方式获得;

TP即True Positive,表征检测正确的预测框,预测框和GT的IOU大于阈值则认为是一个TP。若同一个GT存在多个IOU大于阈值的预测框,那么有最大IOU的预测框为TP,其它的为FP;
FP即False Positive,表征检测不准的预测框,当预测框和GT的IOU小于阈值则认为是一个FP;
TN即True Negative,本就不应该做预测的对象,模型确实未作预测。我理解是TN是无限多个;
FN即False Negative,有GT但模型未作预测;
(True/False意味着状态是否正确;Positive/Negative意味着是否有Bounding Box生成)
在这里插入图片描述

Precision精度表征生成的预测框中,有多少比例预测是正确的;
P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP+FP} Precision=TP+FPTP
Recall召回率表征在Ground Truth中,有多少被成功预测正确;
R e c a l l = T P T P + F N = T P G T Recall= \frac{TP}{TP+FN}=\frac{TP}{GT} Recall=TP+FNTP=GTTP
AP即Average Precision,表征对某一类别检测时,目标检测器的表现;
mAP即mean Average Precision,在多种类别目标检测时的评价指标,为各类目标AP的平均值。

为什么不直接用Precision或者Recall来评价Detector呢?

最完美的检测器是Presion和Recall都为1。但实际上对于检测器来说,Precision和Recall是个此消彼长的存在。如果想要Precision高,那么必然要减少FP,意味着检测器要尽量少而精的生成BBox(宁可放过一万,不可错杀一个),使得应该生成BBox但没有的FN增加,从而Recall降低;同样如果想要Recall高,那么必然要减少FN的存在,那么意味着检测器尽量多生成BBox来覆盖GT(宁可错杀一万,不可放过一个),必然导致FP的上升,从而导致Precision的下降。因此必须结合两者来对检测器进行评价。

AP计算方式

AP(Average Precision)平均精度是在固定IOU阈值下,结合了Precision和Recall的某一类目标检测任务下的评价指标。AP的计算依赖于P-R曲线的绘制。

算例:

假设真实值框为20个,一共生成了16个预测框。在IOU阈值为固定值0.7下,预测正确的框为10个,预测错误的框为6个,没有成功检测到的真值为10个。此外每个预测框会对应一个置信度confidence,代表预测框中物体是指定检测类型的概率。
按照置信度将16个预测降序排列,计算每一步检测累计的Precision和Recall,如下表格所示。相当于设置confidece阈值,阈值逐步降低的情况下看Precision和Recall如何变化。

在这里插入图片描述
按照表格中的数据绘制P-R Curve,如下图中的蓝色曲线所示。红色为处理后的曲线,处理的原则是右侧出现大值则往左侧转移,即得到阶梯状的曲线。
在这里插入图片描述
曲线下方的面积,即为AP值。实际可能面积不便计算,最常见的是11点插值来进行估计,也就是在Recall的取值范围内均匀插入9个值,涵盖端点则有11个值,然后计算这些Precision的平均值,即AP_R11。
I O U = 0.7 下 A P R 11 = 0.45 IOU=0.7下AP_{R11}=0.45 IOU=0.7APR11=0.45

### 平均精度 (AP) 的计算方法目标检测领域,平均精度(Average Precision, AP)是一个衡量模型性能的重要指标。它通过综合考虑精确率(Precision)召回率(Recall),评估模型在不同阈值下的表现。 #### 精确率与召回率的关系 精确率是指预测为正类的样本中有多少是真正的正类;而召回率则是指实际为正类的样本中有多少被成功识别出来。这两个指标共同构成了 PR 曲线的基础[^1]。 #### AP 计算的核心概念 AP 是基于 PR 曲线下面积来定义的。具体来说,在给定类别下,通过对多个置信度阈值的结果进行排序并绘制 PR 曲线后,可以利用数值积分的方法近似得到该曲线下面积作为 AP 值[^2]。 以下是具体的计算过程: 1. **设定 IoU 阈值** 对于每张图片上的每一个预测框,如果其与真实标注框之间的交并比(Intersection over Union, IoU)超过预设阈值,则认为这是一个有效匹配。 2. **按置信度降序排列** 将所有测试集中的预测结果按照置信度从高到低排序,并依次判断哪些属于真正例(True Positives, TP)、假负例(False Negatives, FN)以及假正例(False Positives, FP)。这一步骤用于构建完整的 P-R 表格。 3. **逐步更新 Precision Recall 数组** 当遍历上述列表时,不断累积统计当前状态下的 TP 总数 N_tp 及总检测次数 M_det ,从而分别得出对应的 precision=Ntp/Mdetrecall=Ntp/Ngt 。其中 Ng t代表地面实况数量。 4. **插值法处理离散点** 考虑到原始数据可能呈现跳跃式的特性,因此通常采用某种形式的最大化操作或者线性插值技术平滑这些不连续的变化趋势,最终形成较为光滑的一条曲线以便更准确地估算整体区域大小。 5. **求解总面积** 使用梯形法则或者其他合适的数值分析手段累加各区间内的局部贡献量直至完成整个范围内的覆盖测量工作为止即可获得最后的目标函数值——即所谓的 Average Precision(AP)[^3]. ```python def compute_ap(recalls, precisions): """ Compute the average precision from recall and precision arrays. Parameters: recalls (list of float): List containing sorted recall values. precisions (list of float): List containing corresponding precision values. Returns: ap (float): The computed average precision value. """ # Append sentinel values to ensure proper computation at boundaries recalls = np.concatenate(([0.], recalls, [1.])) precisions = np.concatenate(([0.], precisions, [0.])) # Ensure decreasing order by reversing sort on precisions while maintaining pairing with recalls for i in range(len(precisions)-1, 0, -1): precisions[i-1] = max(precisions[i-1], precisions[i]) # Calculate area under curve using trapezoidal rule between consecutive points indices = np.where(recalls[:-1] != recalls[1:])[0]+1 ap = sum((recalls[i]-recalls[i-1]) * precisions[i] for i in indices) return ap ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值