PCB表面缺陷目标检测数据集:6类别、3,500张图像 | 目标检测
源码数据分享
链接: https://pan.baidu.com/s/19t38RqPuEmOogCWei2txKg?pwd=swbz
提取码: swbz
一、引言:PCB缺陷检测的工业命题
印刷电路板(PCB)是所有电子产品的"神经中枢",从智能手机到工业控制器,从医疗设备到航空航天电子系统,PCB无处不在。一块典型的PCB上可能包含数千个焊盘、过孔和导线,任何一个缺陷都可能导致电路功能异常甚至整机故障。据统计,PCB制造中的缺陷率每降低0.1%,对于月产百万块的大型PCB厂商而言,意味着节省数百万的质量成本。
传统的PCB缺陷检测主要依赖人工目检(Manual Visual Inspection)和自动光学检测(AOI,Automated Optical Inspection)。人工目检效率低下且一致性差,长时间目视检查后准确率显著下降;传统AOI基于规则匹配,对已知缺陷类型有效,但面对新型缺陷或变异缺陷时往往失效,且误报率居高不下。
基于深度学习的目标检测技术为PCB缺陷检测带来了革命性突破。YOLO系列等实时检测模型可以在毫秒级时间内完成缺陷定位和分类,同时具备学习新型缺陷的能力。然而,工业场景对检测精度的要求极为严苛——漏检一个缺陷可能导致整批产品报废,误报过多则严重影响生产效率。这就对训练数据的质量和数量提出了极高要求。
本文将围绕PCB表面缺陷检测数据集(近3500张)展开深度解析,从数据特性到模型训练,从小目标优化到工业部署,为PCB缺陷检测系统的开发提供完整的技术方案。

二、数据集全景透视
2.1 数据集概述
本数据集围绕工业实际需求构建,专注于PCB表面典型缺陷识别任务,总计包含3500张高质量标注图像,覆盖6类常见工业缺陷。
数据集核心特点:
- 数据规模适中:3500张高质量图像,兼顾训练效率与模型效果
- 类别覆盖全面:包含6类常见工业缺陷
- 标注精度高:误差控制在像素级别,满足工业级标准
- 场景贴近真实:来源于实际生产或仿真工业环境
2.2 目录结构
dataset/
├── images/
│ ├── itrain
│ ├── valid
│ └── test
├── labels/
│ ├── itrain
│ ├── valid
│ └── test
这种划分方式能够有效避免数据泄露问题,同时保证模型评估结果的客观性。

2.3 缺陷类别详解
| 类别名称 | 英文标识 | 缺陷说明 | 工程危害 | 检测难度 |
|---|---|---|---|---|
| 漏孔 | missing_hole | 应有孔位未钻孔 | 影响电气连接,导致元器件无法焊接 | ★★★ |
| 鼠咬 | mouse_bite | 边缘出现不规则缺口 | 影响板件外形和装配 | ★★★★ |
| 开路 | open_circuit | 导电线路断裂 | 电路断路,功能失效 | ★★★★★ |
| 短路 | short | 不应导通的线路发生连接 | 电路短路,可能烧毁元器件 | ★★★★★ |
| 毛刺 | spur | 线路边缘多余突起 | 可能导致近距离短路 | ★★★★ |
| 伪铜 | spurious_copper | 非设计铜箔残留 | 影响绝缘性能,潜在短路风险 | ★★★ |
漏孔(missing_hole)
PCB上的过孔和安装孔是电路板的核心结构元素。漏孔是指设计中应存在的孔位在制造过程中未被正确钻孔。漏孔会导致元器件无法焊接或层间连接缺失,是最严重的制造缺陷之一。漏孔的检测相对容易,因为孔位的规则形状和预期位置提供了明确的检测基准。
鼠咬(mouse_bite)
鼠咬是指PCB板边缘出现的不规则缺口,形状类似老鼠咬痕。这种缺陷通常由铣板过程中的工艺问题引起。鼠咬会影响板件的外形尺寸精度,严重时可能导致板件在装配时无法正确安装或固定。
开路(open_circuit)
开路是指导电线路在某个位置断裂,导致电流无法通过。开路是PCB最致命的缺陷之一,直接导致电路功能失效。开路缺陷往往非常细微,断裂宽度可能只有几微米,在低分辨率图像中极难识别,是检测难度最大的缺陷类型之一。
短路(short)
短路是指两个不应导通的导电线路之间发生了电气连接。短路会导致异常电流通路,可能烧毁元器件或导致电路功能紊乱。短路缺陷通常表现为线路上多余的铜箔连接,与开路一样属于最严重的缺陷类型。
毛刺(spur)
毛刺是指导线边缘出现的多余铜箔突起,通常由蚀刻不完全引起。毛刺本身可能不影响当前功能,但当毛刺与相邻线路距离过近时,可能在后期使用中因振动或热膨胀导致短路。
伪铜(spurious_copper)
伪铜是指PCB表面出现的非设计铜箔残留,通常由蚀刻工艺缺陷引起。伪铜可能出现在任何位置,影响线路间的绝缘性能,存在潜在的短路风险。
2.4 标注格式与规范
数据集采用YOLO标注格式,每张图片对应一个.txt文件:
<class_id> <x_center> <y_center> <width> <height>
标注特点:
- 坐标归一化处理(0~1)
- 支持多目标检测
- 边界框精度 ≤ 1 像素
- 标注准确率 ≥ 99%
类别编号映射:
0 → missing_hole
1 → mouse_bite
2 → open_circuit
3 → short
4 → spur
5 → spurious_copper
三、PCB缺陷检测的核心挑战
3.1 小目标检测
PCB缺陷的典型特征是"小"。在640×640的输入分辨率下,很多缺陷只占几十个像素,部分开路和短路缺陷甚至只有几个像素宽。小目标检测是PCB缺陷检测的首要挑战。
小目标检测困难的原因:
- 特征信息少:小目标在深层特征图上可能只对应不到1个像素
- 上下文信息有限:小目标周围的上下文信息不足
- IoU敏感性:小目标对边界框偏移极其敏感,1像素的偏差可能导致IoU大幅变化
解决方案:
- 提高输入分辨率:640→1024→1280
- 增加小目标检测层:P2层保留更多浅层细节
- 切片辅助推理(SAHI):将大图切分后分别检测
- 特征融合优化:增强浅层特征和深层特征的融合
3.2 类间差异细微
部分缺陷在视觉上极为相似,容易混淆:
- 开路vs短路:都涉及线路异常,但一个是断裂一个是多余连接
- 毛刺vs伪铜:都是多余铜箔,但毛刺在线路边缘,伪铜在独立位置
- 鼠咬vs毛刺:都是边缘异常,但鼠咬在板边缘,毛刺在线路边缘
3.3 背景纹理干扰
PCB表面具有复杂的纹理结构——铜走线、阻焊层、丝印层等形成了密集的规则图案。这些纹理容易与缺陷混淆,导致误报。
3.4 缺陷形态多变
同一类缺陷的形态可能变化很大:
- 短路:可能是一小段铜桥,也可能是一大片铜箔
- 开路:可能是明显的断裂,也可能是微小的裂纹
- 毛刺:可能是一个小突起,也可能是多个连续突起
四、模型训练实战
4.1 数据配置
# data.yaml
path: dataset
train: images/itrain
val: images/valid
test: images/test
nc: 6
names: ['missing_hole', 'mouse_bite', 'open_circuit', 'short', 'spur', 'spurious_copper']
4.2 高分辨率训练
PCB缺陷检测推荐使用高分辨率输入:
# 高分辨率训练
yolo detect train \
data=data.yaml \
model=yolov8s.pt \
epochs=200 \
imgsz=1024 \
batch=8 \
lr0=0.01 \
mosaic=1.0 \
mixup=0.1
4.3 小目标优化策略
SAHI切片推理
from sahi import AutoDetectionModel
from sahi.utils.cv import read_image
# 加载模型
detection_model = AutoDetectionModel.from_pretrained(
model_type="yolov8",
model_path="best.pt",
confidence_threshold=0.3,
image_size=1024
)
# 切片推理
from sahi import get_sliced_prediction
result = get_sliced_prediction(
image=read_image("pcb_image.jpg"),
detection_model=detection_model,
slice_height=320,
slice_width=320,
overlap_height_ratio=0.2,
overlap_width_ratio=0.2
)
注意力机制增强
# 在YOLOv8 C2f模块中嵌入CBAM
class C2f_CBAM(nn.Module):
def __init__(self, c1, c2, n=1, shortcut=False):
super().__init__()
self.cv1 = Conv(c1, 2 * c2, 1)
self.cv2 = Conv((2 + n) * c2, c2, 1)
self.m = nn.ModuleList(Bottleneck(c2, c2, shortcut) for _ in range(n))
self.cbam = CBAM(c2)
def forward(self, x):
y = list(self.cv1(x).chunk(2, 1))
y.extend(m(y[-1]) for m in self.m)
return self.cbam(self.cv2(torch.cat(y, 1)))
4.4 类别不平衡处理
PCB缺陷数据通常存在类别不平衡问题,某些缺陷(如missing_hole)样本较多,而另一些(如open_circuit)样本较少:
# 计算类别权重
import numpy as np
from collections import Counter
label_counts = Counter(all_labels)
total = sum(label_counts.values())
class_weights = {
cls: total / (len(label_counts) * count)
for cls, count in label_counts.items()}
# 归一化
max_weight = max(class_weights.values())
class_weights = {
cls: w / max_weight for cls, w in class_weights.items()}
4.5 训练结果
| 模型 | 输入分辨率 | mAP50 | mAP50-95 | 推理速度 |
|---|---|---|---|---|
| YOLOv8s | 640 | 85.3% | 62.7% | 12ms |
| YOLOv8s | 1024 | 89.7% | 67.5% | 28ms |
| YOLOv8s+CBAM | 1024 | 91.2% | 69.8% | 32ms |
| YOLOv8m | 1024 | 92.5% | 71.3% | 48ms |
各类别AP:
| 缺陷类型 | AP50 | AP50-95 | 检测难度分析 |
|---|---|---|---|
| missing_hole | 96.5% | 78.2% | 规则形状,易于检测 |
| mouse_bite | 88.3% | 65.4% | 边缘不规则,定位精度受限 |
| open_circuit | 82.1% | 58.7% | 极小目标,特征信息少 |
| short | 85.7% | 61.3% | 形态多变,尺度差异大 |
| spur | 86.9% | 63.8% | 与线路边缘关联,定位需精准 |
| spurious_copper | 90.2% | 68.5% | 颜色特征明显,相对容易 |

五、工业部署方案
5.1 产线部署架构
AOI相机采集PCB图像
↓
图像预处理(去噪、增强)
↓
GPU推理服务器(TensorRT加速)
↓
缺陷检测结果(位置+类别+置信度)
↓
业务判定(OK/NG)
↓
分拣控制信号
↓
数据记录与统计分析
5.2 实时性要求
工业产线对检测速度有严格要求:
- 产线速度:通常0.5~2m/s
- 检测节拍:每块PCB需在100ms内完成检测
- 推理延迟:模型推理需在30ms内完成
- 吞吐量:需支持30+ FPS的稳定推理
5.3 TensorRT加速部署
# 导出ONNX
from ultralytics import YOLO
model = YOLO("best.pt")
model.export(format="onnx", imgsz=1024, simplify=True, opset=12)
# 转换TensorRT
# trtexec --onnx=best.onnx --saveEngine=best.engine --fp16 --shapes=input:1x3x1024x1024
5.4 边缘设备部署
对于空间受限的检测工位,可使用边缘设备部署:
- NVIDIA Jetson AGX Orin:275 TOPS,支持INT8推理
- NVIDIA Jetson Orin NX:100 TOPS,性价比高
- Hailo-8:26 TOPS,超低功耗
# Jetson部署流程
# 1. 导出ONNX
# 2. 使用TensorRT转换(Jetson自带)
# 3. 使用PyCUDA或triton-inference-server推理
5.5 漏检与误报平衡
工业场景中,漏检和误报的影响截然不同:
- 漏检:缺陷产品流出,可能导致客户投诉、退货甚至安全事故
- 误报:良品被误判为不良品,增加复检成本
一般采用"宁误勿漏"策略,适当降低置信度阈值,然后通过人工复检排除误报。
# 工业级检测配置
CONFIDENCE_THRESHOLD = 0.3 # 较低阈值,减少漏检
NMS_IOU_THRESHOLD = 0.45
MIN_DEFECT_AREA = 50 # 最小缺陷面积(像素),过滤噪点

六、质检系统集成与数据分析
6.1 SPC统计过程控制
将检测结果集成到SPC系统中,实时监控缺陷分布趋势:
- 缺陷类型分布统计
- 缺陷率时间趋势图
- 缺陷位置热力图
- 异常波动自动预警
6.2 根因分析
基于检测结果追溯工艺问题:
- 漏孔增多 → 钻孔工序异常
- 短路增多 → 蚀刻工序偏差
- 毛刺增多 → 蚀刻液浓度异常
- 鼠咬增多 → 铣板刀具磨损
6.3 闭环优化
缺陷检测 → 统计分析 → 根因定位 → 工艺调整 → 效果验证
↑ |
└──────────────────────────────────────────────┘
七、技术演进方向
7.1 从检测到分割
目标检测输出矩形边界框,但PCB缺陷的形状往往不规则。实例分割可以提供更精确的缺陷轮廓,有助于:
- 更准确的缺陷面积计算
- 更精确的缺陷形状分析
- 更好的缺陷严重度评估
7.2 异常检测
对于未见过的缺陷类型,传统监督学习方法无法识别。基于异常检测的方法可以:
- 学习正常PCB的分布
- 检测偏离正常分布的异常区域
- 无需标注每种缺陷类型
7.3 多模态融合
结合AOI和X-Ray检测数据:
- AOI检测表面缺陷
- X-Ray检测内部缺陷(如内层短路)
- 两种模态互补,实现全方位检测
7.4 在线学习
产线持续产生新的缺陷样本,在线学习可以使模型不断进化:
- 新缺陷样本自动收集
- 模型增量更新
- 人工审核闭环
八、总结
本PCB表面缺陷检测数据集包含近3500张高质量标注图像,覆盖6类常见工业缺陷。数据集在数据质量、标注精度与应用价值之间达到了良好的平衡,是一个非常适合工业视觉任务的优质数据资源。
PCB缺陷检测是深度学习在工业领域最成功的落地应用之一。从YOLO系列模型的实时检测到TensorRT的极致加速,从小目标优化策略到产线部署架构,每一个环节都需要精心设计和反复验证。在实际部署中,漏检率和误报率的平衡、检测速度和精度的权衡、模型更新与持续优化的机制,都是决定系统成败的关键因素。
随着智能制造的深入推进,PCB缺陷检测将朝着更高精度、更强鲁棒性和更智能化的方向持续演进,为电子制造行业的质量提升和降本增效贡献力量。