📅 · 阅读时长 4 分钟 · Meta Smart Factory 团队
大多数视觉检测项目的结果,在有人写下第一行代码之前就已经定了——定在有人给缺陷下定义、固定工件的位置、选定照明方式的那一刻。模型只能处理别人递给它的那幅图像。本文写给负责选型、也负责日后维护这套系统的人:质量工程师、工艺工程师、自动化人员;默认你熟悉自己的工艺,而不熟悉机器视觉。
在任何硬件问题之前,先确定在这个工件上什么算缺陷、由谁判定。这听上去理所当然,直到你真的验证一次。
从线上取一百件产品,把难判的那些也放进去,让两位有经验的检验员各自独立分成合格与不合格两堆。明显的缺陷上他们会一致。在临界样本上——浅划痕、欠注、能认出但不清晰的印字——常常不一致。
这种分歧才是检测精度的真实上限。如果两个做了多年这项工作的人对同一件产品都无法达成一致,就不存在一个供模型学习的唯一正确答案,任何供应商也交付不出来;因此在定义被固化之前,方案书里的任何精度数字都没有意义。
解决办法不是更好的算法,而是一份书面的缺陷目录——每一类缺陷都有名称、配有图片——以及每一类对应的一组实物边界样件:仍可接收的最差件,和仍判不合格的最好件。这些样件成为标注和验收测试的基准。
一个谁都无法一致定义的问题不可能被自动化,只能被更快地争论。
工业相机选型是算术,不是偏好。
分辨率由你必须看到的最小特征决定。 用视场——工件尺寸,加上它可能偏移的余量——除以传感器像素数,得到每像素对应多少毫米。只落在一个像素上的缺陷不可能被稳定检出,所以要让最小特征横跨若干像素;对比度低时还要更多。超过这个限度的分辨率只是在消耗带宽和景深,何况对比度本来就比像素数更管用。
曝光必须快过产线。 运动模糊等于速度乘以曝光时间:以每秒一米运动的工件,在一毫秒曝光下会拖出一毫米。拖影一旦超过缺陷本身,检测就已经输了。曝光越短,需要的光越多——所以照明和相机是同一个决策。凡是运动中的场景,都要指定全局快门;卷帘快门逐行读出,会把运动的工件拍变形。
面阵还是线阵。 面阵适合在工位上停住或分度定位的离散工件。线阵逐行构建图像,适合连续的料带、板带、挤出型材,或绕轴旋转经过相机的圆柱形工件,并且要求运动速度恒定或与编码器同步。
除非缺陷本身是颜色,否则用黑白。 黑白相机把每个像素都用在细节上,弱光下也更灵敏。只有当信息由颜色承载时才选彩色:元件颜色错误、污渍、印刷颜色与规格的比对。
接口与线缆。 接口决定线缆长度、带宽和成本——长距离用 GigE,工作台上用 USB3,高速线阵用高带宽工业接口。接下来是最不起眼、却造成现场故障最多的部分:拖链专用电缆、带锁紧的连接器、应力释放,以及避开驱动器和焊接电缆的布线。
被光照得一目了然的缺陷是个简单问题;同一个缺陷若留给模型从一幅噪声图像里挖出来,就是个昂贵的问题。几种照明几何能覆盖大部分场合。明场照明沿观察轴打光,给出均匀的通用图像,适合印字、颜色和有无判断。暗场照明以掠射角入射,让划痕和刻痕在暗背景上发亮。背光把工件变成剪影,用于轮廓尺寸、孔位和液位。穹顶光源用均匀光包裹曲面或反光工件,是反光表面上印字检测的答案。同轴光沿光轴入射,适合平整的镜面表面和激光打标。
划痕、凹坑和印刷错误是三个不同的照明问题:划痕用掠射光;凹坑改变的是斜率而不是颜色,要用反射随斜率变化的光;印字则需要平整、无眩光的光。想用一套光源同时覆盖这三者,工位最后就是哪样都做得平庸。
然后是环境光,它会悄悄毁掉已经通过验收的系统:下午从采光顶照进来的阳光,换班时打开的另一组顶灯。要用物理手段处理——给工位加遮光罩,配一片与 LED 波长匹配的带通滤光片,并由采集触发发出短促而强烈的频闪,让你的光压过车间的光。
一幅稳定的图像比一个更大的模型便宜。
大部分检测是 2D 问题:有无、位置、平面内尺寸、印字、颜色,以及一切在表面上表现为对比度的东西。
当特征是高度或形状、并且不能稳定地产生对比度时,才上 3D——涂胶线上的胶条高度、引脚共面性、焊缝轮廓、翘曲、未喷漆金属件上的凹坑、不透明容器内的液位。激光三角测量需要相对运动,结构光可以对静止工件工作;两者都难以应对镜面和遮挡,而且每件产品产生的数据量要大得多。
一个实用的判据:如果一位好的检验员能凭一张照片判定这个工件,那就是 2D 任务;如果他必须把工件对着光转动才看得出来,那就是 3D,或者是一种专门的照明几何——而照明值得先试。
以 AI 检测需求提出来的项目,很大一部分其实是标签和印刷核对,而其中很大一部分是确定性的:条码或 DataMatrix 码的等级评定、把印刷文本与预期字符串比对、核对产品上是不是正确的版本。
难的不是读取,而是预期值从哪里来。如果目标文本是操作工在工位上敲进去的,你自动化的只是一个笔误;代码、批次、日期和版本必须从 MES 或 ERP 的工单里下发下来。机器学习在这里的价值在于印刷质量——拖墨、缺点、曲面上的变形——而不在那一步比对。
你的产线绝大多数时候产出的是合格品,这种不平衡决定了检测数据的性质。它让总体准确率变得没有用:在一个几乎全是合格品的数据集上,一个把所有产品都判为合格的模型也能得高分。要按缺陷来评判——抓到了多少缺陷,误判掉了多少合格品。
它也决定了技术路线。异常检测从合格品中学习“正常”,再标记出偏离;它需要的缺陷图像很少,对从未见过的情况也有反应,但它只能说这件产品不寻常,说不出哪里不对。有监督的分类和分割能给出缺陷的名称和位置,这是缺陷目录和 SPC 所需要的,但它们需要每一个类别的真实样本——比所有人预想的都多。无论哪条路线,模型只认识给它看过的缺陷。
再就是漂移。模型是训练那段时间产线的一张快照,而产线是会动的:换了供应商、换了一批材料、刀具磨损、清洁时碰动了相机、工件改版。再训练是一项有责任人、有排期的维护工作,不是一个会结束的项目阶段。
标注这件事需要一个明确的决定,因为给图像做标注的人,就是在为整个工厂定义质量。这件事属于拥有缺陷定义的那些人,依据边界样件来做;否则前面那种检验员之间的分歧,会以标注不一致的形式回来,并且封死后面所有环节的上限。
合成数据和数据增强在特定场合有用。增强——旋转、位置、亮度、对焦上的小幅变化——很便宜,只要不超出工位在物理上能产生的范围。渲染图像最有用的场合,是缺陷本身是几何的、可描述的:缺件、方向装错。最没用的场合是缺陷的外观本身就是未知的,而那正是渲染器编不出来的东西。
不管用什么训练,都要留出一份真实图像的测试集,把临界样件也包含在内。这是判断一个新模型是否真的比旧模型好的唯一诚实办法。
每套检测系统都有一个阈值,它在两类错误之间做权衡:收紧,就抓到更多缺陷,也误判掉更多合格品;放松,则反过来。没有哪个设定能同时消除两者。往哪边偏是你这家工厂特有的经济账——一次漏检流出去的代价,对上过度误判在废品、返工和操作工工时上的代价。
这种不对称值得提前规划。过度误判摧毁信任的速度,比漏检快。漏检可以隐形好几周;而一个把合格品判成不合格的工位,一小时之内就会被看见,接下来的反应是可以预料的:操作工开始手动放行,然后干脆不看了,相机就变成了一盏昂贵的灯。
所以必须有人对阈值的位置负责:质量部门一位指名的责任人,设定值写进检验规程,变更留有记录。把结果分成三档而不是两档——合格、不合格,再加一条交给人复判的复审带——可以让检出保持严格,又不至于把临界样本一股脑丢给操作工。在上线之前,用工厂自己的语言定下验收标准:每千件的漏检数,每班的误检数。
图像采集完了,模型给出了答案,而工件本身还什么都没发生。接下来必须有两件事。
执行机构。 剔除必须被物理执行——推杆、分流器,或者一个阻止该工件进入下道工序的互锁——通过 PLC 实现,并把握手设计成:采集失败或推理变慢时进入安全状态,而不是无声放行。剔除动作要用一个能看到工件离开的传感器来确认。一个剔除失败却不声张的执行机构,比没有检测更糟,因为现在所有人都以为这些产品已经检过了。
记录。 判定结果、图像和时间戳,应当挂到工单、批次、序列号、工位和模型版本上,存进 MES 和 QMS。模型版本很重要:一次再训练之后,昨天的判定来自另一个裁判。正是这份记录让检测产生复利——按类别统计的缺陷率变成一个 SPC 变量,追溯围堵从一周的纸面工作变成一次查询。
几乎总是下面这些当中的一个,很少是模型本身。
工件呈现不稳定——工件没有每次都到达同样的位置、角度和距离:振动、松动的支架、清洁时被碰歪的安装座。工装夹具是你能买到的最便宜的精度。
没有责任人的阈值,随着当班的人一起漂移。
改版之后没有人重新训练。 工程变更管理必须把检测系统列为受影响的系统。
不留痕迹的旁路。 操作工需要手动放行的权限,但它必须被记录、被复核。
没有人复看图像。 必须有人按固定的节奏查看不合格图像,以及合格品的抽样;漂移就是这样在客户发现之前被抓到的。
把概念验证的条件当成生产条件。 那场演示是在工作台上、夜里、由一个人把工件拿稳的情况下跑的。
Meta Smart Factory 的机器视觉(Computer Vision)模块覆盖上面讲的检测环节——按你实际存在的缺陷来选定相机和光源,用你自己的产品训练模型,在产线上完成推理——并与我们的 MES 和质量(QMS)模块打通,让判定结果落到工单和批次上,进入追溯和 SPC,而不是停在一盏灯上。剔除动作通过 PLC 执行,走同一套 IIoT 和 OPC UA 连接。
如果你正处在起步阶段,有用的第一步不是做一场演示。而是那个一百件、两位检验员的测试,加上一份书面的缺陷目录——在任何人开始选相机之前,我们很乐意和你一起把这一步做完。
与我们的专家交流探讨