2. 评估指标体系:从准确率到 mAP

做缺陷检测,最怕什么?

不是模型跑不动,而是你根本不知道它到底好不好。

我见过不少团队,模型在测试集上准确率 99%,一上线就崩。为什么?因为指标选错了。今天我们就把这套评估体系彻底讲透。你想想看,如果连模型好坏都说不清楚,怎么跟老板汇报?怎么跟客户交付?

2.1 从混淆矩阵说起

所有指标,都源于一个 2×2 的表格。我习惯叫它「四格表」。

真实情况 \ 预测结果 预测为正例 (缺陷) 预测为负例 (正常)
实际为正例 (有缺陷) TP (True Positive)
正确检出缺陷
FN (False Negative)
漏检了缺陷
实际为负例 (正常) FP (False Positive)
误检了正常品
TN (True Negative)
正确放过正常品
我的记忆口诀:TP 和 TN 是「做对了」;FP 是「冤枉好人」;FN 是「放走坏人」。在缺陷检测里,FN 往往比 FP 更致命——漏检一个缺陷,可能整批货都要召回。

2.2 核心指标逐个拆解

准确率 (Accuracy)

公式很简单:(TP + TN) / (TP + TN + FP + FN)。

但我要泼盆冷水:准确率在缺陷检测里基本没用。为什么?因为缺陷样本通常只占 1% 甚至更少。你就算把所有产品都判为正常,准确率也有 99%。这能说明模型好吗?显然不能。

精确率 (Precision) 与召回率 (Recall)

这两个才是缺陷检测的基石。

  • 精确率 = TP / (TP + FP) —— 你检出的缺陷里,有多少是真的缺陷?说白了就是「检出质量」。
  • 召回率 = TP / (TP + FN) —— 真实的缺陷里,你找出了多少?说白了就是「检出能力」。

我在项目中遇到过这样的场景:客户要求召回率必须 99.9% 以上,但精确率可以放宽。因为对他们来说,宁可多误检几个正常品(大不了人工复判),也绝不能漏掉一个缺陷。嗯,这就是典型的「召回率优先」策略。

F1-score

精确率和召回率往往此消彼长。F1-score 就是它们的调和平均:2 × (P × R) / (P + R)。

我个人习惯用 F1 做模型选型的「第一眼指标」。如果两个模型 F1 差不多,再去看具体的 P 和 R 哪个更符合业务需求。

2.3 曲线与面积:更全面的视角

PR 曲线 (Precision-Recall Curve)

固定一个阈值算 P 和 R 太片面了。PR 曲线把阈值从 0 到 1 走一遍,画出 P 随 R 变化的轨迹。

关键认知:在缺陷检测这种正负样本极不平衡的场景下,PR 曲线比 ROC 曲线更真实。因为 ROC 曲线受负样本(正常品)数量影响太大,容易给你「模型很好」的错觉。

ROC 曲线 (Receiver Operating Characteristic)

横轴是 FPR(假正率 = FP / (FP + TN)),纵轴是 TPR(召回率)。

ROC 曲线在医学诊断、信用评分等领域很常用。但在缺陷检测里,我一般只把它当辅助参考。为什么?因为正常品数量巨大,FPR 会被稀释得很小,曲线看起来总是很漂亮,但实际误检数可能高得吓人。

AP 与 mAP

AP (Average Precision) 就是 PR 曲线下的面积。一个数字,概括了模型在不同阈值下的综合表现。

mAP (mean Average Precision) 是多个类别 AP 的平均值。如果你检测划痕、脏污、气泡三种缺陷,mAP 就是三个 AP 的平均。

指标 适用场景 我的建议
准确率 正负样本均衡 缺陷检测慎用
精确率/召回率 所有缺陷检测 必看,结合业务定权重
F1-score 模型选型对比 第一眼指标
PR 曲线 + AP 样本不平衡 最推荐,能看清全貌
ROC 曲线 样本平衡或医学诊断 辅助参考,别单独用
mAP 多类别缺陷检测 最终汇报用,简洁有力

2.4 知识体系总览

下面这张图,把整个评估体系串起来了。我建议你保存下来,每次做评估时对照着看。

缺陷检测评估指标体系 混淆矩阵 (Confusion Matrix) TP / TN / FP / FN 一切指标的起点 核心指标 准确率 (Accuracy) 精确率 (Precision) 召回率 (Recall) F1-score 曲线与面积 PR 曲线 ROC 曲线 AP (Average Precision) mAP (mean AP) 应用建议 缺陷检测首选:精确率 + 召回率 + PR 曲线 + AP 多类别场景:mAP 作为最终汇报指标

2.5 避坑指南与实战建议

我曾经踩过的坑:有一次给客户交付模型,mAP 做到了 0.95,客户也很满意。结果上线第一天,误检率高达 30%。后来排查发现,mAP 虽然高,但那是针对「大缺陷」的。小缺陷(比如 10 像素以下的划痕)的 AP 只有 0.3。从那以后,我坚持按缺陷尺寸分层评估,大缺陷看 mAP,小缺陷单独看召回率。

给你三个实战建议:

  1. 先定业务目标,再选指标。客户能接受误检还是漏检?这决定了你优化 P 还是 R。
  2. 别只看一个数字。mAP 高不代表模型好用。把每个类别的 AP 列出来,看看短板在哪。
  3. 阈值别用默认的 0.5。我习惯在 PR 曲线上找一个「业务可接受的点」。比如召回率必须 99%,那就看对应的精确率是多少,能不能接受。
一个小工具:我写了个脚本,每次训练完自动输出所有指标的曲线和表格。你可以用 sklearn 的 metrics 模块,几行代码就能搞定。但记住,工具是死的,业务是活的。指标只是帮你做决策,不是决策本身。