做工业视觉这些年,我越发觉得AOI这个词被说滥了。很多工厂管理者一听AOI,就以为是台机器盯着产品,坏品自动跳出来;再一听AI AOI,又觉得只要接个带神经网络的相机,所有漏检都能清零。这两种理解都错得离谱。AOI全称自动光学检测,本质是把人眼检测变成机器检测,从PCB、SMT到面板、电池、汽车零部件,到处都在用;AI AOI则不是换相机,而是在传统规则算法之上,叠加一套能自己学习缺陷特征的系统,让检测从“按固定规则打分”变成“从数据里总结规律”。
这篇文章我会从传统AOI的规则算法讲起,拆解为什么它在复杂场景下越来越吃力,然后聊AI AOI的完整落地链路——成像、数据、训练、部署、维护——顺便分享这几年在产线上踩过的坑。想评估AI检测升级,或者已经在调AI AOI的工程师,应该能从这里找到几条能直接用的经验。
1. 传统AOI:规则算法解决不了的难题
1.1 传统AOI的工作逻辑
传统AOI并不是一台“智能机器”,它本质是一套光电测量系统。光源、镜头、相机负责把产品拍成高对比度图像,后面的算法则负责做判定。判定逻辑通常是一条线性链:图像预处理、图像分割、特征提取、规则判断。
预处理阶段常用灰度化、滤波、对比度拉伸,目的是让缺陷和背景分开。分割阶段通过阈值分割把图像变成黑白二值图,缺陷作为连通区域被提取出来。然后计算连通区域的面积、周长、长宽比、圆度、灰度均值、边缘梯度,最后跟预设公差做比对。比如检测PCB焊点少锡,可以通过低角度光让焊点高度在图像上表现为灰度差异,低于阈值就判少锡;检测异物,往往是识别某个尺寸超过设定值的连通区域。
这套逻辑在背景干净、缺陷形态固定的场景里很管用。但它的核心假设是“缺陷一定在灰度或形状上跟背景可区分”,一旦这个假设不成立,后面做得再多也是空中楼阁。
1.2 规则判定的三道坎
第一道坎是缺陷形态不可穷举。划痕有长有短、有深有浅、有直线有弯折;压伤可能是一个点,也可能是一片;异物可能是纤维、金属屑、油污。传统算法只能覆盖你预先定义过的形态,遇到新缺陷,就得重新采集特征、重新调参。产线上一旦出现一种从没调过的缺陷,它就等于盲人。
第二道坎是背景纹理复杂。高密度PCB基板、太阳能电池的绒面、金属拉丝表面的各种纹理,在某个光照角度下,背景的灰度和缺陷的灰度分布会大面积重叠。你找不到一个阈值能同时把背景压下去、把缺陷留下来。强行设置,只能得到“按了葫芦起了瓢”的结果。
第三道坎是误报与漏检的跷跷板。为了不漏掉缺陷,只能把判定条件放宽,结果是正常产品大量被误杀,过检率飙升;为了降低误杀,又把条件收紧,结果缺陷悄悄滑过去。产线直通率被这种矛盾折腾得很难看,最终只能靠大量人工复判来兜底。
1.3 参数调出来的系统为什么脆弱
传统AOI的参数多到让人头疼:光源亮度、曝光时间、阈值、滤波窗口、面积公差、灰度容忍度、形态学算子。如果是一个多缺陷检测项目,参数之间还会互相干扰。你以为调好了A类缺陷的阈值,B类缺陷误报又起来了。
我印象很深的一次,是在某金属工件检测项目里。设备运行了两个月,突然某天开始疯狂误报,明明看起来和之前差不多,算法就是认为工件上全是“缺陷”。排查到最后发现,是光源老化导致图像整体灰度漂移,原本定在128的阈值放到今天已经完全失效。重新标定光源后,误报才下去。
这种对光照、对焦、材料批次变化极其敏感的问题,是规则算法的通病。因为它把所有判断都寄托在一两个显式特征上,特征是稳定的,判定才稳定;特征一变,整个系统就跟着崩。这不是调试不够努力,而是方法论的天花板。
2. AI AOI:深度学习改变了检测的哪个环节
2.1 换思路:从“人定规则”到“数据总结规律”
深度学习改变的不是“看得更清楚”,而是“怎么判断”。传统算法是人先定义规则,再让机器执行规则;AI AOI是你给机器看几千上万张图,让它自己总结出“什么样的区域像缺陷”。
用生活的话说:传统算法是让老师傅根据经验写一本检查手册,遇到没写过的现象就翻不到答案;AI是让新员工直接跟着老师傅看一个月的样品,然后他自然知道哪一种影子叫划痕、哪一种叫脏污。他总结出来的规律不一定能用语言描述,但面对新样品时,往往比翻手册更稳。
这个过程中,卷积神经网络学习到了多层特征。底层学到的是边缘、纹理、颜色梯度,高层学到的是局部形状、空间关系、上下文信息。所以它不是拿单一阈值做一刀切,而是综合大量特征做概率判断。这就是为什么它在复杂背景下,通常比规则算法更鲁棒。
2.2 四种建模路线怎么选
实际项目里,AI AOI主要走四条技术路线:
| 建模路线 | 输出内容 | 适用场景 | 典型局限 |
|---|---|---|---|
| 图像分类 | 整张图是“OK/NG” | 判断简单脏污、方向单一缺陷 | 无法定位缺陷位置,无法联动剔除 |
| 目标检测 | 缺陷的矩形框和类别 | 缺件、偏移、错料、异物 | 对细长划痕、边缘贴合缺陷不够精细 |
| 分割 | 像素级缺陷区域 | 划痕、针孔、微小异物 | 标注成本高,数据量要求大 |
| 异常检测 | 偏离正常分布的评分 | 缺陷很少、新缺陷未知 | 误报率高,需要工艺监控配合 |
产线上用得最多的组合是“目标检测+分割”。目标检测负责快速找位置和类别,分割负责对细长缺陷做精细轮廓判断。分类虽然最简单,但产线上很少单独用,因为AOI不仅要知道“有没有问题”,还要知道“问题在哪”,否则剔除机构不知道怎么动作。
异常检测是很多团队的进阶方向。它的优势是可以不依赖大量缺陷样本,适合抓取“从来没见过”的新缺陷。但代价是误报率偏高,更适合作为传统逻辑之外的预警通道,而不是唯一的判定手段。
2.3 AI AOI不是简单的模型替换
很多团队以为AI AOI就是把识别模块从“规则算法”换成“神经网络模型”,其他一切照旧。这是最大的误解。
传统AOI和AI AOI在数据流、调试流程、维护方式上完全不同。传统AOI的核心资产是参数表;AI AOI的核心资产是标注数据和模型版本。传统算法上线后,只要不打光、产品不变,基本可以一直跑;AI模型则需要不断用新数据去验证、更新,否则随着产线状态漂移,性能会慢慢退化。
也就是说,AI AOI上线不是项目结束,而是项目开始。你需要一套数据采集、标注、训练、评估、发布、监控的闭环机制。没有这套闭环,AI AOI很快会变成一个“曾经好用”的摆设。
3. 从AOI到AI AOI的落地实操:完整实施链路
3.1 成像与硬件改造,先解决看得清
成像系统是整个AI AOI的地基。虽然深度学习对光照变化的容忍度更高,但“拍都拍不到”的信息,算法再强也找不出来。
先说相机分辨率。检测精度决定传感器要求,计算公式很简单:水平方向像素数 = 视野宽度 / 最小检测特征尺寸。为了保证稳定,我一般会留2到3倍余量。比如视野是100mm,要检0.05mm的微伤,最低需要2000像素;实际我会选5000像素以上的相机,让特征在图像里至少占3到5个像素,而不是刚好一个点。
再说光源。很多传统AOI项目里,光源是针对某个缺陷专门调的。升级AI AOI时,不需要照搬原来的光路,反而建议重新做一次光学验证。最有效的做法是采用多角度、多色光组合,让不同缺陷在不同光区呈现不同形态。如果一个光区能把异物打亮,另一个光区能把划痕打出来,模型学起来会轻松很多。
计算平台也要提前规划。产线节拍如果是2秒一件,一件拍4张图,那么单张图推理预算是500毫秒以内。用独立GPU推理一般能跑到这个水平;如果用CPU做推理,则要考虑模型裁剪或量化加速。千万不能等模型训练完,才发现部署环境跑不动,那就白干了。
3.2 数据收集与标注:决定模型上限
数据质量是AI AOI的最高优先级。算法工程师花三个月调模型,不如产线多收集两周长尾缺陷样本有效。
关于样本量,我给出的经验是:常见缺陷每类至少300到500个实例;正常品至少1000张。如果做分割模型,样本量还要再往上走。不同缺陷差异很大:
| 缺陷类型 | 最少实例数 | 常见误区 |
|---|---|---|
| 缺件、元件偏移 | 100到200 | 只拍一个固定位置,忽略不同位置的光影差异 |
| 划痕 | 300到1000 | 只覆盖横向划痕,漏掉竖向和斜向 |
| 脏污、异物 | 300到500 | 没有覆盖不同反光程度的材质 |
| 微小空洞 | 500以上 | 直接整图训练,没有用ROI裁剪放大 |
标注规则越早标准化越好。我建议项目一开始就召集工艺、品质和算法三拨人,共同定义“什么算缺陷”“边界怎么画”。划痕是画线框还是画区域?一块压伤面积超过多少算缺陷?异物按颜色区分还是按材质区分?这些问题不定清楚,标注员和后期的模型评估都会陷入无休止的争论。
数据增广是我建议要做的,但必须有度。旋转、镜像、亮度扰动、随机裁剪是安全的增广;直接把缺陷形状拉伸变形,或者人为叠加夸张的噪声,反而会让模型学到不真实的特征,实际产线一跑就露馅。增广只能模拟真实物理变化,不能凭空创造缺陷形态。
3.3 训练验证与阈值调优
训练数据的划分要格外小心。千万不能按图片随机切分训练集和验证集,因为同一批次的产品图像高度相似,模型在这个批次上已经“背”过了。正确做法是按产品批次或按时间段划分:用前三周的批次训练,用后一周的批次验证。这样才能真实反映模型面对新样品的泛化能力。
评价指标方面,学术界常用准确率,但产线上我更关注两个指标:漏检率和误杀率。漏检率是被模型放过的缺陷占实际缺陷总数的比例;误杀率是被模型误判成缺陷的正常品占正常品总数的比例。这两个指标与模型置信度阈值直接相关:
阈值调到0.5,模型比较敏感,漏检率低,但正常品容易被误杀;阈值调到0.8,模型只报非常确定的缺陷,误杀率下降,但漏检率会升高。实际调优时,我会画一条阈值曲线,让工艺人员一起选点。如果行业对漏检是零容忍,那就选低压阈值,然后靠二次判定压误杀;如果误杀对产能影响更大,就选高压阈值,再靠人工复判兜住风险。
训练完成不是直接上线。我习惯先做一轮离线的历史图像回放,把模型输出的结果和当年的复判记录做比对,确认性能达到预期,才进入现场部署环节。
3.4 部署到产线的四个关键步骤
部署阶段最大的风险不是算法,而是工程。
第一步是影子运行。模型不直接参与剔除,只在后台对每一帧图像做推理,结果和现场人工复判同时记录。运行一到两周,积累数百上千条不一致样本,再做一次人工评估,确认模型是真的能打。
第二步是旁路报警。模型开始输出报警,但不控制机构。产线员工看到报警后,先人工确认是不是真缺陷,把结果反馈给系统。这一步能继续积累真实的确认数据。
第三步是自动判定。模型输出直接联动剔除机构,但保留人工复判工位。同时设置安全网:如果连续多片高置信度报NG,或者推理模块异常,自动切换到保守模式或者停机报警。
第四步是上线后监控。模型上线后不要撒手不管,至少每周统计一次漏检率、误杀率、模型报警占比。一旦指标异常,就要回溯原因是光照漂移、产品换型,还是模型没有见过的缺陷。
4. 现场问题排查与优化实录
4.1 常见问题速查表
AI AOI在产线上踩的坑,我基本都见过一轮。整理成速查表,方便排查时对照:
| 现象 | 可能原因 | 排查步骤 | 解决方向 |
|---|---|---|---|
| 漏检缺陷 | 缺陷样本不足、光照变化、标注边界不准 | 统计错误样本,对比灰度分布,回看标注 | 补充长尾样本,重新校准光源,优化标注 |
| 误杀率高 | 置信度阈值过低、背景纹理被误判 | 查看误报样本的特征聚类 | 调阈值、增加ROI屏蔽、加二次判定 |
| 单图推理慢 | 模型过大、推理环境未优化 | 测量单帧耗时分布 | 模型裁剪、量化、换更高算力平台 |
| 运行一段时间后性能下降 | 光源老化、支架松动、材料批次变化 | 检查图像亮度均值,比对设计值 | 定期图像质量监控,触发重训 |
| 模型上线即崩 | 训练集和产线图像差异大 | 对比训练样本与现场样本的统计分布 | 重新采集现场数据训练 |
这些问题的共性在于,它们很少是单一模型问题。大部分是因为“图像变了而模型不知道”。所以我的排查顺序永远是:先查成像,再查数据,最后才查模型。
4.2 结合具体项目的处理过程
说一个典型的现场案例。某项目做的是小型电子元件的检测,要求识别表面划痕、脏污和引脚偏移。项目刚上线时,复判准确率能达到95%,但跑了三周后,误杀率突然从3%飙升到15%。
我们第一步没碰模型,而是先看现场图像。拉出一组误报样本,发现所有误报都集中在图像左上角,正常品在那个位置的纹理偏暗,容易形成类似脏污的灰度梯度。再查成像参数,发现光源亮度比初始标定时低了大约12%,导致图像整体变暗。
解决方法是两步走:一是重新标定光源,并把亮度监控做成自动报警——每天开机后先用标准件拍一张图,灰度均值超出公差带就直接提示;二是在模型入口加一个图像归一化层,让输入模型前把亮度拉回标准范围。改完之后,误杀率回到了3%以内。
这个案例让我反思了很久。我们花了很多时间优化模型结构,实际最后金子却花在光源和归一化上。AI AOI最值钱的地方是把图像信息吃透,但图像如果本身在变化,AI再聪明也扛不住。
4.3 避免深坑:增广、重训、模型漂移
增广不是越多越好,这也是很多人踩过的坑。某些团队为了凑样本,对缺陷图做了大量对比度拉高、HSV扰动,结果模型在训练集上很好,到产线上一遇到真实光线就误判。原因很简单:合成出来的纹理特征跟真实缺陷纹理不一致,模型学到的其实是“增广特效”而不是“缺陷本质”。
重训是AI AOI绕不开的事,但重训本身非常容易失控。如果只拿最近一周的数据去微调,模型可能会遗忘以前见过的缺陷形态。我建议每次重训都要保留一个长期历史测试集,里面包含过去所有版本的典型样本。重训后的模型必须在这个测试集上不退化,才允许发布。同时做好模型版本管理,旧模型要能一键回滚,万一新模型有隐藏问题,不至于堵住整个产线。
模型漂移是更隐蔽的问题。当产品换型、材料批次切换、环境湿度变化时,缺陷的成像特征也会发生缓慢变化。如果不做监控,系统可能在不知不觉中从98分降到85分,而你毫无察觉。最简单的做法是每天记录图像灰度均值、缺陷检出率、误杀率这些指标,按周做趋势分析。指标一旦连续多天异常,就要触发一次人工复评。
5. 从“检出”到“工艺闭环”:AI AOI的进阶玩法
5.1 检测数据的二次利用
AI AOI如果只用来分拣良品和不良品,其实是巨大的浪费。因为模型输出的不只是“OK/NG”,还有缺陷的位置、类别、置信度、面积、长度、方向。这些量化信息是可以反哺工艺的。
比如在某个贴装产线上,我们发现AI AOI输出的元件偏移量不是随机分布,而是系统性偏向同一个方向。顺着这个特征去查,发现是贴片机的某根丝杆间隙变大,导致每次贴装位置出现规律性偏移。如果只是传统AOI,只能知道“这块板有偏移”,不可能知道偏移量在统计上呈什么分布,更不可能自动追溯到设备部件。
所以我会建议项目团队在规划AI AOI时,就预留数据导出接口。缺陷图、坐标、类别、时间戳、产线编号、工艺参数,这些信息统一进数据库。表面上是检测数据,实际上是一张“制程健康度地图”。
5.2 从零件级检测走向工艺级分析
工艺级分析的核心是相关性。当你积累了足够多的检测数据后,就可以开始看缺陷与工艺参数之间的关系。
比如检测到锡膏印刷偏位频次上升,同时回流焊温度曲线最近两周做了调整,两者是否相关?再比如某台设备的缺陷率总比其他设备高,差异是不是来自吸嘴更换频率?这些分析不需要很复杂的数据科学方法,把检测结果按时间、设备、班次聚合一下,画个趋势图,往往就能看出端倪。
到这里,AI AOI变成了一个“传感器平台”,而不只是一台分拣设备。这也是AI AOI相比传统AOI最不一样的地方:传统AOI的逻辑是为“判级”设计的,它的规则输出很简单;AI AOI的模型输出是丰富的特征向量,天然适合做统计分析。
不过我要提醒一句,工艺闭环的前提是数据质量。如果标注本身是乱的,缺陷类别定义模棱两可,后面所有分析都会失真。先在检测端把数据吃透,再谈工艺分析,顺序不能反。
5.3 团队怎么搭,项目怎么推
AI AOI项目看起来是算法项目,实际上是一个跨专业协作项目。我至少见过三种常见失败结构:
第一种,只让算法工程师背锅。他调了三个月模型,产线说误杀太多,算法工程师拼命调阈值,最后发现是光源从来就没有标定过。没有光学和工艺参与,项目必然卡在成像问题上。
第二种,只让AOI供应商负责。供应商把模型训练得不错,但现场操作员不知道怎么换型、怎么处理新的缺陷类型,一有异常就停线。AI AOI不是买来就能跑的设备,它需要使用方有一定训练和评估能力。
第三种,项目推动靠“老板拍脑袋”。老板听说AI AOI厉害,自上而下要求上,但现场没有明确缺陷定义和质量标准。数据标注各说各话,模型训练看了笑话一样的标注,自然输出笑话一样的结果。
我比较推荐的推进方式是从一个高价值、范围小的场景切入。先选一类缺陷,跑通“采集—标注—训练—影子运行—上线—监控”的完整闭环,让产线看到真实的漏检和误杀数字。有了第一个成功案例,再复制到其他缺陷类型。这样风险小,团队也能逐步积累经验。
6. 实践经验与个人建议
6.1 不要神话AI,也不要低估规则
我做过的项目中,效果最好的AI AOI往往是“AI加规则”的组合,而不是纯AI。因为AI强在“发现问题”,规则强在“精确测量”。举例来说,AI先在复杂的背景纹理里框出疑似划痕的区域,然后传统算法在这个局部区域里精确测量划痕的宽度、长度、深度相关特征。AI负责找,规则负责量,两者配合,误报率可以压得很低。
反过来,也不要因为AI效果好就把传统AOI整套扔掉。传统算法在稳定性、可解释性、调试门槛上依然有优势。产线工程师可以轻松看懂传统算法的判定逻辑,但很难解释为什么一个神经网络给出这个分数。所以最稳妥的做法是让AI做“模糊判断”,规则做“精确裁决”。
6.2 上AI AOI前先审清三件事
如果一家工厂问我,要不要上AI AOI?我会先问三个问题:
第一,成像系统是否稳定?光源有没有标定流程?相机有没有固定夹具?如果连图像灰度都每天漂移,AI模型训练得再好也会被现场图像带偏。
第二,缺陷定义是否清楚?你们到底想抓什么缺陷?边界怎么画?哪些类型可以算同一种?没有标准化的缺陷定义,就没有标准化的数据,自然没有标准化的模型。
第三,有没有数据回流通道?产线图像能不能保存?复判结果能不能回写?模型更新后由谁审核发布?如果这些机制都没有,AI AOI上线三个月后大概率会慢慢退化。
这三个问题里只要有一个是否定的,我建议先把基础打好再上AI。AI AOI不是用来弥补基础问题的灵药。
6.3 我最想分享的落地技巧
最后分享一个我在多个项目里屡试不爽的小技巧:影子运行不要只做两周,最好做到四周以上。产线的缺陷种类不是均匀出现的,有些长尾缺陷可能两三周才出现一次。如果影子运行时间太短,模型看到的现场样本太单调,上线后一旦遇到没见过的缺陷形态,照样抓瞎。
影子运行期间,我还会额外做一件事——让模型对每一帧图像的输出都留档,包括置信度。即使开了自动判定,这些历史输出也要保存。之后再做模型迭代时,就可以拿这些存档当测试集,不用再去产线重新采集。这套做法看起来简单,但能省掉大量返工时间。
AI AOI这条路,我已经走了不少弯路,也踩过不少坑。它不是一个可以一蹴而就的升级,而是一套需要持续投入数据、流程和跨团队协作的系统工程。只要把地基打牢,它带来的回报会远超一台传统AOI设备本身。