电子厂 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
206