公司动态
精度评估与 Bad Case 优化:从 mAP 到业务指标
精度评估与 Bad Case 优化从 mAP 到业务指标模型训完、量化完、部署完不代表就完事了。上线后效果怎么样、哪里不准、为什么错、怎么改进这些才是落地的关键。这篇讲精度评估方法、误检漏检分析、bad case 分类和迭代优化的流程。大家好我是黒漂技术佬。很多人做模型训练完看一眼 mAP 就觉得完事了。实际上线才发现mAP 挺高但业务上各种误检漏检用户投诉一堆。mAP 只是一个综合指标不能反映所有问题。要做好落地必须深入分析 bad case找到问题针对性优化。这篇讲怎么评估模型精度、怎么分析错误、怎么分类 bad case、怎么迭代优化。一、先搞清楚评估什么指标目标检测常用指标mAPmean Average Precision最常用的综合指标所有类别的平均精度均值。优点综合、公平缺点太笼统看不出具体哪里错了Precision / RecallPrecision精确率检测出来的里面有多少是对的 → 误检率Recall召回率真实目标里检测到了多少 → 漏检率业务上误检代价高 → 看重 Precision漏检代价高 → 看重 Recall售货柜商品识别漏检 少收钱公司损失误检 多收钱客诉都不能太高。各类别 AP每个类别单独算 AP看哪些类别效果差。不同尺寸目标的 AP小目标、中目标、大目标分别算看小目标是不是短板。业务指标更重要技术指标再好看业务指标不行也白搭。售货柜的业务指标订单识别准确率整单商品识别对不对单品识别率每个商品被正确识别的概率误触发率没人的时候会不会误报异常处理率特殊场景手遮挡、商品叠放能不能处理最终是业务指标说了算mAP 只是参考。二、测试集怎么建评估的前提是有一个好的测试集。测试集的要求和训练集不重叠不能用训练数据测那是自欺欺人覆盖真实场景各种光照、角度、遮挡都要有类别分布合理和实际场景分布一致标注质量高测试集标注必须准不然评估没意义测试集构成建议正常场景60%困难场景遮挡、反光、模糊20%边界 case部分露出、叠放20%全是简单图的测试集精度虚高上线就崩。测试集大小几百张大概看看效果1000-3000 张比较靠谱的评估10000 张统计显著细分分析有意义根据项目规模来至少几百张起步。三、Bad Case 分析流程第一步跑测试集收集所有错误把测试集全部推理一遍记录漏检GT 有模型没检测出来误检模型检测出来了GT 没有分类错误检测到了但类别认错了定位不准框偏移太大第二步按类型分类把错误分类统计占比错误类型数量占比典型场景小目标漏检12835%远处的小商品遮挡漏检9626%手挡住、商品叠放反光误检5214%玻璃柜反光相似品类错分4312%两种可乐分不清背景误检329%花纹、标签被检测成商品其他154%-一眼就能看出主要问题在哪。第三步按场景分类再按场景维度分光照强光 / 弱光 / 正常角度正视角 / 侧视角距离近 / 中 / 远遮挡无 / 部分 / 严重找到哪个场景下效果最差。第四步根因分析每个主要错误类型分析原因例小目标漏检原因 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 优化分享一下售货柜项目的一轮优化初始版本问题整体 mAP94%业务问题部分商品漏检、反光时误检、相似品类偶尔认错Bad Case 分析底部货架商品漏检多角度偏、光线暗玻璃反光时容易把反光点误检成商品两种口味的薯片经常认错优化措施补充数据底部货架角度 500 张反光场景 300 张易错薯片各加 200 张数据增强加随机亮度、加模拟反光的增强阈值调整置信度从 0.25 调到 0.3减少误检多帧投票连续 3 帧结果投票过滤单帧误检优化结果mAP94% → 96.2%底部漏检率12% → 4%反光误检每小时 5 次 → 0.3 次薯片认错率8% → 2%业务指标大幅提升用户投诉明显减少。九、常见误区误区 1只看 mAPmAP 高不代表业务好用。误检集中在某个高频场景mAP 掉不多但用户感知很强。误区 2盲目加数据什么数据都往里加不如针对性补充 bad case 数据。100 张难例数据顶得上 1000 张普通数据。误区 3一上来就换大模型精度不够先看数据、看训练最后才考虑换大模型。很多时候数据优化的收益比换模型大。误区 4测试集和训练集同分布测试集太简单评估结果虚高。测试集要比训练集「难」一点才能真实反映上线效果。误区 5优化只靠算法业务规则、后处理、时序融合这些工程手段的优化效果往往不比算法差而且更快。十、本篇小结评估不能只看 mAPPrecision/Recall、各类别 AP、业务指标都要看测试集要覆盖真实场景困难场景不能少Bad Case 分析分类统计 → 找主要问题 → 根因分析 → 针对性优化常见问题漏检、误检、错分、定位不准各有对应的优化方法视频流场景可以用多帧融合、轨迹追踪、结果投票进一步提升量化掉精度先排查预处理再分析是哪层误差大迭代优化分析 → 补数据 → 调模型 → 加后处理循环提升工程优化后处理、规则有时候比算法优化见效更快下一篇讲部署工程化模型版本管理、热更新、异常处理、监控告警——生产环境要考虑的那些事。我是黒漂技术佬。