资讯动态

芯片缺陷检测实战:从工业数据集到深度学习模型落地的完整方案

发布时间:2026/10/21 12:50:41 来源:尧图企业网站定制
开头直接讲一个场景去年给一家做芯片封装的企业做产线质检方案对方拉我看了一段视频——检测工位上的老师傅拿着高倍放大镜一片一片对着光源翻转芯片一天下来要看上万片肉眼盯到充血。他们当时已经上了一套传统机器视觉方案但漏检率始终降不下来尤其是芯片表面的细微划痕和引脚轻微变形。那段时间我每天在调试算法深刻体会到半导体缺陷检测这块真正的门槛不在模型而在数据。这也是为什么后来我们花大力气做了一个芯片缺陷检测数据集内部编号第10645期专门针对表面划痕、引脚缺陷这类高频问题。这篇就聊聊这段经历里踩过的坑以及从数据到模型落地的一套完整玩法。1. 芯片缺陷检测到底难在哪从一颗芯片的缺陷说起很多人以为芯片缺陷检测就是拍一张照片跑一个深度学习模型输出有没有问题。真干过才知道事情远没有这么简单。芯片本身尺寸小、反光强、缺陷类型杂而且不同批次的光刻、封装工艺还会带来各种意想不到的干扰。如果不先弄清楚检测对象长什么样后面所有工作都是白费。1.1 表面缺陷、划痕和引脚缺陷三类典型问题的形态与成因芯片表面缺陷最常见的是划痕、崩边和污渍。划痕又分两类一类是制造过程中晶圆搬运、切割带来的机械性划伤通常呈线状宽度很细在特定光线下才明显另一类是封装后测试探针留下的针痕一般出现在焊盘或引脚附近形状呈现规则的短横线或点状凹陷。很多项目卡就卡在划痕和正常走线的区分上——芯片表面本身有电路纹理搞不好就把纹理误判成划痕。引脚缺陷也很让人头疼。QFP、QFN这类封装引脚密集容易发生共面性超差、桥连、缺脚、歪脚。引脚是金属材质反光极强而且引脚之间的间距常常只有几十微米。常规光源稍微没调好引脚反光连成一片模型根本分不清哪根是哪根。更麻烦的是引脚缺陷的尺寸变化非常微妙一根引脚歪个两三度肉眼都很难捕捉却可能直接影响焊接良率。还有一个容易被忽视的类别是芯片表面的异色区域。比如钝化层不均匀造成的光晕、残留助焊剂形成的污斑这些不是严格意义上的划痕但在视觉上很容易和表面污染混淆。我们在做标注时必须把这些细分类别全部独立出来不能笼统归为缺陷。1.2 为什么传统视觉方案在这里经常翻车传统机器视觉的思路是规则特征提取设定灰度阈值、边缘检测、形态学运算再配合尺寸测量来判断缺陷。这套方法对背景单一、缺陷与背景反差大的场景有效但芯片表面的纹理复杂性让规则变得非常脆弱。举个例子我们用传统方法做过划痕检测当时定了一个规则亮度梯度超过某个阈值且连续长度超过50像素就算缺陷。结果产品一上线误报率直接到40%。原因是芯片镀层表面的漫反射不均匀正常的晶粒边界在某些光照角度下也会产生类似的梯度。我们换了暗场照明想压掉背景干扰结果又引入了新的杂光死角。传统算法在已知缺陷形态的假设下工作而实际产线的缺陷形态千变万化规则再怎么调都跟不上。深度学习走的是一条完全不同的路不预设规则直接从大量标注样本中学习缺陷的分布特征。但这也带出了新的问题——模型的质量完全取决于数据集。刚开始我们只拿了几百张网上的芯片图片来训练效果惨不忍睹自己拍的现场图片一到模型里检测精度掉了一半。原因无非是域差异网上图片的光照、分辨率、拍摄角度和产线实际相机完全不一致。所以真正的解法不是先去优化模型而是先把数据集做成一件可靠的工业级资产。这也是我们第10645期数据集项目的出发点。2. 自建芯片缺陷检测数据集从拍照到标注的完整流水线工业级数据集和学术数据集的差别非常大。学术数据集追求类别覆盖工业数据集追求的是贴近真实产线的脏乱差。我们做第10645期数据集的时候有一个基本原则所有图片必须来自实际产线环境和接近实际的模拟工况而不是实验室里精心摆拍的完美样本。2.1 数据采集的光源、相机与载台设计先说光源。芯片检测的光源选择几乎决定了后续所有算法的上限。我们做过对比实验不同光源下同一颗芯片的成像效果差异非常大。最终我们采用了同轴光环形低角度光的组合方案。同轴光负责照亮芯片表面的平整区域让焊盘和引脚清晰环形低角度光负责突出划痕和凹陷因为划痕的边缘会产生明显的散射在低角度照射下呈亮线。这个组合的好处是可以在同一张图像里同时保留表面纹理细节和缺陷对比度而不需要分两次拍照。相机的选择也很有讲究。分辨率方面一片5mm×5mm的芯片如果要让0.02mm的划痕在图像里占至少5个像素那么整体图像分辨率至少得在500万像素以上。我们实际用的是一台800万像素的工业面阵相机配合远心镜头确保边缘没有透视变形。这里特别提醒一点远心镜头是芯片检测的标配普通镜头在边缘会产生畸变引脚测量稍微偏一点就全部废掉。载台设计上我们用的是透射加反射双光路。透射光从芯片底部打上来用于检测引脚的共面性和空洞反射光用于表面检测。两种光路对应不同的检测工位我们在采集时先定位芯片的中心坐标然后依据预设的路径逐片移动载台每次拍照都记录对应的产品批次号、工位和拍摄参数方便后续追溯。这一步看起来繁琐但后来排查误检样本时没有这些元数据会非常痛苦。2.2 标注规范怎么把“模糊缺陷”标注得让模型学得懂数据采集只是第一步标注才是数据集的核心。芯片缺陷的标注远比自然场景的猫狗分类麻烦因为缺陷边界模糊、类别层次深、存在大量难以判断的中间态。我们第一版标注走了不少弯路。当时直接让标注员框出所有看起来有问题的区域结果不同标注员的框大小差异很大有的框得松有的框得紧模型一直学习到一堆互相矛盾的信号。后来我们制定了一套详细的标注规范核心有三条缺陷边界框必须紧贴缺陷的最小外接矩形不能包含多余的正常区域。对于模棱两可的微小缺陷如果置信度低于某个阈值单独标记为弱缺陷类别而非强行归入划痕或凹陷。每张图片的标注必须经过另一名标注员复核两人对同一缺陷有争议时由资深工艺工程师做最终仲裁。特别是第三点我认为是工业标注和普通标注最大的区别。普通标注靠人眼判断就行工业标注必须结合工艺知识。比如某些引脚上的细微划痕如果不了解回流焊工艺很可能把正常的引脚氧化色差当缺陷标了。我们的仲裁员都是有十多年封装经验的老师傅他们给出的标签基本上就是产线质检的真实标准。标注类别上我们没有用单一的大类而是细分成了六个小类表面划痕、表面崩边、引脚歪斜、引脚桥连、引脚缺失、表面污染。还把每类缺陷按严重程度分成了轻微和严重两档。这样做的原因很直接产线需要对不同缺陷采取不同的处理措施轻微划痕可能只需要降级使用严重桥连必须报废。模型如果能输出严重程度后续自动化分拣就不需要额外判断。2.3 数据增强与样本均衡的实操细节数据集一共包含一万两千多张图像内部编号第10645期。其中绝大多数是正常样本缺陷样本大约占了四分之一。这是一个典型的长尾分布。如果不做处理模型很容易把所有样本都预测成正常因为这样精度也能达到百分之九十以上。但这对产线没任何意义漏检的代价远高于误检。我们做了三件事来缓解第一对缺陷样本做过采样。尤其是引脚歪斜这类数量稀少的类别每次训练都补齐到与最大类别同数量级。简单的复制粘贴不够我们用了裁剪、旋转、缩放等基础增强方式但有一个重要原则不能改变缺陷的本质形态。比如划痕的线度特征在旋转90度后依然合理但引脚歪斜的角度如果被随机旋转过大可能就不符合物理规律了。所以我们对引脚类缺陷只做小角度旋转和水平翻转对划痕类缺陷则允许更大的变换空间。第二引入合成缺陷样本。这个方法争议很大但确实有效。我们用程序在正常芯片图像上合成划痕、污渍等缺陷模拟不同宽度、方向、对比度的变化。合成样本的作用不是替代真实样本而是让模型在训练初期更快地学习到特征模式之后再通过真实样本做精调。我们在消融实验中验证过加入合成样本后最终模型的AP值提升了4个点左右。第三类别平衡策略上我们用了类似Focal Loss的思想在损失函数中降低易分类负样本的权重。但这块放到后面模型训练部分细说。3. 模型选型与训练从目标检测到细分识别的取舍数据集有了接下来就是模型网络的选择。这一步我不建议一上来就追最前沿的网络结构而是根据实际需求做取舍。我们当时的核心诉求有三点检测精度要够、推理速度要跟得上产线节拍、可解释性不能太差不然工艺侧不信任。3.1 为什么我最终选了这套检测框架当时我们主流的考虑是两阶段检测框架和单阶段检测框架。两阶段框架在处理小目标、密集目标上有优势因为先用候选区域网络筛出可能的区域再做二次分类芯片引脚这种小目标更容易被捕捉。单阶段框架的优势是速度快但小目标检测能力普遍偏弱。权衡之下我们选了一个折中方案采用基于特征金字塔结构的单阶段检测框架并在输入尺寸上做了调整。芯片图像本身尺寸不大我们直接把网络输入分辨率设为608×608比传统的416×416多了接近一倍的有效像素。配合特征金字塔的多尺度融合引脚的检测效果并不比两阶段差多少而速度上能做到单张图片20毫秒左右还在可接受范围内。另外很多人忽略的一个点是预训练权重。我们没有直接用公开的通用物体检测预训练权重而是先在另一个更大的工业缺陷数据集上做了预训练再迁移到芯片检测上。虽然那个数据集是钢材表面的缺陷图像但与芯片表面划痕在纹理特征上有不少共通之处迁移后的收敛速度明显加快最终精度也高了一截。这一步实验成本很低但收益很明显。3.2 训练参数、损失函数与迁移学习经验训练参数这块我有几个经验可以直接抄作业。首先是学习率策略我们用的是一阶段余弦退火初始学习率设成0.02配合warmup前500步之后逐步降到最低值。相比固定学习率这个方法在收敛速度和最终精度上都有改善。批次大小方面我们用了16块GPU并行训练同步批归一化这样可以保证在较大的batch下BN统计量更加稳定。损失函数上我前面提到我们引入了Focal Loss的思想。标准交叉熵在样本不平衡时大量简单负样本正常区域会主导梯度。Focal Loss降低了已正确分类样本的损失权重让模型更关注难分类的硬样本。我们设gamma为2.0alpha根据各类别样本比例动态调整实际应用后漏检率降低了约三分之一。还有一个容易被忽略的是数据归一化的细节。芯片图像的灰度分布和自然图像差别很大表面高亮区域和阴影区域跨度极大。我们用全局均值做归一化效果并不好后来改成基于裁剪区域的自适应归一化——在每个训练图像块内先减去局部中位数再除以区域标准差相当于把光照变化的影响去掉。这个小小的改动让检测精度又提升了近2个百分点。迁移学习层面上最深刻的体会是不要冻结太多层。有些人习惯只训练最后几层以防过拟合但对芯片缺陷这种细粒度纹理问题底层特征也不完全通用。我们实验过冻结前两层卷积结果精度下降显著。最后干脆全部解冻配合前面说的预训练权重做完整微调效果才是最好的。3.3 解决误检漏检的实战手段训练完模型只是万里长征走了一半。真正头疼的是误检漏检的处理。我们在产线试运行时发现两类典型问题一类是反光伪影误报金属引脚和焊盘在某些角度产生高光被模型误认为划痕另一类是微小缺陷漏报比如非常细的、对比度很低的划痕人眼都要仔细看才勉强能识别模型经常漏掉。针对反光伪影我们一开始尝试在图像处理层面加掩膜把高光区域剔除但这会误伤真实缺陷。后来换了个思路在训练集中加入大量高光但无缺陷的负样本让模型明确学到高光不等于缺陷。我们做了将近三千张负样本全部标注为背景。这个方式比算法过滤更可靠因为模型能学到底层特征上的差异。针对微小缺陷漏报纯粹的优化已经不起作用了我们改成了两阶段判定第一个阶段用快速检测模型筛选出可能包含缺陷的图块第二个阶段用另一个输入分辨率更高、结构更细的网络对图块做细分识别。相当于粗筛加精审。第一个阶段速度很快能过滤掉约85%的正常区域第二个阶段只处理剩下的区域计算压力不大但精度能提升一个档次。实践证明高分辨率细识别模型对微小划痕的召回率从78%提升到了93%。还有一个经验就是与人工复检形成闭环。模型输出的置信度低于0.6但高于0.3的区域我们没有直接丢弃而是自动标记为待人工确认。产线质检员只需要快速翻看这些区域大大减轻了目检压力。这个机制不仅缓解了模型不确定性问题而且人工确认的结果会自动回流作为新数据持续迭代模型。我们实行的第一个月模型每周的误报率都在下降这就是数据闭环的价值。4. 评估与落地准确率不是唯一标准很多开发者在实验室里用准确率衡量模型好坏但在工业现场准确率这个指标误导性很大。如果95%是正常样本模型全猜正常准确率也有95%。可这对产线来说完全无效。我们建了一套更贴合业务的评估体系。4.1 指标选择准确率、召回率还是F1产线真正关心什么产线最关心的是漏检率和误检率。漏检率对应召回率误检率对应误报率。但两者并不是单纯的平衡关系。在实际部署中漏检一个缺陷可能导致的是整批次产品报废、客户投诉甚至影响品牌信誉代价极高而误检一批正常品则需要人工复检增加了人力成本但不会造成产品流出。所以我们的目标是让召回率尽可能高同时把误检率控制在可接受的范围内。为此我们用的核心指标是缺陷级别的召回率而不是图像级别的准确率。缺陷级别召回率要求每个标注的缺陷框至少与预测框的IoU大于0.5才算检出这样才不会漏掉细小缺陷。我们给每个类别单独计算召回率尤其关注引脚桥连和微小划痕这两个高风险类别。我记得当时做出来结果引脚桥连的召回率在96%微小划痕只有78%于是后续把精力全放在了微小划痕上。F1分数我们也会参考但那是综合平衡之后的指标。如果召回率目标定到99%F1分数反而不是最优的——误检率会升高。所以更实际的做法是与工艺部门一起确认误检率的上限比如不能超过2%然后在这个约束下最大化召回率。4.2 推理速度与硬件选型的平衡模型性能再好如果推理速度跟不上产线也跑不起来。我们的检测节拍大概是每片芯片需要在100毫秒内给出判断。这个时间包含图像采集、传输和推理。硬件上我们选了一款工业级嵌入式GPU设备峰值算力大概在21 TOPS左右。这个级别跑我们优化后的模型足够了。但这里有个隐藏问题推理速度和精度的关系会随着输入分辨率变化。我前面说输入分辨率设为608×608那是在训练阶段用多GPU跑出来的。到了部署端如果我们原样保留608输入单张推理时间可能飙到50毫秒加上预处理和后处理勉强能满足节拍但几乎没有任何余量。后来我们做了三件事使用TensorRT对模型做FP16量化、把图像预处理操作融合进推理引擎的前处理层、对非最大抑制算法做简化。最终推理时间降到了28毫秒还留了比较多余量。还有一点值得注意不要忽略CPU端的瓶颈。GPU推理再快如果图像从相机到GPU的拷贝路径上出现阻塞整体延迟照样很高。我们最初用USB接口连工业相机发现传输不稳定后来换成了千兆以太网的相机接口配合专用内存映射才彻底解决了帧率抖动问题。4.3 从Demo到产线的三个隐藏坑第一产线的震动和光学漂移。实验室里设备固定图像稳定实际产线有振动的传送带、不断开关的机柜门这些都可能导致相机微小位移。我们第一轮现场部署时模型精度比实验室低了一大截排查了半个月才发现是相机紧固螺丝没有加弹簧垫圈松动后光轴发生了细微偏转。从那以后我们所有产线相机都加了防松锁扣并且每两周做一次自动标定。第二环境光干扰。实验室可以用遮光罩把杂光挡得干干净净产线却往往灯火通明。尤其是某些工位上的照明灯频闪会在图像上形成噪声带。我们给检测工位加了专用的遮光布帘同时在算法里加了基于傅里叶变换的频闪条纹抑制图像质量立刻改善了一个级别。第三数据标注的持续迭代。模型上线不是结束而是新一轮数据工程的开始。我们每周都会收集现场运行中模型置信度最低的那部分图像请工艺人员重新标注并纳入下一轮训练。这些难样本对模型的提升效果远大于继续增加普通样本。长期运行下来我们的模型对产线变化的适应力越来越强故障率也在稳步下降。个人体会最深的还是那句老话做工业检测光有算法能力远不够得蹲产线、跟工艺聊、理解缺陷是怎么来的才能知道模型该怎么改。如果你也在做类似的事情建议尽早把数据集建立成一套持续迭代的机制而不是一次性攒完就再也不更新。芯片制造每天都在变缺陷的形态也跟着变模型要想不过时唯一的路就是让数据和现实永远保持同步。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑