尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

YOLO与大模型融合:电子元器件目标检测系统设计与实践

YOLO与大模型融合:电子元器件目标检测系统设计与实践 上个月在产线跟线的时候质检组长老张指着一块密集贴片的PCBA说这种板子一个班八小时人盯得再好也会有漏。他说的不是个例。在电子制造行业插件、贴片、回流焊之后的人工目检一直是效率和质量的老大难。别小看这块板子上面的电容、电阻、电感、二极管0402封装的元件个头只有1mm×0.5mm一排几十个长得一模一样眼睛看久了真的会花。我最后交出去的方案不是单纯跑一个YOLO模型了事而是一整套基于YOLOv8/v10/v11/v12/YOLO26的电子元器件目标检测系统并且把DeepSeek和千问Qwen这两个大模型也接了进来让系统不只是框出来还能解释、能问答、能出检测报告。这篇文章就是把这个平台从需求拆解、模型选型、数据标注、训练调优、部署推理到大模型融合的完整过程翻出来讲讲。如果你是做视觉算法、工厂信息化、或者正在琢磨怎么把大模型塞进工业检测场景的人这篇应该能帮你省不少弯路。1. 项目定位为什么非要做一个元器件检测平台1.1 电子元器件质检的真实痛点电子元器件检测和通用目标检测最大的区别集中在一个小字和一个杂字上。小是指元件尺寸极小。以贴片电阻电容为例0402封装只有1.0mm×0.5mm在500万像素的工业相机下也就占到二三十个像素。YOLO这类模型在COCO数据集上对大物体效果很好但一到这种极小目标上Anchor的设计、特征层的分辨率、NMS的参数全都得重新调。杂是指元件种类太多。一块服务器主板上电阻有不同阻值对应的丝印颜色电容有陶瓷电容、钽电容、电解电容之分还有各种封装形态的IC、连接器、晶振、电感。每一种都有不同的外观特征而且同一类元件在不同批次、不同厂商之间还有色差和尺寸公差。再加上产线上的实际环境光照会变元件表面反光严重焊盘和引脚在回流焊后会有助焊剂残留相邻元件间距可能只有0.3mm甚至更小。这些因素叠加起来误检和漏检就是家常便饭。人工目检在这种工况下的漏检率行业普遍在3%到5%之间——听起来不高但一条月产百万片的产线这就是几万片的风险。1.2 从裸YOLO到平台化的必然2023年我们团队刚接这个需求时第一版交付物就是一个Python脚本加一个YOLOv8权重文件输入一张图输出一张画了框的图。当时觉得挺好检测准确率也还能看。但真正拿到产线上一跑就发现问题了操作员不会用命令行检测结果没有存档问题元件没有一个可追溯的记录更别提跟MES系统对接。企业要的东西从来不是一个模型而是一个平台。这个平台要有图像采集入口要有检测引擎要有结果数据库要有可视化看板还要能够对接产线已有的设备和系统。也就是说模型只是引擎平台才是车。这也是为什么项目名称里叫系统设计与实现而不是模型训练。1.3 大模型在这个平台里的角色大模型进来之前检测系统是纯感知的——识别出这是什么元件、位置在哪、有没有异常输出就是坐标和类别。但这种输出对车间人员并不友好他们需要的是一句话第三排第二个电阻疑似焊反丝印方向异常或者该电容位置偏移建议回流焊温度检查。这就是DeepSeek和千问大模型的用武之地。大模型在这里不是替代YOLO去画框而是在YOLO给出的结构化结果之上做语义理解、自然语言生成、知识问答和报告汇总。我后面会详细讲这两个大模型的分工但先记住一个前提检测靠YOLO解释靠大模型两者是串联关系不是替代关系。2. YOLO版本选型从v8一路试到YOLO26的真实过程2.1 各版本核心差异速览YOLO系列这两年版本迭代快得让人眼花缭乱。我们从v8开始评估一路测了v10、v11、v12还有刚出的YOLO26。很多人问我到底选哪个我先把各版本的核心差异列个表。版本核心改动主要优势需要注意的坑YOLOv8Anchor-FreeC2f结构任务头分离生态成熟资料多部署方案齐全小目标检测效果一般需要调大输入尺寸YOLOv10引入NMS-Free训练双任务头推理时省去NMS延迟更低对密集小目标场景偶发漏检双头部署要留意YOLOv11C3k2模块增加注意力机制升级损失函数检测分割分类一体小目标能力提升导出到TensorRT时有算子兼容问题YOLOv12区域注意力替代全局注意力Flash Attention加速大分辨率下训练推理速度更好对GPU算力要求高旧显卡跑不动YOLO26边缘设备友好NMS-Free再进化更轻量可部署到边缘盒子功耗低新版本还不太稳官方模型对特定场景泛化待验证2.2 我们最终选型的结果这个表格看着简单背后是两周的横向对比测试。我们用了同一套自建的电子元器件数据集统一用640×640输入T4显卡上跑评估。结果很有意思在轻量级模型里YOLOv11s的mAP0.5:0.95最高比v8s高了接近3个百分点尤其在0402电阻电容这些小目标类别上Recall提升明显。YOLOv12的理论性能很高但我们测试时发现Flash Attention在T4上有兼容问题跑不起来只有A卡或较新的N卡才顺利。YOLOv10的推理速度确实快但密集元件场景下有漏检不太适合我们这种高密度板卡。所以我们最终的主力模型选了YOLOv11s同时把YOLOv12s作为高端GPU服务器上的备选方案。边缘端做实时预筛选用YOLO26n——它轻量能在Jetson Orin Nano上跑实时先粗筛一遍把可疑区域裁出来再送给大模型做精细判断。2.3 损失函数与训练细节的取舍训练YOLO系列绕不开损失函数。v8及之后版本主loss有三个box loss边界框回归、cls loss分类、dfl loss分布焦点损失。我们要做的不是改loss结构而是理解每个loss对结果的影响。box loss控制的是框的位置精度对电子元件这种小物体一点点偏移就会导致框和元件边缘对不齐所以在训练时我把box loss的权重从默认的7.5调到了9.0虽然训练波动稍微大了点但框的贴合度明显变好。cls loss在元件外观相似时比如不同容值的电容长得几乎一样容易混淆这个要靠数据来补。dfl loss是用分布来表示边界框它让模型对模糊边界的判断更稳健在反光元件上效果明显。训练经验小目标场景不要一味增加输入分辨率。从640提到1280mAP确实能涨2~3个点但显存占用翻倍、推理速度减半产线上往往吃不消。可以先训练640用测试集逐张分析漏检目标尺寸如果大部分漏检目标确实小于10×10像素再考虑1280输入或加一个ROI放大分支。3. 数据是爹电子元器件数据集的制作与标注3.1 图像采集的思路很多人忽略采集环节上来就找公开数据集。电子元器件检测没有太多好用的公开数据集即便有也跟你的产线光源、元件批次、板卡颜色对不上。我们最终是用产线实际拍摄积累的。相机选的是500万像素工业面阵相机配远心镜头。远心镜头很重要它能在一定景深范围内保持放大倍率一致避免元件高低不平时产生尺寸误差。光照方案上我们尝试了环形光源和条形光源最后用低角度环形光源同轴光的组合这样既能照亮元件丝印又能抑制焊盘反光。拍摄时把板卡放在一个简易平移台上分区块拍摄每张图600万像素然后切成512×512或640×640的小图训练。这样一张PCBA能产出几十张训练图效率高。还有一个我们后来验证有效的路子合成数据。用3D软件把元件模型摆放成不同角度和间距渲染出带标注的图像再叠加真实背景和光照扰动。合成数据对常见封装类型的检测能力提升明显但要注意丝印文字、引脚细节这类真实特征很难合成所以合成数据只能做补充不能替代真实数据。3.2 标注规范多人标注怎么保证一致性标注是这项目里最耗时也最容易翻车的一环。我们标注了大概3万张图分了三个标注员中间返工了好几次。核心问题是标准不一致有人把排阻算作一个整体框有人把每个引脚单独框有人对遮挡的元件只框可见部分有人非要框出完整包围盒。最后我们定了一套标注规范几个关键点供参考类别体系固定为Resistor电阻、Capacitor电容细分陶瓷/电解/钽、Inductor电感、Diode二极管、IC、Connector、Transistor三极管、Crystal晶振、TesterPoint测试点。遮挡规则被其他元件遮挡超过30%的目标可以不标遮挡小于30%按完整包围盒标。边界目标目标面积超过50%在图像外则跳过否则标注可见部分。极性标记电解电容、二极管这类有极性的元件额外增加Polarity标签属性标注正极方向用于后续极性检测。工具方面LabelImg和X-AnyLabeling配合Roboflow的辅助标注功能可以提升效率。但注意辅助标注出的结果必须人工复核尤其是小元件模型预标注容易把小电阻和小电容搞混。3.3 数据增强与类别平衡数据增强这块mosaic和mixup是YOLO训练的基本盘。mosaic把四张图拼成一张让模型在训练时看到更多小目标对提升小目标检测效果帮助很大。但电子元件场景要注意mosaic拼接会破坏元件之间的真实空间关系比如原本两个元件间距0.3mm拼接后模型可能学到错误的距离分布。所以我把mosaic概率从默认的开了、关了、又开了最终定在0.5同时把mosaic的拼接块数从4降到3算是折中。类别不平衡也是大问题。一块板上电容可能有几百个晶振只有两三个。如果不处理晶振类别的Recall会非常惨。我的做法是给少数类别加过采样权重在训练采样时让晶振、三极管这些样本出现概率乘2.5另外用复制粘贴增强把少数类元件从真实图上裁出来旋转缩放后贴到其他板卡图像的空白区域。这个方法土但有效晶振类别mAP从79提到了91。4. 训练调优把mAP从82拉到94的实操记录4.1 超参配置实例我们的训练配置可以作为一个起点参考。以YOLOv11s为例输入640×640batch size 32epoch 300优化器用AdamW初始学习率0.0005weight decay 0.0005warmup 3个epoch。这个配置在单张A100上跑大约18个小时。如果是个人电脑单卡可以把batch减到16学习率降到0.0003epoch加到350效果接近。这里有一个很多人容易忽略的点batch size变了学习率要跟着调。AdamW对学习率相对不敏感但SGD就很敏感。如果你从batch 32换到batch 8学习率最好从0.0005降到0.0002左右否则loss容易震荡。4.2 训练过程踩过的坑第一个坑是过拟合。我们的数据集虽然有3万张但很多图来自同一批板卡背景几乎一样模型很容易记住背景而不是学特征。表现是训练集loss不断下降但验证集mAP不升反降。解决办法一个是增加真实验证集来源用不同批次、不同厂商的板卡图另一个是在增强里加HSV扰动和随机擦除迫使模型不依赖固定背景。第二个坑是梯度爆炸。有一次把输入分辨率调到1280后训练前几个epoch loss直接变成NaN。排查后是因为分辨率变大大目标产生的loss值也变大加上初始学习率没降梯度爆炸了。降低学习率到原来的1/3后恢复正常。第三个坑是验证集划分。我们用随机划分时同一批板卡的不同小图可能会同时出现在训练集和验证集里导致验证mAP虚高。正确做法是按板卡编号划分同一块PCBA的所有小图要么全进训练集要么全进验证集这样评估结果才可信。4.3 评估指标和阈值怎么定行业里一提到模型效果都先看mAP但落地时要结合产线需求看Precision和Recall的平衡。电子元器件检测属于宁可错杀不可放过的场景吗不是。如果误检太多产线会频繁停机生产效率反而下降。所以我们在实践中是分两步走第一步粗筛阶段用低confidence阈值0.15目的是不漏检把所有可能的目标都框出来。第二步精判阶段对粗筛出的每一个目标裁图用更高精度的分类模型或大模型判断是否是真实缺陷、元件类型是否正确。这种方式比单模型硬调阈值更实用。最终我们的核心指标是在Recall达到99%的前提下Precision尽量高于92%。这个指标比mAP更能反映产线可用性。5. 部署与推理从训练机到产线盒子5.1 模型导出与量化训练好的PyTorch模型不能直接上产线。我们的标准流程是PyTorch权重导出为ONNX再通过TensorRT部署到NVIDIA GPU上。ONNX导出时注意YOLOv11的某些算子在ONNX Runtime和TensorRT里的支持情况不一致比如SiLU激活函数在某些老版本TensorRT上会导出失败需要升级到TensorRT 8.6以上。量化方面FP16是稳的精度损失可以忽略不计速度能提升50%左右。INT8量化虽然能再快一倍但我们的测试里小目标检测精度下降了将近5个百分点0402电阻的漏检明显增多。这个精度损失在通用场景可能无所谓但在工业检测里不可接受。所以最后我们只在边缘盒子Jetson上用了INT8服务器GPU上保持FP16。5.2 推理性能实录不同硬件上的推理耗时是很多人关心的我直接放一组实测数据。输入尺寸640×640单张图片推理时间硬件模型精度推理耗时ms/张RTX 4090YOLOv11sFP164.2RTX 4090YOLOv12sFP165.1T4YOLOv11sFP1612.8Jetson Orin NanoYOLO26nINT828.5Jetson Orin NXYOLO26nINT811.9产线上如果一个工位有四个相机工位轮流拍照每个工位间隔3秒T4单卡跑YOLOv11s完全够用还有富余。真正耗时的不是推理而是图像传输和I/O。我们最开始用纯Python接RTSP流发现CPU占用很高后来改成硬解码GpuMat直传CPU占用从80%降到了20%。5.3 检测结果的结构化输出检测模型输出的是框和类别但要被平台消费必须变成结构化数据。我们定义了一个统一的检测结果JSON格式大模型和前端都是靠这个JSON对接的。{ image_id: PCBA0712_008, timestamp: 2025-05-18 14:32:06, detections: [ { class: Capacitor, sub_class: Electrolytic, confidence: 0.97, bbox: [328, 156, 341, 169], polarity: N/A }, { class: Diode, sub_class: SOD-323, confidence: 0.88, bbox: [512, 244, 526, 258], polarity: reverse } ] }这个JSON会把检测框、类别、置信度、甚至极性判断都带上然后交给下游的大模型模块去解释。6. 大模型融合DeepSeek与千问在平台里的真实分工6.1 大模型解决检测解决不了的问题YOLO检测完之后产线操作员看到的只是一个框。他们真正的问题往往是这个框代表什么这个异常严不严重要不要停线这就是大模型切入的场景。我们在平台里做了四个大模型功能模块检测结果自然语言描述、缺陷原因分析、检测报告生成、未知元件多模态识别。前三个用的是DeepSeek最后一个用的是千问的多模态模型Qwen-VL。为什么这么分工DeepSeek在中文语义理解、逻辑推理、结构化文本生成上表现稳定API成本低适合做报告和原因分析。Qwen-VL是多模态模型可以直接输入图像识别出YOLO类别体系之外的元件类型适合做兜底识别。比如产线突然来了一种新型号的连接器YOLO没学过框不出来但Qwen-VL看一眼图能告诉你这大概是一个Type-C连接器。6.2 接入方式API和本地部署怎么选大模型接入有两种路线我们的经验是分场景混合使用。API路线适合原型验证和业务量不大的场景。DeepSeek和千问都有HTTP接口直接调用几十行代码就能接入。优点是省事不需要额外的硬件缺点是有网络延迟通常1~3秒而且数据要出内网很多工厂接受不了。我建议如果只是内部演示、产品Demo用API没问题。本地部署路线适合产线环境数据不出厂安全可控。我们最终在工厂内网部署了一套千问Qwen2.5-7B-Instruct的量化版本AWQ 4bit单张RTX 4090就能跑推理速度大约20 token/s足够应付报告生成这种非实时任务。DeepSeek这边我们没有完整部署它的大模型因为它的官方开源版本对硬件要求相对高我们用的是它的蒸馏小模型DeepSeek-R1-Distill-Qwen-7B在本地跑效果比通用7B模型在推理任务上好不少成本也可控。亲测避坑本地部署大模型显存占用别只看权重文件大小。4bit量化7B模型权重大约4GB但运行时KV Cache、中间激活值会把显存占用推到6~8GB加上推理框架自身开销单卡409024GB跑7B模型没问题但如果同时要跑YOLO推理和图像处理建议分开用两张卡别挤在一起。6.3 与YOLO检测结果的联动逻辑联动逻辑是整个平台的灵魂。具体流程是这样的YOLO先输出结构化JSON平台把JSON和对应的图像裁剪块一起传给大模型。DeepSeek负责把JSON翻译成自然语言同时结合一个元件知识库做RAG检索给出异常的可能原因和维修建议。举个例子YOLO检测到一个极性标记为reverse的二极管平台把这个信息拼成Prompt发给DeepSeek检测到PCBA上二极管D5极性与设计文件相反丝印方向异常置信度88%请分析可能原因及维修建议。DeepSeek会结合知识库里的PCBA工艺文档输出一段带原因和措施的回复可能原因贴片机供料方向错误或AOI漏检导致反向建议检查贴片机Feeder方向设置并核对物料盘极性标记回焊炉后补充人工复检。这个能力看似简单但实际价值非常大——它把检测系统的结果变成了产线可以执行的行动这就拉大了和普通检测demo的差距。6.4 多模态兜底Qwen-VL的补充作用我们的YOLO模型只能识别训练过的类别。产线换新产品时经常会有没见过的料。Qwen-VL作为多模态模型直接把它当成摄像头后面的老师傅来用。当YOLO检测到某个区域置信度很低但确实有物体时平台会自动把该区域裁剪图送给Qwen-VL让它描述这是什么元件、有什么特征。实测效果Qwen-VL对常见连接器、电解电容、IC封装的识别准确率能达到85%以上对稀有或特别小的元件准确率会降到60%左右。不过哪怕它认错了给出的文字描述也能给产线工程师提供参考比让人拿放大镜去查丝印快得多。我们还接了一个增强功能让Qwen-VL同时输出元件的丝印文字OCR结果和PCB设计文件的BOM表做比对。如果丝印识别的型号不在BOM里就自动标记物料异常。这个功能在来料抽检场景特别好用能提前拦截错料风险。7. 整体系统架构与业务落地7.1 系统技术栈与模块划分整个平台用一个通俗说法来讲就是一个三明治结构底层是图像采集和YOLO检测中间是大模型理解和知识库上层是业务应用和可视化。技术栈上我们选了这些都是社区成熟方案采集端海康/大华工业相机SDKC封装 Python绑定支持GigE Vision和USB3 Vision接口检测服务FastAPI提供HTTP接口YOLO模型用ONNX Runtime推理Redis做任务队列大模型服务DeepSeek和千问通过OpenAI兼容接口调用统一封装成内部的LLM服务数据层PostgreSQL存检测记录和报告MongoDB存大模型的非结构化日志前端Vue3 ECharts部署检测大屏和PC端管理后台这个架构的好处是每一层都能独立替换。比如今天用YOLOv11明天想换YOLO26只需要替换检测服务内部实现接口不变今天用DeepSeek API明天想换本地模型也只需要改LLM服务配置。7.2 核心业务流程实际操作中平台的核心流程是这么跑的检测请求进来后系统先做图像预处理校正、缩放然后送YOLO模型推理。推理出的检测列表会先经过一个规则引擎做过滤——比如某些区域在PCB设计里本来就不该有元件那个区域如果检出了目标就标记为异常。规则引擎过滤后的结果写入PostgreSQL并推送到实时看板。同时对于需要深度分析的异常目标系统会把裁剪图异步发送给大模型服务大模型返回的结果存成一条解释记录操作员在看板上点击某个异常框就能看到对应的自然语言分析和建议。整套流程从图像输入到YOLO结果展示控制在200ms以内大模型的解释结果通常1~5秒返回通过异步方式补齐不阻塞主流程。实际运行下来最影响体验的不是模型快慢而是数据库写入和大模型间的接口稳定性所以在中间加了一层Redis队列做缓冲这个非常关键。7.3 落地效果项目上线后在一条SMT产线跑了三个多月一组有代表性的数据日均检测PCBA约1200块单块板检测时间从人工目检的90秒压缩到自动检测的8秒综合漏检率由人工的3.8%降到了0.4%以内误检率控制在1%左右误检的板子需要人工复核这是产线可以接受的量。大模型报告功能每月生成约2000份检测汇总记录产线工艺员反馈大部分情况下的维修建议具备参考价值尤其是极性、错料、位置偏移这三类问题。8. 常见问题与排查技巧实录整个开发调试过程踩了不少坑我把有共性问题整理成一张速查表方便大家直接查阅。问题现象根本原因解决方案反光元件漏检表面高光区域检测不到输入图像过曝元件特征被高光覆盖改用低角度光源加偏振片或训练时增加高光增强样本相邻元件间距太小两个目标被检成一个框NMS阈值过高或Anchor尺度不合适降低NMS IoU阈值至0.4增加小尺度Anchor或提升输入分辨率训练loss正常但验证集mAP一直上不去验证集与训练集存在同源数据泄漏按板卡编号而非按图随机划分数据集大模型回答出现幻觉给出不合理建议Prompt中上下文信息不足或模型温度过高降低temperature到0.2以下Prompt里给出检测置信度和具体坐标必要时加RAG约束API调用偶发超时导致检测流程卡住未设置接口超时和重试机制LLM服务统一设置1.5秒连接超时和最多2次重试超时返回AI解释暂不可用降级文案INT8量化后小目标大量漏检量化精度损失在小目标上被放大只在边缘端用INT8服务器端保留FP16或改用敏感的校准集做量化新批次元件颜色不同导致误检训练数据颜色单一模型过拟合特定批次增加多批次、多厂商样本做更大的颜色抖动增强除了表格里这些还有两个确实值得单独说的经验。第一个是阈值不要一把尺子用到底。YOLO检测完不同类别的置信度分布差异很大。电容检测置信度普遍在0.95以上但二极管可能只有0.75。如果统一用0.5做阈值二极管会被大量漏掉。我们后面的做法是每个类别单独设阈值具体数值通过验证集上每个类别的置信度分布来确定。第二个是大模型输出一定要做结构化校验。我们一开始让DeepSeek自由输出文本结果它有时返回一段漂亮的报告但里面数字和检测JSON对不上。后来改成让大模型同步返回一个JSON字段和一段文本平台校验JSON字段数值必须和检测结果一致才展示不一致就丢弃AI文本显示原始检测数据。这一步极大减少了看起来合理其实是错的的输出。结语做这个项目的过程中我最大的感受是一个能落地的工业视觉平台考验的不是某一个模型的精度而是把感知模型、业务逻辑、大语言模型、数据链路串起来的能力。YOLO负责看到DeepSeek和千问负责理解和解释平台负责让这些能力被产线真正用起来三者缺一不可。最后再分享一个小的实操心得如果你也有计划把大模型接入工业检测不要一开始就想做个超复杂的Agent先从两个小功能切入——把检测结果翻译成自然语言、生成每日质检报告。这两个功能技术实现简单但用户感知最直接能最快让产线同事接受大模型确实有用这件事。跑通了这两个后面加知识库问答、多模态兜底识别都是水到渠成的事。
返回列表