
误报治理最常见的做法是调阈值。调了之后漏检上来了,再调回去误报又上来——很多产线在这两端之间来回了几年。这不是调得不够仔细,是因为在单一量纲上,正常变异与真缺陷的分布本来就是重叠的。重叠区里没有任何阈值能把两者分开,这是一条曲线的性质,不是一个数字的性质。
本文用到的 ACI 是「自动认知检测」(Automated Cognitive Inspection)的缩写—— AI AOI 的下一代提法:保留 A(自动)与 I(检测),把 O(光学)换成 C(认知),因为判定依据是认知而不是成像方式。完整论证见从 AI AOI 到 ACI。
一、误报到底是什么
先把词定清楚。误报不是「机器看错了」,而是「模型判它异常,复核认定它正常」。这个定义把误报的裁决权交给复核,而不是交给阈值——这一点后面很关键。
产线上真正付出的代价也不在报警本身,而在复核:每一次误报都要占用一个人几十秒到几分钟。误报率高到一定程度,复核就成了瓶颈,机器检测的意义被抵消掉大半。
二、正常变异是什么
把复核推翻的那些报警归类,会发现绝大多数集中在几类:反光与高光造成的亮斑、来料批次之间的色差与纹理差、允许公差内的位置偏移与旋转、表面允许的轻微划痕与污渍、以及元件本身的合法外观变体(同一料号不同厂家的丝印字体)。
它们的共同点是:在像素差异这个量纲上,它们与真缺陷落在同一区间。一块反光亮斑和一处真实缺件,与标准图的像素差可以是同一个数量级。
三、为什么调阈值跳不出去
如果两类东西在一个量纲上的分布重叠,那么任何一个阈值都会同时切到两边:抬高阈值,重叠区里的真缺陷被放过(漏检上升);降低阈值,重叠区里的正常变异被报出(误报上升)。这是一条曲线,阈值只是曲线上的一个点。
工程上常见的补救是「分区设阈值」——按板上区域、按元件类型各给一个数。这确实能把曲线往外推一点,因为它其实是偷偷引入了第二个变量(位置或类型)。但只要判据仍然只看像素差异,推的幅度就有限,而维护成本随分区数线性增长。
阈值只能在曲线上移动。想换一条更好的曲线,得换判据。
四、第二条判据轴
语义过滤做的事情就是加第二条轴:除了问「差了多少」,再问「这是什么」。反光亮斑与缺件在像素差异上或许相同,但在语义上完全不同——一个是照明与表面的交互,一个是本该存在的元件不在。
一旦有了第二条轴,原来在一维上重叠的两团点就可能在二维上分开。分开之后,压低误报不再必然抬高漏检,因为区分它们的不再是同一个参数。这是语义过滤与调阈值的根本差别,不是精度高低之差。
五、语义从哪来
语义不是凭空加的,它来自前一步的建模方式。当模型学的是「这个元件的正常形态」而不是「这张图与标准图的差异」时,它对偏离的描述天然带类别信息:是位置偏了、是表面多了东西、还是本体缺失。
所以语义过滤不是在规则层后面挂一个过滤器,而是判据从一开始就不同。挂在后面的过滤器只能看到「超阈值」这一个信号,拿不到语义。
六、复核数据是这条路上的燃料
误报的定义把裁决权给了复核,这意味着复核结论是最有价值的标注。一条运行中的产线每天都在产生这种标注,只是大多数时候没被回收。
- 把复核结论按元件类型聚合,能看出哪类元件的正常形态描述不足——这是补建模的方向。
- 把复核结论按变异类型聚合(反光/色差/位移),能看出哪一类正常变异还没被识别出来。
- 把复核翻转集中的那些件收回良品集,边界就往外推了一点,而且是按真实分布推的。
七、不要用同一批数据既调又验
这条路上最容易犯的错,是用参与过建模的那批复核数据去验证误报降了多少。批改与验收共用同一份依据时,判别力恒为零——读数一定好看,而好看不说明任何事。
可用的做法是按时间切:用某周之前的复核结论建模,用之后的去验;或者按线切:A 线建模,B 线验证。两者都保证验收那一侧的数据没参与过训练。
八、什么时候规则层就够了
不适用情形同样要说清:
- 正常变异很小:工艺极稳、来料单一、照明完全受控的场景里,两类分布本来就几乎不重叠,单阈值够用。
- 缺陷判据本身就是几何量:比如「高度差超过 0.1 毫米即判退」,这是规格而不是外观判断,规则层直接给答案更可靠。
- 误报总量本来就低到不构成负担:复核不是瓶颈时,治理误报的收益有限,优先级应该让给别的事。
这三条命中任意一条,继续用规则层是对的。语义过滤解的是「重叠区大」这个特定困难,它不是所有检测问题的通解。
十、一次具体的重叠:反光亮斑与缺件
举一个能走完的例子。某个贴片元件上方有一片金属屏蔽罩,打光角度变化时罩子边缘会在元件区域投下一条高亮带。这条高亮带与标准图的像素差,量下来和「元件整体缺失」处在同一个区间——因为缺件暴露出来的是空焊盘,也是高反光。
只看差异量,这两件事分不开:把阈值抬到放过高亮带,缺件就一起被放过;把阈值压到抓住缺件,高亮带天天报。产线上常见的折中是给这片区域单独设一个更松的阈值——代价是这片区域从此对缺件不敏感,而那恰恰是最不该放过的缺陷。
加上第二条轴之后,问题变成两个独立的判断:这片区域里该有的元件在不在(形态判断),以及这片亮度是不是照明与表面交互产生的(成因判断)。两个判断都不依赖同一个阈值,所以可以同时做对。
十一、复核数据怎么在流程上收回来
前面说复核结论是燃料,但默认的复核流程并不产生可用数据——复核员在工位上点「放行」或「判退」,理由留在他脑子里。要把它变成燃料,流程上要加的东西不多:
- 放行时必须选一个原因码,而不是只点放行。原因码用工艺认可的一小套(反光/色差/公差内位移/允许划痕/合法外观变体/其它),不超过十个。
- 选「其它」的那些单独进一个待归类队列,由工艺每周看一次——这个队列的增长速度,就是现有原因码覆盖不足的直接读数。
- 原因码与元件类型一起落库。只有这两个维度同时在,才能回答「哪类元件的哪类变异没被识别」。
这套东西的成本是复核员每次多点一下,收益是产线每天都在产出带标注的真实数据。不做这一步,误报治理就只能靠定期人工翻记录,而翻记录得到的样本既不完整也不均匀。
九、和前两篇的关系
三件事是同一条路线的三个侧面:建模方式决定模型学的是「好长什么样」还是「坏长什么样」;判定层决定判据挂在元件上还是像素上;语义过滤则是这两项到位之后,自然能做而规则层做不到的那件事。缺了前两项,语义过滤无从谈起——这也是为什么它不能作为一个独立模块外挂。
这条路线的另外两个侧面见从 AI AOI 到 ACI。
建模方式那一侧,见缺陷是开集,良品是闭集。
常见问题
语义误报过滤能不能作为独立模块加在现有系统后面?
不能。挂在后面的过滤器只拿得到「超阈值」这一个信号,没有语义可用。语义来自建模方式——模型学的是元件的正常形态时,它对偏离的描述才自带类别信息。
分区设阈值算不算已经引入了第二条轴?
算,但很弱。它引入的是位置或元件类型这一个离散变量,判据本身仍然只看像素差异,所以曲线只往外推了一点,而维护成本随分区数增长。
怎么证明误报真的降了,而不是阈值被调松了?
看漏检有没有同时上升。单参数调整下两者必然反向;如果误报下降而漏检持平或同降,说明换的是曲线而不是曲线上的点。验证数据要与建模数据按时间或按产线切开。
本场景的完整方案:AI AOI 软件系统 行业解决方案
本文由人工智能生成。文中客户案例为基于产品真实能力的模拟场景,成效数字为示例性质;官方标定口径以产品页为准。