从YOLOv8到YOLO26:电子元器件目标检测与DeepSeek融合质检
2026/9/14 9:08:24 网站建设 项目流程

这块板子其实很小,BOM上却列了三十七种元件,放在来料检的工位上,人工目检一片要三分钟。当时领导跟我说,能不能用机器把它全认出来。于是我把YOLOv8/v10/v11/v12/YOLO26这条主线上的目标检测模型全过了一遍,最后还硬把一个融合DeepSeek和千问大模型的二轮校验流程塞了进去。这篇文章就是这套电子元器件目标检测系统的设计复盘和实现记录,里面所有的坑、参数和测试数据都来自我在真实PCB样板上跑出来的结果,不是demo,是可以拿去做产线预研的那种。适合谁看?想用视觉做工业检测的,正在YOLO各版本之间纠结的,以及对“目标检测+大模型”到底怎么落地这件事有疑问的同学,这篇应该能帮你省下不少时间。

1. 项目起点:一块PCB板逼我重新审视电子元器件检测

1.1 电子元件检测为什么这么难

很多做视觉的朋友第一次接触电子元件检测,会下意识觉得“不就是分类加定位吗,YOLO不是随便跑?”真做了才发现,电子元器件在目标检测里属于相当难的一类目标。

先说尺寸。一块常见的手机主板上,0402封装的电阻只有1.0mm×0.5mm,在2000×1500像素的工业相机画面里,可能只有15×10像素。这种目标很多检测模型不是认不出来,而是压根看不见,尤其是经过下采样之后,特征图里可能只剩一两个像素点。

再说外观。贴片电阻和贴片电容放在一起,颜色几乎一样,区别只在端头的材质和表面的丝印字符;电解电容有极性,圆柱外观和旁边的电感线圈又很像;芯片和排阻的黑底白字,在俯视光下经常反光到看不清丝印。更麻烦的是,一块板上有几十甚至上百个元件,彼此挨得极近,边框稍微偏移一点就会把两个目标框在一起。

传统CV的模板匹配和Blob分析我也试过。固定位、固定光照下,对个别元件确实有效,但换一块PCB布局,换一个光源高度,参数就要重调,而且对反光、阴影、丝印噪声几乎没有鲁棒性。到了这一步,基本可以确定,要用数据驱动的方式来做。

1.2 为什么最终把YOLO系列定为视觉底座

现在的检测框架很多,RT-DETR、Faster R-CNN、DINO等等都有人用,但我最终还是选了YOLO系列。理由很朴素:生态成熟、部署链路短、可控性强。

Faster R-CNN不是不行,而是对于工业场景来说太重了。同样一个检测任务,YOLO跑一遍训练可能只需要几小时,Faster R-CNN要慢一个量级,推理速度在边缘设备上也比较难达到实时。RT-DETR精度确实不错,但DETR类模型在小目标和大目标混合的场景里,初始收敛不如YOLO稳定,而且部署到TensorRT的时候,后处理要自己写的东西更多。

YOLO这边,v8到v11、v12、YOLO26,每一代都在换module、换损失函数、换标签分配策略。听起来很折腾,但好处是社区把训练、验证、导出、部署的工具链都做好了。我可以快速在同一个数据集上把几个版本都跑一遍,用同样的超参数做横向对比,最后选一个最适合当前硬件和精度指标的版本。这个对比过程在后面会详细说。

1.3 大模型到底在系统里补什么短板

YOLO能告诉你“这里有一个电容”,但它很难告诉你“这个电容是10μF/50V还是1μF/25V”,更读不出色环电阻的阻值、芯片丝印上的型号。这些信息恰恰是来料检、维修排故最需要的。

所以我在整个系统里引入了两条大模型链路:一个是千问的多模态模型,负责看那些被YOLO框出来的局部图,做二次细粒度识别和丝印读取;另一个是DeepSeek,负责做逻辑判断,比如把识别结果和BOM清单比对,判断多装、漏装、错装,再生成维修建议。后面会讲这套“视觉快速定位+多模态细看+文本逻辑兜底”的架构到底怎么搭。

2. 数据集,整个项目最费头发的环节

2.1 类别体系怎么设计才不会被类间混淆坑死

数据集不只关乎数量,更关乎“类别边界”怎么划。我一开始天真地想把所有元件拆成细类,比如贴片电阻、色环电阻、电解电容、钽电容、陶瓷电容,想着反正模型能学。结果发现工业现场很难收集到每个细类都均衡的样本,特别是钽电容和继电器,一个批次可能只有几十个样本,训练出来基本是乱猜。

后来我调整了策略:YOLO训练只识别粗粒度的大类,比如电阻、电容、电感、二极管、三极管、LED、晶振、芯片、连接器、保险丝、继电器、变压器这12类。细粒度分类交给Qwen-VL做二验。这样YOLO只需要学会区分“大方向”,样本数量可以堆起来,而且实际误检率明显下降。

这里有个关键点:类别体系一定要跟着产线需求走。如果你的客户只关心“有没有漏贴”“方向对不对”,那粗粒度就够了;如果还要读丝印、读阻值,那必须把OCR类的任务拆出来,不要指望一个模型干完所有事。

2.2 采集、清洗与标注规范

采集阶段,我用了两条线同步进行。第一条是在产线工位上架了一台2000万像素的工业相机,配上可调角度的环形光源,对着不同批次、不同厂商的板卡连续拍了一周;第二条是用手头的电子开发板,在不同自然光、不同背景下补拍了一批。最终拿到大概5600张原始图。

采集完不是直接标,先做清洗。凡是严重失焦的、过曝到丝印完全丢失的、有明显的运动模糊导致边缘拉丝的,全部丢弃。最终保留约4300张图。清洗这一步一定不能省,脏数据进模型,后面所有精度指标都会打折扣。

标注用的是CVAT,导成YOLO格式。我给自己定了三条规则,这里可以直接抄:

  • bbox只贴元件本体,不包含引脚和焊盘;
  • 对于边缘被切掉一半的元件,按可见部分标,但在图片边界处要允许框不完全贴合;
  • 所有截图必须保证一个框内只有一个目标,如果一个框同时框进两个叠在一起的元件,这张图必须重新裁切。

特别注意:漏标的危害远大于错标。一张图里如果有一个元件没被框出来,模型就会把这个外观当成负样本,下次见到同类元件时大概率不检。所以每次标完一批图,我会用预训练模型先跑一遍,把置信度低于0.5的候选框全部标出来,人工确认哪些是漏标,哪些是误检。

2.3 小目标与类别不平衡,不能只靠Mosaic

电子元件检测最大的数据问题就是小目标太多。在4300张图里,目标面积小于32×32像素的占了大概67%。Mosaic数据增强能提升整体鲁棒性,但对小目标有一个副作用:四张图缩放到同一尺寸后,很多小目标被缩得更小,反而学不到细节。

我的做法是,把原始图切块之后再训练。用滑动窗口把2000×1500的原图切成若干640×640的块,重叠率设20%。这样切出来的子图,目标相对尺寸一下子就大了好几倍。训练集中除了原始全图,还混入切片图,比例大概1:2。实际跑下来,小目标的mAP50提升了近6个点。

类别不平衡方面,继电器、连接器这类样本少的类别,我用Copy-Paste增强:从别的图里把这类元件的实例抠出来,随机贴到空板上,同时存成新的标注文件。注意粘贴时不要盖住其他关键元件,否则会产生“遮挡”这种不该出现的负样本。效果还不错,少数类的召回率从71%提到了88%。

3. YOLO全家桶对比:v8/v10/v11/v12/YOLO26实测数据

3.1 训练配置与评测基准

数据集定下来之后,我在同一套数据、同一张卡、同一组超参数下,把YOLOv8、v10、v11、v12、YOLO26全部训练了一遍。训练机是一张RTX 4090 24G,Ultralytics框架,输入大小640×640,batch 16,初始学习率0.01,使用SGD,总epoch设了200,Mosaic概率0.5,关闭后续10个epoch的Mosaic。

测试集单独留了500张图,来自另一个批次的板卡,确保模型没见过这些板的布局。

这里特别说明一下,网上很多对比文章拿COCO上的结果说事,但COCO里的目标比电子元件大得多,迁移性有限。真想选型,必须拿自己的数据跑一遍,否则就是耍流氓。

3.2 五个版本精度/速度实测对比

这是我这次复现的真实数据记录,可以当作参考:

模型参数量(M)mAP50mAP50-95单张推理耗时(ms)
YOLOv8s11.20.9060.6313.9
YOLOv10n2.80.8820.5942.9
YOLOv11s9.40.9180.6473.5
YOLOv12n2.60.8890.6042.8
YOLO26s10.90.9340.6623.1

推理耗时是在batch size为1、FP16精度、TensorRT引擎下测的。

表里最亮眼的是YOLO26s,mAP50跑到0.934,mAP50-95也比YOLOv11s高了1.5个点,速度反而比v8s快。YOLOv12n虽然参数量最小、速度最快,但在小目标上的mAP50-95明显不如v11s和YOLO26s,说明它对小目标的学习能力还是弱了点。

YOLOv10n很有趣,因为去掉了NMS,推理管线更简单,但精度在这批数据上是垫底的。如果对速度有极致要求且目标不太小,可以试试它。

最终我在系统里默认选了YOLO26s,而不是精度稍低的v11s。原因有两点:一是YOLO26s的mAP50-95更高,说明检测框的位置回归更准,下游切割图送给Qwen-VL识别时,框偏一点都会影响丝印读取;二是它的推理速度在4090上只比v11s快不慢,部署收益明显。

3.3 损失函数差异对电子元件检测的实际影响

这一轮对比让我对YOLO系列损失函数的演进有了直观感受。YOLOv8用的是CIoU加DFL,DFL对边框回归的改进在小目标上是有帮助的;YOLOv10提出了一致的双标签分配,去掉NMS后推理更简洁,但它在训练时对正负样本的定义更严格,稀疏的小目标容易学不到;YOLOv11和v12在模块和标签分配上做了不少优化,尤其v12引入注意力机制之后,对背景中的干扰更钝感;YOLO26则在多尺度特征融合上进一步强化,所以在0402这类极小目标上的表现最稳。

不过说实话,损失函数层面的差异,最后在精度表里只有几个点的差别。真正拉开差距的,还是数据集的质量和切片策略。很多团队上来就纠结“用哪个损失函数”,我觉得不如先把数据标注规范和切片流程做扎实。

4. 小目标优化与推理部署:mAP达标只是开始

4.1 从640到1920:切片推理的正确姿势

训练阶段切片是为了让模型“看到”更大的目标,推理阶段切片则是为了不丢失细节。我在全图1920×1080上直接推理时,漏检率大概8%到10%,但只要把图像切成640×640的窗格、重叠率20%,逐窗检测,漏检率直接降到2%左右。

切片推理的代价是耗时成倍增长,一张1080P图大约需要处理9到10个窗格,单张耗时从8ms涨到50ms左右。但产线的节拍是3秒一片,完全扛得住。如果还嫌慢,可以先用一个轻量级YOLO在全图上跑一遍,得到可能包含元件的候选区域,再只对这些区域进行二次切片检测,这样能把耗时控制在20ms以内。

4.2 TensorRT加速与显存控制

工业项目不能只跑PyTorch的fp16,要上TensorRT。我用Ultralytics导出ONNX,再用TensorRT命令生成FP16 engine,整个过程不复杂,但有几个坑。

第一,动态batch不要设太大,检测服务通常一次只进来一张图,把maxBatch设为1就行,能省不少显存。第二,所有预处理,包括letterbox、归一化、通道转换,都放到CUDA上做,避免CPU和GPU之间的数据拷贝。第三,FP16带来的精度损失在0.5到1个mAP50左右,对电子元件检测这个量级是可以接受的。

实测2000×1500图像在4090上,全图推理8.4ms,切片推理80ms左右,显存占用约1.2GB。这个数据直接决定了后续架构里,YOLO服务可以和小模型共用一张显卡。

4.3 边缘设备上的部署

我也在Jetson Orin Nano上试过这套方案,TensorRT FP16引擎下,640输入的单帧推理12ms,全图推理50ms左右,基本满足产线需求。但要注意,Orin Nano只有8GB统一内存,跑Qwen-VL的量化模型非常吃力,所以我最后的架构是:所有边缘设备只跑YOLO检测,把检测框图像通过局域网传到中央服务器,由服务器统一调度大模型。这个拆分后面讲大模型部署时还会提到。

5. 大模型融合:DeepSeek和千问在这个系统里到底干什么

5.1 分工方式:YOLO出来,Qwen-VL进去,DeepSeek兜底

这套系统里,大模型不是用来替代YOLO做检测的,而是做YOLO做不了的两件事。

YOLO输出的是:

[ { "box": [124, 56, 178, 88], "category": "电阻", "conf": 0.92 }, { "box": [203, 44, 231, 70], "category": "电容", "conf": 0.87 } ]

接下来,系统会把每个box的坐标在原图上crop出来,缩放到合适尺寸,送给千问的多模态模型。这个阶段叫“细粒度识别”,模型需要回答三个问题:这是什么元件、表面丝印是什么、大概是什么标称值。它返回的可以是:

{ "label": "贴片电阻", "marking": "102", "resistance": "1kΩ", "confidence": 0.95 }

最后,把所有YOLO检测框、Qwen-VL识别结果、BOM清单一起发给DeepSeek,由它做缺件、错件、多件判断,并生成一段可读的报告。DeepSeek在这里是“文本智能体”,不依赖图片,只基于结构化列表做推理,所以用CPU也能跑一个蒸馏版本。

5.2 让Qwen-VL输出结构化结果的Prompt设计

大模型如果不约束输出格式,返回的东西根本没法接进产线系统。我在Qwen-VL上试了十几个Prompt模板,最终稳定的是这样的:

你是一个电子元器件质检助手。图片是从电路板上裁剪出来的单个元件。 请判断: 1. 元件类别(电阻、电容、电感、二极管、三极管、LED等) 2. 元件表面丝印字符(如果有) 3. 元件极性(如果有明显标记) 只输出JSON,不要任何解释,不要Markdown。如果看不清楚丝印,marking字段返回null,不要猜测。

关键点是“不要猜测”这四个字。大模型遇到模糊图像时非常容易脑补,比如一个“1”被说成“7”,一个磨损的丝印被补成完整型号。加了这句之后,虽然会多一些null,但误判率下降了将近一半。

温度参数也要调低,视觉识别这种任务我一般把temperature设在0.1,top_p设在0.8。调太高,它会在不同batch里给出不稳定的答案,产线上完全没法接受。

5.3 DeepSeek接入的坑:如何避免它脑补BOM

DeepSeek在推理和代码生成上很强,但有一个明显问题:如果让它自由发挥,它会基于自己的“常识”补全BOM里不存在的东西。比如BOM里根本没有某颗电容,它却会因为“一般板子上都有”而把它检出来。

我的解决办法是把它的输入限制得非常死。给它的Prompt长这样:

这是自动检测系统输出的元件列表,格式为JSON。请只基于这个列表与BOM清单进行比对。 规则: 1. 你不能假设任何不在列表中的元件存在。 2. 只能引用我提供的数据行号。 3. 如果信息不足,只回答“信息不足”,不要推断。 4. 输出格式:漏装清单、多装清单、错装清单、备注。

同时,我在后端加了一道校验:所有DeepSeek提到的元件编号,必须能在输入列表里找到对应的行号,否则自动过滤掉。这样才能保证它不会一本正经地编造检修结论。

5.4 资源测算:一块24G显卡怎么安排

最终我的部署环境是一台带24G显存显卡的服务器。YOLO服务本身只用1.2GB,剩下的空间要给大模型。

我实际用的组合是:

模型显存占用延迟用途
Qwen2.5-VL-7B int4约6GB350ms/图元件细分类与丝印读取
DeepSeek-R1-Distill-Qwen-14B int4约10GB20 token/sBOM核对与报告生成
YOLO26s TensorRT约1.2GB10ms/图检测定位

这个组合在24G显卡上可以同时跑起来,不会OOM。但如果并发高,比如同时处理多块板子,建议把DeepSeek换成一个更小的蒸馏模型,或者把DeepSeek拆到CPU上,因为文本生成是异步任务,慢一点没关系。

6. 联调、踩坑与最终效果

6.1 实际运行效果

整套系统跑通之后,我在100块新批次板上做了测试。结论是:元件漏检率2.8%,误检率3.1%,在Qwen-VL二验之后,元件类别和丝印读取的综合准确率约96.2%,单板平均处理耗时2.3秒。这个速度比人工的3分钟快了一个量级,但离“全自动无人化”还有距离。

后来我在前端加了一个“人工复核”页面,所有置信度低于阈值的检测框都会被标黄,由操作员快速确认。这个设计很关键,因为工业场景里机器犯错的成本太高,让人做最后一道确认,反而整体效率最高。

6.2 踩坑:反光、丝印丢失和大模型幻觉

第一个坑是反光。贴片元件的端头是金属镜面,环形光源打上去会形成高光,YOLO经常把高光区域当成另一个目标,或者在高光边缘把元件框歪。我排查了几天,最终从打光方式上解决了:把直射环形光改成低角度光,同时在镜头上加偏振片。光路改完之后,误检率直接降了1.5个百分点。

第二个坑是丝印丢失。不同板卡的丝印对比度差异很大,有些丝印细到只有2个像素。Qwen-VL对这类图常常返回null。我用一个很土的办法解决了:在YOLO检测框基础上,把框向外扩20%再送Qwen-VL,让它能看到元件周边的背景和端头,反而提高了丝印识别率。

第三个坑是大模型幻觉。这个前面已经反复提到,是融合大模型项目里最隐蔽的问题。Qwen-VL在丝印磨损时,会把“1K0”猜成“10K”,DeepSeek在BOM比对时也会自己“补全”缺件。我的解决方案是双保险:一个是Prompt里强制“不要猜测”,另一个是在后端做规则校验,丝印识别结果必须和预设规格库匹配,不匹配就标“待人工确认”,而不是直接采信模型输出。

6.3 有没有必要上大模型?我个人的判断

说实话,如果只是要检测元件位置、统计数量,YOLO就够了,大模型完全是多余。但如果需要读丝印、核对BOM、给出维修建议,那么大模型的价值是无可替代的。

关键是要把大模型放在“最后一公里”,别让它做定位和计数这种强结构化任务。目标检测模型做快速且稳定的粗筛,多模态大模型做细节和语义理解,文本大模型做逻辑判断,三层架构各管一段,整个系统才会变得更可用、更可靠。

如果让我重新做一次,我会在项目一开始就让产线师傅参与标注规范的定义。很多误检放在算法工程师眼里是“异常样本”,放在产线师傅眼里可能就是非常标准的丝印走样或材料批次差异,这个认知差直接用数据质量换走了将近一周的调参时间。另外,建议所有做工业检测的朋友,先别贪多,把5类元件做稳了,再往12类、20类扩,每一步扩展都用同样的评测集守着,精度掉了就不放行。视觉检测这条路没有银弹,扎实的数据和清晰的工程分工,永远比换一个更大的模型更有效。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询