【北上广深杭大厂AI算法面试题】计算机视觉篇...mAP(Mean Average Precision)详解及计算过程

【北上广深杭大厂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: 真实标签(01,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 提供了一种精确的评估方式。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力毕业的小土博^_^

您的鼓励是我创作的动力!谢谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值