开工前先聊几句:这个项目到底干了件什么事
做了这么多年工业视觉相关的项目,我对“智能图检”这四个字一直抱有敬畏心——因为工业现场从来不是算法的秀场,而是稳定性、实时性和脏活累活的角斗场。最近在友商那边看到一套基于 JBoltAI 的智能图检系统落地到了鲁威制造的产线上,从底层的检测逻辑到上层的业务报表完整拉通,效果确实让人眼前一亮。
我自己也把这套系统的技术栈和实施方案拆了一遍,觉得里面有不少值得记录和复用的经验。它不是那种为了“AI 而 AI”的演示项目,而是真正扎进了产线的节拍里,用视觉检测替代了部分人工质检工位,同时把检测数据反馈到了工艺改善环节。这篇文章就围绕这套系统的设计思路、落地细节、选型逻辑和排查经验展开,希望对正在做工业质检、或者在制造企业里推进智能化改造的朋友有点参考价值。
如果你正在纠结“AI 检测到底怎么落地到产线”,或者已经在做但没有头绪,这篇文章适合你。如果你是做算法或者后端开发的,也可以看看工业场景下那些“实验室里根本遇不到”的坑。
1. 项目背景与需求拆解:鲁威制造要解决的到底是什么问题
1.1 质检工位的人力困局与品控压力
鲁威制造的主营业务是精密金属结构件的加工与表面处理,产品覆盖工程机械、农用装备的结构件配套。这类行业有一个共性特点:产品的结构形式相对固定,但每一批次的状态差异很大——焊接飞溅、表面划伤、涂层色差、加工毛刺、局部凹陷,这些缺陷种类繁多,而且很多缺陷在特定的光照角度下才能被发现。
在没有上这套系统之前,鲁威的质检流程是这样的:终检工位配置了若干个经验丰富的质检员,每人负责一条产线,目视检查每一件下线产品,发现缺陷后用记号笔圈出来,再通知返修工位处理。这套流程在产量低的时候没有问题,但一旦订单集中、节拍加快,问题就来了——人工目检的漏检率会显著上升,尤其是细小的划痕和浅表凹坑,在高强度工作状态下非常容易漏。
另一个痛点在于缺陷数据的记录方式。传统的人工记录只能到“今天有缺陷”“缺陷大概在什么位置”这种颗粒度,很难系统地统计某个工位、某个时段、某种工艺参数下缺陷的分布规律。工艺部门想优化参数,缺的就是这种结构化、量化的缺陷数据池。
1.2 为什么选择 AI 视觉方案而不是传统机器视觉
在项目前期论证阶段,鲁威内部也考虑过传统机器视觉方案,就是用光源加工业相机加规则算法(灰度阈值、边缘检测、模板匹配)来做缺陷判定。这种方案在单一产品、固定工位、背景干净的场景下表现不错,成本也相对可控。
但鲁威的产品形态决定了传统方案的局限性:结构件种类多、切换频繁,而且表面状态复杂——有油污、有焊纹、有喷砂后的粗糙面。传统算法靠人工设计特征来区分“缺陷”和“正常纹理”,在这么复杂的背景下非常吃力。比如,喷砂面的灰度波动本来就大,如果简单用灰度阈值来分割,那误检率会高到没法用。
AI 方案的核心优势在于特征不是人设计的,而是从数据里学出来的。用一批标注好的缺陷样本训练目标检测模型,模型能自动学习“划伤”“凹坑”“焊瘤”这些缺陷的视觉模式,对复杂背景的适应能力远强于传统算法。再加上推理框架的成熟,单张图像的检测耗时已经可以压缩到几十毫秒级别,完全兼容产线的节拍要求。
1.3 系统建设目标与验收口径
任何工业项目在启动前,最重要的是把验收标准定清楚。这个项目在立项时定了几个硬指标:
- 检出率:对关键缺陷(开裂、漏焊、严重凹坑)的检出率不低于 98%
- 误检率:整体误检率控制在 5% 以内,也就是每检测 100 件产品,误报警不超过 5 件
- 检测节拍:单件产品从图像采集到结果输出,总耗时不超过 3 秒
- 数据对接:检测结果须实时写入生产管理系统,并能按缺陷类型、工位、班次维度汇总分析
这些指标定完之后,整个技术方案的走向其实就被约束死了。后面的选型、部署、调优都是围绕这几个数字展开的。
2. 整体架构设计与方案选型:从产线传感器到上层数据的完整链路
2.1 系统物理架构:相机怎么装、光源怎么打、工控机放在哪
硬件层面的设计是这套系统最先要解决的事。视觉检测系统的物理架构直接决定了图像的采集质量,而图像质量又决定了算法的上限。
鲁威产线的工位布局是这样的:产品通过悬臂吊具移动到终检区域,停留在固定工位上,质检员检查完之后,合格的放行,不合格的标记后转返修。这套系统要做的就是在原有节拍内插入自动检测环节,不能额外增加工位等待时间。
相机的选型逻辑是这样的:检测对象是大型结构件,单台相机拍摄整个产品不现实。一台常规的工业面阵相机,分辨率大约在 500 万到 1200 万像素之间,视野大概能覆盖一个局部区域。所以这里采用了“多工位分区域拍摄”的策略——在产品的上方和侧面分别布置若干台相机,每台相机负责一个固定的检测区域,比如主焊缝区、端板表面区、侧板折弯区。这样一个产品下来,图像采集由多个工位协作完成,单台相机的视野不需要覆盖全件,但每个关键区域的像素精度都能保证。
光源的选型这里联合其实花了比较多心思。结构件表面不是平整的镜面,而是带有纹理的粗糙面,不同角度下缺陷的可见性差异很大。实际调试中发现,用低角度环形光源能有效突出划伤类缺陷,因为划伤破坏了表面的连续性,在掠射光下会产生明显的散射差异;而用同轴光源检查涂层表面的色差和麻点效果更好。最后采用了多角度组合光源的方案,每台相机对应的光源独立开关控制,按检测区域的不同选择对应的打光方式。
工控机的配置也不是随便选的。工业现场的环境温度、粉尘、振动都要考虑。这里选择的是无风扇嵌入式工控机,配置了一块中端级的 GPU 显卡,用于推理加速。工业现场不建议用普通办公 PC 来跑推理任务,环境适应性差,一旦粉尘侵入或者温度过高,系统稳定性就会出问题。
2.2 软件架构:图像采集、算法推理、结果上抛如何解耦
软件层面用的是典型的模块化架构。最底层是相机 SDK 采集模块,负责触发拍照和图像拉取;中间层是算法服务模块,负责对图像进行预处理、缺陷检测和结果判定;最上层是业务对接模块,把检测结果上报到生产管理系统,并生成检测记录和报表。
这三个模块之间通过消息队列解耦,采集端只管拍图和推图,算法服务只管消费图像并回传结果,业务模块负责最终的业务逻辑处理。这样做的原因是工业现场的不确定性太多——相机可能触发失败,算法推理可能偶发超时,生产系统可能出现短暂断连。如果这三个模块耦合在一起,任何一个环节抖动都可能造成整个检测链路卡死。
图像采集和算法推理之间还加了一层本地缓存。相机拍完的图像先落盘,同时推入内存队列给算法服务。这样即使算法服务偶发抖动,图像数据也不会丢,重启之后可以从断点继续处理。这个设计在后面的实际运行中帮了大忙,后面排查问题时我会细说。
2.3 为什么选 JBoltAI 作为算法底座
JBoltAI 是一套面向行业应用的 AI 开发框架,提供了从数据集管理、模型训练到推理部署的全流程能力。选择它而不是完全从零开始用 PyTorch 自建一套流程,核心考量的点是效率和稳定性。
从零自建一个完整的训练和推理链路,工作量比想象中大得多。数据标注管理、数据集版本管理、训练配置模板、模型仓库管理,还有推理服务的封装和监控,每一个环节都要投入大量开发和测试时间。而 JBoltAI 把这些环节都做成了可视化和配置化的能力,算法工程师可以专注于模型调优和数据优化,而不需要花大量时间在工程框架的搭建上。
再一个原因是 JBoltAI 对工业场景做了适配。它内置了对工业相机图像格式的处理支持,也提供了模型量化、推理加速等功能,可以直接输出适配边缘设备部署的模型格式。这对于缺少专门推理优化工程师的团队来说,节省了非常多的时间。
3. 数据工程与模型训练:工业缺陷检测的成败关键
3.1 缺陷样本的采集策略:正样本容易,负样本难
做工业缺陷检测的人都知道一句话:“正样本容易,负样本难。”正常产品的图像可以大量采集,但缺陷样本往往是小概率事件,尤其是某些特定类型的缺陷,可能一个月也碰不到几次。
鲁威项目团队在数据采集阶段做了几件事:一是利用系统上线前的试运行期,把产线上所有经过终检工位的产品都过了一遍系统,先不管检测准确率,把所有图像数据收集下来,作为基础数据池;二是把历史上有缺陷记录的产品重新拍摄了一遍,补充了部分缺陷样本;三是通过工艺模拟的方式,在试制件上人为制造特定类型的缺陷,比如在试制件上刻划痕、砸凹坑,用来补充长尾类缺陷的样本量。
缺陷数据还有一个天然的问题:不平衡。划伤类的样本可能非常多,而裂纹和漏焊的样本极少。训练时如果直接用原始数据分布,模型会严重偏向高频类别。这里用到了重采样和在线数据增强的方法——对低频类别做过采样,同时对整个数据集做随机亮度扰动、对比度扰动、高斯噪声、随机裁剪等增强操作,变相扩大了样本的覆盖范围。
3.2 标注规范与质量控制
标注的质量直接决定模型的上限。如果在标注阶段就把“划伤”和“压痕”混为一谈,模型学习到的特征边界就是模糊的,后续怎么调参都救不回来。
这个项目在标注规范上定义了明确的缺陷分类体系和边界规则。比如“划伤”的定义是“表面呈线状或带状的连续损伤,宽度不超过 X 毫米,长度不低于 Y 毫米”,而“凹坑”的定义是“表面局部呈凹陷状,直径不超过 X 毫米,深度不超过 Y 毫米”。同时规定了一个目标框的标注原则:粘连在一起的多个缺陷按独立目标分别标注,一个缺陷跨图像边界时必须在相邻图像中同时标注完整。
标注做完之后还有一道审核流程。审核员会对标注结果进行二次校验,发现不规范的标注会打回重改。实际操作中,我发现这一步千万不能省——标注员的注意力水平会随着工作时间增长而下降,如果没有二次审核,后期标注质量会明显波动。
3.3 模型选型与训练参数的经验值
在模型选型上,这个项目最终用的是单阶段目标检测模型 YOLO 系列的最新版本做底模,结合 JBoltAI 内置的训练流程做迁移学习。选单阶段模型的理由是推理速度快,对算力要求相对友好,而在小目标和密集目标场景下,通过提升输入分辨率和优化锚框参数也可以在精度上追平双阶段模型的差距。
训练数据的划分上遵循了严格的时间隔离原则——用前期的数据做训练集,最后一小段时间的数据做验证集,而不做随机打散划分。原因在于产线状态是随时间漂移的,光源老化、设备磨损都会导致图像分布缓慢变化。如果用同一时段的数据随机分配训练和验证,验证结果不能真实反映模型在未来时段的表现。
训练参数的设置也踩过一些坑。初始学习率如果设置过大,模型会震荡不收敛;过小则会收敛得很慢。比较稳妥的做法是用“预热 + 余弦衰减”的学习率策略——前若干个迭代用一个较小的学习率做预热,让模型适应数据分布,然后逐步上升到目标学习率,再按余弦曲线衰减到极小值。对于工业缺陷数据集这种样本量不算特别大、背景复杂度高的场景,图像分辨率设到 1280 以上通常效果更稳,锚框则需要根据实际目标尺寸重新聚类,不能直接用预训练模型的默认值。
4. 工程化落地与部署实施:从算法 Demo 到产线稳定运行的最后一公里
4.1 推理性能优化:把单张检测耗时从秒级压到毫秒级
模型训练出来之后,第一个要解决的是推理性能问题。实验室环境下用 GPU 推理一张图可能只要几十毫秒,但到了产线上,图像分辨率、相机数量、并发请求和工控机的算力都约束着性能。
这项目采用的是分阶段优化策略。第一步是模型轻量化,在验证精度基本不受影响的前提下,对模型做通道剪枝和层剪枝,把计算量压缩到原来的 60% 左右。第二步是推理框架优化,使用 TensorRT 对模型做 FP16 量化。FP16 的精度损失对这个场景来说可以忽略,但推理速度几乎翻倍。第三步是并行流水线优化,图像采集、预处理、推理、后处理四个阶段并行执行,通过流水线设计掩盖部分耗时。
优化完的效果是:单张 1280×1280 分辨率图像的目标检测推理耗时从原始的约 160 毫秒降到了约 45 毫秒。加上图像预处理和后处理时间,单件产品所有区域的图像检测总耗时控制在 2.2 秒以内,满足项目的 3 秒节拍要求。
4.2 部署形态与现场改造细节
部署形态上采用了“边缘工控机 + 中心管理服务”的组合。每个终检工位部署一台边缘工控机,负责实时推理和结果判断;中心节点部署了管理服务,负责模型版本的统一管理、检测数据的汇总分析和系统的远程监控。
模型版本管理在部署阶段是一个被低估的工作量。现场模型不可能一版定终身,随着数据积累和产线状态变化,需要持续迭代。这里通过 JBoltAI 的模型仓库实现版本管理,新模型先在离线数据集上跑回归测试,达到验收标准后,通过灰度发布的方式推送到边缘节点——先在一条产线上跑,观察一个班次的检测数据,确认误检率没有异常后再全量推送。
现场改造有几个容易被忽略的细节。第一,相机支架必须做减振处理。产线设备的振动会传递到支架上,导致图像抖动模糊。第二,光源的散热必须做好。大功率光源长时间点亮,温度升高会导致亮度衰减,进而影响图像一致性。第三,所有线缆必须走线槽,并且做防护,工业现场的油污和水汽对裸露线路的腐蚀性很强。
4.3 与生产系统的数据对接逻辑
检测结果要真正发挥作用,必须和生产管理系统打通。这里的对接逻辑设计得比较直接:检测完成之后,边缘工控机把结果打包成 JSON 格式的消息,通过 HTTP 回调接口推送给生产管理系统,消息中包含产品编号、区域编号、缺陷类型、缺陷位置(以图像坐标表示)、置信度分数和检测时间。
生产管理系统收到消息后,做两件事:一是更新当前产品的检测进度和结果状态,二是把缺陷记录写入历史数据库。这样产线管理人员可以通过看板实时查看当前班次的产品合格率、缺陷类型分布、返修件清单,工艺人员也可以通过历史数据做趋势分析。
数据对接有个现实问题:老的生产管理系统接口协议未必很规范。实际项目里,对接初期经常出现字段不一致、数据格式不匹配的问题。两个办法可以缓解:一是尽量在边缘侧完成数据清洗和标准化,不管上游系统接口什么格式,尽量按标准格式推送;二是在推送逻辑里加入重试机制,避免因网络抖动导致数据丢失。
5. 调试优化与常见问题排查:现场踩过的那些坑
5.1 过检率高的排查思路:先看数据分布,再想模型问题
系统上线初期,遇到的第一个大问题是某些缺陷类型的过检率远超预期。比如模型经常把焊缝的正常纹理误判为“划伤”,把喷砂面的深色斑点误判为“凹坑”。这时候很多人的第一反应是调模型阈值,但这个项目的经验告诉我们:先看数据分布,再想模型问题。
排查过程是这样的:先把误检的图像案例全部导出,按误判原因分类。结果发现,绝大多数误检集中在喷砂区域。喷砂后的表面颗粒感很强,在某种光照角度下,颗粒阴影的形态和划伤的形态非常相似,模型难以区分。这就不仅仅是阈值的问题了,而是数据覆盖和区域差异化处理的问题。
解决办法有两层。第一层是调整检测策略,对喷砂区域使用更严格的判定阈值,只有置信度非常高的缺陷才报警,宁可漏掉轻微可疑的风险,也要把误报压下去。因为喷砂区域的轻微划伤对产品性能基本没有影响,误报多了反而会消耗返修工位的产能。第二层是数据增强,在训练集中加入更多喷砂背景的负样本,让模型看到更多“长得像缺陷但其实是正常纹理”的案例。
5.2 图像采集异常的排查记录:光源频闪与触发信号干扰
运行过程中还遇到过一种很隐蔽的问题——同一条产线上,不同时段采集的图像亮度有明显差异,导致同一产品的检测结果不稳定。排查了一圈,最后锁定在两处:
第一处是光源频闪。现场使用的是交流供电的 LED 光源,有轻微的频闪效应,而相机的曝光时间又比较短,导致某些帧拍到的光照强度偏低。解决办法是改用直流供电的驱动器,或者在相机曝光时间内主动控制光源点亮,确保图像采集时光源亮度稳定。
第二处是相机的触发信号干扰。产线上的其他设备,比如电焊机、行车电机,启动瞬间会产生强烈的电磁干扰,如果触发信号线没有做好屏蔽,相机可能会误触发或漏触发。解决办法是换用带屏蔽层的触发线缆,并且把信号线和动力线分开走线。
5.3 模型更新的灰度发布流程:别让一次更新毁了整个班次
这个项目在模型迭代上建立了一套非常严格的灰度发布流程,原因是我亲眼见过一次模型更新事故——某个新版本的模型在全量推送后,对某一类缺陷的误检率突然飙升,整条产线的返修节奏被打乱,不少正常产品被误判为缺陷。
从那以后,所有模型更新都必须走这样的流程:先在一台边缘节点上部署试用,观察至少一个完整班次的检测数据,和旧模型对比误检率和检出率的变化趋势;确认稳定后,扩大部署到同一条产线的所有节点,再观察一个班次;最后才扩展到所有产线。每一步都要生成对比报告,由项目负责人审核签字才能放行。
批量类缺陷的回归测试也必须在离线数据集上做——就是保留一批已经标注好的历史数据,每次模型更新后先在这批数据上跑一遍,确认没有出现过拟合导致的精度暴跌,才允许上线。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 排查办法 |
|---|---|---|
| 某类缺陷检出率持续偏低 | 该类缺陷训练样本太少 | 补充样本,做在线增强和过采样 |
| 某区域误检率明显偏高 | 该区域表面纹理复杂、光照设置不当 | 调整光源角度和检测阈值,增加负样本 |
| 同一产品不同时段检测结果不一致 | 光源亮度漂移、环境光干扰 | 检查光源驱动类型,增加遮光罩 |
| 系统偶发卡死、图像堆积 | 推理服务线程异常、磁盘空间不足 | 加日志监控,定期清理缓存 |
| 新模型上线后误检率飙升 | 训练数据和现场数据分布差异大 | 回滚旧模型,回溯训练数据的采集时段 |
6. 项目复盘与可复用的经验
6.1 一个容易被忽视的细节:亮度标准化与图像归一化
这个项目的图像采集环节,有一件看起来不起眼、但实际影响很大的事:亮度标准化。工业现场不是实验室,光源会老化、环境光会变化、产品表面状态会波动,这些因素都会导致同一产品的两批次图像在灰度分布上有明显差异。
如果模型训练时没有覆盖这种亮度波动,上线后就会因为“训练和推理数据分布不一致”而出现精度下降。解决办法是:一是在训练阶段故意做亮度扰动增强,让模型对亮度变化不敏感;二是在推理阶段对输入的图像做归一化预处理,把灰度分布拉伸到标准范围;三是通过光源反馈回路实时监测亮度,偏差超出阈值时自动报警提醒维护。
6.2 数据闭环的价值:检测系统是质量管理的传感器
这个项目做得比较好的一点,是把检测数据真正用了起来。不只是看合格率,而是把缺陷数据反推给工艺部门做参数优化。
比如喷砂工序的砂粒粒度如果偏粗,会导致表面纹理覆盖深度不够,后续的缺陷率就会上升。工艺部门通过检测系统的趋势报表,按时间段和工位维度分析缺陷率波动,再结合工艺参数记录,就能定位到是哪一批工艺参数调整导致了缺陷率上升。这种数据闭环,让检测系统从单纯的“判官”变成了质量改善的“仪表盘”,价值完全不一样了。
6.3 给后来者的一些实用建议
做这类工业 AI 项目,有几点经验想分享给后来者:
第一,需求阶段不要急着聊算法。先定性清楚要检测什么缺陷、每种缺陷的影响程度、漏检和误检哪个代价更高、检测节拍要求是多少。这些信息决定了整个技术路线的走向。
第二,数据阶段要投入足够的时间和预算。数据采集、清洗、标注、审核这套流程,比模型训练本身更耗时间,也更容易被低估。数据质量不高,后面再怎么调模型都白搭。
第三,项目上线不是终点。工业现场的状态是持续漂移的,模型要持续迭代、系统要持续监控。建议在项目预算里预留长期的运维优化费用,否则系统上线三个月后,效果大概率会衰减到让管理层质疑这个项目到底值不值。
第四,用户培训不能省。现场操作人员和维护人员需要理解这套系统的基本原理,至少要知道“为什么系统会对某个区域误报”“系统报警后怎么操作”。如果操作人员不理解系统的逻辑,误报几次之后就会对系统失去信任,最后宁可关掉系统继续靠人工目检。
回看整个项目,从需求梳理到方案选型,从数据工程到模型训练,从工程化部署到持续优化,每一步都是工业视觉项目里典型的场景。国外那些现成的方案拿来用不一定适配国内的产线状态和产品形态,而完全自研又会拖慢项目节奏。在这个项目里,JBoltAI 这类行业框架起到了一个中间的杠杆作用——把工程化能力封装好,让团队把精力集中在数据和模型本身。
我个人在实际操作中的体会是,工业 AI 项目的成败,七分在数据工程、两分在工程化落地、只剩一分才在算法。把这句话刻在脑子里,做项目的时候能少走很多弯路。这套系统的下一步扩展方向,可能是把多个检测工位的缺陷数据做空间维度上的关联分析,追查同一批次产品的缺陷分布规律,进一步辅助工艺端的根因定位。机会很多,先把当下的稳定运行守住,再谈下一步的智能优化。