1. 工业视觉检测的现状与AI切入逻辑
1.1 传统视觉检测到底卡在哪
我在产线侧摸爬滚打这些年,见过太多视觉检测项目从立项到烂尾的全过程。传统机器视觉的方案说白了就是一套固定规则:打光、拍照、二值化、边缘提取、模板匹配,最后输出OK或NG。这套逻辑在规则明确、缺陷形态稳定的场景下确实能跑,比如检测一个金属件的孔位是否偏移、一个瓶盖是否拧紧,这些几何量测类的任务,传统算法又快又稳,毫秒级出结果,成本也低。
但问题出在“非规则缺陷”上。划痕、脏污、色差、气泡、异物、压伤、毛刺——这些东西的形态千变万化,同一类缺陷在不同批次、不同光照、不同角度下呈现出来的像素分布完全不同。你写规则写到死,也覆盖不了所有情况。我见过一个做表面缺陷检测的项目,工程师写了三百多条规则,结果换了一批来料,误判率直接飙到百分之十几,产线天天报警停线,最后项目被砍。
传统视觉的第二个死穴是换型成本。一条产线要生产多个型号的产品,每换一次型号,相机参数、光源角度、算法阈值、ROI区域全都要重新调。有的工厂换型频率高,一天换好几次,每次调机要停线半小时以上,这个损失算下来非常吓人。而且调机依赖有经验的视觉工程师,人一走,产线就抓瞎。
第三个问题是环境敏感性。车间里的光照变化、粉尘、震动、温度漂移,都会让传统算法的阈值失效。你今天调好的参数,明天早上开机可能就误判了。这不是算法不行,是规则本身太脆弱,它假设世界是稳定的,但产线从来不稳定。
1.2 工业AI为什么能补上这个缺口
工业AI视觉检测的核心思路,是把“人来写规则”变成“让模型从数据里自己学规则”。你给它看几千张甚至几万张标注好的缺陷图片,它自己去找特征。这个特征空间可能是几百维甚至上千维的,人根本写不出来,但模型能学到。这就解决了非规则缺陷的问题——只要你的训练数据覆盖了足够多的缺陷形态,模型就能泛化到没见过的新样本上。
更关键的是,AI模型对光照变化、角度偏移、部分遮挡的鲁棒性远强于传统规则。原因在于卷积神经网络本身具有平移不变性和一定的形变容忍能力,它学的是纹理、边缘、颜色分布的统计规律,而不是某个像素点的精确值。所以车间光照稍微变一点,传统算法可能就崩了,AI模型还能稳住。
换型的问题也能缓解。如果你用迁移学习或者少样本学习的方法,新型号只需要几十张甚至十几张标注图就能微调出一个可用的模型,调机时间从半小时压缩到几分钟。这对于多品种小批量的柔性产线来说,价值非常大。
但我要泼一盆冷水:工业AI不是万能药。它的落地门槛比传统视觉高得多,数据、算力、标注、部署、运维,每一个环节都有坑。下面我按实际项目的推进顺序,把关键细节一个个拆开讲。
2. 数据工程:决定项目生死的第一关
2.1 缺陷样本的采集策略
工业AI视觉项目失败,十有八九死在数据上。不是数据不够多,而是数据不够“对”。我见过团队花三个月采集了十万张图片,结果里面百分之九十五都是良品,缺陷样本只有几百张,而且集中在两三种缺陷类型上。这种数据训练出来的模型,对稀有缺陷的召回率极低,上线后漏检频发。
正确的采集策略是“按缺陷类型分层采集”。首先你要跟产线品质部门坐下来,把历史上出现过的所有缺陷类型列出来,按出现频率和严重程度排序。然后针对每一类缺陷,至少采集三百到五百个独立样本。注意是独立样本,不是同一件产品拍五百张,那样数据冗余度太高,模型学不到多样性。
采集的时候要覆盖变量。光照条件要覆盖白天、夜晚、开灯、关灯、不同工位的光照差异;产品姿态要覆盖正常放置、轻微偏移、旋转;表面状态要覆盖干净、有油污、有粉尘。这些变量在训练时如果不覆盖,上线后就是一个个雷。
注意:缺陷样本采集最怕“摆拍”。有的团队为了凑数据,把缺陷件放在最理想的光照和角度下拍,拍出来的图片干净漂亮,但跟产线上真实拍到的完全不是一回事。训练出来的模型在实验室里精度百分之九十九,一到产线就掉到百分之七十。采集时必须模拟真实产线的拍摄条件,宁可图片“丑”一点,也要真实。
2.2 标注的坑与质量控制
标注是另一个重灾区。工业缺陷标注跟通用目标检测不一样,很多缺陷的边界是模糊的。比如一条划痕,从哪里开始算划痕,到哪里算结束?一个脏污,多大面积算缺陷,多小算可接受?这些判断标准如果不统一,不同标注员标出来的结果差异很大,模型学出来的边界也是糊的。
我的做法是:先制定一份标注规范文档,把每一类缺陷的定义、边界判定规则、最小可接受尺寸都写清楚,配上典型示例图。然后让所有标注员先标同一批一百张图,交叉比对,看一致率。如果一致率低于百分之九十,说明规范还不够清晰,要回去改。反复迭代两三轮,直到一致率达标,再开始大规模标注。
标注工具的选择也有讲究。通用标注工具比如LabelImg、CVAT能用,但工业场景建议用支持多边形标注和属性标注的工具。因为很多缺陷不是矩形框能框住的,需要多边形精确勾勒边界。属性标注则用来记录缺陷的严重程度、类型细分等信息,方便后续做多任务学习。
实操心得:标注完成后一定要做抽检。我通常按百分之十的比例随机抽检,如果发现错误率超过百分之二,整批返工。返工虽然痛苦,但比模型上线后漏检导致客诉要划算得多。另外,标注数据要版本化管理,每次修改都要记录变更内容,否则后面出了问题根本追溯不到原因。
2.3 数据增强的边界与禁忌
数据增强是扩充训练集的手段,但工业场景下不能乱用。翻转、旋转、缩放这些几何变换,在自然图像任务里随便用,但在工业缺陷检测里要小心。比如你检测的是有方向性的划痕,水平翻转后划痕方向变了,模型可能会学到错误的特征。再比如你检测的是字符或纹理,旋转后语义就变了。
亮度、对比度、噪声注入这类像素级增强相对安全,但也要控制幅度。亮度调整范围建议在正负百分之二十以内,对比度调整在正负百分之十五以内,高斯噪声的标准差不要超过像素值范围的百分之五。超过这个范围,增强出来的图片跟真实产线差异太大,反而有害。
我比较推荐的是基于生成模型的增强方法,比如用扩散模型生成特定缺陷的合成图像。但这个方法目前还不够成熟,生成图像的真实性和多样性需要仔细评估。如果要用,建议只作为补充,合成数据在训练集中的占比不要超过百分之二十。
3. 模型选型与训练策略
3.1 分类、检测还是分割
工业视觉检测任务大致分三类:图像分类、目标检测、语义分割。选哪个取决于你的需求。
如果你只需要判断整张图是OK还是NG,不关心缺陷在哪里,那就用分类模型。分类模型结构简单、推理速度快、训练数据需求相对少。常见的骨干网络有ResNet、EfficientNet、MobileNet等。产线侧如果对速度要求极高,MobileNet系列是首选,它在精度和速度之间平衡得比较好。
如果你需要定位缺陷的位置,比如告诉产线“这个划痕在产品的左上角”,那就用目标检测模型。YOLO系列在工业场景用得最多,因为它的推理速度快,单阶段检测,适合实时产线。YOLOv5、YOLOv8都是成熟的选择。但要注意,YOLO对小目标的检测能力有限,如果你的缺陷很小,可能需要用高分辨率输入或者专门的小目标检测方案。
如果你需要精确勾勒缺陷的轮廓,比如计算缺陷面积、判断缺陷形状是否规则,那就用语义分割模型。U-Net及其变体在工业缺陷分割里很常见,它的编码器-解码器结构能保留空间信息,分割边界比较精细。但分割模型的标注成本最高,推理速度也最慢,要权衡。
实际项目中,我经常用“检测加分类”的两阶段方案:先用检测模型定位缺陷区域,再把缺陷区域裁剪出来送进分类模型判断类型和严重程度。这样既有了位置信息,又有了细粒度的分类结果,而且两个模型可以独立优化,灵活性高。
3.2 迁移学习与少样本策略
工业场景的标注数据通常不多,从头训练一个模型几乎不可能。迁移学习是标配:先在ImageNet或者大规模工业数据集上预训练一个骨干网络,然后在自己的缺陷数据集上微调。微调的时候,学习率要设小,通常比预训练时小一个数量级,否则会把预训练学到的通用特征破坏掉。
如果新产品的缺陷样本极少,比如只有十几张,那就用少样本学习的方法。常见的有原型网络、匹配网络、MAML等。这些方法的核心思想是让模型学会“比较”,而不是“分类”。你给它几张支持集样本,它能把查询集样本正确归类。工业场景下,少样本学习适合换型频繁、每类缺陷样本都很少的情况。
还有一种更实用的策略是“异常检测”。如果你只有良品样本,没有缺陷样本,那就用异常检测模型,比如基于自编码器的重构误差方法,或者基于特征嵌入的PatchCore方法。这类方法学习良品的分布,任何偏离良品分布的样本都判为异常。优点是只需要良品数据,缺点是只能判断“异常”,不能区分缺陷类型,而且对阈值设定比较敏感。
3.3 训练中的关键参数与调优
训练工业缺陷检测模型,有几个参数特别关键。
第一个是输入分辨率。分辨率越高,小缺陷越容易被检测到,但显存占用和推理时间也越大。我的经验是:如果缺陷的最小尺寸在图像中占不到二十个像素,那就要考虑提高分辨率或者用图像切块的方法。切块的时候要注意重叠率,通常设百分之二十到三十,避免缺陷被切在边界上。
第二个是正负样本比例。工业数据里良品远多于缺陷品,如果不做处理,模型会倾向于把所有样本都判为良品,准确率看起来很高,但召回率极低。解决办法有几种:一是过采样缺陷样本,二是欠采样良品样本,三是用Focal Loss这类对难样本加权的损失函数。我通常用Focal Loss加上适度的过采样,效果比较稳。
第三个是学习率调度。工业数据集小,训练轮数不多,学习率调度要用余弦退火或者带热重启的策略,避免陷入局部最优。初始学习率设零点零零一到零点零一之间,根据batch size调整。batch size大的时候学习率可以大一点,但不要超过零点零一,否则训练不稳定。
第四个是早停策略。工业数据容易过拟合,训练损失还在降,验证损失已经开始升了。这时候要早停,通常验证损失连续五到十个epoch不降就停。保存验证集上表现最好的模型权重,而不是最后一个epoch的权重。
踩过的坑:有一次我训练一个缺陷分类模型,训练集准确率到了百分之九十九点五,验证集也有百分之九十八,我以为稳了。结果上线后第一天就发现,模型把一种新出现的缺陷全部判成了良品。原因是训练集里没有这种缺陷类型,模型没见过,自然学不会。这件事告诉我,工业AI模型的上线不是终点,而是起点,后续的数据回流和模型迭代必须跟上。
4. 部署落地与产线集成
4.1 推理加速与硬件选型
实验室里跑得通的模型,到产线上不一定跑得动。产线的节拍通常是几百毫秒到几秒一件,留给推理的时间窗口很窄。如果你的模型推理需要五百毫秒,而产线节拍是三百毫秒,那就直接卡死了。
推理加速有几个方向。一是模型剪枝和量化。剪枝是把冗余的通道或层去掉,量化是把浮点权重转成定点数。INT8量化通常能把推理速度提升两到四倍,精度损失控制在百分之一以内。TensorRT是NVIDIA GPU上最常用的推理加速框架,支持层融合、内核自动调优、动态批处理等优化。
硬件选型要看场景。如果产线工位空间大、功耗不是问题,用带GPU的工控机最省事,NVIDIA的Tesla T4或者RTX系列都行。如果空间受限或者功耗敏感,可以考虑边缘计算设备,比如Jetson系列或者算力棒。如果对成本极度敏感,也可以用CPU推理,但要用OpenVINO或者ONNX Runtime做优化,而且模型要选轻量级的。
我个人的经验是:不要盲目追求大模型。工业缺陷检测很多时候不需要ResNet-152这种级别的骨干网络,一个精心调优的MobileNetV3或者ShuffleNet就能达到差不多的精度,但速度快好几倍。模型选型要在精度和速度之间找平衡点,而不是单方面追求精度。
4.2 与PLC和MES的对接
视觉检测系统不是孤岛,它要跟产线的PLC和MES系统打交道。检测结果要传给PLC,PLC根据结果控制分拣机构把NG品踢掉;检测数据要传给MES,用于质量追溯和统计分析。
跟PLC对接通常用IO信号或者工业通信协议。IO信号最简单,OK输出一个高电平,NG输出一个低电平,PLC读这个信号就行。但IO信号只能传二值结果,传不了缺陷类型、位置、图像这些信息。如果要传更多数据,就要用Modbus TCP、Profinet、EtherNet/IP这些工业以太网协议。
跟MES对接一般用HTTP API或者MQTT。每次检测完成后,视觉系统把结果打包成JSON,通过API推给MES。JSON里包含时间戳、产品序列号、检测结果、缺陷类型、缺陷位置、置信度、图像路径等字段。MES收到后存数据库,供后续查询和分析。
注意:跟PLC和MES对接的时候,一定要做异常处理。网络断了怎么办?MES宕机了怎么办?PLC没响应怎么办?这些情况都要有降级策略。比如网络断了,视觉系统要本地缓存检测结果,等网络恢复了再补传。MES宕机了,视觉系统要能独立运行,不能因为MES挂了就停线。
4.3 现场调试与光照优化
模型部署到产线后,现场调试是绕不过去的。实验室的光照和产线的光照往往不一样,模型在实验室表现好,到现场可能就掉点。这时候不要急着重新训练模型,先检查光照。
光照优化的原则是:让缺陷和背景的对比度最大化,同时让光照均匀。常用的光源有环形光、条形光、同轴光、背光等。环形光适合检测表面划痕和凹凸,条形光适合检测平面上的脏污和色差,同轴光适合检测反光表面的缺陷,背光适合检测轮廓和尺寸。
光源的角度和距离要反复调。我通常用一个小技巧:先关掉所有光源,只开一个光源,观察缺陷在哪个角度下最明显。然后逐个增加光源,看组合效果。调好之后,用螺丝固定死,做好标记,防止震动导致光源偏移。
相机参数也要调。曝光时间、增益、白平衡、焦距、光圈,每一个都会影响成像质量。曝光时间太长会拖影,太短会欠曝;增益太高会引入噪声;白平衡不准会导致颜色偏差。这些参数调好后要锁定,并在系统里记录,方便后续复现。
5. 常见问题与排查实录
5.1 误判和漏判的排查思路
误判和漏判是产线最常反馈的问题。排查的时候要分清楚是模型问题还是数据问题还是环境问题。
先看误判的样本。把误判的图片调出来,看看模型判成了什么,置信度是多少。如果置信度很低,比如零点五几,说明模型本身也不确定,可能是训练数据里这类样本太少,或者标注边界不清晰。如果置信度很高,比如零点九几,那可能是训练数据里有标错的样本,模型学到了错误的特征。
再看漏判的样本。漏判通常是因为缺陷太小、对比度太低、或者缺陷类型在训练集里没出现过。如果是太小,考虑提高分辨率或者用图像切块;如果是对比度太低,考虑优化光照或者用多光谱成像;如果是没出现过,那就赶紧采集这类缺陷样本,加入训练集重新训练。
环境问题也要排查。相机镜头有没有脏?光源有没有老化?产线震动有没有导致相机偏移?这些物理因素经常被忽略,但往往是问题的根源。我遇到过好几次,模型没问题,就是镜头上有油污,导致成像模糊,误判率飙升。擦一下镜头就好了。
5.2 模型退化的监测与迭代
模型上线后不是一劳永逸的。随着时间推移,来料批次变化、设备磨损、环境漂移,都会导致模型性能下降。这种下降是渐进的,不容易察觉,但积累到一定程度就会爆发。
我的做法是建立一套监测机制。每天统计误判率和漏判率,画趋势图。如果发现连续三天误判率上升超过百分之二十,就触发预警,安排排查。同时,每周随机抽检一批检测结果,人工复核,计算模型的真实精度。这个抽检比例不用太高,百分之五就够了,但要坚持做。
数据回流是模型迭代的关键。每次发现误判或漏判,都要把对应的图片保存下来,标注好,加入训练集。积累到一定数量后,重新训练模型,更新上线。这个循环越快,模型就越准。我见过做得好的团队,每周迭代一次模型,半年下来精度提升了十几个百分点。
实操心得:模型版本管理很重要。每次更新模型都要记录版本号、训练数据、超参数、评估指标。上线新模型之前,先在影子模式下跑一段时间,也就是新模型和旧模型同时推理,但只用旧模型的结果控制产线,对比两者的差异。确认新模型确实更好之后,再切换。这样能避免新模型引入未知风险。
5.3 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 误判率突然升高 | 光照变化、镜头脏污、来料批次变化 | 检查光源和镜头,对比近期来料 | 清洁镜头、调整光源、采集新样本重新训练 |
| 漏判率升高 | 缺陷类型变化、模型过拟合、阈值过高 | 调出漏判样本分析缺陷特征 | 补充缺陷样本、调整判定阈值、重新训练 |
| 推理速度变慢 | 模型太大、硬件资源不足、内存泄漏 | 监控CPU/GPU占用和推理耗时 | 模型量化剪枝、升级硬件、修复内存泄漏 |
| 与PLC通信中断 | 网络故障、协议配置错误、IP冲突 | 检查网络连接和协议配置 | 修复网络、重新配置协议、更换IP |
| 检测结果不稳定 | 相机参数漂移、光源闪烁、震动 | 检查相机参数和光源稳定性 | 锁定相机参数、更换光源、加固相机支架 |
6. 工业AI视觉的边界与未来方向
6.1 当前技术的局限性
工业AI视觉检测虽然强大,但远不是万能的。首先,它对训练数据的依赖极强。没有足够多、足够好的标注数据,模型就是废的。而工业场景下,缺陷样本天然稀少,采集和标注成本很高。这是最大的瓶颈。
其次,模型的可解释性差。传统视觉算法每一步都是透明的,你可以追溯为什么判NG。但深度学习模型是个黑盒,它判NG的时候,你很难说清楚是哪个特征起了作用。这在一些对可追溯性要求极高的行业里是个问题。
第三,模型的泛化能力有限。在一个产线上训练好的模型,换到另一条产线,哪怕产品一样,光照和相机角度不同,精度就可能大幅下降。跨产线、跨工厂的模型迁移仍然是个难题。
第四,边缘设备的算力限制。虽然边缘芯片越来越强,但跟云端GPU比还是有差距。大模型在边缘侧部署仍然困难,需要在精度和速度之间做取舍。
6.2 自监督与持续学习的方向
自监督学习是解决标注数据稀缺的一个方向。它的核心思想是让模型从无标注数据中自己学习特征表示,然后再用少量标注数据微调。工业场景下有大量无标注的良品图像,这些数据可以用来做自监督预训练。比如用对比学习的方法,让模型学会区分同一产品的不同视角和不同产品的差异,学到的特征对缺陷检测很有帮助。
持续学习是另一个重要方向。产线的数据分布是不断变化的,模型需要能够持续学习新知识,同时不忘记旧知识。这在学术上叫“灾难性遗忘”问题。目前的解决方案有经验回放、弹性权重巩固、动态网络扩展等。工业场景下,我比较看好经验回放的方法,就是保留一部分旧数据,每次训练的时候混合新旧数据一起训,简单有效。
6.3 多模态融合的潜力
单一的可见光成像有时候不够用。比如检测透明件内部的缺陷,可见光拍不到;检测金属件内部的裂纹,可见光也拍不到。这时候就需要多模态融合,比如可见光加红外、可见光加超声、可见光加X光。
多模态融合的挑战在于数据对齐和特征融合。不同模态的图像分辨率、视角、成像原理都不同,要把它们对齐到同一个空间参考系下,然后设计融合网络把不同模态的特征结合起来。目前这方面还比较前沿,工业落地案例不多,但在一些高价值场景下已经开始试水。
我个人觉得,未来三到五年,工业AI视觉检测会从“单模态、单任务、单产线”走向“多模态、多任务、跨产线”。模型会越来越轻量,部署会越来越简单,但数据工程和现场调试仍然会是项目成败的关键。技术只是工具,真正决定效果的,是你对产线工艺的理解和对缺陷本质的把握。
最后分享一个我一直在用的小技巧:每次项目上线后,我都会建一个“错题本”,把所有的误判、漏判、异常情况都记录下来,配上图片和排查过程。这个错题本不仅是团队的知识库,也是后续模型迭代的宝贵素材。坚持记半年,你会发现很多问题其实是重复出现的,有了错题本,排查效率能提升好几倍。