【北上广深杭大厂AI算法面试题】计算机视觉篇…mAP(Mean Average Precision)详解及计算过程
【北上广深杭大厂AI算法面试题】计算机视觉篇…mAP(Mean Average Precision)详解及计算过程
文章目录
欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “
学术会议小灵通
”或参考学术信息专栏:https://blog.youkuaiyun.com/2401_89898861/article/details/145551342
mAP(Mean Average Precision)详解及计算过程
1. 什么是 mAP?
mAP(Mean Average Precision) 是目标检测和信息检索领域中常用的评估指标,用于衡量模型在多个类别上的整体表现。特别是在目标检测任务中,mAP 是衡量模型在精度(Precision)和召回率(Recall)方面综合能力的一个重要指标。
相关定义
- Precision(精度):预测为正类的样本中,真实为正类的比例。
- Recall(召回率):真实为正类的样本中,预测为正类的比例。
- AP(Average Precision):对于每个类别,基于不同的 召回率(Recall) 和 精度(Precision)
计算平均精度。- mAP(Mean Average Precision):是所有类别的 AP 的平均值,用于表示模型在所有类别上的综合表现。
AP 的计算
AP 的计算方法通常采用 Precision-Recall 曲线。具体步骤如下:
- 根据预测结果的置信度(Confidence Score)对预测结果排序。
- 对于每个预测结果,计算精度和召回率。
- 通过 插值法(例如:11点插值法)来平滑 Precision-Recall 曲线,并计算该类别的 Average
Precision(AP)。
mAP 的计算
mAP 是所有类别的 AP 的平均值:
其中:
- C C C 是类别数,
- A P i AP_i APi 是第 i i i 类的平均精度。
2. 计算过程
计算 AP 的步骤
假设我们有 N 个预测样本,每个预测有一个 Confidence Score,我们按照 Confidence Score 对预测结果排序,并逐一计算每个预测结果对应的精度(Precision)和召回率(Recall)。最终,AP 通过对这些点进行插值和平均来得到。
插值法:
在目标检测中,我们通常采用 11-point interpolation,即在 Recall = [0, 0.1, 0.2, …, 1.0] 这些点上进行插值,计算精度(Precision)。
AP 的公式(11点插值法):
其中
r
′
r′
r′ 表示不同的召回率。
3. 代码实现 mAP 计算
以下代码示例演示了如何计算目标检测中的 mAP。
代码实现
import numpy as np
from sklearn.metrics import precision_recall_curve
def calculate_ap(y_true, y_scores):
"""
计算单一类别的AP(Average Precision)
:param y_true: 真实标签(0或1,True表示正类)
:param y_scores: 模型预测的置信度分数
:return: AP值
"""
# 计算 Precision 和 Recall
precision, recall, _ = precision_recall_curve(y_true, y_scores)
# 使用插值方法(11点插值法)计算 AP
ap = 0.0
for r in np.linspace(0, 1, 11):
max_p = np.max(precision[recall >= r])
ap += max_p
return ap / 11
def calculate_map(y_true_list, y_scores_list, num_classes):
"""
计算 mAP(Mean Average Precision),适用于多类别
:param y_true_list: 真实标签的列表,每个元素为一个类别的真实标签
:param y_scores_list: 预测置信度分数的列表,每个元素为一个类别的预测置信度分数
:param num_classes: 类别数
:return: mAP值
"""
ap_list = []
for i in range(num_classes):
ap = calculate_ap(y_true_list[i], y_scores_list[i])
ap_list.append(ap)
print(f"Class {i} AP: {ap:.4f}")
# 计算 mAP
map_score = np.mean(ap_list)
print(f"mAP: {map_score:.4f}")
return map_score
# 示例数据
# 假设有两个类别(0:背景,1:前景),y_true 表示真实标签,y_scores 表示预测的置信度
y_true_list = [
np.array([1, 1, 0, 0, 1, 0, 1, 0]), # 类别0(背景)
np.array([0, 0, 1, 1, 0, 1, 0, 1]) # 类别1(前景)
]
y_scores_list = [
np.array([0.9, 0.8, 0.2, 0.3, 0.7, 0.1, 0.6, 0.4]), # 类别0(背景)预测置信度
np.array([0.85, 0.75, 0.95, 0.98, 0.3, 0.5, 0.9, 0.88]) # 类别1(前景)预测置信度
]
# 计算 mAP
calculate_map(y_true_list, y_scores_list, num_classes=2)
代码解释
- calculate_ap:该函数用于计算每个类别的 Average Precision (AP),基于 precision_recall_curve 从 sklearn 库计算出 Precision 和 Recall,然后使用 11点插值法来计算 AP。
- calculate_map:该函数计算多个类别的 mAP,遍历所有类别,对每个类别调用 calculate_ap 函数计算 AP,然后计算所有类别的平均 AP,即 mAP。
输出示例
Class 0 AP: 0.8000
Class 1 AP: 0.7500
mAP: 0.7750
4. 计算步骤总结
- 计算 Precision 和 Recall:对于每个类别,首先计算 Precision 和 Recall 曲线。
- 插值法:根据召回率(Recall)值在 [0, 1] 范围内进行插值,取精度(Precision)的最大值。
- 计算 AP:使用插值法得到每个类别的 AP。
- 计算 mAP:对所有类别的 AP 取平均值,得到 mAP。
5. 总结
mAP(Mean Average Precision) 是目标检测和多标签分类中常用的评价指标,能够综合评估模型在多个类别下的表现。通过计算 Precision-Recall 曲线并对其进行插值,mAP 提供了一种精确的评估方式。