
1. 工业AI缺陷检测系统的整体设计与思路拆解1.1 为什么传统视觉方案越来越吃力我在产线做视觉项目这些年最直观的感受就是以前一套规则算法能撑三五年的场景现在半年就得大改。原因不复杂产品迭代快了表面工艺越来越复杂反光、拉丝、渐变纹理这些以前算“异常”的东西现在成了正常外观。你再用固定阈值去卡误判率直接起飞。传统机器视觉的套路是打光、拍照、预处理、特征提取、阈值判断。这套流程在检测螺丝有无、孔位偏移、字符识别这类结构化任务上依然很稳成本也低。但一旦遇到划痕、脏污、色差、毛刺这类非结构化缺陷规则就不好写了。划痕的灰度值可能和正常纹理一样只是方向不同脏污的形状千变万化你没法穷举。工业AI缺陷检测系统要解决的就是这类“说不清规则、但人眼一看就知道”的问题。它的核心思路是用大量样本让模型自己学出正常与异常的边界而不是靠工程师手写规则。标题里说的“正确率超99.9%”在特定场景下是能落地的但前提是数据、打光、部署三件事都做对了缺一个都到不了这个数。1.2 系统整体架构怎么搭一套完整的工业AI缺陷检测系统我习惯把它拆成五层从下往上分别是成像层相机、镜头、光源、工控机/采集卡。这层决定你能不能拍到缺陷拍不到后面全白搭。预处理层图像去噪、畸变校正、ROI裁剪、图像增强。目的是把原始图变成模型爱吃的“干净数据”。算法层检测模型分类/分割/检测 后处理逻辑。这是AI的核心但不是全部。决策层OK/NG判定、缺陷分类、置信度过滤、多模型投票。执行层与PLC通信、剔除机构、MES上传、报警联动。很多人一上来就盯着算法层觉得模型牛就行。实际项目里成像层和决策层才是决定成败的地方。我见过太多团队模型训到99.5%上产线一跑只有92%问题全出在打光不稳定和判定逻辑太粗暴。1.3 方案选型分类、分割还是检测选哪种模型取决于你要回答什么问题任务类型适用场景输出典型缺陷图像分类整图判定OK/NG类别标签表面脏污、色差语义/实例分割需要知道缺陷位置和形状像素级掩码划痕、裂纹目标检测缺陷位置类别边界框缺件、异物异常检测只有正常样本异常热力图未知缺陷我的经验是如果缺陷种类固定且样本充足优先用分割或检测如果缺陷种类未知、样本极少用异常检测打底再逐步积累样本转监督模型。标题里说正确率超99.9%通常是在缺陷种类明确、样本量上千、打光稳定的场景下达到的不是随便一个场景都能复现。1.4 99.9%这个数字怎么理解先泼盆冷水99.9%的正确率必须明确三个前提——缺陷定义、样本分布、判定阈值。如果缺陷率本身只有0.1%那全判OK也有99.9%准确率这种数字没意义。真正要看的是漏检率缺陷判成OK和过杀率OK判成缺陷。产线通常要求漏检率接近0过杀率控制在0.5%以内。99.9%往往是“在测试集上”的结果测试集和产线分布是否一致才是关键。所以我在项目里从不只看一个准确率而是看混淆矩阵、PR曲线、以及产线连续跑72小时的稳定性数据。下面会详细讲怎么把这些指标落地。2. 核心细节解析与实操要点2.1 打光决定上限的第一步打光是视觉项目的天花板。模型再强图拍不好也白搭。我常用的几种打光方式同轴光适合检测平面上的划痕、字符反光均匀。低角度环形光突出表面凹凸、毛刺划痕会形成明暗对比。背光测轮廓、孔位、透明件内部杂质。条形光/组合光适合圆柱面、曲面需要多角度拼接。实操心得先用肉眼手电筒模拟打光效果再选光源。我经常拿一个可调亮度的环形灯在样品上转角度找到缺陷最明显的角度再让供应商配对应光源。别一上来就买贵的先验证可行性。注意产线环境光变化是隐形杀手。一定要加遮光罩并把光源亮度锁定避免白天黑夜差异导致图像漂移。2.2 相机与镜头选型的关键参数选相机不是像素越高越好核心是分辨率够不够检出最小缺陷。计算公式所需像素 视野宽度 / 最小缺陷尺寸 × 安全系数比如视野100mm最小缺陷0.05mm安全系数取3则至少需要 100/0.05×3 6000像素宽。选800万像素约3200×2400就不够得选1200万以上或缩小视野。镜头方面远心镜头适合测量类畸变小普通工业镜头适合大视野检测。景深要覆盖产品高度波动否则会虚焦。参数建议原因分辨率最小缺陷占3-5像素保证特征可提取帧率≥产线节拍×1.5留余量接口GigE/USB3.0稳定传输快门全局快门运动物体不拖影2.3 数据采集与标注的坑AI模型的上限由数据决定。我踩过的坑样本不均衡正常样本几万张缺陷样本几十张。解决方法是数据增强异常检测主动学习。标注不一致不同人标同一张图边界差几个像素。必须制定标注规范定期交叉复核。测试集污染测试集和训练集来自同一批次导致指标虚高。要按批次、按时间划分。标注工具我用过LabelMe、CVAT、LabelImg分割任务推荐CVAT检测任务LabelImg够用。标注完一定要做一次标注质量抽检随机抽10%复核IoU低于0.7的重新标。2.4 模型训练的核心参数以分割任务为例我常用的配置# 训练配置示例 backbone ResNet50 # 或EfficientNet input_size (512, 512) # 根据缺陷尺寸调整 batch_size 8 lr 1e-4 # Adam初始学习率 epochs 100 loss Dice BCE # 分割常用组合 augmentation [flip, rotate, brightness, noise]关键点学习率太大震荡太小收敛慢。用余弦退火或ReduceLROnPlateau。数据增强几何变换光度变换都要但别用会改变缺陷性质的增强比如把划痕旋转成正常纹理。早停验证集连续10轮不降就停防止过拟合。2.5 后处理与判定逻辑模型输出的是概率图直接阈值化往往过杀高。我常用的后处理置信度过滤低于0.5的忽略。面积过滤缺陷面积小于N像素的忽略需根据实际最小缺陷换算。形态学操作开运算去噪点闭运算连断裂。多帧投票连续3帧都判NG才输出NG降低误报。判定阈值不是拍脑袋定的要用验证集画PR曲线找到满足漏检率要求的阈值点。3. 实操过程与核心环节实现3.1 从零搭建一个缺陷检测Demo假设我们要检测金属表面的划痕流程如下第一步硬件搭建相机1200万像素全局快门GigE接口镜头35mm定焦工作距离300mm光源低角度环形光亮度可调工控机i716GRTX3060推理够用第二步采集样本正常样本500张划痕样本200张不同方向、长度、深度每张图保存原始格式记录采集参数第三步预处理import cv2 import numpy as np def preprocess(img): # 畸变校正 img cv2.undistort(img, mtx, dist) # ROI裁剪 roi img[200:800, 300:900] # 去噪 roi cv2.bilateralFilter(roi, 9, 75, 75) # 归一化 roi roi / 255.0 return roi第四步训练分割模型用U-Net或DeepLabV3输入512×512输出二值掩码。训练100轮验证集IoU达到0.85以上。第五步部署推理import torch model.eval() with torch.no_grad(): output model(input_tensor) prob torch.sigmoid(output) mask (prob 0.5).cpu().numpy()第六步后处理与判定def judge(mask, min_area50): contours, _ cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for cnt in contours: if cv2.contourArea(cnt) min_area: return NG return OK第七步与PLC通信用Modbus TCP或TCP Socket把OK/NG信号发给PLC触发剔除。3.2 参数计算实例假设产线节拍2秒/件视野120mm×90mm最小缺陷0.03mm。所需像素宽 120/0.03×3 12000像素选相机12000×9000约1.08亿像素太贵。实际可缩小视野到60mm则需6000像素宽选1200万像素4000×3000勉强够或选2000万像素更稳。帧率2秒/件留余量选5fps以上。光源低角度环形光亮度调到划痕对比度最大。3.3 产线部署的现场记录我第一次部署时实验室99.2%产线只有94%。排查发现产线振动导致图像轻微模糊 → 加防震支架环境光从缝隙漏入 → 加遮光罩产品高度波动导致虚焦 → 换大景深镜头判定阈值太严 → 重新用产线数据调阈值调整后稳定在99.5%以上。实验室和产线永远是两回事必须现场调。4. 常见问题与排查技巧实录4.1 常见问题速查表问题可能原因解决方法漏检高缺陷样本少、打光不足补样本、改打光过杀高阈值太严、正常样本多样性不足调阈值、补正常样本推理慢模型太大、输入分辨率高换轻量模型、降分辨率图像不稳定环境光、振动遮光、防震模型不收敛学习率、数据标注调LR、检查标注产线指标下降分布漂移定期更新模型4.2 独家避坑技巧别迷信大模型产线推理用ResNet18或MobileNet就够大模型延迟高。异常检测打底新场景先用PatchCore或PaDiM只需正常样本快速上线。主动学习把产线置信度低的图挑出来人工标注迭代模型效率最高。版本管理每次模型更新记录数据版本、参数、指标出问题可回滚。多模型投票两个模型都判NG才NG降低过杀。4.3 学习路线建议如果你刚入行机器视觉我建议先学OpenCV基础图像读写、滤波、边缘、轮廓。再学传统视觉模板匹配、Blob分析、卡尺。然后学深度学习CNN、分割、检测。最后学部署ONNX、TensorRT、PLC通信。热词里提到的“图像傅里叶变换”在频域滤波去纹理很有用“机器视觉和机器人坐标系”做引导抓取必须掌握手眼标定。这些都是一步步积累的别急。4.4 关于LabVIEW做视觉LabVIEW在产线很常见配合Vision Development Module能做传统视觉。但AI部分LabVIEW调用Python或ONNX模型是主流做法。我一般用LabVIEW做流程控制和UIPython做AI推理两者通过TCP或共享内存通信。这样既利用了LabVIEW的稳定性又发挥了Python的AI生态。5. 系统扩展与长期维护5.1 模型迭代机制产线跑久了产品批次变化、模具磨损都会导致分布漂移。我建议建立月度迭代机制每月收集产线NG图和低置信度图人工复核后加入训练集重新训练并A/B测试指标达标后灰度上线5.2 数据管理数据是资产要分类存储原始图按日期/批次存标注图按版本存训练日志记录参数和指标模型文件带版本号和日期我见过团队数据乱放半年后想复现都找不到血的教训。5.3 成本控制一套AI视觉系统成本主要在相机、光源、工控机、软件。省钱技巧相机选国产工业相机性价比高光源可定制不必买进口工控机用消费级显卡推理够用软件用开源框架省授权费但别在打光和镜头上省钱这两个是成像质量的根本。5.4 团队协作视觉项目不是一个人能搞定的需要光学工程师打光、选型算法工程师模型训练软件工程师部署、通信产线工程师现场调试沟通成本很高建议每周开一次对齐会用数据说话。6. 我个人在实际操作中的体会做了这么多项目我最大的体会是AI缺陷检测的难点从来不在模型而在工程化。模型开源的一大把但能把打光、采集、标注、训练、部署、维护串起来的团队不多。99.9%这个数字是系统工程的结果不是单点技术的胜利。另外别指望一次上线就完美。我做的项目第一版通常只能到95%左右靠产线数据迭代两三个月才能到99%以上。耐心和持续优化比追求一步到位更重要。最后分享一个小技巧每次调参只改一个变量记录结果。同时改打光和阈值出了问题你都不知道是哪个引起的。这个习惯让我少走了很多弯路。