工业视觉检测落地:从识别率陷阱到质量大脑的验收与部署

1. 99%识别率到底骗了谁:工厂里那笔算不清的账

工业视觉这个行当,最魔幻的一幕我见过不止一次:供应商在会议室投屏,混淆矩阵一摆,准确率 99.2%,台下鼓掌;三个月后产线验收,班组长拿着记录本说"一天误报两百多次,早就关掉了"。同一套模型,同一批图片,为什么数字能差这么多?问题不在于谁在撒谎,而在于"识别率"这三个字在实验室和在车间里根本不是一回事。工业视觉要真正变成工厂的"质量大脑",第一件要干的事不是换更大的模型,而是把指标口径掰开揉碎重新算一遍。

先说清楚这篇东西是写给谁的。如果你正在做产线的视觉检测项目,不管是自己带队落地,还是作为甲方去验收供应商的方案,或者你是算法工程师第一次被派到车间,那接下来的内容应该能帮你少走几个月的弯路。我不会讲太多论文里的东西,主要讲现场那套账怎么算、坑在哪里、怎么绕。

1.1 实验室指标与产线指标的三处口径差

第一处差在样本分布。实验室的数据集是人工挑过的,良品占大头,缺陷样本按类别均衡采样,每类凑够几百张。真实产线不是这样:某类缺陷一个月可能就出现三次,另一类天天有;换一批来料,缺陷形态整个变样;甚至同一台设备,早上开机前两小时和下午的成像都不一样——光源发热、镜头沾灰、环境光变化,都会让像素分布漂移。你在均衡数据集上跑出来的 99%,落到这种长尾分布上,召回率掉到 70% 都不奇怪。

第二处差在判定边界。实验室里一张图只有一个标签,是缺陷就是缺陷。产线上大量样本落在"说不清"的灰色地带:轻微划痕算不算?尺寸在公差边缘 0.01mm 的偏移算不算?这些样本在标注阶段就被不同的人贴上了不同标签,模型学到的其实是一团噪声。我见过一个项目,两个标注员对同一批 500 张图的判定一致率只有 82%,这种情况下模型准确率的天花板早就被标注质量锁死了,练到 99% 只能说明它过拟合了标注员的口径。

第三处差在评价方式。离线评估是"给一批图,出结果,比标签"。在线是"来一个件,必须在节拍内出结果,错了要有人兜底"。前者可以慢慢跑,后者要卡时间;前者错了只影响一行数字,后者错了要么流出到客户端,要么停机等人复判。这两种场景下的"准确率"根本不可比。

1.2 误检和漏检的成本根本不对称

这是最容易被忽略、但影响最大的一件事。在工厂里,漏检(把坏件判成好件)和误检(把好件判成坏件)的成本完全不在一个量级。

漏检的代价是流出:坏件装到总成上,轻则返工拆解,重则客户投诉、批量召回、质量索赔。一次批量流出事件的处理成本,可能顶得上一年的视觉系统投入。误检的代价是复判:多一个人看一眼,多花三十秒,最坏情况是停线几分钟。

我一般会给客户算这么一笔账:假设单件毛利 50 元,漏检流出后的处理成本(返工+运费+信誉折损)保守按 2000 元/件算,误检复判成本按 3 元/件算,两者差 600 多倍。这意味着什么?意味着在阈值设定上,宁可过杀一千,不可放过一个。但绝大多数供应商交付时用的是默认的 0.5 置信度阈值,也压根没跟客户讨论过这个比例关系,这就是后面扯皮的根源。

从统计上讲,这件事有个很干脆的结论:当漏检成本是误检成本的 k 倍时,最优判决阈值应该让似然比落在 k 附近,而不是落在 1 附近。翻译成人话就是,模型输出 0.15 的置信度,在均衡场景下判良品,在漏检代价极高的场景下就该判缺陷送复判。这个阈值不是拍脑袋定的,是要拿成本表算出来的。

1.3 真正的验收指标该怎么定

我的建议是,验收文件里别写"准确率≥99%"这种话,改成下面这组可测、可复现、可追责的指标:

指标定义建议写法
关键缺陷召回率致命缺陷被检出的比例≥99.5%,按缺陷类型分别考核
一般缺陷召回率非致命缺陷检出比例≥95%
过杀率良品被判为待复判/缺陷的比例≤3%,超出需说明
单件处理时间从触发到输出结果≤产线节拍的 70%
复判工作量每班次人工复判张数≤N 张/班,可量化
数据留存完整率图像+结果+参数完整落盘比例100%

关键在于最后一列要写"按缺陷类型分别考核"。整体召回率是个会被稀释的数字——如果某类致命缺陷只占样本的 1%,模型全判良品,整体召回率照样能到 99%。这种把戏在验收时非常好用,也非常坑人。所以验收清单里必须强制要求分类型出混淆矩阵,且每类样本数写明。

还有一条经验:验收要用产线真实来料,不能用供应商自己准备的样本集。我一般要求连续跑三个班次,覆盖换批、换班、开机、停机再启动这几个时间点。很多模型的问题就出在"停机两小时后重新开机"这个时刻——光源温度没稳定,图像整体偏暗,模型集体误判。这个场景在实验室永远测不出来。

2. 从"拍照打卡"到"质量大脑":整体架构怎么搭

"拍照打卡"这个词用得特别准。很多工厂的视觉系统本质上就是个打卡机:产品过来了,拍一张,出一个 OK/NG,结果往 PLC 一写,完事。图像存不存看心情,存了也没人看,看了也不分析,分析了也不改工艺。这套东西能干活,但它不产生任何增量价值,出了问题还得靠人拿放大镜翻。

"质量大脑"的区别不在于算法多先进,而在于它是不是处在一个闭环里。拍到的每一张图,都应该能回答三个问题:这个件为什么被判成这样?如果判错了,是谁的责任(成像、模型、标注还是工艺)?这批异常和上游哪个参数有关?能回答这三个问题,它才配叫大脑;回答不了,再高的识别率也只是个贵一点的打卡机。

2.1 先认清四个层级的成熟度

我在做项目评估时习惯把客户的现状归到四个层级里,因为不同层级该做的事完全不同,跳级做必然翻车。

第一级:单点检测。一个工位一个相机,独立判断,结果只给 PLC。这是绝大多数工厂的现状,也是"拍照打卡"的典型形态。

第二级:检测+追溯。图像和结果按件号落盘,能按批次、按时间、按设备反查。这一级看着简单,但真正做到的不多——很多系统的图像只存七天,硬盘一满就自动覆盖,出了批量问题根本查不到当时的图。我一般的建议是:缺陷图永久保留,良品图按周期滚动,且缺陷图的存储要单独做容量规划。

第三级:检测+反馈。结果不只是 OK/NG,还要有人工复判的确认结果回流,形成"模型判-人复核-结果回写"的循环。这一级的核心价值是让模型能持续迭代,而不是交付即巅峰。

第四级:检测+根因+干预。缺陷数据能和工艺参数(温度、压力、速度、来料批次)做关联分析,能定位到"这批划痕集中在二号模腔""这个时段的偏位和张力波动同步",进而推动工艺调整。到这一级,视觉系统才真正开始影响良率,而不只是记录良率。

绝大多数项目卡在二级到三级的门槛上,因为复判回流需要改流程、加人力、定责任,是管理问题不是技术问题。

2.2 光学与算法谁先先谁后

这个问题我被问过无数次,答案很干脆:成像不行,算法白搭。

我见过太多团队一上来就讨论用哪个 backbone、要不要上 Transformer,却没人去看一眼打光。结果是缺陷在图像里压根不可见,或者对比度低到人眼都要眯着看,然后指望模型从噪声里抠出信号。这不现实。

判断成像是否达标有个土办法:把缺陷图拿给三个没做过这个项目的人看,如果三个人都能在五秒内指出缺陷位置并达成一致,成像基本合格;如果三个人指的位置都不一样,那就是光学方案的问题,先回去改光源角度、加偏振片、换同轴光或者调背光,别急着调模型。

光学方案定下来之后,算法的工作量能砍掉一大半。我经手的一个表面缺陷项目,前期在算法上折腾了两个月,召回率卡在 85% 上不去;后来换了一个低角度环形光加一路暗场照明,同一套模型召回率直接到 96%。光学投入的那点钱,比两个月的算法人力便宜多了。

2.3 数据回流链路才是分水岭

我在前面说过,二三级之间的门槛是管理问题。具体难在哪?难在复判结果的格式统一和自动回写。

理想状态是:模型判 NG,自动弹窗给复判员,复判员点"确认缺陷"或"误报",这个结论带着图像 ID、时间戳、工位号自动写回数据库,进入下一轮训练集。听着很顺,但落地时会遇到一堆细节:

  • 复判员的操作要足够快,否则跟不上节拍,最后变成"懒得点,直接放过";
  • 复判界面必须显示模型给出的缺陷框和置信度,否则复判员等于从零判断,效率极低;
  • 误报样本要能自动打标签进入负样本池,否则模型永远不知道自己错在哪;
  • 复判数据要定期做一致性抽检,防止复判员疲劳后乱点。

这几条里任何一条没做好,回流链路就断了,系统永远停在二级。

3. 核心细节拆解:成像、样本、模型、部署

这一章是纯技术账,我会把几个必须算清楚的数字写出来,你可以直接拿去套。

3.1 成像方案的三笔硬账

第一笔:分辨率够不够。公式很朴素:

单像素精度 = 视野宽度 ÷ 相机横向像素数

假设视野 100mm × 80mm,用 500 万像素相机(2448 × 2048),单像素精度 = 100 ÷ 2448 ≈ 0.041mm。业内通行的经验是:最小缺陷尺寸至少要占 3 到 5 个像素,才能稳定检出。那么这套配置能稳定检出的最小缺陷是 0.041 × 3 ≈ 0.12mm。

如果你要检 0.05mm 的划痕,这套配置就不够。要么缩小视野(比如分两路相机),要么上更高分辨率(1200 万像素,单像素精度 0.025mm,0.05mm 占 2 个像素,还是不够),要么改光学放大。这时候很多团队会选择"先上算法超分",我的建议是别抱太大期望,超分出来的细节是猜的,不是测的,工业检测要的是可重复性,不是好看。

第二笔:曝光时间够不够。运动模糊是隐形杀手。公式:

允许曝光时间 = 允许模糊量 ÷ 运动速度

假设产线速度 500mm/s,允许模糊量为 1 个像素(0.041mm),则曝光时间 ≤ 0.041 ÷ 500 = 82 微秒。80 微秒是很短的曝光,普通工业相机在连续光下很难拿到足够亮度,这时候就要上频闪光源 + 硬件触发,让光源在曝光的瞬间打一束强光。这一步省不得,省了就是一片糊。

第三笔:景深够不够。工件有高低差的时候,景深不足会导致部分区域失焦。景深和光圈、放大倍率、允许弥散圆都相关,粗略经验是:放大倍率越大,景深越浅。远心镜头的景深通常只有零点几毫米。如果工件表面起伏 2mm,就得考虑用大景深方案或者多次对焦拍摄,别指望一个定焦镜头包打天下。

下面这张表是我常用的选型速查,可以直接对照:

检测需求关键约束常见做法
微小划痕、裂纹分辨率高分辨率相机+远心镜头+暗场照明
尺寸测量畸变、标定远心镜头+背光+亚像素边缘
表面异物对比度多角度光源分时打光,多图融合
装配缺件视野覆盖大视野+分区打光,或分多工位
颜色差异色温稳定恒色温光源+白平衡标定,避免环境光干扰

3.2 样本台账怎么建

样本管理是工业视觉项目里最脏最累、但最决定成败的活。我的做法是建一张"缺陷台账",字段至少包括:缺陷类型、发现时间、工位、批次、来料供应商(用代号)、图像路径、标注人、标注时间、是否复判确认。

这张表的价值在于,它让"模型为什么在这个批次上崩了"变得可追。比如某天召回率突然掉了 15 个点,一查台账,是换了来料批次,缺陷从"线状划痕"变成了"点状凹坑",模型没见过。有台账,十分钟定位;没台账,查三天。

台账还有两个隐藏作用。一是标注一致性抽检:定期抽 5% 的样本让第二个人重标,算一致率,低于 90% 就要停下来重新对齐标准。二是长尾监控:统计每个缺陷类型在过去 30 天的出现次数,那些一个月只出现一两次的类型,模型大概率学不好,要单独做小样本策略(合成、增强、或者干脆规则兜底)。

3.3 模型选型与灰度区间

模型选型这件事,我的观点可能不太主流:在工业检测里,能稳定复现的简单模型,比指标高 2 个点的复杂模型更值钱。

原因很实在。产线上的模型要跑三年,中间要换人维护、要重新训练、要解释给审核方听。一个结构复杂、依赖一堆 trick 的模型,换个工程师就调不动了。所以在精度满足要求的前提下,我优先选结构清晰、训练流程标准化、能一键复现的方案。

具体到任务类型:

  • 分类任务(这个件是好是坏):小网络足够,重点在数据增强和阈值调优;
  • 检测任务(缺陷在哪):主流单阶段检测器够用,注意小目标问题,必要时切图检测;
  • 分割任务(缺陷形状、面积):用于需要测量面积的场景,标注成本高,要提前规划;
  • 异常检测(只有良品样本):适合缺陷样本极少的新线,但误报率通常偏高,必须配复判。

比模型选型更重要的是灰度区间设计。我一般把输出分成三段:高置信缺陷(直接 NG)、高置信良品(直接 OK)、中间灰度区(送人工复判)。灰度区的宽度由成本表决定,前面算过,漏检成本是误检的几百倍时,灰度区要往良品方向大幅偏移。

这里有个实操细节:灰度区比例要控制在 5% 以内,否则复判员会被压垮,最后变成闭眼点确认。如果灰度区长期超过 10%,说明模型对这个场景的区分度不够,该回去查成像和样本了,而不是继续调阈值。

3.4 边缘部署与节拍预算

节拍预算这件事,我建议在项目第一天就画出来,因为它会反向约束所有技术选择。举个例子,产线节拍 3 秒,那么时间预算大概是这样切的:

环节预算说明
触发与稳定100ms光电触发到相机就绪
曝光与传输150ms含频闪同步、图像读出
预处理50ms解码、缩放、ROI 裁剪
推理400ms单模型或串行多模型
后处理与判定50ms阈值、NMS、逻辑组合
通信与落盘150ms写 PLC、异步存图
余量2100ms留给抖动、重试、异常

这个表的关键是余量要留足。我见过太多系统把预算卡到 95% 利用率,结果一遇到图像传输抖动就超时,超时后要么丢帧要么误判,稳定性一塌糊涂。经验值是实际占用不超过节拍的 70%,剩下的留给不确定性。

部署形态上,边缘工控机 + 独立显卡是最常见的组合,优点是延迟可控、不依赖网络。如果要多工位集中管理,可以做"边缘推理 + 中心训练"的分离架构:边缘只跑推理和缓存,训练和模型管理放在中心服务器,模型通过版本号下发,边缘侧支持灰度切换和回滚。这套架构的好处是,模型更新不用停线,出问题能一键回退到上一版。

4. 实操落地:一个缺陷检测项目的完整走法

这一章我按真实项目的推进顺序讲,从选点到验收,中间穿插参数计算和现场记录。

4.1 选点与可行性验证

选点是最容易被忽视的一步。很多人觉得"哪个工位都能上视觉",实际上有些工位天生不适合:

  • 缺陷在内部、被遮挡的,先解决可见性;
  • 缺陷定义本身模糊、老师傅都说不清的,先定义标准;
  • 缺陷发生率极低(万分之一以下)的,投入产出比要重新算;
  • 环境振动大、油污重、温度高的,先解决防护。

可行性验证(POC)我一般分三步走,每步都有明确的通过标准:

第一步,成像验证。在真实产线上连续拍 200 件,覆盖至少两个批次。标准:缺陷在图像中可辨,同一缺陷在不同件上的呈现一致性达到 80% 以上。不通过就调光学,别往下走。

第二步,离线算法验证。用第一步的图像做训练和测试,注意划分要按批次划分,不能随机划分——随机划分会高估性能,因为同批次的样本太像了。标准:关键缺陷召回率 ≥ 95%,过杀率 ≤ 5%。

第三步,在线试跑。接上 PLC,影子模式运行(只记录不控制),跑满 24 小时。标准:无超时、无崩溃,判定结果与人工抽检一致率 ≥ 90%。

这三步里,第二步的"按批次划分"是我特别想强调的。很多团队图省事用随机划分,测试集里全是和训练集同批次的样本,结果上线就崩。这个坑我踩过,返工了两周。

4.2 参数计算与现场调试记录

我拿一个实际调过的项目举例,数据做了脱敏。工件是小型金属件,要检测表面划痕和缺料,产线节拍 2.5 秒。

分辨率计算:视野定在 60mm × 45mm,用 500 万像素相机,单像素精度 = 60 ÷ 2448 ≈ 0.0245mm。最小划痕约 0.08mm 长、0.02mm 宽,宽度方向只有不到 1 个像素,不够。于是改成两路相机分区拍,单路视野 30mm × 22.5mm,单像素精度 0.0123mm,划痕宽度占 1.6 像素,仍然偏紧。最后上了 1200 万像素 + 2 倍放大,单像素精度 0.005mm,划痕宽度占 4 个像素,达标。

曝光计算:产线速度 300mm/s,允许模糊 1 像素即 0.005mm,曝光时间 ≤ 0.005 ÷ 300 ≈ 17 微秒。这个太苛刻,只能放宽到允许 2 像素模糊,曝光 ≤ 33 微秒,配频闪光源,实测图像边缘清晰度可接受。

节拍预算:2.5 秒节拍,两路相机串行采集,单路采集 120ms,推理 280ms,总占用约 900ms,占比 36%,余量充足。

现场调试记录里,最花时间的其实不是这些计算,而是光源角度。划痕在不同角度下对比度差异极大,我们试了 6 种角度组合,最后定的是低角度暗场 + 一路同轴补光,两种光分时曝光、图像融合。这个组合让划痕的信噪比提升了约 3 倍,模型训练难度直线下降。

4.3 上线验收与灰度放量

上线不要一把梭。我的做法是分三段放量:

第一段,影子运行 1 周。系统只看不控,所有结果落盘,每天人工抽检 200 件比对。这一段的目标是收集真实分布的误报样本,通常能捞出一批训练集里没有的形态。

第二段,灰度控制 2 周。系统对高置信缺陷直接拦截,灰度区送复判,高置信良品放行。这一段重点看两个数:拦截率是否稳定、复判量是否可承受。

第三段,全量控制。前面两段没问题再全量。全量后仍要保持每周一次的数据 review,看误报样本的分布有没有变化。

验收表我一般这么填:

验收项目标值实测结论
关键缺陷召回≥99.5%99.7%通过
一般缺陷召回≥95%96.2%通过
过杀率≤3%2.4%通过
单件处理时间≤1.75s0.9s通过
灰度区占比≤5%4.1%通过
连续运行稳定性72h 无故障72h 无故障通过

4.4 推理服务代码骨架

下面这段是我常用的推理服务骨架,去掉了业务细节,保留关键结构。重点看灰度区间和异步落盘这两块,这是现场最容易出问题的地方。

import time import numpy as np from dataclasses import dataclass @dataclass class Decision: label: str # "OK" / "NG" / "REVIEW" score: float boxes: list class Inspector: def __init__(self, model, thr_ng=0.85, thr_ok=0.15, takt_ms=2500): self.model = model self.thr_ng = thr_ng # 高于此值直接判缺陷 self.thr_ok = thr_ok # 低于此值直接判良品 self.takt_ms = takt_ms self.budget_ms = takt_ms * 0.7 def infer(self, image): t0 = time.perf_counter() raw = self.model(image) # 返回 [(cls, score, box), ...] elapsed = (time.perf_counter() - t0) * 1000 if elapsed > self.budget_ms: # 超预算不静默丢弃,标记为待复核,避免漏检 return Decision("REVIEW", 0.0, []), elapsed if not raw: return Decision("OK", 0.0, []), elapsed top_score = max(r[1] for r in raw) if top_score >= self.thr_ng: label = "NG" elif top_score <= self.thr_ok: label = "OK" else: label = "REVIEW" # 灰度区,送人工 return Decision(label, top_score, raw), elapsed

配套的两个工程细节必须做:一是异步落盘,存图放到独立线程或队列里,绝不能卡在主链路上;二是超时兜底,超时的件不能默认判 OK,要判 REVIEW 走人工,这是漏检防线上的最后一道闸。

5. 常见问题与排查技巧实录

5.1 现场十大典型故障速查表

现象常见根因排查动作
上线后召回率骤降训练/测试按随机划分,分布泄漏改按批次划分重训
每天固定时段误报激增环境光干扰(如天窗采光)加遮光罩,改用调制光
停机再开机集体误判光源未预热,亮度漂移加预热延时,或做亮度闭环
同一件重复拍结果不一致触发抖动、曝光不同步检查编码器触发与频闪时序
小缺陷检不出分辨率不足或对比度低核算单像素精度,改光学
边缘件误判多视野边缘畸变、暗角缩小有效视野,或做畸变校正
复判量居高不下灰度区过宽、标注口径不一重算阈值,做标注一致性抽检
模型越训越差误报样本被当成缺陷标签回流区分"模型误报"与"真实缺陷"标签
换料后性能崩域偏移,新批次形态未见建立换批预警,快速增量训练
系统跑几个月后变慢日志/图像堆积占满磁盘容量规划,缺陷图与良品图分开策略

这张表里我特别想展开说的是第四行和第八行,这两个是隐蔽性最强、最难查的。

触发抖动这个问题,症状是"同一件东西拍两次,结果时好时坏"。很多人的第一反应是模型不稳,其实是硬件时序。编码器信号抖动几十微秒,在高速产线上就是几个像素的位移,缺陷位置全变了。排查方法很简单:把触发信号和频闪信号同时接到示波器上看,抖动超过曝光时间的 10% 就要处理。

误报样本污染训练集这个问题更阴险。系统上线后收集了一堆"模型说是缺陷、人工说是误报"的样本,这些样本被当作负样本回流训练。听起来对,但如果人工复判本身有错,或者这些样本其实是"轻微但真实"的缺陷,模型就被教坏了。我的做法是回流时给样本打三级标签:确认缺陷、确认误报、存疑。存疑样本不进训练集,只做分析。

5.2 模型"上线就退化"的排查思路

这是最经典的工业视觉问题,我总结了一个从外到内的排查顺序,按这个顺序走,八成问题能在两小时内定位:

第一步,看图像。把出问题的批次图像调出来,和训练集里的图像并排放。看三件事:亮度分布、对比度、缺陷形态。如果图像本身就不一样,别查模型了,查硬件和环境。

第二步,看分数分布。统计这批样本的模型输出分数直方图。如果整体往中间挤(原本 0.9 的现在 0.5),说明模型对这个分布不自信,典型的域偏移。如果分布形状没变但阈值附近的样本变多,说明缺陷形态变模糊了。

第三步,看混淆矩阵的分类别结果。整体召回率掉了 10 个点,可能只是某一类缺陷崩了,其他类没变。定位到具体类别,再看这类样本的量。如果只有几十张,直接补样本比调模型快。

第四步,查数据管道。这一步最容易被跳过。图像预处理参数变了没?ROI 裁剪坐标动了没?颜色空间从 RGB 换成 BGR 了没?我见过一次事故,就是因为一次代码合并把归一化参数从 255 改成了 1,模型输出全乱,查了两天才发现。

第五步,才是怀疑模型本身。真到了这一步,一般不是模型退化,而是训练流程有问题——学习率、数据增强、类别权重,挨个排查。

这里补一条经验:上线前一定要固化一份"金标准测试集",200 到 500 张,覆盖所有缺陷类型和典型工况,每次模型更新前后都跑一遍,记录指标。这份测试集不能进训练流程,也不能让标注员反复看(会形成记忆偏差)。它是你判断"这次更新到底有没有变好"的唯一依据。没有它,所有模型迭代都是盲改。

6. 从检测到根因:质量大脑的三级跳

前面讲的都是怎么把检测做扎实。但"质量大脑"这个词的分量在后半段——检测只是入口,真正的价值在于让数据反过来影响工艺。

6.1 缺陷图谱与工艺参数关联

第一步是把缺陷数据和时间、设备、批次对齐。这件事技术上不难,难在数据源的打通。视觉系统的时钟要和产线 PLC、MES 的时钟对齐,误差控制在秒级以内,否则对齐出来的关联全是噪声。

对齐之后,做一张"缺陷时空分布图":横轴是时间,纵轴是工位或设备号,颜色深浅表示缺陷密度。这张图一出来,很多规律肉眼可见——比如缺陷总是集中在换模后的前 200 件,或者集中在二号工位。我做过一个项目,就是靠这张图发现某类划痕只出现在夜班,后来查到是夜班环境温度低了 5 度,材料流动性变化导致模具边缘拉伤。这种关联,靠单看检测结果是永远发现不了的。

再往深一层,是把缺陷特征(长度、面积、方向、位置)和工艺参数(温度、压力、速度、张力)做相关性分析。要注意的是,相关性不等于因果,两列数据同涨同跌可能只是都被第三个因素驱动。我的做法是先用相关性筛出候选,再用小批量的工艺调整去验证,能复现的才写进结论。

6.2 反馈闭环与 SPC 联动

检测数据要能进到统计过程控制(SPC)的体系里,才能形成预警。举几个具体做法:

缺陷率的移动极差控制图。按小时统计缺陷率,算控制限,连续 7 点上升就报警。这个报警不是给质检看的,是给工艺看的,因为缺陷率上升通常早于批量不合格出现。

缺陷特征的漂移监控。不看缺陷率,看缺陷的"形态特征",比如划痕的平均长度、缺料的平均面积。这些特征缓慢漂移,往往意味着工艺在渐进劣化,比如刀具磨损、模具间隙变大。等到缺陷率上升时,通常已经晚了。

换批预警。新批次来料上线后,前 50 件的缺陷分布单独统计,和上一批次对比。差异超过阈值就提示"该批次可能需要重新校准",而不是等跑完一整批才发现。

这套东西的价值在于把"事后检验"变成"事中预警"。检验只能告诉你"这批不行了",预警能告诉你"再跑两百件就要不行了",中间那两百件就是纯利润。

6.3 知识沉淀与人员协作

最后说个软性的东西,但我觉得这是决定系统能不能活过三年的关键。

视觉系统交付的时候,通常会给一份厚厚的文档,里面写满了参数、模型版本、接口说明。但我发现,真正有用的知识从来不在文档里,而在老师傅的脑子里——"这个位置的划痕,八成是三号模腔的冷却水堵了""这批件的毛刺,一般过两天自己就好了"。

质量大脑要想真正有用,得给这类经验留位置。我的做法是在系统里加一个"缺陷案例库",每条记录包含:缺陷图、判定结果、处置动作、最终原因、责任人。原因这一栏允许自由填写口语化内容,不强制结构化。跑一年下来,这个库会变成工厂最有价值的资产之一,因为它把散落在个人身上的经验变成了可检索的组织记忆。

还有一件事:让质检员参与模型迭代。很多团队把质检员当成"被替代的对象",结果推行阻力极大。换个思路,把复判界面做成质检员的工具——它能帮质检员更快定位可疑点、自动记录他的判断、定期给他一份"你最近判断的误报样本回顾"。质检员发现这东西省事,就会主动用,数据回流才真正转起来。

7. 我踩过的坑和几条硬建议

7.1 项目启动阶段的坑

第一个坑是指标定得太早。很多项目在需求阶段就写"准确率 99%",但这个数字往往是从别处抄来的,没人算过自己的成本结构。我的建议是项目启动时先花半天时间,和品质、生产、财务一起把漏检成本和误检成本算出来,哪怕只是粗略估算。这个数字一出来,阈值怎么定、验收怎么写,全都清楚了。

第二个坑是只跟设备部门对接。视觉系统最终是给品质和生产用的,如果从头到尾只有设备部门在推,上线后大概率没人用。我的做法是立项时就拉品质的人进项目组,让他们参与标准定义和验收,因为标准这事最终是他们签字。

第三个坑是把 POC 当成交付。POC 只需要证明"这件事能做",交付要证明"这件事能天天做"。两者的工作量差三到五倍,主要差在异常处理、稳定性、可维护性上。我见过太多合同把 POC 的周期当成交付周期,最后必然延期。

7.2 长期运营的坑

系统上线不是终点,是起点。运营阶段最容易出的问题是没人管。模型三个月不更新,误报率慢慢往上爬,操作工开始习惯性忽略报警,系统名存实亡。

我的建议是明确一个"系统 owner",不一定是专职,但他要对这几个数负责:周度误报率、灰度区占比、复判一致性、模型版本更新频率。每月开一次 30 分钟的 review,看这几个数的趋势。这件事的投入很小,但能让系统多活好几年。

还有一个反直觉的经验:不要追求把所有缺陷都自动化。总有那么几类缺陷,发生率极低、形态极其多变,投入产出比很差。这类缺陷老老实实留给人工,把省下来的精力放在高频缺陷的根因分析上,收益大得多。我见过一个团队死磕一类一年只出现五次的缺陷,折腾了半年,最后发现那类缺陷的真正解法是改上游的一道工序,跟视觉一点关系没有。

最后一个,也是我觉得最值钱的一条:把每次误判都当成一次信息。误判不是失败,是系统在告诉你"这里有个我没见过的世界"。每收集一次,系统就厚一分。真正把视觉做成质量大脑的工厂,不是因为他们的模型多先进,而是因为他们认真对待了每一次误判,并且真的顺着这条线去改了工艺。