目标检测
mAP 是目标检测领域最核心、最常用的评价指标。要理解它,需要拆开来看。
cpp
mAP = mean Average Precision(平均精度均值)
这是一个有点绕的概念,但可以用一个简单的类比帮你理解:
1、一个直观的理解方式:搜索引擎
想象在百度搜索"特斯拉汽车"。
搜索引擎会返回一页页的结果(相当于模型的预测框)。
你知道哪些网页是真正关于特斯拉汽车的(相当于真实标签 Ground Truth)。
mAP 就是在衡量:这个搜索引擎(即你的模型),到底有多懂你?
它同时考核两个方面:
准不准:返回的结果里,有多少是真正有用的?(这叫做精度)
全不全:所有有用的结果,被搜出来多少?(这叫做召回率)
2、核心概念拆解
要计算 mAP,需要先理解几个基础概念:
A. IoU (Intersection over Union,交并比)
这是判断"框得准不准"的尺子。
公式:模型画的框 与 真实物体的框 的交集面积 ÷ 并集面积。
含义:
如果 IoU > 0.5,通常认为模型"检测到了"这个物体。
如果 IoU > 0.75,说明框得非常精准。
IoU = 1,说明两个框完全重合。
B. Precision (精度) 和 Recall (召回率)
假设一张图里有 5 个真的人,模型检测出了 10 个框,其中 4 个是对的(真正例),6 个是错的(假正例,即误检)。

难点在于:这俩指标是矛盾的。如果你框得特别保守(只出确凿无疑的框),Precision 高,但 Recall 低(漏检多)。如果你框得特别激进(看着像人就框),Recall 高,但 Precision 低(误检多)。
3、什么是 AP (Average Precision,平均精度)?
为了综合衡量模型在不同"保守程度"下的表现,科学家们想出了一个办法:画一条 Precision-Recall 曲线,然后计算曲线下的面积。
调整模型的置信度阈值(比如从 0.9 降到 0.5),模型会逐渐输出越来越多的框。
每调整一次,就能算出一对 (Recall, Precision)。把这些点连成线,线下面的面积就是 AP。
AP 值越高,说明模型在"既准又全"之间平衡得越好。
AP 是针对某一个特定类别计算的(比如"人"这一类,或者"猫"这一类)。
4、什么是 mAP (mean Average Precision)?
mAP 就是把所有类别的 AP 值加起来,取平均值。
如果你的模型要检测"人、猫、狗"三类,你分别算出 AP(人)、AP(猫)、AP(狗)。
cpp
mAP = (AP(人) + AP(猫) + AP(狗)) ÷ 3
5、在 YOLO 中常见的 mAP 变体
在 YOLO 的训练日志里,你经常会看到两个不同的 mAP 指标:
指标 含义 关注点
mAP@0.5 当 IoU 阈值设为 0.5 时,计算出的 mAP。 宽松标准。只要大概框住物体就算对。这反映模型是否能找到物体。
mAP@0.5:0.95 这是 COCO 标准。计算 IoU 阈值从 0.5 到 0.95,步长 0.05(即 0.5, 0.55, ..., 0.95)的10个不同 mAP 的平均值。 严格标准。不仅要求找到物体,还要求框得非常准。这是学术界和工业界最看重的指标。
6、实战解读
假设你训练了两个 YOLO 模型:
模型 A:mAP@0.5 = 95%,mAP@0.5:0.95 = 50%
模型 B:mAP@0.5 = 90%,mAP@0.5:0.95 = 85%
解读:
在宽松标准下,A 比 B 强 (95% > 90%),说明 A 基本不会漏掉物体。
但在严格标准下,B 远胜于 A (85% > 50%)。这意味着模型 A 虽然找到了物体,但框的位置不太准(可能偏大或偏小),而模型 B 不仅找到了,还框得严丝合缝。
总结
AP:衡量模型在某一个类别上的综合性能(准+全)。
mAP:衡量模型在所有类别上的平均综合性能。
在 YOLO 里,mAP 越高,通常意味着模型越好。
7、YOLO检测
这是一个非常核心且实用的问题。那个数字通常被称为置信度(Confidence Score),但它其实包含了两个层面的信息。
简单来说,这个数字表示:模型有多大的把握认为这个框里真的有东西,以及它觉得这个东西和自己认为的类别有多像。
为了让你彻底看懂这个数字的含义,我们可以把这个概率拆解成两部分来看:
(1)双重含义的乘积
在 YOLO 的内部逻辑里,框上的最终得分是通过下面这个公式算出来的:
cpp
最终得分=Objectness(物体性)× Class Probability(类别概率)
这意味着你看到的那个数字(比如 0.85),实际上是模型问了自己两个问题后的综合打分:
第一问:这个框里真的有物体吗?(物体性分数)
含义:这个框的正中间是否覆盖了一个物体的中心?还是说它框住的只是一片杂乱的背景(比如天空、草地、墙上的纹理)?
作用:这是 YOLO 防止误检的关键。如果这个值很低(比如 0.1),说明模型也觉得这里可能啥也没有,只是随便框一下。
第二问:这个物体属于这一类吗?(类别概率)
含义:如果框里确实有东西,那这个东西是"人"的概率有多大?是"猫"的概率有多大?
作用:这是 YOLO 进行分类判断的依据。YOLO 会计算所有类别(如人、车、狗)的概率,然后取最高的那个。
(2)实战举例
假设你训练了一个能检测"猫"和"狗"的 YOLO 模型,现在给了一张图:
场景 A:一只猫
模型判断:框中心确实有物体(物体性 = 0.95)。
模型判断:这个东西像猫的概率是 0.98,像狗的概率是 0.01。
最终分数 = 0.95×0.98 = 0.93。
显示:框上写着"猫 0.93"。
场景 B:一团像猫的乌云
模型判断:这个形状有点像猫,但不太确定是不是真的有实体(物体性 = 0.40)。
模型判断:如果非要说是什么,它像猫的概率是 0.90(因为乌云没有狗的轮廓)。
最终分数 = 0.40×0.90 = 0.36。
显示:框上可能显示"猫 0.36"。如果你设置了阈值 0.5,这个框会被过滤掉不显示;如果阈值设为 0.3,它就会显示出来,但你知道这是个低分预测,很可能错了。
(3)为什么是一个数字而不是两个?
你可能会问:为什么不把这两个数字都显示出来?
因为在大多数应用场景(比如自动驾驶、安防监控)中,用户只关心最终结果。模型把"有没有物体"和"是什么物体"打包成一个最终的信心指数,用户只需要根据这个数字决定是否采信模型的判断。
(4)这个数字的用途:过滤
在 YOLO 输出结果后,开发者通常会设置一个置信度阈值:
阈值 0.5:只有分数 > 0.5 的框才显示。这样画面干净,误检少,但可能漏掉一些模糊的目标。
阈值 0.3:更多框会显示出来,能找出更多目标,但也会出现一些误检(比如把影子当成狗)。
总结
你看到的那个框上的概率数字,是 YOLO 经过深思熟虑后给你的最终信心指数。它综合了:
这里真的有东西吗?
这个东西确实是我认为的那类东西吗?
所以当你看到"狗 0.92"时,可以理解为:模型有 92% 的把握认定,这个框的位置存在一个物体,并且这个物体就是狗。