检验回测:在上线前证明它有效

了解一项检验是否有效的默认做法是先安装再观察。这是一个代价高昂的实验,因为被测试的对象正是缺陷是否会流入客户手中,而只有当它真的发生了,你才知道答案。
回测就是这种替代方案。先收集一批真实状态已知的图像,离线对每一张运行完整配方,在该工位对任何一个真实零件进行把关之前,就得到漏检和过杀的数量。这并不是什么新颖的想法,车间里其他任何量具在被信任之前都要经历这个过程,没有理由让 AI 检验例外。
回测实际做的是什么
其原理简单到可以用一句话说清楚:取一批采集图像,标注每一张的真实状态,对全部图像运行实际使用的配方,然后把配方的判定结果与标注进行比较。
有两个细节决定了这是一次真正的测试还是一场演示。第一点是,它运行的是完整的 whole 配方,包括每一个模型和每一条规则,而不是孤立地测试单个模型。工位通常在接合处出问题:两个各自表现正常的模型,配上一条把它们错误组合起来的判定规则。单独测试模型永远发现不了这种问题。
第二点是,输出结果是一张可以点开查看的混淆矩阵。一个告诉你出现了四次漏检的数字只是开始。能够打开这四张图像,看看它们的共同点,才是让你能够修正根本原因,而不是不断调整阈值直到数字好看为止。
构建一个不会讨好自己的测试集
这正是大多数验证出错的地方,而且出错的方向是可以预见的。如果不加约束,人们往往会收集明显合格和明显不合格的样品,因为这些是容易自信地打上标签的零件。这样得出的数字看起来非常漂亮,但一到实际生产中就站不住脚。
纳入有争议的样品
让你自己的检验员意见不一致的那些零件,是你所拥有的最有价值的图像。真正的判定边界就在那里。缺少这些样品的测试集,测的只是容易回答的问题。
覆盖真实的变化范围
不同的物料批次、不同的班次,接近寿命末期的工装和全新的工装都要包括。如果测试集只来自某一个下午,那它描述的就只是那一个下午。
以多人一致意见来标注,而不是一个人说了算
真值是一个决策,而不是一个观察结果。如果两位工程师对边缘样品的标注不一致,这种分歧就是一个规范问题,最好现在就发现,而不是等到调试之后。
保留测试集并重复使用
只用过一次的测试集只是一次演示。每次配方变更后都要重新运行,否则你可能在调优一个数字的同时,悄悄破坏了另一个数字。能够以文件形式在不同相机之间传递的测试集,让这一点在整个机队范围内变得可行。
对任何测试集都适用的一个有效检验:如果配方在第一次运行就得到满分,很可能是测试集太简单,而不是配方本身完美无缺。真正的边缘样品会产生一些分歧,而这些分歧恰恰才是有意思的地方。
重复性,以及质量团队为何要求它
单次通过的准确率不等于可信度。一个工位即使平均结果正确,如果对同一个零件在不同次运行中给出不同的判定,它仍然是不可用的,因为最终处置取决于你恰好得到的那个结果。
这正是量具重复性与再现性研究所测量的内容,对于卡尺、内径规或三坐标测量机来说,这早已是常规操作。将其应用于视觉检验,意味着让同一批零件多次通过检验并比较判定结果。当结果出现分歧时,你要么发现了真正处于判定边界上的边缘样品,要么发现了工位本身存在的变异源:并不像大家以为的那样稳定的光照、每次放置姿态不同的零件,或者会漂移的曝光。
这也是一个可以合理地向供应商提出的问题。要求对视觉系统做量具 R&R 研究,能很快看出对方是否曾经部署到受监管的制造环境中,还是只会给你一个单一的准确率百分比,然后指望蒙混过关。
各工位的良率能区分两类截然不同的问题
一旦某个工位上线,最有用的视角不是整体通过率,而是按相机、产线或设备拆分后的通过率,因为这种拆分呈现出的形态能告诉你面对的是哪一类问题。

这样一个异常工位几乎从来都不是模型的问题,因为所有工位运行的是同一个模型。这是一种物理层面的差异:工装间隙更大、灯光发生偏移或被碰撞过、某个视角下零件呈现方式不同,或者该位置存在真实的工艺差异。汇总数字会把这一切完全掩盖,而在整个机队范围内取平均值,正是一个坏工位能够隐藏数月而不被发现的原因。
反过来的情况也值得一提。如果所有工位同时下滑,那就不是工装问题,而是工艺问题或模型问题。同样的数据,两种截然不同的排查方向,而拆分数据正是告诉你身处哪一种情况的关键。
一套可以写进规范中的验证流程
- 确定缺陷样本集。 双方共同确认哪些零件属于缺陷,包括边缘样品在内。这一步能避免日后产生争议。
- 从真实生产中构建测试集, 覆盖不同批次和班次,真值由多方一致确认后标注。
- 离线运行完整配方, 并以数量而不是准确率百分比记录漏检和过杀。
- 逐一查看失败案例。 每一次漏检和每一次过杀都要被查看。它们当中出现的规律才是这项工作真正的产出。
- 运行两次, 并进行比较,让重复性成为一个实测数字,而不是一个假设。
- 根据成本设定灵敏度, 将漏检和过杀的数量与各自给你带来的成本进行权衡。这是一个业务决策,而不是技术上的偏好。
- 将测试集与配方一并保存, 并在任何变更之后作为验收步骤重新运行,包括重新训练之后。
这份清单中有两点值得特别强调。它从头到尾都没有出现任何准确率数字,这是刻意为之,原因在我们关于 漏检与过杀一文中已经说明。而第七步是最先失效的一步:如果重新训练之后不重新运行测试集,就会出现三月份通过验证的工位,到六月份却悄悄失效的情况。
这一切其实与 AI 本身并无特别关系,这正是重点所在。这只是质量团队一直以来对其他所有测量设备使用的那套方法,套用到一个较新的设备上而已。至于它在更广泛的工位设计中处于什么位置,我们在关于 机器视觉系统的指南中有所说明。如果您正在验证的是一个 异常检测工位 ,边缘样品的重要性甚至比平时更高,因为触发点只是一个单一的灵敏度设定值,而不是一个通过学习得到的判定边界。
Frequently Asked Questions
机器视觉中的回测是什么?
回测是在离线状态下,对一批真实状态已知的图像运行完整的检验配方,并将配方的判定结果与该真值进行比较。它能在工位对任何真实生产进行把关之前,得到漏检和过杀的数量,从而替代了在生产中才发现实际表现这种代价高昂的方式,因为生产中被测试的失效模式正是缺陷流入客户手中。关键在于,它运行的是整套配方,包括每一个模型和每一条规则,因为工位通常会在各个表现正常的模型之间的接合处出现问题。
如何为视觉检验构建一个好的测试集?
纳入你自己的检验员意见有分歧的边缘样品,因为那里正是真正的判定边界所在。覆盖真实的变化范围:不同的物料批次、不同的班次、磨损的工装以及全新的工装。真值应由不止一人一致确认后标注,因为对边缘样品的分歧本身就是一个规范问题,值得尽早暴露出来。之后要保留这个测试集,并在每次配方变更后重新运行。如果配方在第一次运行就得到满分,很可能是测试集太简单,而不是配方本身完美无缺。
可以对 AI 视觉系统运行量具 R&R 研究吗?
可以,而且这是一个合理的要求。实际操作中,这意味着让同一批零件多次通过检验并比较判定结果。出现分歧时,要么说明这些确实是处于判定边界上的边缘样品,要么说明工位本身存在变异源,例如并不像假设的那样稳定的光照、零件放置姿态不一致,或曝光发生漂移。量具重复性对于卡尺和三坐标测量机来说早已是常规操作,自动化检验也不应例外。
为什么要看各工位的良率而不是整体良率?
因为拆分数据呈现出的形态能告诉你面对的是哪一类问题。如果某个工位在运行相同模型的情况下明显低于其他工位,几乎可以肯定是物理原因:工装间隙、发生偏移的灯光,或者某个视角下零件呈现方式不同。如果所有工位同时下滑,那就是工艺问题或模型问题。这是两种完全不同的排查方向,而汇总数字会掩盖这种区别,这正是一个坏工位能够隐藏数月而不被发现的原因。
测试集应该多久重新运行一次?
在配方发生任何变更之后都要重新运行,包括重新训练之后。在实际操作中,这一步是最先被忽略、最先失效的一步,跳过它正是某个工位在某个月通过验证、却在几个月后悄悄失效的原因。把重新运行当作一道验收关口,并将测试集的版本与配方一并做版本管理,才能让验证始终有意义,而不是调试阶段的一次性动作。
验证规范中应该包含准确率目标吗?
不应该。准确率在很大程度上取决于测试集中恰好有多少好件和坏件,因此它可能看起来很漂亮却什么都没抓到,而且它把两种成本截然不同的错误混在一起取平均。应当明确规定:在双方认可的缺陷集上的漏检数量、以生产量百分比表示的过杀、至少两次运行验证过的重复性,以及一个在任何变更后都会重新运行的留存测试集。这四项指标都可以量化、有实际意义,而且难以被人为操纵。
在您的零件上体验 Overview AI
把您的零件或缺陷照片发给我们,视觉工程师会告诉您 Overview 能否检出,大多数系统几天内即可在产线上运行。