摘要:当前国内制造产线的外观缺陷检测多数还在靠人工,漏检率高、招人难,不少工厂都在上AI智能检测,但十有八九上线效果达不到实验室预期。本文结合我们团队3C、五金两个行业近十个落地项目的经验,聊一聊AI产品外观缺陷智能检测算法模型从选型到优化的实际干货,给准备上车的中级工程师提个醒。
为什么通用开源模型在工业场景跑不通?
去年上半年我们接了东莞某锂电池工厂的盖板缺陷检测项目,一开始图省事,直接拿开源的YOLOv8预训练模型改了改,用工厂给的一千张标注图训完,实验室测准确率94%,看着挺美。
拉到产线试跑第一天,直接傻了!漏检率超过18%,误检更是一堆,工人要复核的比原来还多,工厂老板脸都黑了。

问题出在哪?说白了,通用模型本来就是给通用目标检测训的,跟工业外观缺陷完全不是一个路数。你想想锂电池盖板的划痕,最长也就2mm,宽度不到0.1mm,在2048分辨率的图里,占比不到万分之一。普通的下采样走个八倍,这个缺陷直接就没特征了,对吧?
还有,工业缺陷的类内差异太大了。同样是划痕,有的浅有的深,有的直有的弯,有的沾了点灰尘跟划痕长的几乎一样,通用模型哪见过这么多奇葩情况。
落地级AI产品外观缺陷智能检测算法模型的核心优化
说实话,那次踩坑之后我们花了两周时间重构模型,最后出来的效果才满足要求。说几个核心的优化点,都是拿钱砸出来的经验。
backbone不能瞎选。很多人上来就堆轻量模型,或者直接上大的Transformer backbone,其实都不对。我们现在做产线边缘端部署,单帧推理延迟必须控制在200ms以内,才能匹配每分钟120件的产线节拍,大模型根本跑不动。我们最后选的是改进的ResNet50 backbone,在颈部加了一层浅层特征注意力模块,专门放大微小缺陷的特征响应,这块我们测过,对小于0.5mm缺陷的召回率直接提了12个点。
然后,头不能只用检测头,要加细分割分支。现在很多算法只做目标检测,告诉你这里有缺陷,但工业场景还要算缺陷的面积、长度,要符合GB/T 41439-2022《产品外观缺陷检测通用规范》的分级要求,只有框的话根本不够用。加一个轻量的分割头,参数只增加不到8%,就能直接输出缺陷的轮廓,精度完全够。

不过话说回来,不是所有场景都要加分割。如果你的产品只需要判断有没有缺陷,不需要分级,那直接用改进的检测头就行,能省不少推理时间。我们之前给门锁厂做表面凹点检测,就没加分割,模型大小才12M,在Jetson Nano上跑,单帧才110ms,完全够用,精度也能到95%以上。
模型优化之外,最容易忽略的落地隐形坑

我见过太多团队,模型调的精度很高,一上线就拉胯,问题根本不在模型,在细节。
第一个坑,光照适应性。产线的灯用三个月就会衰减,亮度掉个10%很正常,夏天环境温度高,相机增益也会变,如果你训模型的时候只用实验室恒定光照的数据,模型根本扛不住。解决办法也简单,训数据的时候一定要加随机光照扰动、高斯噪声的数据增强,扰动范围要比你实际可能的变化大一圈,别偷懒。我们现在做项目,增强后的光照变化范围从-30%到+30%,不管灯怎么衰减,精度掉幅不会超过2%。
第二个坑,标注一致性。这个真的太容易踩了。我们之前做五金门把手的缺陷检测,训了三次模型,准确率怎么都上不去,最后翻标注才发现,三个标注工人,对“划痕”的定义完全不一样:学徒工把0.3mm的划痕都标进去,老工人只标0.8mm以上的,最后数据集本身就是乱的,模型怎么可能训的好?现在我们做任何项目,标注一致性要求必须高于95%,先定好缺陷分级规范,所有人标完之后交叉抽检,不合格全部重标,别嫌麻烦,比你后面调模型省时间多了。
第三个坑,边缘部署的量化损失。很多人训模型用FP32,训完直接量化成INT8上边缘端,精度掉七八个点都不知道怎么回事。量化的时候一定要做校准,拿一百张代表性的产线真实图做校准,量化之后精度掉幅控制在1%以内,完全没问题。别图快直接一键量化,那就是给自己找事。
做了快五年AI缺陷检测,最大的感受就是,这个方向拼的不是模型有多先进,是你对工业场景细节的把握有多深。AI产品外观缺陷智能检测算法模型,从来不是越大越好,越新越好,匹配你的产线节拍、硬件成本、缺陷类型,能稳定跑出符合要求的精度,就是好模型。