准确率、召回率和mAP、AP50/75

本文深入解析了精确率和召回率的概念,解释了两者在评估模型性能时的重要作用,包括PR曲线的意义及其与F1值的关系。同时,介绍了mAP的计算方法,以及COCO数据集中AP/AP50/AP75的具体含义。

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

1、准确率和召回率

真实值与预测值之间的关系如下左图所示,右图是二者之间的一个直观表示,同时也能清晰的看出准确率和召回率的具体含义。准确率 P P P 给出了“预测为真值的样本中确实有多少比例为真值”,召回率 R R R 则给出了“本来就是真值的样本模型预测出来了多少”。所以,准确率也称为“查准率”,它说明的是预测真值中有多少是对的;召回率也称为“查全率”,它说明的是真实真值中有多少被找到了。在这里插入图片描述准确率(precision)和召回率(recall)作为统计值,各自的计算方式(实例计算方式看这里): P = T P T P + F P R = T P T P + F N P=\frac{TP}{TP+FP} \\ R=\frac{TP}{TP+FN} P=TP+FPTPR=TP+FNTP一般来说, P P P R R R 是相互制约的,一个越高另一个就越低,统计上用 P R PR PR 曲线来描述二者的关系。在这里插入图片描述对于一个抽样集合,模型的预测值和真实值都是确定的, P P P R R R 也应该是一个确定的值,为什么会出现一条曲线?实际上如果是一个 b a t c h = 128 batch=128 batch=128 的集合,我们并不是直接计算128个样本的 P / R P/R P/R,而是按照每个样本的置信度概率将它们从大到小排序,然后从第一个样本开始计算 P / R P/R P/R,然后加入第二个再计算 P / R P/R P/R,以此类推;这样 R R R 的值就会一步步增大、逐渐接近1,而 P P P 则逐渐下降,这也意味着模型的预测中有 F P FP FP 的出现。
这里,在将样本一个个加入计算集合的过程中, R R R 的值可能不变(也就是没有 T P TP TP 出现),但是 P P P 的值却发生改变(出现了 F P FP FP),这导致一个 R R R 对应多个 P P P,这时我们只将最大的 P P P 值考虑进来(同一 R R R 值取最大 P P P 值)。

PR曲线反映了模型对正例的识别准确度和识别覆盖能力之间的权衡。

从以上 P R PR PR 曲线的性质可以看出,如果模型 A A A P R PR PR 曲线包含了模型 B B B P R PR PR 曲线,那么模型 A A A 的性能要优于 B B B。但是如果二者发生交叉呢?下图就是实际应用中会经常看到的一组模型性能对比图。在这里插入图片描述如果 P / R P/R P/R 值都很高,很难直接通过 P R PR PR 曲线去比较哪个模型更好时,可以用 F 1 F1 F1 值来替代衡量: F 1 = 2 P R P + R F1=\frac{2PR}{P+R} F1=P+R2PR另外,也可以观察平衡点 P = R P=R P=R,二者相等时的取值越大表明模型性能越好。

2、mAP

在论文中经常见到一种参数是 m A P mAP mAP(平均均值精度),常见的目标检测数据集 VOC/COCO都是以此为衡量标准,它跟 P R PR PR 曲线息息相关。先看一下 A P AP AP 的计算,以2010年为界它有两种不同的计算方法,现在更常用的是第二种:

  1. 2010年以前:针对某一分类将召回率 R R R 等距划分为十一个值 [ 0 , 0.1 , 0.2 , . . . , 1 ] [0,0.1,0.2,...,1] [0,0.1,0.2,...,1],对于每一个 R R R 值计算对应的最大准确率 P P P(从 P R PR PR 曲线就可以查到),然后对这十一个 P P P 值求均值,也就是 A v e r a g e P r e c i s i o n Average Precision AveragePrecision
  2. 2010年以后:针对某一分类 n n n 个样本,假设它有 m m m 个正例,每一个正例就对应一个召回率 R R R 值( 1 / m , 2 / m , . . . , 1 1/m,2/m,...,1 1/m,2/m,...,1),对每一个召回率计算最大准确率 P P P,然后对这 m m m P P P 值求均值。 A P = 1 m ∑ i m P i = 1 m ∗ P 1 + 1 m ∗ P 2 + ⋯ + 1 m ∗ P m = ∫ P ( R ) d R AP=\frac{1}{m}\displaystyle\sum_i^m{P_i}=\frac{1}{m}*P_1+\frac{1}{m}*P_2+\dots+\frac{1}{m}*P_m=\int{P(R)}dR AP=m1imPi=m1P1+m1P2++m1Pm=P(R)dR

注意到 A P AP AP 是针对于某一个类的,而一个数据集往往包含相当多的分类,对数据集所有类的 A P AP AP 求均值就得到 m A P mAP mAP m A P = 1 C ∑ j C A P j mAP=\frac{1}{C}{\displaystyle\sum_j^C{AP}_j} mAP=C1jCAPj所以, m A P mAP mAP 中: P P P 代表一个样本的最大准确率, A P AP AP 代表一类样本的平均准确率, m A P mAP mAP 就是数据集的平均准确率。

3、COCO数据集中的AP/AP50/AP75

对于图像分类任务, m A P mAP mAP 针对的就是类识别准确率,但是在目标检测任务中还有一个边框回归任务,框的准确率一般用交并比来 I o U IoU IoU 衡量。COCO数据集目标检测评价指标中, A P / A P 50 / A P 75 AP/AP50/AP75 AP/AP50/AP75 指的是 A P I o U = 0.5 : 0.05 : 0.95 / A P I o U = 0.5 / A P I o U = 0.75 AP^{IoU=0.5:0.05:0.95}/AP^{IoU=0.5}/AP^{IoU=0.75} APIoU=0.5:0.05:0.95/APIoU=0.5/APIoU=0.75 I o U = . 50 : . 05 : . 95 IoU=.50:.05:.95 IoU=.50:.05:.95 指的是交并比从0.5开始间隔0.05一直取值到0.95,然后求均值。
在这里插入图片描述
具体实例:
在这里插入图片描述

### 精度 (Precision) 精度衡量的是预测为正类的结果中有多少是真正的正类。较高的 Precision 表明模型对于 "预测为 Positive" 的判断更加可信[^1]。 公式如下: \[ \text{Precision} = \frac{\text{True Positives}}{\text{True Positives} + \text{False Positives}} \] 其中 True Positives 是真正例的数量,而 False Positives 则是指错误地标记成正类的例子数量。 ```python def calculate_precision(true_positives, false_positives): if true_positives + false_positives == 0: return 0 return true_positives / (true_positives + false_positives) ``` ### 召回率 (Recall) 召回率指的是所有实际为正类的数据中被正确识别的比例。这反映了模型发现所有正样本的能力。 公式表示为: \[ \text{Recall} = \frac{\text{True Positives}}{\text{True Positives} + \text{False Negatives}} \] 这里 False Negatives 表示实际上属于正类却被误判为负类的情况数。 ```python def calculate_recall(true_positives, false_negatives): if true_positives + false_negatives == 0: return 0 return true_positives / (true_positives + false_negatives) ``` ### 准确率 (Accuracy) 准确率是最直观的理解方式之一,它代表了分类器做出的所有预测中有多少比例是正确的。然而,在不平衡数据集上可能不是最佳评估指标。 计算方法很简单: \[ \text{Accuracy} = \frac{\text{Correct Predictions}}{\text{Total Predictions}} \] 即 \[ \text{Accuracy} = \frac{\text{True Positives} + \text{True Negatives}}{\text{All Samples}} \] ```python def calculate_accuracy(true_positives, true_negatives, all_samples): if all_samples == 0: return 0 return (true_positives + true_negatives) / all_samples ``` ### 平均精确率 (Mean Average Precision, MAP) MAP 主要用于信息检索领域以及多标签分类问题中的性能评价。其核心思想是在不同阈下分别求得每个查询对应的 AP (Average Precision),再取这些 AP 的算术平均作为最终得分。 具体实现较为复杂,通常依赖于特定应用场景下的定义。一般情况下会涉及到先按置信度排序,然后逐步降低阈来统计每次变化后的 Precision Recall 来构建 PR 曲线并据此得到 AP 。 ```python import numpy as np def average_precision(relevance_scores): """Calculate the average precision.""" total_relevant = sum(relevance_scores) if total_relevant == 0: return 0 precisions_at_k = [] num_correct_predictions = 0 for i, relevant in enumerate(relevance_scores, start=1): if relevant: num_correct_predictions += 1 precisions_at_k.append(num_correct_predictions / i) return np.mean(precisions_at_k) def mean_average_precision(query_results_list): """Compute Mean Average Precision over multiple queries""" aps = [average_precision(result['relevances']) for result in query_results_list] return np.mean(aps) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值