原创项目合集 基于 YOLOv8 的PCB缺陷检测系统

基于 YOLOv8 的PCB缺陷检测系统

一、项目简介

基于 YOLOv8 目标检测算法,针对 PCB(印刷电路板)表面缺陷进行识别与分类的桌面端智能检测系统。系统覆盖从数据集构建、模型训练调优到多场景可视化检测的完整深度学习开发链路。

二、数据集

基于 YOLOv8 的PCB缺陷检测系统项目截图1 基于 YOLOv8 的PCB缺陷检测系统项目截图1

数据来源

本项目使用 DeepPCB 公开数据集(由北京大学团队提供),包含真实 PCB 生产线上采集的缺陷图像,每张图像均配有对应的缺陷标注文件。

缺陷类别

6 种 PCB 表面缺陷类型:

英文标签中文名称说明
open断路铜线断开,导致电路不通
short短路两条相邻导线意外连接
mousebite鼠咬导线边缘出现连续小缺口
spur毛刺铜线边缘不规则突起
spurious_copper多余铜非预期位置残留多余铜箔
pin_hole针孔铜面上出现的微小圆孔

图像数量与划分

数据集划分图像数量说明
训练集(train)1050 张用于模型权重学习
验证集(val)150 张用于训练过程中监控指标
测试集(test)300 张用于最终模型性能评估
合计1500 张
  • 图像格式:JPG
  • 标注格式:YOLO 格式(.txt,每行 类别ID cx cy w h,坐标归一化)
  • 图像尺寸:训练时统一缩放至 640×640

三、深度学习开发过程

1. 数据集的构建与处理

原始数据整理

DeepPCB 数据集按 PCB 板块编号分组存放(group00041group12000 等),每个组包含带缺陷的测试图(*_test.jpg)和对应的无缺陷参考图(*_not 目录)。

格式转换

将 DeepPCB 原始标注格式转换为 YOLOv8 所需的 YOLO 格式,每个图像对应一个 .txt 标注文件,类别从 0 开始编号,边界框坐标转换为相对归一化值(cx、cy、w、h)。

数据集配置

通过 data.yaml 声明训练集/验证集/测试集路径及类别信息:

nc: 6
names: ['open', 'short', 'mousebite', 'spur', 'spurious_copper', 'pin_hole']
train: train/images
val:   val/images
test:  test/images

数据增强策略(训练时在线增强)

增强方式参数说明
Mosaic1.04 图拼接,丰富背景和尺度
水平翻转0.5随机左右翻转
HSV 色调抖动H=0.015, S=0.7, V=0.4亮度/饱和度/色调随机扰动
缩放0.5随机图像缩放
平移0.1随机平移
随机擦除0.4随机遮挡区域,提升遮挡鲁棒性
RandAugmentauto自动组合多种增强策略
Close Mosaic最后 10 epoch 关闭收敛阶段取消 Mosaic,精细拟合

2. 模型训练与调优

基础模型

以 YOLOv8n(Nano 版本)的官方预训练权重(yolov8n.pt)为起点,进行迁移学习微调。

完整训练参数

参数说明
epochs30总训练轮次
batch8每批次图像数量
imgsz640输入图像尺寸
optimizerauto(AdamW)自动选择优化器
lr00.01初始学习率
lrf0.01最终学习率系数(余弦衰减)
cos_lrtrue余弦学习率调度
momentum0.937优化器动量
weight_decay0.0005L2 正则化权重衰减
warmup_epochs3学习率热身轮次
warmup_momentum0.8热身阶段初始动量
dropout0.1Dropout 正则化率
patience20早停耐心(验证指标无提升时的等待轮次)
seed42随机种子(保证可复现)
amptrue自动混合精度训练
devicecpu训练设备

损失函数权重

损失项权重说明
box7.5边界框回归损失(CIoU)
cls0.5分类交叉熵损失
dfl1.5分布式焦点损失(DFL)

训练日志目录yolov8_pcb_detection_results/models/train_20251230_163934/

3. 训练指标说明

训练结束后的关键性能指标(取各指标最优值):

指标说明
mAP5098.58%IoU=0.5 时的平均精度均值,衡量整体检测能力
mAP50-9571.42%IoU=0.5~0.95 的平均精度均值,衡量精确定位能力
Precision(精确率)97.48%所有预测为正例中真正为正例的比例,反映误检控制能力
Recall(召回率)96.04%所有真实正例中被检测出的比例,反映漏检控制能力
F1 分数≈96.75%精确率与召回率的调和平均,综合评估指标
最终 Val Box Loss1.0975验证集边界框回归损失
最终 Val Cls Loss0.5392验证集分类损失
最优 EpochEpoch 30mAP50 达到最高点的训练轮次
总训练耗时~7527 秒CPU 环境完整 30 轮训练时长

指标含义说明

  • mAP50:以 IoU=0.5 为正样本判定阈值,计算所有类别 AP(精度-召回曲线下面积)的均值,是目标检测最常用的综合性能指标。
  • mAP50-95:在 IoU=0.50、0.55、...、0.95 共 10 个阈值下分别计算 mAP 后取平均,对定位精度要求更严格。
  • PrecisionTP / (TP + FP),值越高代表误报越少。
  • RecallTP / (TP + FN),值越高代表漏报越少。
  • Box Loss:衡量预测框与真实框之间的位置偏差,值越小越好。
  • Cls Loss:衡量缺陷类别分类误差,值越小越好。
  • DFL Loss:分布式焦点损失,用于精确预测边界框坐标的概率分布,值越小定位越精准。

训练结束后在 models/train_20251230_163934/ 目录下自动生成以下可视化图:

文件名含义
results.png综合训练曲线:包含训练损失(box/cls/dfl)、验证损失、Precision、Recall、mAP50、mAP50-95 随 Epoch 的变化折线图,可直观观察模型收敛过程和过拟合情况。
confusion_matrix.png混淆矩阵(绝对值):行为真实类别,列为预测类别,对角线为正确识别数量,非对角线为误判数量,用于分析哪些缺陷类别容易混淆。
confusion_matrix_normalized.png归一化混淆矩阵(百分比):每行归一化为 1,对角线色块越亮代表该类识别准确率越高,便于跨类别横向比较。
BoxF1_curve.pngF1-置信度曲线:展示不同置信度阈值下 F1 分数的变化,曲线峰值点对应最优 F1 及最佳检测阈值。
BoxPR_curve.pngP-R 曲线(精确率-召回率曲线):曲线下面积即 mAP,曲线越"胖"(靠近右上角)代表模型综合性能越好。
BoxP_curve.pngPrecision-置信度曲线:展示不同阈值下查准率的变化,阈值越高精确率通常越高但召回率下降。
BoxR_curve.pngRecall-置信度曲线:展示不同阈值下查全率的变化,阈值越低召回率越高。
labels.jpg标签分布图:展示各类别目标框的尺寸分布(宽高散点图)及位置分布(热力图),用于分析数据集分布特征。
train_batch*.jpg训练批次样本图:展示训练时某批次图像及其真实标注框,可验证数据标注和增强效果是否符合预期。
val_batch*_labels.jpg验证集真实标注:验证集某批次图像的真实标注框,用于与模型预测结果对比。
val_batch*_pred.jpg验证集模型预测:对应批次上模型的实际预测结果,与 labels 图对比可直观感受检测效果。
基于 YOLOv8 的PCB缺陷检测系统项目截图1 基于 YOLOv8 的PCB缺陷检测系统项目截图1 基于 YOLOv8 的PCB缺陷检测系统项目截图2 基于 YOLOv8 的PCB缺陷检测系统项目截图3 基于 YOLOv8 的PCB缺陷检测系统项目截图4 基于 YOLOv8 的PCB缺陷检测系统项目截图5

四、系统功能

系统采用 PyQt6 构建桌面端 GUI,集成用户管理、多场景检测与历史记录功能。

用户管理

  • 登录 / 注册功能,密码经 SHA-256 哈希后存储至 SQLite 数据库
  • 内置默认管理员账户(用户名 admin,初始密码 admin123
基于 YOLOv8 的PCB缺陷检测系统项目截图1

图片检测

  • 支持打开单张图片(JPG / PNG / BMP / TIF 等格式)
  • 加载模型后一键推理,结果页展示:
  • 带标注框的结果图(可导出为图片)
  • 统计摘要(总检测数、类别数、平均置信度、最高置信度)
  • 类别分布表格(各类缺陷数量及占比)
  • 详细数据表格(每个目标的类别、置信度、坐标、面积)
  • 置信度分布直方图
  • 支持导出 CSV 报告
基于 YOLOv8 的PCB缺陷检测系统项目截图1

视频检测

  • 导入本地视频文件,逐帧推理并实时显示检测结果
  • 支持帧率间隔设置,兼顾检测精度与播放流畅度

摄像头实时检测

  • 调用本地摄像头进行实时视频流检测
  • 支持一键开启/暂停检测,推理结果实时叠加显示

训练指标可视化

  • 训练曲线页:4 子图展示训练损失、验证损失、mAP 指标、精确率/召回率随 Epoch 的变化
  • 指标汇总页:卡片式展示最优 mAP50、mAP50-95、精确率、召回率、最优轮次、损失值,以及核心指标柱状图
  • 雷达分析页:雷达图多维度综合展示 mAP50、mAP50-95、精确率、召回率、F1 分数,并附 mAP50 趋势面积图和综合评分
  • 支持多个训练记录切换对比
基于 YOLOv8 的PCB缺陷检测系统项目截图1 基于 YOLOv8 的PCB缺陷检测系统项目截图2 基于 YOLOv8 的PCB缺陷检测系统项目截图3

模型管理

  • 支持加载本地任意 .pt 格式的 YOLOv8 模型文件
  • 可动态调整推理置信度阈值(conf)、IoU 阈值、最大检测数
基于 YOLOv8 的PCB缺陷检测系统项目截图1

历史记录

  • 每次检测结果自动写入本地 SQLite 数据库
  • 支持按检测类型(图片/视频/摄像头)筛选,支持关键词搜索
  • 支持导出历史记录为 CSV 文件,支持一键清除历史
基于 YOLOv8 的PCB缺陷检测系统项目截图1

五、项目技术栈

技术 / 库用途
Python 3.9运行环境
PyQt6桌面 GUI 框架
Ultralytics YOLOv8目标检测模型(训练 + 推理)
OpenCV(opencv-python)图像/视频读取与处理
Matplotlib训练曲线、雷达图、柱状图等可视化
NumPy数值计算与数组操作
SQLite3(内置)用户信息与历史记录持久化

六、项目结构

c180/
├── main.py                          # 程序入口,初始化应用与窗口
├── config.py                        # 全局配置(路径、类别、默认参数)
├── pcb_data.yaml                    # 训练数据集配置文件
├── yolov8n.pt                       # YOLOv8n 官方预训练权重
├── requirements.txt                 # Python 依赖列表
│
├── data/
│   └── history.db                   # SQLite 数据库(用户 + 历史记录)
│
├── ui/                              # UI 层
│   ├── login_window.py              # 登录 / 注册窗口
│   ├── main_window.py               # 主窗口(侧边栏 + 页面容器)
│   └── pages/                       # 各功能页面
│       ├── image_page.py            # 图片检测页
│       ├── video_page.py            # 视频检测页
│       ├── camera_page.py           # 摄像头实时检测页
│       ├── metrics_page.py          # 训练指标可视化页
│       ├── model_page.py            # 模型管理页
│       └── history_page.py          # 历史记录页
│
├── utils/                           # 工具层
│   ├── detector.py                  # YOLO 检测器封装(同步 + 视频/摄像头线程)
│   ├── database.py                  # 数据库管理(用户、历史记录 CRUD)
│   └── styles.py                    # 全局样式定义
│
├── DeepPCB/                         # 原始数据集目录
│   ├── PCBData/                     # PCB 图像及标注数据
│   │   ├── group00041/              # 各板块分组原始数据
│   │   ├── ...
│   │   └── yolov8_pcb_detection_results/  # 训练结果(含模型权重)
│   └── tools/                       # 数据标注工具(Qt C++)
│
└── yolov8_pcb_detection_results/    # 最终训练结果(供系统调用)
    └── yolov8_pcb_detection_results/
        ├── best_model.pt            # 最优模型权重
        ├── models/
        │   └── train_20251230_163934/    # 本次训练记录
        │       ├── results.csv           # 逐 Epoch 训练日志
        │       ├── results.png           # 综合训练曲线图
        │       ├── confusion_matrix*.png # 混淆矩阵
        │       ├── Box*.png              # F1/PR/P/R 曲线
        │       ├── labels.jpg            # 标签分布图
        │       ├── train_batch*.jpg      # 训练批次样本
        │       ├── val_batch*_labels.jpg # 验证集真实标注
        │       ├── val_batch*_pred.jpg   # 验证集预测结果
        │       ├── args.yaml             # 完整训练参数记录
        │       └── weights/              # 阶段性权重存档
        │           ├── best.pt
        │           └── last.pt
        └── yolo_dataset/            # YOLO 格式转换后的数据集
            ├── data.yaml
            ├── train/images & labels
            ├── val/images & labels
            └── test/images & labels

七、启动教程

1. 安装依赖

pip install -r requirements.txt

2. 确认模型文件

确保以下路径存在模型文件(已包含在项目中):

yolov8_pcb_detection_results/yolov8_pcb_detection_results/best_model.pt

3. 启动程序

在项目根目录下运行:

python main.py

4. 登录系统

使用默认管理员账户登录:

  • 用户名:admin
  • 密码:admin123

也可在登录界面注册新账户后使用。

5. 加载模型并开始检测

进入【模型管理】页面,选择本地 .pt 模型文件完成加载,随后即可在【图片检测】、【视频检测】、【摄像头检测】页面进行推理。

本项目为个人原创,结构清晰,功能完整,适合课程设计、毕业设计和个人学习使用。如需购买项目成品或定制化需求可以联系作者。

微信二维码
Jay 微信二维码