深入理解目标检测中的 Recalls, Precisions, AP, mAP

本文深入解析了机器学习中常见的评估指标,包括混淆矩阵、真值与预测值、TP、FP、FN、TN、Recalls、Precisions、AP及mAP的概念与计算方式,帮助读者全面掌握模型性能评价。

1. 混淆矩阵:
混淆矩阵(confusion matrix),是分类任务中非常重要的评测指标。如下图所示:
在这里插入图片描述
2. 真值和预测值的概念
Actual value:也叫ground truth,真实的值,即感兴趣的目标在图片上的真实坐标。
predicted value:即模型预测出来的坐标。

3. TP、FP、FN、TN的概念
TP(TruePositive): 正确预测出正类别的数量
FP(FalsePositive):错误预测出正类别的数量
FN(FalseNegative): 错误预测出负类别的数量
TN(TrueNegative): 正确预测出负类别的数量

4. Recalls和Precisions的概念
Recalls:召回率,即某个类别被预测为正确的数量除以总数,公式表示如下:
在这里插入图片描述
比如一张图中有5个标注为人的ground truth,但你正确预测出的人只有2个,那么对于这张图,人的recalls就是2/5。
Precisions:精准率,就是你在检测的结果里面,实际上真正正确的数量占比大小,公式表示如下:
在这里插入图片描述
TP就是正确预测出正类别的数量, FP错误预测出正类别的数量。比如一张图中有3个标注为人的ground truth,但是你预测出的框只有一个正确框准人,另外两个框没有框准人,即TP=1, FP=2, precision=1/3。

5. AP(Average precision)
在介绍AP之前,先引入Precision-recall曲线概念。Precision-recall曲线(PR曲线)与ROC曲线的区别是横轴和纵轴不同,PR曲线的横轴Recall也就是TPR,反映了分类器对正例的覆盖能力。而纵轴Precision的分母是识别为正例的数目,而不是实际正例数目。Precision反映了分类器预测正例的准确程度。那么,Precision-recall曲线反映了分类器对正例的识别准确程度和对正例的覆盖能力之间的权衡。对于随机分类器而言,其Precision固定的等于样本中正例的比例,不随recall的变化而变化。
与AUC相似,AP就是PR曲线与X轴围成的图形面积。

6. mAP(Mean Average Precision)
mAP就是所有类别的AP求平均值。

参考网页:
https://www.cnblogs.com/shixiangwan/p/7215926.html?utm_source=itdadao&utm_medium=referral
https://zhuanlan.zhihu.com/p/79186684

### mAP定义 mAP 是 mean of Average Precision 的缩写,表示平均精确度(Average Precision, AP)的均值。它是目标检测领域中用于衡量模型性能的重要指标[^3]。由于目标检测不仅涉及分类还涉及定位,传统的分类准确性(Accuracy)无法全面反映模型的表现,因此引入了 mAP 这一更加复杂的评价标准。 --- ### 查准率(Precision)和查全率(Recall) 为了更好地理解 mAP,需先了解 Precision 和 Recall: - **Precision (查准率)**:指的是预测为正类的样本中有多少是真正的正类。 \[ \text{Precision} = \frac{\text{True Positives}}{\text{True Positives} + \text{False Positives}} \] - **Recall (查全率)**:指的是所有真实正类中有多少被正确预测出来。 \[ \text{Recall} = \frac{\text{True Positives}}{\text{True Positives} + \text{False Negatives}} \] 这两个指标共同构成了 PR 曲线的基础[^3]。 --- ### 平均精确度(AP)的计算方法 对于某一特定类别,通过绘制 Precision-Recall (PR)曲线来计算该类别的 AP 值。具体步骤如下: 1. 预测结果按置信度(Confidence Score)降序排列。 2. 对每一个预测框,判断其是否为 True Positive 或 False Positive,基于预设的 IoU(Intersection over Union)阈值。 3. 计算不同召回率(Recall)下的精度(Precision),并形成 PR 曲线。 4. 使用数值积分法(如梯形法则)求解 PR 曲线下面积作为 AP 值[^1]。 某些数据集(如 COCO 数据集)会进一步扩展此定义,在不同的 IoU 阈值下分别计算 AP,并取这些 AP 的加权平均值。 --- ### 多类别场景下的 mAP 计算 在多类别目标检测任务中,针对每一类别独立计算其对应的 AP 值,随后将各类别 AP 取平均值得到最终的 mAP 值。例如,若有 \( N \) 类,则: \[ \text{mAP} = \frac{1}{N} \sum_{i=1}^{N} \text{AP}_i \] 其中,\( \text{AP}_i \) 表示第 \( i \) 类别的 AP 值[^4]。 需要注意的是,部分评估体系可能会考虑额外因素,例如对象尺寸分组或多种 IoU 阈值组合,从而得到更为严格的 mAP 定义。 --- ### 示例代码实现 以下是 Python 实现的一个简化版 mAP 计算逻辑: ```python def calculate_ap(precisions, recalls): """ Calculate the average precision given lists of precisions and recalls. Args: precisions (list): List of precision values at different thresholds. recalls (list): Corresponding list of recall values. Returns: float: The computed average precision value. """ ap = 0.0 previous_recall = 0.0 # Sort by increasing recall order sorted_indices = sorted(range(len(recalls)), key=lambda k: recalls[k]) precisions_sorted = [precisions[i] for i in sorted_indices] recalls_sorted = [recalls[i] for i in sorted_indices] for idx in range(1, len(sorted_indices)): delta_recall = recalls_sorted[idx] - previous_recall max_precision = max(precisions_sorted[:idx+1]) # Interpolate maximum precision ap += delta_recall * max_precision previous_recall = recalls_sorted[idx] return ap def calculate_map(ap_per_class): """ Compute Mean Average Precision from per-class APs. Args: ap_per_class (dict): Dictionary mapping class names to their respective AP scores. Returns: float: Final calculated mAP score across all classes. """ total_classes = len(ap_per_class) sum_aps = sum(ap_per_class.values()) map_score = sum_aps / total_classes if total_classes != 0 else 0.0 return map_score ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值