精度评估与 Bad Case 优化:从 mAP 到业务指标
精度评估与 Bad Case 优化:从 mAP 到业务指标
模型训完、量化完、部署完,不代表就完事了。上线后效果怎么样、哪里不准、为什么错、怎么改进,这些才是落地的关键。这篇讲精度评估方法、误检漏检分析、bad case 分类和迭代优化的流程。
大家好,我是黒漂技术佬。
很多人做模型,训练完看一眼 mAP 就觉得完事了。实际上线才发现:mAP 挺高,但业务上各种误检漏检,用户投诉一堆。
mAP 只是一个综合指标,不能反映所有问题。要做好落地,必须深入分析 bad case,找到问题,针对性优化。
这篇讲怎么评估模型精度、怎么分析错误、怎么分类 bad case、怎么迭代优化。
一、先搞清楚:评估什么指标?
目标检测常用指标
mAP(mean Average Precision)
最常用的综合指标,所有类别的平均精度均值。
- 优点:综合、公平
- 缺点:太笼统,看不出具体哪里错了
Precision / Recall
- Precision(精确率):检测出来的里面,有多少是对的 → 误检率
- Recall(召回率):真实目标里,检测到了多少 → 漏检率
业务上:
- 误检代价高 → 看重 Precision
- 漏检代价高 → 看重 Recall
售货柜商品识别:漏检 = 少收钱(公司损失),误检 = 多收钱(客诉),都不能太高。
各类别 AP
每个类别单独算 AP,看哪些类别效果差。
不同尺寸目标的 AP
小目标、中目标、大目标分别算,看小目标是不是短板。
业务指标更重要
技术指标再好看,业务指标不行也白搭。
售货柜的业务指标:
- 订单识别准确率:整单商品识别对不对
- 单品识别率:每个商品被正确识别的概率
- 误触发率:没人的时候会不会误报
- 异常处理率:特殊场景(手遮挡、商品叠放)能不能处理
最终是业务指标说了算,mAP 只是参考。
二、测试集怎么建?
评估的前提是有一个好的测试集。
测试集的要求
- 和训练集不重叠:不能用训练数据测,那是自欺欺人
- 覆盖真实场景:各种光照、角度、遮挡都要有
- 类别分布合理:和实际场景分布一致
- 标注质量高:测试集标注必须准,不然评估没意义
测试集构成建议
- 正常场景:60%
- 困难场景(遮挡、反光、模糊):20%
- 边界 case(部分露出、叠放):20%
全是简单图的测试集,精度虚高,上线就崩。
测试集大小
- 几百张:大概看看效果
- 1000-3000 张:比较靠谱的评估
- 10000+ 张:统计显著,细分分析有意义
根据项目规模来,至少几百张起步。
三、Bad Case 分析流程
第一步:跑测试集,收集所有错误
把测试集全部推理一遍,记录:
- 漏检:GT 有,模型没检测出来
- 误检:模型检测出来了,GT 没有
- 分类错误:检测到了,但类别认错了
- 定位不准:框偏移太大
第二步:按类型分类
把错误分类,统计占比:
| 错误类型 | 数量 | 占比 | 典型场景 |
|---|---|---|---|
| 小目标漏检 | 128 | 35% | 远处的小商品 |
| 遮挡漏检 | 96 | 26% | 手挡住、商品叠放 |
| 反光误检 | 52 | 14% | 玻璃柜反光 |
| 相似品类错分 | 43 | 12% | 两种可乐分不清 |
| 背景误检 | 32 | 9% | 花纹、标签被检测成商品 |
| 其他 | 15 | 4% | - |
一眼就能看出主要问题在哪。
第三步:按场景分类
再按场景维度分:
- 光照:强光 / 弱光 / 正常
- 角度:正视角 / 侧视角
- 距离:近 / 中 / 远
- 遮挡:无 / 部分 / 严重
找到哪个场景下效果最差。
第四步:根因分析
每个主要错误类型,分析原因:
例:小目标漏检
- 原因 1:训练集中小目标样本少
- 原因 2:输入分辨率不够,小目标像素太少
- 原因 3:量化后小目标特征损失大
例:相似品类错分
- 原因 1:两类商品外观确实很像
- 原因 2:训练数据区分度不够
- 原因 3:特征提取不够细
四、常见 Bad Case 类型与优化方法
1. 漏检(Recall 低)
原因
- 训练数据里这类目标少
- 目标太小 / 太模糊
- 置信度阈值设太高
- 遮挡严重
优化方法
- 降低置信度阈值:简单直接,召回上去了但精确率会掉一点
- 补充对应场景的数据:缺什么补什么
- 提高输入分辨率:小目标多就加大输入尺寸
- 数据增强加强:随机缩放、裁剪,制造更多小目标
- 专门的小目标检测头:加一个高分辨率的检测分支
2. 误检(Precision 低)
原因
- 背景里有类似目标的东西
- 训练集负样本不够
- 阈值太低
优化方法
- 提高置信度阈值:简单直接
- 加入难例负样本:把误检的背景图加进去训
- 困难样本挖掘:把模型容易搞错的样本重点训练
- 增加训练数据多样性:更多背景、更多场景
3. 分类错误
原因
- 两类确实长得像
- 类别数据不均衡
- 特征区分度不够
优化方法
- 补充易错类别的数据:增加相似品类的样本
- 细粒度特征:加注意力、改 backbone
- 类别均衡采样:训练时少的类别多采样
- 后处理规则:业务上能区分的,加规则辅助(比如位置、价格)
4. 定位不准(框偏移)
原因
- 标注本身不准
- 模型回归能力不够
- 量化损失
优化方法
- 检查标注质量:先确认标注准不准
- 增加定位损失权重:训练时调 loss 权重
- CIoU / DIoU loss:更好的回归损失函数
- 更大的输入尺寸:像素多了定位更准
5. 特定场景效果差
比如晚上、逆光、雨天效果差。
优化方法
- 补充该场景的数据:最直接有效
- 针对性数据增强:模拟暗光、加噪点
- 图像预处理:暗光增强、去反光
- 多模型融合:不同场景用不同模型(复杂了点)
五、迭代优化流程
模型优化不是一锤子买卖,是循环迭代的过程。
第一轮:基线
- 训个 baseline 模型
- 跑测试集,评估指标
- 分析 bad case,找出 Top3 问题
第二轮:数据优化
- 针对主要问题补充数据
- 加强对应的数据增强
- 再训一版,看提升多少
第三轮:模型优化
- 数据优化后还不行,考虑调模型
- 换大一点的模型、加模块、调结构
- 对比收益和速度代价
第四轮:后处理优化
- 加业务规则过滤误检
- NMS 参数调优
- 时序融合(视频流多帧结果融合)
循环往复
- 上线收集真实 bad case
- 加入测试集,补充训练集
- 再训再评估
- 直到满足业务要求
六、视频流场景的特殊优化
售货柜是视频流,不是单张图,可以利用时序信息。
1. 多帧融合
连续几帧都检测到同一个目标,置信度更高;单帧偶然出现的,可能是误检。
连续 3 帧都检测到 → 确认是真目标 只出现 1 帧 → 可能是误检,过滤掉简单的时序过滤就能去掉不少误检。
2. 轨迹追踪
用目标追踪(DeepSORT、ByteTrack)把同一目标在不同帧关联起来:
- 减少重复检测
- 补全短暂遮挡的漏检
- 轨迹平滑,框更稳
3. 结果投票
多帧结果投票决定最终类别:
帧1: 可乐 置信度 0.8 帧2: 可乐 置信度 0.7 帧3: 雪碧 置信度 0.6 → 最终:可乐(2票胜出)比单帧识别准很多。
💡 售货柜项目里,加了多帧投票后,单品识别准确率提升了 3 个点,几乎零成本。
七、量化后的精度问题排查
部署到 RK3588 上精度掉了,怎么排查?
第一步:确认 FP16 精度正常
先测 FP16(不量化)版本的精度:
- FP16 也掉很多 → 不是量化的问题,是转换/预处理的问题
- FP16 正常,INT8 掉 → 是量化的问题
第二步:检查预处理对齐
最常见的坑:
- RGB/BGR 搞反了
- 归一化 mean/std 不对
- resize 方式不一样(letterbox vs 直接缩放)
- 像素值范围(0-255 vs 0-1)
逐个对比 PC 端和板端的预处理,确保输入完全一致。
第三步:逐层对比输出
拿同一输入,对比 ONNX 和 RKNN 每层的输出差异,找误差最大的层。
第四步:针对性优化
找到问题层后:
- 某层量化误差大 → 指定那层 FP16
- 整体都大 → 优化校准集、换量化方法
- 第一层误差大 → 输入预处理的问题
八、实际案例:售货柜 bad case 优化
分享一下售货柜项目的一轮优化:
初始版本问题
- 整体 mAP:94%
- 业务问题:部分商品漏检、反光时误检、相似品类偶尔认错
Bad Case 分析
- 底部货架商品漏检多(角度偏、光线暗)
- 玻璃反光时容易把反光点误检成商品
- 两种口味的薯片经常认错
优化措施
- 补充数据:底部货架角度 +500 张,反光场景 +300 张,易错薯片各加 200 张
- 数据增强:加随机亮度、加模拟反光的增强
- 阈值调整:置信度从 0.25 调到 0.3,减少误检
- 多帧投票:连续 3 帧结果投票,过滤单帧误检
优化结果
- mAP:94% → 96.2%
- 底部漏检率:12% → 4%
- 反光误检:每小时 5 次 → 0.3 次
- 薯片认错率:8% → 2%
业务指标大幅提升,用户投诉明显减少。
九、常见误区
误区 1:只看 mAP
mAP 高不代表业务好用。误检集中在某个高频场景,mAP 掉不多但用户感知很强。
误区 2:盲目加数据
什么数据都往里加,不如针对性补充 bad case 数据。100 张难例数据顶得上 1000 张普通数据。
误区 3:一上来就换大模型
精度不够先看数据、看训练,最后才考虑换大模型。很多时候数据优化的收益比换模型大。
误区 4:测试集和训练集同分布
测试集太简单,评估结果虚高。测试集要比训练集「难」一点,才能真实反映上线效果。
误区 5:优化只靠算法
业务规则、后处理、时序融合,这些工程手段的优化效果往往不比算法差,而且更快。
十、本篇小结
- 评估不能只看 mAP,Precision/Recall、各类别 AP、业务指标都要看
- 测试集要覆盖真实场景,困难场景不能少
- Bad Case 分析:分类统计 → 找主要问题 → 根因分析 → 针对性优化
- 常见问题:漏检、误检、错分、定位不准,各有对应的优化方法
- 视频流场景可以用多帧融合、轨迹追踪、结果投票进一步提升
- 量化掉精度先排查预处理,再分析是哪层误差大
- 迭代优化:分析 → 补数据 → 调模型 → 加后处理,循环提升
- 工程优化(后处理、规则)有时候比算法优化见效更快
下一篇讲部署工程化:模型版本管理、热更新、异常处理、监控告警——生产环境要考虑的那些事。
我是黒漂技术佬。