AOI 实战第五篇:c_broken 漏检严重,V4 迭代背后的权衡
2026/9/12 19:19:30 网站建设 项目流程

过杀下降 vs 漏检上升,工业检测的两难选择


开头:过杀太严重,客户投诉

你有没有过这种经历?

模型精度 99%,但误杀率太高——正常芯片被判定为缺陷,客户投诉不断。你降低阈值,误杀下降了,但漏检又上来了。

过杀和漏检,永远是跷跷板。

AOI 项目的芯片缺陷分类从 V1 迭代到 V4,核心目标就是「降低过杀」。V4 的 a_chip 误杀率大幅下降,但 c_broken 漏检率从 94% 降到了 47%。

不是因为迭代有多难——而是因为「过杀 vs 漏检」的权衡没有标准答案。


一、过杀 vs 漏检

过杀(False Positive): 正常芯片被判定为缺陷 后果:返工成本增加,客户投诉 漏检(False Negative): 缺陷芯片被漏掉 后果:缺陷产品流出,质量事故 权衡: 降低过杀 -> 漏检上升 降低漏检 -> 过杀上升

工业场景的选择

安全关键(汽车/医疗):宁可过杀,不可漏检 消费电子:平衡过杀和漏检 AOI 项目:降低过杀优先(a_chip 误杀严重)

二、V1 到 V4 的迭代历史

各版本对比

版本整体准确率c_broken 召回a_chip 误杀变化
V198.11%-严重基线
V298.65%-改善+0.54%
V398.97%94%改善+0.32%
V498.77%47%大幅改善-0.20%

V4 的核心变化

V3 -> V4: 过杀下降:a_chip 误杀大幅改善 漏检上升:c_broken 召回从 94% 降到 47% 原因: V4 加了 hard 样本增强(把容易误判的 a_chip 样本增强后回灌训练) 模型学到了「不要把 a_chip 误判为 c_broken」 但同时也学到了「不要把 c_broken 判定为缺陷」

三、AOI 项目的缺陷分类

数据集

数据集图片数用途
train_sets/v3基线V3 训练
train_sets/v4_cbroken_safe1,450V4 训练
train_sets/v4_finetune_no_extra同 V4,移除 extra hard对照组

训练配置

# V4 训练model=YOLO("runs/train/defect_cls_v3/weights/last.pt")# 从 V3 续训model.train(data="train_sets/v4_cbroken_safe",epochs=50,batch=128,imgsz=224,amp=False,cos_lr=True,)

V4 vs 对照组

V4(加了 extra hard 样本): 整体准确率:98.77% c_broken 召回:47% 对照组(移除 extra hard 样本): 整体准确率:98.77% c_broken 召回:47% 结论:extra hard 样本对 V4 精度无显著影响

四、V4 过杀下降的原因

hard 样本增强

V4 加了 hard 样本增强: 1. 识别容易误判的 a_chip 样本 2. 对这些样本做增强(翻转/旋转/缩放) 3. 把增强后的样本回灌训练集 4. 模型学到:这些样本是 a_chip,不是 c_broken 效果: a_chip 误杀大幅下降 但 c_broken 漏检也上升了

为什么漏检会上升?

模型学到的决策边界: V3:c_broken 的边界较宽(容易误判 a_chip 为 c_broken) V4:c_broken 的边界较窄(不容易误判 a_chip 为 c_broken) 代价: V4 的 c_broken 边界太窄,真正的 c_broken 也被漏掉了

五、避坑指南

坑1:只看整体准确率

现象:整体准确率 99%,但 c_broken 漏检严重。
原因:c_broken 样本太少,整体准确率被 a_chip 拉高。
解法:看各类别的召回率,不能只看整体准确率。

坑2:不看混淆矩阵

现象:不知道哪些类被混淆了。
解法:看混淆矩阵,了解 c_broken 被误判为什么。

坑3:V4 和 V3 混淆

现象:V4 的 ONNX 文件和 V3 的混淆。
解法:版本化管理,每个版本有独立的文件名。

坑4:hard 样本增强过拟合

现象:hard 样本增强后,模型过拟合。
解法:控制 hard 样本数量,不要太多。

坑5:不看召回率

现象:只看准确率,不看召回率。
解法:重点关注 c_broken 的召回率(漏检率)。


AOI 项目优秀实践

  • 版本化迭代:V1->V2->V3->V4,每个版本有独立目录
  • hard 样本增强:V4 加了 hard 样本增强,降低过杀
  • 对照组实验:V4 vs 对照组,验证 extra hard 样本的效果

AOI 项目可改进之处

  • 缺少产线误杀统计:没有量化产线上的误杀率
  • 缺少 c_broken 漏检后果评估:没有评估漏检的质量风险
  • 缺少 A/B 测试框架:没有系统对比不同版本的产线表现

结尾

说回那个「过杀太严重,客户投诉」的故事。

后来我迭代了 4 个版本,V4 的 a_chip 误杀率大幅下降。但 c_broken 漏检率从 94% 降到了 47%。这是一个权衡:降低过杀的代价是漏检上升。

不是因为迭代有多难——而是因为「过杀 vs 漏检」的权衡没有标准答案。


翻翻你的项目:

  1. 你的模型过杀严重吗?漏检严重吗?
  2. 你看的是整体准确率还是各类别召回率?
  3. 你有版本化管理吗?V3 和 V4 的 ONNX 文件会混淆吗?

评论区说说你的缺陷分类是怎么权衡过杀和漏检的。


觉得有用?
收藏这篇,下次缺陷分类时翻出来对照。转发给你团队里那个天天被过杀折磨的同事。


下期预告:

.onnx 到 C++ 的最后一公里。
opset / IR / FP16 / dynamic batch,导出参数一个都不能错。
下一篇,我们聊 ONNX 导出与兼容性——「导出参数的正确姿势」。


本文是《AOI 芯片焊盘缺陷检测实战》系列第五篇。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询