摘要:做视觉检测这些年,我最大的一个感触就是:算法没那么神,真正卡脖子的往往是成像系统。也许你会觉得奇怪,一个做算法的工程师,怎么先聊起光学来了?别急,听我慢慢说。
视觉系统的物理底子——光源和成像,决定了算法的天花板

很多人一上来就调模型,跑去跑YOLO,结果数据拍出来的图片上,缺陷跟背景融为一体——你让算法怎么学?我见过太多项目,前期光学设计随便搞搞,后面算法怎么调都白搭。记住,成像质量才是第一位的。
光源选型就是个典型的例子。环形光适合打凸起缺陷,同轴光对付镜面反射,穹顶光能匀化漫反射。你检测拉丝金属外壳上的划痕,用环形直射光,光照角度不对,划痕反光全被淹没了。反过来,用同轴光,非镜面区域又容易过曝。这种现场的憋屈,不自己踩一遍坑真是不会长记性。
再说相机分辨率。最小缺陷尺寸0.1mm,视场有100mm宽,那至少需要1000像素?误差大了。工程上我们按缺陷在图像上至少占2~3个像素来算,所以分辨率要2000~3000像素以上。比如500万像素的相机,能覆盖的视场也就巴掌大。别迷信高分辨率,像素高了数据量翻倍,检测节拍跟不上的话,同样头疼。
镜头的畸变也得考虑。别拿普通CCTV镜头做测量,畸变个0.5%,你的缺陷位置都偏到姥姥家了。用远心镜头,虽然贵,但景深够,畸变近乎为零,这对于需要定位的场景是刚需。
不是给光学厂商打广告,这是血泪教训。
从特征工程到特征学习——算法演进中的一次“反叛”
传统视觉检测,靠的是人为定义特征。比如划痕就是灰度突变,气泡就是圆形度,麻点就是局部方差。你得像中医开方子一样,给每种缺陷设计不同的滤波器组合。而且换一个产品型号,光照一变,阈值全得重调。一个看似简单的毛刺检测,老师傅得调上两周。
深度学习来了之后,这事儿变得“不讲武德”。你给它喂几千张标注好的图片,它自己就知道该看哪里。CNN的特征提取层,从边缘到纹理再到部件,一层层抽象。说实话,第一次看到网络自己学到了类似边缘检测的算子,我背后汗毛都竖起来了——这哪是算法,这是会自己长大的生物。
不过别高兴太早。深度模型像个贪婪的学生,你喂什么它学什么。样本不均衡,缺陷样本只有几十个,它就敢给你学成“只对背景敏感”。所以现实中的做法是,用传统算法做预筛,把可疑区域扣出来,再让深度学习去分类。这种“土洋结合”的套路,在产线上往往最稳。
比如我们在轴承滚子表面缺陷检测项目里,先用形态学连通域分析,快速定位那些可能的划伤点,再裁成小patch送进一个轻量级分类网络,准确率直接从92%飙到99.2%——代价只是增加了几毫秒的GPU推理时间,值。

落地路上那些看不见的坑——数据集、标定、阈值
数据集的坑,我愿称之为人间炼狱。你以为找一万张缺陷图就完了?产线现场的光照波动,会让你的测试集和训练集根本不是同一种分布。今天上午九点阳光透过窗户照到传送带上,下午阴天,同一个产品,模型输出能波动好几个百分点。所以我们在现场必须做动态标定,每隔一段时间拍标准件更新光度模型,不然AI照样失灵。
还有个很容易被轻视的问题是缺陷类别的定义。你以为是分类问题,其实是个回归问题。比如“严重划痕”和“轻微划痕”之间的界限,不同质检员标注的尺度都不一致。这时候强制模型学一个二分类,它只能学个寂寞。不如用置信度分数,让工艺工程师根据历史数据自己划一条阈值线。
说到阈值,这里分享一个血泪史。有一次我们调好一个检测模型,误检率低得感人,现场一片叫好。结果到了夏天,车间温度升高,相机热噪声变大,误检率直接翻倍。后来我们在算法里加了温度补偿,又在相机底下加了散热片,才算稳定下来。你说这是算法问题?我不认。

说了这么多,其实就一句话:AI外观缺陷检测,拼的不只是模型,更是整个系统的工程能力。光学设计、成像质量、数据质量、现场标定,每一环都拖后腿的可能。别指望拿个预训练模型就能征服产线——经验这东西,还真得靠日子堆出来。
下次再有同事跟我抱怨算法不work,我第一句话就问:你们的光源是怎么打的?多半就能猜到问题出在哪了。