焊点质量这块,干过SMT产线的人心里都有数——想靠人工目检守住品质,基本是拿老师的眼睛去赌产量。一块PCBA上几百上千个焊点,靠AOI和人工复判撑着,漏检和误报这对老冤家从来就没消停过。我所在的团队前两年做了一个AI视觉检测项目,前后折腾了小半年,把产线焊点检测的直通率从原来的99.2%左右一路干到了99.99%,整个过程踩了不少坑,也攒了不少一手经验。今天就把这个项目的选型逻辑、数据工程、训练部署、以及最终冲高直通率的过程完整梳理一遍,给正在上AI视觉检测或者准备改造SMT产线的朋友做个参考。
1. 先搞清楚问题:SMT焊点缺陷检测为什么这么难
1.1 焊点质量几乎决定了PCBA的最终命运
焊点这个中间层看着不起眼,但它既是电气连接点,又是机械固定点。IPC-A-610标准里面把焊点的验收等级分成了三类,可实际产线上遇到的问题远比标准图示复杂。常见的缺陷就够写一大页:虚焊、桥连、少锡、多锡、立碑、偏移、锡珠、气孔、拉尖、裂纹。这些缺陷有的肉眼一眼就能看到,比如桥连,两脚之间搭了锡桥,短路风险极高;有的却藏得很深,比如枕头效应(Head-in-Pillow),表面看圆润饱满,实际上焊料和元件引脚之间根本没有形成金属间化合物,电性能完全不通。
更要命的是,焊点失效往往不是单点故障,而是隐性的可靠性问题。虚焊的板子在功能测试时可能通过,但用到现场后热胀冷缩几次就彻底断路了。所以焊点检测的目的不只是拦下当下的不良品,更是为了卡住产品的长期可靠性。这也是为什么SMT产线对焊点检测的要求从来不敢放松的原因。
1.2 传统AOI算法的天花板在哪里
传统AOI(自动光学检测)在国内SMT产线早就普及了,它的逻辑核心是图像比对和特征提取。具体来说就是先对标准板建立模板,再用灰阶对比、边缘检测、几何尺寸测量这些手段去判断焊点是否符合预设规则。这套路好理解,但它的瓶颈也特别明显。
第一,阈值参数都是人工调的。产线工程师需要针对不同板卡、不同元件、不同焊盘形状去调亮度、对比度、公差范围,一套参数调完,换另一个料号又得重来。而且参数的设置很大程度上依赖个人经验,老师傅和新人调出来的效果可能差一大截。
第二,规则检测对形态灵活的缺陷无能为力。传统AOI擅长识别“标准的偏移”或者“明显的缺件”,但遇到形态千变万化的虚焊、爬锡不良、润湿角异常这些缺陷时,输入光路稍微复杂一点,相机成像角度一变,误报就哗哗地来。现场最典型的场景是:同样一块板,AOI报了100个疑似点,人工复判下来真正有缺陷的不到20个,剩下80个都是误报。复判工位堆积成山,产线节拍被拖慢,这时候工程师往往只能调大阈值,结果缺陷又漏出去了。
1.3 漏检与误报的跷跷板效应
传统视觉检测有个绕不过去的死结——漏检率和误报率是跷跷板关系。阈值定得严格,误报飙升,复判工作量爆炸;阈值定得宽松,漏检增加,不良品流到后段,到了功能测试或者客户手里才发现,那代价就完全不可控了。
我们项目启动前做过一次摸底,当时产线的直通率是99.2%左右,听起来已经不低了,但换算下来每千块板有8块需要返修或报废。按产线日均产能来算,每个月因为焊点缺陷造成的损失相当可观。更让人头疼的是人工复判工位的压力,AOI误报率长期在20%到30%徘徊,这意味着每天有大量良品被当成可疑品拉去复判,虽然最终大部分都能放行,但人力成本和流转时间就在这个环节白白消耗掉了。
我当时和团队说得很直接:传统AOI这套路已经走到头了,想要同时压低漏检和误报,只能换检测的逻辑内核,让系统自己去学什么是“好焊点”、什么是“坏焊点”,这就是AI视觉检测切入的核心逻辑。
2. AI视觉检测方案怎么选:框架、相机、光源的取舍
2.1 先想清楚检测任务定义:是分类、检测还是分割
AI视觉检测第一步不是急着找模型,而是先把任务定义清楚。焊点检测在实际场景里可以拆成三种问题形态。
第一种是图像分类,适合单焊点独立成像的场景。比如AOI设备本身已经通过编程把每个焊点裁剪成了单独的小图,那模型只需要判断这张图是正常还是缺陷即可。结构简单,准确率高,部署也最省事。
第二种是目标检测,适合在PCB整图或者局部图中直接框出缺陷位置。产线上改造成本低,不用依赖原本AOI的坐标映射关系,模型自己就能输出缺陷的坐标框和类别。但整图检测对模型算力要求更高,小缺陷在整图中占比小,容易被漏掉,一般需要做切片推理。
第三种是语义分割,能精确到像素级判断焊点的边缘和轮廓。比如要准确评估爬锡高度、润湿角这些精细指标时,分割模型更有优势。但缺点是标注成本高、推理速度慢,产线节拍吃紧的时候不太好落地。
我们当时的判断是:产线上已有的AOI设备提供焊点坐标映射,按坐标裁剪单焊点图像,用分类模型跑一轮初筛是性价比最高的路径。但考虑到后续要平滑升级,我们架构上做了扩展,同一套视觉服务里同时预留了检测接口,方便后面做整板漏扫。
2.2 硬件的关键选择:相机与光源决定数据的上限
模型再强也救不了糊掉的图像,这句话在项目里被反复验证过。焊点检测对图像质量的要求非常苛刻,因为很多缺陷的差异是细微的灰度变化和三维形态特征。
相机方面,我们最终选的是五百万像素的面阵工业相机,搭配望远镜头。为什么不用更高像素?因为单焊点裁剪图的尺寸有限,五百万像素在配合适当光学放大倍数的情况下,已经能覆盖0201这种小封装元件的焊点细节。再高像素意味着更大的数据量和更慢的传输速度,对产线节拍反而不利。如果是检BGA焊球或者QFN底部焊点,那得考虑X-Ray或者3D结构光,但那是另一个量级的话题。
光源是更关键的变量。焊点表面是金属,反光特性复杂,单一角度光照很难拍出特征稳定的图像。我们测试过同轴光、环形光、穹顶光、低角度条纹光等多种方案,最终产线定的是多通道组合照明——同轴光负责消除阴影干扰,低角度环形光负责突出焊点边缘和润湿形态,再通过频闪控制器切换通道,分别采集不同光照下的图像序列。这个做法让后端的AI模型能同时吃到“平坦信息”和“轮廓信息”,对虚焊、多锡这类缺陷的识别率提升特别明显。
2.3 软件框架与推理引擎的选型笔记
任务定了、图像源稳定了,接下来才是算法框架的选择。我们对比了三条路线:
一是全栈自研,基于PyTorch训练,再通过TensorRT或者ONNX Runtime部署。灵活性最高,什么问题都能自己控制,但对团队技术要求最全,工期也最长。
二是购买商业机器视觉软件,比如VisionMaster、Halcon这类,它们也带深度学习模块。上手快,技术支持完善,但费用高,而且深度学习部分的定制化空间比较窄。
三是开源框架为主、少量自研为辅,训练用PyTorch,部署用TensorRT加速,再针对产线需求做一些数据预处理和后处理优化。我们最终走的是这条路。理由很简单:团队有Python和C++的底子,核心缺陷库需要自己积累,而且后续要扩展到产线多个工位、多产品型号,开源的迭代效率明显更高。
模型架构我们用的是轻量化分类网络加注意力机制的组合,具体主干选了EfficientNet-B0量化版,输入分辨率压缩到256x256。单张推理时间在NVIDIA Jetson Orin上能做到10毫秒以内,完全满足产线节拍需求。
提示:工业场景选模型,不能只看公开数据集上的精度。要优先考虑推理速度、显存占用、算子兼容性这三个落地硬指标。跑不动的高精度模型只是一张漂亮的成绩单。
3. 数据是项目的根基:采集、标注、增强的实战细节
3.1 数据采集不能“有一张算一张”,要有规划也要有筛选
AI视觉检测项目里有一句老生常谈:模型的上限由数据决定。但很多人忽略的是,数据不是越多越好,而是越有代表性越好。我们最初拿了一批生产现场的历史图片直接扔给团队做标注,结果训练出来的模型上线就被产线老师傅diss了——很多上报的缺陷其实是误判,因为历史图片里混入了大量旧AOI参数设置不当造成的伪缺陷图。
后来我们把采集流程重新梳理了一遍:
- 覆盖多个料号和产线设备,避免模型过拟合到单一设备的光照特征。
- 对每张缺陷图做了二次“人工陪审”,让质检工程师确认这是真缺陷还是疑似缺陷。
- 留出专门的连续批次图,按时间顺序采集,用于验证模型的稳定性,避免模型只认识某段时间内的工艺状态。
另一点容易被忽视的是:要刻意采集“边界样本”。比如刚好要跨过验收标准的锡量、刚刚连上但电阻异常的桥连边缘形态。这些样本在常规产线里出现频率低,但恰恰是对模型稳健性考验最大的部分。我们专门和产线沟通,在试产阶段人为制造了一批工艺偏移样本,让焊膏印刷厚度、回流焊温度曲线做阶梯式变化,把缺陷的“渐变形态”拍下来,这套数据的价值远高于常规批量采集。
3.2 标注标准是项目里的“宪法”,一定要白纸黑字定下来
标注质量直接影响模型性能,而标注质量的核心是标准统一。我们开了三次专项会,拉上工艺工程师、质检工程师、算法工程师,三方坐在一起定标注规范。
重点解决三个问题:
- 缺陷的类别定义是否覆盖产线实际状况?例如虚焊分成完全虚焊和疑似虚焊两级,多锡细分为少锡、多锡、锡珠三类。
- 裁图边界如何确定?焊点区域裁得太大,背景干扰太多;裁得太小,关键特征会被截掉。最后统一原则是:焊盘全额加两侧部分走线纳入图像。
- 多个缺陷同时出现时如何标注?例如既有桥连又有锡珠,规范要求标注主要缺陷类别,但要在备注字段写清次要缺陷。
标注工具我们用的是X-AnyLabeling,支持自定义标签和多人协同。过程管理上做了二级审核制:一批图先由初级标注员标注,再由高级标注员抽检30%,不一致的部分打回重标,同时统计标注员间的差异度作为质量指标。这套流程跑下来,标注一致性能稳定在96%以上。
3.3 数据增强和数据不平衡问题要用心处理
焊点缺陷天然存在严重的类别不平衡问题——正常样本占比超过95%,各类缺陷占比差异极大。比如少锡和桥连相对常见,而枕头效应可能一整周都碰不到几个。
直接拿来训练,模型大概率会对稀有缺陷“视而不见”。我们的处理手段分三层:
第一层是传统数据增强:随机旋转、水平翻转、亮度扰动、对比度扰动、高斯噪声。这对提升模型对光照变化的鲁棒性很有帮助。
第二层是针对性增强:对稀有缺陷样本做mixup、cutout以及形态学变换模拟。这里有个细节——量不要过猛,过度增强会让模型学到扭曲的伪特征,反而影响真实场景的泛化。
第三层是损失函数层面的处理:采用带分类权重的Focal Loss,让模型训练时主动聚焦难分类的稀有缺陷。这样比单纯靠过采样更稳定。
整个数据集的最终构成大约是正常样6万张、各类缺陷样1.2万张,训练集、验证集、测试集按7:2:1划分。划分策略是按照批次划分而不是随机划分,避免同一块板上不同焊点图片出现在训练集和测试集之间产生数据泄漏,导致指标虚高。
4. 模型训练与产线部署:从实验到量产的跨越
4.1 训练流程和关键参数的调整心得
训练这块我们踩过的最大一个坑,是抱着“训练精度高就等于好用”的思路走了好几天弯路。后来才想明白:焊点检测的评估必须双指标并行,漏检率要看,误报率也要看,单看哪个都会出事。
训练的具体配置供参考:优化器用AdamW,初始学习率1e-3,配合Cosine退火调度,Batch Size设64,轮次大概是60轮。EfficientNet-B0的输入层用256x256,预处理除了常规标准化之外,还叠加了一组从采集环节学到的光照归一化参数——这是针对我们自己的多通道光源定制的,效果比直接用ImageNet的均值方差好不少。
关键的是评估策略。我们设置了两个硬性指标:
- 漏检率(假阴性率)要小于等于0.01%,即一万个真实缺陷里最多漏一个。
- 误报率(假阳性率)要小于等于1%,即一百个正常焊点里最多误报一个。
这两个指标对着看才有意义。只压漏检率,模型可以靠“见谁都报缺陷”实现,但误报率会炸掉;只压误报率,模型可以靠“见谁都放过”糊弄你,但产线就遭殃了。
训练过程中,我们每训练完一个epoch就在验证集上计算这两个指标,并画成曲线对比。模型在中后期经常出现漏检率还没达标、误报率已经反弹的情况,这时候不是简单加训就能解决的。我们的处理策略是:针对误报的集中形态做数据筛查,看是否某种特定背景纹理被模型误当成缺陷特征,然后用负样本挖掘的方式补充难例,让模型重新平衡。
4.2 部署架构:边缘算力与节拍的平衡
模型训练完只是第一步,真正的考验在产线部署。SMT产线的检测工位一般是要嵌入到流水线节拍里的,节拍时间可能只有几十秒,加上图像采集、通信、PLC交互,整个视觉检测的耗时必须压到秒级以内才能真正跑进产线。
我们的部署架构是NVIDIA Jetson Orin NX 16G版本,跑TensorRT加速后的INT8量化模型。之所以选这个配置,是看中和原有工控机相比,它的体积、功耗和算力之间更平衡,而且支持多路视频流并行推理。
推理管线设计成了三级流水线:图像采集与预处理占一个线程,模型推理占一个线程,结果后处理与PLC通信占一个线程。这样通过流水线掩蔽延迟,单板焊点检测全流程耗时实测稳定在1.8秒左右,其中模型推理部分大约占0.9秒。产线节拍当时是42秒一块板,余量非常充足。
4.3 与产线系统集成的细节:别小看PLC通信和MES对接
算法部署完成后,还要打通产线自动化系统。我们这里走了两个方向:一是直接接入原AOI设备已有的结果输出链,二是新增一个判级工位对AOI复判结果做二次确认。
PLC通信方面,用了Modbus TCP协议,视觉系统检测完成后把结果寄存器写回PLC,由PLC控制分拣机构。这里必须处理几个异常场景:视觉系统离线、超时未响应、检测结果缓存溢出、通信重连失败。如果这些场景不处理好,产线会直接停线,工程师半夜被电话叫醒的体验,相信在现场待过的人都懂。
MES对接上,我们设计了一份简单的JSON结果上报,包含了料号、批次、序列号、检测结果、缺陷类别、缺陷坐标。MES收到后归档到质量追溯库。这样如果后续客户投诉某个批次出现焊点不良,定位到具体板卡和焊点位置只需要几秒钟,再也不用靠人工翻照片翻到怀疑人生了。
5. 直通率做到99.99%:数据背后到底优化了什么
5.1 先搭建评估体系,再谈优化
直通率是结果指标,但不把过程指标看明白就盲目优化,很容易白忙活。我们在上线前先搭了一套评估体系,拆成三个过程指标:检出真实缺陷数、误报缺陷数、漏检缺陷数。
上线首日的数据干净利落地说明了问题。AI模型上线后,检出真实缺陷数从原AOI的每天815个提升到了842个,误报数从每天2020个骤降到156个,降幅超过92%。漏检的情况在首周只出现了2例,均是超小体积锡珠在二值化时被判为噪声干扰的情况,属于覆盖面盲区。
这个过程指标拆解特别重要。如果只盯着直通率,看到它从99.2%涨到99.85%,容易觉得“够了”,但真正的问题往往藏在这些“足够了”的错觉底下。我们给自己定的任务是继续优化,目标直接锚定99.99%。
5.2 误报治理:从模型层面到产线流程层面的双重收敛
误报是影响直通率最大的拦路虎。AI模型的误报跟传统AOI误报的原因不一样,它不是参数阈值问题,而是模型把某些正常形态误判成了缺陷形态。我们分析了上线后60多个高频率误报样本,发现最集中的三类误报来自:
- 焊盘边缘的丝印字符与焊点重叠,模型误认为是锡珠。
- 相邻焊点的反光叠影恰好形成类似桥连的形态。
- 板面残胶或指纹造成的纹理异常被模型误判为拉尖或异物。
前两类问题通过加入更多正常样本和针对性负样本补充,模型很快学到了区分能力。第三类问题不好单纯靠加样本解决,因为指纹和残胶形态千奇百怪,模型永远学不完。最后我们在产线流程里加了防呆措施——上板工位增加静电手套佩戴检查和来料清洁抽检。这种“软硬结合”的思路,比纯粹烧训练资源要聪明得多。
具体到模型手段,这个阶段我们冻结了主干层,只微调分类头,用新增的1.2万张负样本做了四轮增量训练。每轮增量训练后都在验证集上重新测试,确保新样本的引入不会洗掉原有能力。这里要用到增量学习的经验:不能把新旧数据混在一起从头开始训,否则产线工艺稍微调整,旧知识很容易被冲掉。
5.3 漏检治理:针对“最会躲”的缺陷做专项攻坚
漏检比误报更危险,因为你不知道它什么时候就漏掉了一个真缺陷。上线首周的2例漏检让我们特别警觉,因为一旦漏检成为习惯,AI检测相对于传统AOI的核心优势就荡然无存了。
我们针对漏检样本做了回放分析。结果显示,漏检清一色是小体积锡珠缺陷,位置集中在高密度引脚区域。原因是推理时为了控制耗时,我们把单焊点裁图裁到了合适大小,但高密度引脚区域相邻焊点离得太近,裁图边界吃掉了部分锡珠形态。
解决方法是引入两阶段检测策略:第一阶段用高灵敏度分类模型扫一遍所有焊点,输出可疑点集合;第二阶段对可疑点集合做单焊点放大分析,用高分辨率模型精确判断。第一阶段的召回率调到99.99%级别,宁可多报,不可漏报;第二阶段则严控误报率,细抠每一个可疑点。
这个方案上线后效果很明显:后7天的连续统计里,漏检数直接降到了0。每天新增的可疑点复判工作量只有原来的三分之一左右,因为第二阶段把误差消掉了大半。
5.4 持续迭代:产线工艺变了,模型也要跟着变
很多项目上线后一两个月就进入“吃老本”状态,但我们的经验是:AI视觉检测是一个持续迭代的活。SMT产线的工艺窗口不是恒定的,钢网张数的变化、锡膏品牌换批次、回流焊升温区老化,都会让焊点图像特征发生漂移。如果模型不跟着迭代,过两三个月精度必然会掉。
我们的做法是建立监控告警机制,每天自动统计误报率、漏检率的环比变化,一旦出现连续三天某指标恶化超过2个百分点,就触发数据回流和增量训练流程。这个机制在项目交付后一直稳定运行着,也帮我们提前预警了一次锡膏批次更换导致的少锡缺陷图像特征偏移问题。
6. 复盘:这个项目里最容易翻车的几个环节
6.1 产品质量评审过关,但产线实际节拍跑不动
模型在实验室里的推理速度是面子工程,一上产线各种因素叠加,速度就现出原形。我们第一版TensorRT量化模型在开发板上跑得飞快,但实际部署到产线后,因为图像采集卡驱动占用CPU资源、多路视频流并发调度不当,第一轮实测延时直接超了预算50%。后来逐个排查,发现是图像采集线程用了同步等待模式,而推理线程又用了同步推理,两个同步加起来,延迟直接翻倍。改成生产消费模式的异步流水线之后,延时才压下来。
6.2 标注标准不统一的锅,最终都是模型精度来背
前面强调过标注标准,这里再补一个让我记忆深刻的细节。初期有两位标注员对虚焊的理解不一致,一位把轻微的润湿不足标为虚焊,另一位认为只要元件本体不翘起就不算虚焊。这个偏差导致第一批训练数据里虚焊标签严重不干净,模型怎么调虚焊召回率都上不到90%。后来把标乱的数据全部筛查出来重标,模型指标直接拉升了5个百分点。
这个教训说明:数据质量管控是项目里性价比最高的投资。宁可多花一周时间把标注标准彻底磨清楚,也不要后期花三周去洗数据。
6.3 别把直通率提升全记在AI功劳簿上
99.99%的直通率不是单靠模型一个变量实现的。项目执行期间,产线配合我们优化了焊膏印刷参数,更换了钢网清洗频率,复判工位的操作规范也做了调整。这些工艺改进对直通率有一部分贡献,只是没有AI检测那么直观。所以在项目汇报里,我们把AI模型的贡献和工艺改善的贡献分开量化,避免被贴上“都是AI的功劳”标签后陷入不被信任的困境。
个人层面我最大的体会是:AI视觉检测的成功不只是算法工程师的单打独斗,而是工艺、质检、软件、设备多角色拧成一股绳才做出来的。模型能力能撑多高是上限,但我见到的更多项目输在流程机制上——数据没规划、标准没对齐、软件和PLC联调没排期,硬生生把一手好牌打成了烂局。
现在这套系统已经在产线上稳定跑了很长时间,直通率始终贴在99.99%这个水平线上。如果你们也在准备上AI视觉检测,我的建议很简单:先别急着买设备、选框架,先把产线上的历史缺陷数据盘清楚,把要解决的问题用漏检率、误报率、节拍、复判工作量这些指标定准。指标定准了,后面每一步才走得踏实。