先说个现场的事。产线上那个老掉牙的传感器,又tm误报。良品被当成缺陷品,停机灯一亮,整个班组的人都得翻白眼。当时我就蹲在传送带边上,看着那堆被踢出来的“废品”,心里想:机器视觉要是只做到这一步,还不如人工目检。但问题是,人工也有疲劳,漏检率也下不去。后来我们上了个复判系统——这才算摸着门道。
所谓复判,不是简单的二次拍照,而是用一套**智能机器视觉复判检测算法系统**,去解决初检环节的“过杀”。你想啊,初检为了不漏,阈值往往压得很低,结果一堆伪缺陷。复判的目的,就是把这些伪缺陷捞回来。
一、复判系统的核心逻辑:多级决策,别让单个模型背锅
我们最初也迷信一个万能模型。深度学习嘛,分类器一扔,准确率95%。可实际产线上,光照一变,准确率掉到90%,误检率反而飙了。后来把方案改成级联结构——第一级跑轻量级快速筛选,第二级做精细分割,第三级才上决策分类。每一级都拿置信度说话,别急着下结论。
这里的关键点在于:**复判不是重新识别,而是证据融合**。初检框出来的那个区域,我们不光看它本身,还得看它的上下文。比如“疑似划痕”这个定义,在铸件毛坯上可能只是正常纹理,但到了精加工表面,就是致命伤。所以算法里要有“工艺路线上下文特征”参与判断。我当时给算法工程师解释这个需求,他差点掀桌子——但做出来之后,误报率直接砍半。

二、算法选型里的那些坑:参数与标准的妥协
别一上来就整Transformer。我们实际测试过,在嵌入式设备上,YOLOv8n跑起来也就20fps,但那个精度对复判场景来说,说实话,有点欠。后来用了更朴素的**多尺度模板匹配 + 局部特征直方图**做初筛,深度学习只处理那些“模棱两可”的区域。算力省了,效果反而稳。
讲个具体的参数设置。判断一个点到底是脏污还是磕碰,我们用了**基于灰度梯度的非局部均值滤波**,然后计算区域纹理熵。阈值怎么定?别拍脑袋——我们收集了三个月的历史误检样本,标定后得出一个经验区间:熵值在0.72到0.83之间,才需要启动高层分类器。低于0.72,直接判合格;高于0.83,判缺陷。只有一个窄带区域需要“深思熟虑”。
这里得提一下标准。机械加工表面的检测,参考ISO 8785表面缺陷评定,但那是人工目检的标准,机器视觉不能直接抄。我们行业内自己定了个内部规范:对缺陷的分级,要考虑缺陷的**可修复性**和**使用强度**。比如毛刺高度在0.05mm以内,不影响装配,就放过去;超过0.1mm,必须抠出来。这个阈值,是在跟质量部吵了无数个来回之后才达成的。

三、工程落地:光有好算法不够,还得伺候好现场

算法模型再准,相机没固定好,一切都白搭。我们当时就栽过跟头——给视觉系统装了个减震器,结果产线振动频率跟减震器的固频耦合了,图像抖得跟帕金森似的。后来用光学平台来安装,又加了同步频闪光源,才稳住。
还有通讯协议。复判结果要回传给PLC,你直接用TCP/IP裸传?一旦网络阻塞,线体直接停了。我们后来用Profinet IRT,125微秒同步周期,但调试时发现,算法处理时间必须在48毫秒内完成,否则时序就崩了。每一次视觉处理,都像在刀尖上跳舞。
说到踩坑,最隐蔽的坑是**图像退化**。光源衰减,镜面水雾,甚至灰尘粒子,都会让同一工件在不同时段成像不一致。于是我们强制加了一条:每次开机先跑标准样块的校验程序,比对特征点漂移,误差超过0.3个像素就报警。这个习惯,救了我们无数次。
四、关于“智能”二字的反思

我见过太多号称“智能”的系统,实际上就是一堆规则堆砌。真正的智能,应该知道什么时候该“放弃”。我们最后在算法里加了一个“不确定区”的输出——当置信度落在0.45到0.55之间,系统不会硬判,而是打出“人工复核”信号。那一刻才感觉到,这系统有点脑子的。
但话说回来,别把复判系统当万能药。它不能改变物理本质——你是冲压件,毛刺就是多;你是铸造件,气孔就是跑不掉。复判能做的,只是把“确属合格但被误杀”的捞回来。真正有效的,还是上游工艺的稳定。所以如果你问我要不要上这个系统,我会说:先解决工艺问题,再考虑视觉复判。
最后总结一句——嗯,其实也不算总结,就个感受:**好的复判算法,不是模型的堆砌,而是对“瑕疵”的哲学理解。** 缺陷与特征的边界,有时候连人都说不清,算法能给你一个概率,已经很了不起了。我们还在迭代,在迭代的路上,一直在被现实打脸,但也一直在进步。