目标检测中的AP计算

本文详细介绍了目标检测中AP(average precision)的计算过程,包括TP, FP, TN, FN, precision, recall和IOU等概念,以及如何绘制P-R曲线和计算AP值。通过实例解释了如何判断bounding boxes的真伪,并给出了AP计算的Python代码。" 114030616,10538811,Java实现:创建简单留言板功能,"['Java', 'Web开发', '数据库', 'Servlet']

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

目标检测中的AP计算

最近在学习目标检测,对模型评价指标AP的计算过程有点疑问,经过查找资料、问师兄,最终算是有了一个相对明确的了解,特此记录一下,方便以后查看,不足之处还请大家批评指正!
AP(average precision)是目标检测论文中广泛使用的模型评价指标,VOC的AP计算方法在2010年的时候发生过一次更改,现在常用的是2010年之后更改的AP计算方法,该计算方法相比于之前也更为合理,本文的AP计算也是2010年之后的计算方法。官方的定义如下:
()在这里插入图片描述
(图片源自博客https://blog.csdn.net/hsqyc/article/details/81702437

AP计算涉及到一些其他的知识,如TP,FP,TN,FN,precision,recall,IOU等等,下面进行简单介绍:

TP,FP,TN,FN,precision,recall

TP:真正例 true positive
FP:假正例 false positive
TN:真负例 true negative
FN:假负例 false negative
precision:准确率
recall:召回率
这几个名词的介绍我觉得这篇博客(https://blog.csdn.net/qq_41994006/article/details/81051150)里的一张图说的很清晰,这里直接摘下来了(略懒。。。)
在这里插入图片描述

IOU

IOU(交并比)就是两个bounding box的交集与并集之比,这里再摘一张图。。。(源自博客https://blog.csdn.net/hsqyc/article/details/81702437

在这里插入图片描述
具体实现的python代码如下:

def box_iou(b1,b2):
    '''b1,b2均为[x1,y1,x2,y2]'''
    x1_1,y1_1,x2_1,y2_1=b1
    x1_2,y1_2,x2_2,y2_2=b2
    
    x1=max(x1_1,x1_2)
    y1=max(y1_1,y1_2)
    x2=min(x2_1,x2_2)
    y2=min(y2_1,y2_2)
    
    if x2-x1+1<=0 or y2-y1+1<=0:
        return 0
    else:
        inter=(x2-x1+1)*( y2-y1+
### 平均精度 (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 ```
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值