2. 评估指标概览:精度、召回率、F1分数与mAP
做模型评估,说白了就是回答一个问题:这个模型到底好不好用?
我见过不少新手,训练完模型一看 loss 降到底了,就以为大功告成。结果一上测试集,全是误检。为什么?因为 loss 低不代表模型真的学会了。你得用一套靠谱的指标去衡量它。
这一章,我们就来拆解几个最核心的评估指标。它们是你判断模型好坏的“尺子”。
2.1 从一张“混淆矩阵”说起
所有分类指标的根,都长在一张表上——混淆矩阵。它把预测结果和真实标签做了个交叉统计。
| 真实 \ 预测 | 预测为正类 (Positive) | 预测为负类 (Negative) |
|---|---|---|
| 实际为正类 | TP (True Positive) 正确检测 |
FN (False Negative) 漏检 |
| 实际为负类 | FP (False Positive) 误检 |
TN (True Negative) 正确排除 |
你不需要死记硬背这四个格子。记住一句话就行:“T”代表预测对了,“F”代表预测错了;P/N 代表模型预测的结果。
举个例子:模型说“这里有行人”,结果真的有——这就是 TP。模型说“这里有行人”,结果是个垃圾桶——这就是 FP。
核心公式速记:
- TP:模型说“是”,实际也是“是”。
- FP:模型说“是”,实际是“否”。(误检)
- FN:模型说“否”,实际是“是”。(漏检)
- TN:模型说“否”,实际也是“否”。
2.2 精度 (Precision) —— 你的模型有多“靠谱”?
精度问的是:在所有模型认为是“目标”的东西里,有多少是真的?
Precision = TP / (TP + FP)
我习惯把精度理解为“模型的承诺兑现率”。
比如你做一个安全帽检测。模型框出了 100 个安全帽,其中 90 个是真的,10 个是误检。那精度就是 90%。
什么时候该关注精度? 当误检代价很高的时候。比如自动驾驶,你宁可漏检一个行人,也别把路边的广告牌识别成行人然后一脚急刹。误检的后果太严重了。
我的经验: 在工业质检项目中,精度往往比召回率更重要。因为误检一个良品为次品,会直接拉高生产成本。我曾经调一个模型,为了把精度从 92% 提到 95%,花了两周时间卡阈值。值不值?对于客户来说,值。
2.3 召回率 (Recall) —— 你的模型有多“全面”?
召回率问的是:在所有真正的目标里,模型找出来了多少?
Recall = TP / (TP + FN)
召回率衡量的是“漏检率”。
还是安全帽的例子。工地上有 100 个工人戴了安全帽,模型只找到了 80 个,漏了 20 个。那召回率就是 80%。
什么时候该关注召回率? 当漏检的代价极高时。比如安防监控,你宁可误报 100 次,也不能漏掉一次真正的入侵。漏了,就是事故。
注意: 精度和召回率是一对“冤家”。你压低了置信度阈值,召回率会上升(因为模型更敢猜了),但 FP 也会变多,精度就下降。反过来,你提高阈值,精度上去了,召回率又掉下来了。这就是经典的 Precision-Recall 权衡。
2.4 F1 分数 —— 一个数字,搞定平衡
既然精度和召回率总是打架,那有没有一个指标能综合看?有,就是 F1 分数。
F1 = 2 * (Precision * Recall) / (Precision + Recall)
F1 是精度和召回率的调和平均数。它不会像算术平均那样被一个高分拉偏。只有当精度和召回率都高的时候,F1 才会高。
举个例子:
- 模型 A:精度 90%,召回率 90% → F1 = 90%
- 模型 B:精度 99%,召回率 50% → F1 ≈ 66%
你看,模型 B 虽然精度很高,但漏了一半的目标,F1 直接把它打回原形。
我的习惯: 在做模型对比时,我第一眼看的往往不是精度或召回率,而是 F1。它像一个“公平的裁判”,能快速告诉你哪个模型更均衡。如果两个模型 F1 差不多,我才会去细看它们的 Precision 和 Recall 曲线。
2.5 平均精度 (mAP) —— 目标检测的“终极裁判”
上面说的精度、召回率、F1,都是针对单个类别的。但在目标检测里,我们通常有多个类别(比如人、车、自行车),而且每个检测框还有一个置信度分数。
这时候就需要 mAP (mean Average Precision) 出场了。
2.5.1 先理解 AP (Average Precision)
AP 是针对单个类别的。它的计算过程有点绕,我尽量说清楚。
- 排序: 把模型对该类别所有检测框的置信度从高到低排序。
- 画 PR 曲线: 从最高置信度开始,依次计算每个点对应的 Precision 和 Recall,画出一条曲线。
- 计算面积: AP 就是这条 PR 曲线下的面积。
说白了,AP 衡量的是:不管你把阈值设多高或多低,这个模型平均表现怎么样。
2.5.2 再理解 mAP
mAP 就是把所有类别的 AP 取个平均值。
mAP = (1 / N) * Σ AP_i
其中 N 是类别总数,AP_i 是第 i 个类别的 AP。
在 YOLO 的评估中,你经常会看到 mAP@0.5 和 mAP@0.5:0.95 这两个指标:
| 指标 | 含义 | 我的看法 |
|---|---|---|
| mAP@0.5 | IoU 阈值设为 0.5 时的 mAP | 比较宽松,适合快速看模型有没有“学会” |
| mAP@0.5:0.95 | IoU 阈值从 0.5 到 0.95,步长 0.05,取平均 | 非常严格,考验框的定位精度。我一般用这个来定最终模型 |
避坑指南: 我曾经在一个项目里只盯着 mAP@0.5 看,觉得模型效果不错。结果部署到现场,发现框总是偏大,把目标周围的东西也包进去了。后来换成 mAP@0.5:0.95 重新评估,才发现模型定位能力其实很差。所以,别只看一个指标。
2.6 一张图看懂所有指标的关系
下面这张图,是我自己梳理的评估指标逻辑链。你可以把它当作一个“导航图”。
2.7 总结一下,怎么选?
指标没有的好坏,关键看你的业务场景。我列了个速查表,你可以直接拿来用:
| 场景 | 优先关注的指标 | 原因 |
|---|---|---|
| 自动驾驶 / 安防 | 召回率 (Recall) | 漏检的代价远大于误检 |
| 工业质检 / 内容审核 | 精度 (Precision) | 误检会浪费大量人力或成本 |
| 模型选型 / 通用对比 | F1 分数 / mAP | 综合评估,不偏科 |
| 高精度定位需求 | mAP@0.5:0.95 | 对框的贴合度要求高 |
最后提醒一句: 别只看一个指标就下结论。我见过有人拿着 mAP 很高的模型去跑视频流,结果发现模型对特定角度完全失效。所以,指标是工具,不是真理。多维度评估,再结合可视化结果看看,心里才有底。