• 正文
  • 相关推荐
申请入驻 产业图谱

YOLO测PCB小缺陷总是漏检?用SAHI把F1-score干到0.98(附完整调参实录)

08/11 07:48
206
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

电子厂 QC 质检员最大的敌人:产量太大、板子太小、眼睛太累。

在电子制造业,人工目检永远是良率和成本的博弈点。面对成千上万块 PCB,人眼几乎不可能做到 100% 全覆盖。于是我用 YOLO + SAHI 搭了一套自动 PCB 缺陷检测系统——不靠堆模型参数量,而是靠“切图推理”搞定微米级缺陷。

下面是完整的实战复盘。

一、数据集:先清理,再谈精度

使用的是 Kaggle 公开 PCB 缺陷数据集,共 6 类缺陷:

⚠️ 现实世界的数据永远不干净:

原始 10,668 张图中,.jpg 和 .txt 标签存在大量不匹配。

预处理动作:

剔除了“有图无标 / 有标无图”的样本

最终得到 8,001 张严格配对数据

Train: 6,370 / Val: 802 / Test: 829

最大优势:类别极度均衡(每类 2000~2200 个实例),基本排除了类别偏置干扰。

二、Baseline:Nano 还是 Medium?

实验环境:Google Colab · Tesla T4 · 统一超参(640×640, batch=16, epochs=25, Early Stopping)

横向对比三代架构:

关键结论:

单纯把 Nano 换成 Medium,精度只涨 2%,速度掉一大截。对于 PCB 这种布满全局纹理 + 局部微缺陷的场景,大图直接训小目标 = 事倍功半。

三、破局:上 SAHI(切片辅助推理)

SAHI 是干嘛的?

Slicing Aided Hyper Inference 的核心思想非常简单粗暴:

把一张巨大的 PCB 原图切成一堆 重叠的小图块 → 小目标被放大 → 逐块推理 → NMS 合并回原图

踩坑记录:为什么我加了 SAHI 反而精度掉了?

一开始直接套官方默认参数,结果:

mAP 轻微下滑

误报暴涨:模型把正常的 PCB 走线当成“多余铜(spurious copper)”狂标

原因很直白:切太碎了,模型丢了全局上下文,以为那些密集走线是异常。

四、超参数调优指南(重点干货)

SAHI 不是开箱即灵,这三个参数才是灵魂:

slice_size = 512        # 切片尺寸overlap_ratio = 0.1     # 重叠率conf_thres = 0.55       # 置信度阈值(关键!)

调优逻辑:

1. slice_size=512

太小 → 丢上下文;太大 → 小缺陷又看不见。512@640 基线是最甜点位。

2. overlap_ratio=0.1

给边缘缺陷留一点缓冲,防止被切在两图中间漏检。

3. conf_thres 拉到 0.5~0.6

这是解决“走线误报”的大杀器。SAHI 多 slice 投票会天然拉高累计置信度,必须提高门槛过滤假阳性。

五、最终战绩

六、给工厂落地的 3 条真心话

做 Demo 和上线是两码事,我强烈建议:

1️⃣ 人机协同(Human-in-the-Loop)

别让 AI 做 100% 判决,设两级阈值:

> 0.6:直接判废(自动剔除)

0.3 ~ 0.6(灰色地带):扔给 QC 操作员二次确认

→ 速度 + 安全感的完美平衡。

2️⃣ 别迷信“越高越准”

阈值拉到 >0.7,Precision 好看,但 Recall 会崩——漏放不良品比误拦成本更高。

3️⃣ 速度预期管理

SAHI ≈ 把一张图推理 N 次。每条线节拍 <100ms 的极速场景,建议考虑 TensorRT / CUDA 加速,或者只在抽检工位用。

七、资源

数据集:PCB Defect Dataset (Kaggle)

https://www.kaggle.com/datasets/norbertelter/pcb-defect-dataset

🧪 完整代码(Colab):Google Colab Notebook

https://colab.research.google.com/drive/1uM6AbHnDwth9bNGVnGMKmzde50hJtiUZ?usp=sharing

相关推荐