1. mAP 基础概念:从 Precision/Recall 到 AP 再到 mAP

做目标检测,绕不开一个指标——mAP。很多初学者一上来就被它吓住,觉得公式又多又绕。其实没那么复杂。我刚开始接触检测时也懵过,后来发现只要把 Precision、Recall、IoU 这几个基础概念吃透,mAP 就是个顺理成章的结果。

今天咱们就把这层窗户纸捅破。

1.1 先搞清楚 Precision 和 Recall

这两个词,说白了就是「查得准不准」和「查得全不全」。

  • Precision(精确率):你预测出来的框里,有多少是真正对的?
  • Recall(召回率):所有真实的目标里,你找出来了多少?

举个例子。一张图里有 5 只猫。你的模型输出了 10 个框,其中 4 个框对了(真的框住了猫),6 个框错了(框到了狗或者背景)。那么:

  • Precision = 4 / 10 = 0.4
  • Recall = 4 / 5 = 0.8

嗯,这里要注意:Precision 和 Recall 是一对冤家。你想想看,如果模型只输出最有把握的那 1 个框,Precision 可能很高(比如 1.0),但 Recall 会很低(0.2)。反过来,如果模型见啥都框,Recall 能接近 1.0,但 Precision 会惨不忍睹。

我的经验: 实际项目中,我一般会先看 Recall 够不够,再调 Precision。比如自动驾驶的行人检测,漏检比误检更致命。这时候我会把置信度阈值调低,宁可多框几个错的,也别漏掉一个真的。

1.2 IoU:框与框之间的「重叠度」

判断一个预测框「对不对」,不能光看它有没有框住目标,还得看它框得准不准。这就轮到 IoU 登场了。

IoU(Intersection over Union,交并比)的计算方式很简单:

IoU = 预测框与真实框的交集面积 / 预测框与真实框的并集面积

说白了就是两个框重叠的部分除以它们合起来的总面积。IoU 的取值范围是 [0, 1],越接近 1 说明框得越准。

我习惯把 IoU 分成几个档次:

IoU 范围 含义 常见用途
0.9 ~ 1.0 几乎完美重合 精标注、微调验证
0.7 ~ 0.9 框得很准 严格评估(如自动驾驶)
0.5 ~ 0.7 基本框住 通用检测评估(PASCAL VOC 标准)
0.3 ~ 0.5 勉强沾边 宽松场景、大目标检测
< 0.3 基本算错 通常视为误检
避坑指南: 我曾经在一个项目中把 IoU 阈值设成了 0.75,结果模型在验证集上 mAP 只有 0.3 左右。后来发现数据集里很多标注框本身就偏大,0.75 的要求太苛刻了。最后降到 0.5,mAP 直接翻倍。所以 IoU 阈值一定要跟你的数据质量和业务需求匹配,别盲目照搬。

1.3 从 Precision-Recall 曲线到 AP

有了 Precision 和 Recall,我们就能画出一条 PR 曲线。但光看曲线还不够直观,我们需要一个数值来量化模型的整体表现——这就是 AP(Average Precision,平均精度)。

AP 的计算思路是:在 Recall 从 0 到 1 的区间上,对 Precision 求平均。具体做法有两种主流方式:

  • VOC 2007 方式:在 Recall 的 11 个等分点(0, 0.1, 0.2, ..., 1.0)上取 Precision 的最大值,然后求平均。
  • VOC 2010+ / COCO 方式:对所有 Recall 变化点对应的 Precision 做积分(实际是梯形法求面积),精度更高。

我个人更推荐用 COCO 的方式,因为它对模型性能的刻画更细腻。不过很多老项目还在用 VOC 2007 的方式,迁移时要注意区分。

一句话总结 AP: AP 就是 PR 曲线下的面积。面积越大,说明模型在「又准又全」这个目标上做得越好。

1.4 mAP:多类别的平均 AP

AP 是针对单个类别算的。比如你的模型要检测猫、狗、车三个类别,那每个类别都会有一个 AP 值。mAP(mean Average Precision)就是把这些 AP 值取个平均。

公式很简单:

mAP = (AP_猫 + AP_狗 + AP_车) / 3

但这里有个坑——不同数据集对 mAP 的定义细节不一样:

数据集 IoU 阈值 AP 计算方式 mAP 含义
PASCAL VOC 0.5 11 点插值或面积积分 所有类别的 AP 均值
MS COCO 0.5:0.95(步长 0.05) 101 点插值 10 个 IoU 阈值下的 mAP 再平均
OpenImages 0.5 面积积分 所有类别的 AP 均值

你想想看,COCO 的 mAP 要求 IoU 从 0.5 到 0.95 都表现好,这比 VOC 只要求 0.5 要严格得多。所以同一个模型在 COCO 上的 mAP 通常比 VOC 上低不少,这不代表模型变差了,只是评估标准变了。

我的习惯: 做学术对比时,我会同时报 VOC mAP(@0.5)和 COCO mAP(@0.5:0.95),这样 reviewers 能全面了解模型在不同严格程度下的表现。做工程时,我只看跟业务场景最匹配的那个阈值。

1.5 知识体系总览

下面这张图把 mAP 的整个知识链条串起来了。从最底层的 IoU 和置信度阈值,到 Precision/Recall 的计算,再到 PR 曲线和 AP,最后汇聚成 mAP。建议你保存下来,后面几章会反复用到这些概念。

mAP 知识体系结构图 IoU 计算 置信度阈值 真实框 / 预测框 Precision(精确率) Recall(召回率) Precision-Recall 曲线 AP(单类别平均精度) mAP(多类别平均精度均值) 逐层递进,缺一不可

1.6 本章小结

到这里,mAP 的基础概念就讲完了。咱们捋一下核心脉络:

  • IoU 是判断预测框准不准的尺子,阈值选多少直接影响评估结果。
  • Precision 和 Recall 是一对 trade-off,通过置信度阈值来调节。
  • PR 曲线 把这对 trade-off 可视化,曲线下的面积就是 AP。
  • 把所有类别的 AP 取平均,得到 mAP——目标检测领域最通用的评估指标。

这些概念看起来多,其实核心就一条线:从框的匹配(IoU)到单类表现(AP),再到全局表现(mAP)。后面几章我们会在这个基础上,深入 mAP 的代码实现、调优技巧,以及如何用它来指导模型改进。