摘要: 本文详细阐述了一个利用深度学习进行PCB板缺陷检测的系统,该系统集成了最新的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5等先前版本进行了性能比较。该系统能够在图像、视频、实时视频流和批量文件中精确地识别和分类PCB板缺陷。文中不仅深入讲解了YOLOv8算法的工作原理,还提供了完整的Python代码实现、专门用于训练的数据集,以及一个基于PySide6的图形用户界面(UI)。此系统能够精确识别图像中的PCB板缺陷、支持一键切换YOLOv5/v6/v7/v8模型的能力,以及允许用户自定义修改界面等高级功能,以增强用户体验和系统的灵活性。本文旨在为相关领域的研究人员和新入门的朋友提供一个参考,完整代码资源文件以及数据集可以获取。
完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频,项目完整文件下载请见演示与介绍视频的简介处给出:
基于YOLOV8模型的智能PCB板缺陷检测系统_哔哩哔哩_bilibili
1. 前言
在现代电子制造业中,印刷电路板(PCB)作为电子产品的核心组件,其质量对于最终产品的可靠性和稳定性至关重要。随着电子技术的不断进步,对PCB的质量要求也日益严格,使得PCB板缺陷检测成为保障产品质量的关键环节。
传统的PCB缺陷检测主要依赖于人工视觉检查和基于规则的自动化方法。然而,这些方法存在效率低下、成本高昂以及难以满足日益提高的检测精度和可靠性要求等问题。因此,随着深度学习技术的快速发展,其在PCB缺陷检测领域的应用逐渐成为研究的热点。其中,YOLO系列算法以其快速、准确的特点在实时目标检测领域表现出色。从YOLOv5到最新的YOLOv8,每个版本的更新都在不断优化检测速度、提升准确性和实现模型轻量化,使其更加适用于PCB缺陷检测任务。
然而,尽管深度学习技术在PCB缺陷检测中取得了显著进展,但仍面临一些挑战。首先,需要在模型的实时性与准确性之间找到平衡。在高速生产线上,实时性至关重要,但同时也不能牺牲检测的准确性。其次,不同类型的PCB缺陷具有不同的特征和表现形式,因此需要开发能够识别各种类型缺陷的算法。此外,算法在实际生产环境中的稳定性也是一个需要关注的问题。
为了解决这些问题,研究人员正在积极探索更有效的算法结构、训练策略以及数据增强技术。例如,通过引入注意力机制来增强模型对细微缺陷的识别能力,或者开发更精细的损失函数以优化模型在复杂背景下的性能。同时,利用专门的数据集进行训练,如DeepPCB缺陷数据集,可以进一步提高模型的检测精度和泛化能力。
总的来说,深度学习技术在PCB缺陷检测领域具有巨大的应用潜力,但仍需要不断研究和改进以满足实际生产的需求。随着技术的不断进步,相信未来PCB缺陷检测将变得更加高效、准确和可靠。
本文介绍了基于YOLOv8/v7/v6/v5的PCB板缺陷检测系统的设计与实现,涵盖了从任务定义、文献综述、数据集处理、算法选择与优化,到用户界面设计、实验结果分析及系统部署等多个方面。通过全面的研究与实践,主要贡献可以概括为以下几点:
综合性的文献综述: 本文提供了文献综述,详细介绍了PCB板缺陷检测领域的研究现状,包括最新的目标检测算法如YOLOv8/v7/v6/v5及其在缺陷检测任务中的应用。这一部分不仅涵盖了算法的选择和优化,还对比了不同算法在PCB板缺陷检测中的效果,为读者提供了宝贵的研究资源和启示。
数据集的详细处理方法: 详细介绍了PCB板缺陷检测所需数据集的处理方法,包括数据收集、预处理、增强技术等,确保了模型训练的高效性和准确性。这一部分对于希望在该领域开展研究的学者和工程师具有重要的参考价值。
先进算法的应用与对比: 文章详尽地介绍了YOLOv8/v7/v6/v5等深度学习模型在PCB板缺陷检测系统中的应用,并对这些算法进行了深入的对比分析,展示了各自的优势和局限,为选择最适合的模型提供了科学依据。
完整的资源分享: 文章提供了完整的数据集和代码资源下载链接,包括模型预测与训练的代码,这为研究人员复现实验结果、进行进一步研究或基于本系统进行扩展提供了便利。
2. 数据集简介
在本研究中,详细介绍了用于PCB板缺陷检测的全面数据集。该数据集经过细致的构建和标注,总共包括10668张图像,其中包括8534张训练图像、1066张验证图像以及1068张测试图像。这些图像涵盖了广泛的PCB板类型,图像清晰度高,缺陷特征明显,为模型提供了优质的学习素材。类别如下:
Chinese_name = {'missing_hole': "漏孔", 'mouse_bite': "鼠牙洞", 'open_circuit': "开路", 'short': "短路", 'spur': "毛刺",
'spurious_copper': "杂铜"}
数据集聚焦于多样性和实用性,其中包括六种常见的PCB缺陷类型,如缺失孔、鼠咬、开路、短路、毛刺以及多余铜片,每种类型的缺陷都以2000多个实例呈现,确保了在训练深度学习模型时具有统计上的代表性。缺陷的标注信息包括类别和位置,以矩形框的形式精确标出,为训练和测试阶段提供了清晰的参照。
在数据处理方面,对这些图像进行了一系列的预处理操作,包括尺寸调整、归一化处理,以及为了适应不同模型输入需求的格式转换。此外,为了提高模型在真实世界条件下的泛化能力,采用了多种数据增强技术。这些技术模拟了多变的光照条件、背景噪声,以及PCB板在生产过程中可能遇到的其他视觉扰动,极大地丰富了数据集的多样性。
数据集的详尽分析揭示了其独特的特征。分布图展示了不同缺陷类型的实例数量,可以看到一个相对均衡的分布,这表明数据集在不同缺陷类型之间达到了良好的覆盖度。位置分布的热力图显示了缺陷在PCB板上的分布情况,显示了一个全面的缺陷位置布局,这有助于模型学习在整个PCB板上检测缺陷。尺寸分布图则揭示了大多数缺陷倾向于较小的尺寸,这对设计高精度检测算法提出了特别的挑战。
综上所述,数据集是针对PCB板缺陷检测任务精心设计的,它不仅有助于深度学习模型的开发和优化,同时也为计算机视觉和自动化检测领域的研究人员提供了丰富的实验资源。通过公开这些数据和标注信息,期望能够推动相关技术的进步,同时为工业界提供有力的支持,以提升PCB制造的质量和效率。
3.系统界面效果
系统以PySide6作为GUI库,提供了一套直观且友好的用户界面。下面,为各个主要界面的功能和设计。
(1)在主界面上,系统提供了支持图片、视频、实时摄像头和批量文件输入的功能。用户可以通过点击相应的按钮,选择要进行PCB缺陷检测的图片或视频,或者启动摄像头进行实时检测。在进行PCB缺陷检测时,系统会实时显示检测结果。
(2)此外,系统还提供了一键更换YOLOv8模型的功能。用户可以通过点击界面上的"更换模型"按钮,选择不同的YOLOv8模型进行检测。与此同时,系统附带的数据集也可以用于重新训练模型,以满足用户在不同场景下的检测需求。
(3)为了提供更个性化的使用体验,这里系统支持界面修改,用户可以自定义图标、文字等界面元素。例如,用户可以根据自己的喜好,选择不同风格的图标,也可以修改界面的文字描述。
4.算法原理简介
YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本,目前支持图像分类、物体检测和实例分割任务,鉴于Yolov5的良好表现,Yolov8在还没有开源时就收到了用户的广泛关注YOLOv8是一种先进的深度学习模型,专为实现高效准确的目标检测而设计。其核心思想是将目标检测任务视为一个回归问题,通过单一的前向传播过程直接预测出图像中物体的类别和位置。
yolov8的整体架构如下:
YOLOv8继承了YOLO系列算法的设计,优化并改进了网络结构,使其在速度和准确率之间达到更好的平衡。它采用了一个深度卷积神经网络作为其基础架构,通常以类似于Darknet-53的网络作为骨干,这种网络深度和宽度的平衡设计使得模型能够捕捉到丰富的特征信息,同时保持了较快的处理速度。
YOLOV8
主要优点有如下:
- 用户友好的API
- 可以同时实现分类、检测、分割和姿态估计任务
- 速度更快、准确率更高
- 全新的结构
- 新的损失函数
- Anchor free
主要改动:
Backbone: 第一层卷积由原本的 6×6
卷积改为 3×3
卷积;参考 YOLOv7 ELAN
设计思想将 C3
模块换成了 C2f
模块,并配合调整了模块的深度。
Neck: 移除了 1×1
卷积的降通道层;同时也将原本的 C3
模块换成了 C2f
模块。
Head: 这部分改动较大,换成了解耦头结构,将分类任务和回归任务解耦;同时也将 Anchor-Based
换成了 Anchor-Free
。
Loss:使用 BCE Loss
作为分类损失;使用 DFL Loss + CIOU Loss
作为回归损失。
样本匹配策略: 采用了 Task-Aligned Assigner
样本分配策略。
训练策略: 新增加了最后 10 轮关闭 Mosaic 数据增强操作,该操作可以有效的提升精度
YOLOv8的网络结构通常包括几个关键部分:首先是输入预处理,它将输入图像统一调整至固定的尺寸(例如416x416像素),以保证网络输入的一致性。随后,图像通过多层卷积网络,这一过程中会使用到多种类型的卷积层,包括标准的卷积层、残差连接以及BottleNeck层。这些层次的设计旨在提取图像中的特征,为后续的目标检测任务奠定基础。
在特征提取过程中,YOLOv8通过使用批量归一化(Batch Normalization, BN)和CBL(Convolution, Batch normalization, Leaky ReLU)模块来加速训练过程并提高模型的稳定性。BN层可以减少内部协变量偏移,提高模型训练过程的稳定性和泛化能力。CBL模块则是YOLOv8网络中重复使用的基本构建块,通过这种模块化的设计,YOLOv8能够以较小的计算成本提取深层次的特征信息。
YOLOv8的另一个显著特点是它的预测方式。它将图像分割为一个个网格,并在每个网格中预测多个边界框及其对应的置信度和类别概率。这种设计使得YOLOv8能够在图像中的多个位置同时预测多个目标,大幅提高了检测的效率。为了减少重复检测和提高检测准确性,YOLOv8还采用了非极大值抑制(Non-maximum Suppression, NMS)的技术,通过此技术可以筛选出最佳的边界框,并抑制那些重叠较多且置信度较低的边界框。
总之,YOLOv8通过其创新的网络结构和预测机制,为实时目标检测任务提供了一种既快速又准确的解决方案。它的设计理念和技术细节共同确保了在保持高速处理的同时,也能够准确地识别出图像中的各种目标。这一系列的技术进步使得YOLOv8在目标检测领域中占据了领先地位,并被广泛应用于各种实际场景中。
4.1 代码简介
在训练阶段,我们使用了预训练模型作为初始模型进行训练,然后通过多次迭代优化网络参数,以达到更好的检测性能。在训练过程中,我们采用了学习率衰减和数据增强等技术,以增强模型的泛化能力和鲁棒性。一个简单的单卡模型训练命令如下。
Device is determined automatically. If a GPU is available then it will be used, otherwise training will start on CPU.
# Build a new model from YAML and start training from scratch
yolo detect train data=coco128.yaml model=yolov8n.yaml epochs=100 imgsz=640
# Start training from a pretrained *.pt model
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640
# Build a new model from YAML, transfer pretrained weights to it and start training
yolo detect train data=coco128.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640
To train with 2 GPUs, CUDA devices 0 and 1 use the following commands. Expand to additional GPUs as required.
# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640 device=0,1
训练时可指定更多的参数,如下:
Argument | Default | Description |
---|---|---|
model | None | 模型或者模型配置文件 |
data | None | 数据集配置文件 |
epochs | 100 | 训练的轮次 |
patience | 100 | 准确率为提升停止的轮次 |
batch | 16 | 训练的批次大小 |
imgsz | 640 | 图像的尺寸 |
save | True | 是否需要保存训练的结果与模型 |
device | None | 训练设备 |
workers | 8 | 多线程数据集加载 |
project | None | 项目名称 |
exist_ok | False | 是否覆盖现有试验 |
pretrained | True | 是否使用预训练模型 |
optimizer | 'auto' | 优化器选择 |
verbose | False | 是否详细输出 |
seed | 0 | 种子数 |
deterministic | True | 是否启动确定性模式 |
rect | False | 单类别模型训练 |
cos_lr | False | 是否使用余弦学习率调度器 |
resume | False | 是否从最近的训练断掉权重继续训练 |
amp | True | 是否开启混合精度训练 |
本文中我们将深入探讨如何通过Python脚本使用YOLOv8算法与PySide6库来构建一个多目标检测和跟踪的图形用户界面(GUI)应用。这段代码展示了从图像读取、模型加载、预测执行到结果展示整个流程的实现。
首先,我们引入了必要的Python模块,包括random、sys、time以及图像处理和GUI设计相关的库。通过这些库,我们可以处理图像数据、创建窗口界面,并接受用户输入。代码首先设置QF_Config以关闭冗余输出,保持GUI输出的整洁。
# 界面入口
import sys
import os
import logging
# 禁止标准输出
sys.stdout = open(os.devnull, 'w')
logging.disable(logging.CRITICAL) # 禁用所有级别的日志
from PySide6.QtGui import QIcon
from PySide6.QtWidgets import QApplication
from utils import glo
from yoloshow import *
我们定义了一个MainWindow类,它继承自QMainWindow,用于创建主窗口。在窗口中,我们添加了一个标签(QLabel),它将用来展示目标检测后的图像。
# 多套一个类 为了实现MouseLabel方法
class MyWindow(YOLOshow):
# 定义关闭信号
closed = Signal()
def __init__(self):
super(MyWindow, self).__init__()
self.center()
# --- 拖动窗口 改变窗口大小 --- #
event.ignore()
else:
self.setWindowOpacity(1.0)
self.closed.emit()
在代码的核心部分,我们首先记录了预测开始的时间,调用模型的predict函数进行预测,并记录结束时间,以计算整个推理过程所需时间。使用postprocess函数对检测结果进行后处理,然后遍历每个检测到的对象信息,包括类别名称、边界框、置信度和类别ID。这些信息将用来在图像上绘制代表检测对象的矩形框,并显示类别和置信度。最后,我们在GUI的标签上显示处理后的图像,并启动Qt应用程序的主循环。通过这样的实现,用户可以直观地看到每个检测对象,以及模型预测的准确性和效率。
5.系统实现
在构建交互式海洋生物多目标检测系统设计中,我们的核心目标是开发一个既直观又易于操作的用户界面,它能够实时显示多目标检测的结果。为了达到这一目标,采取了模块化的设计思路,整合界面、媒体处理和深度学习模型,实现了一个既高效又灵活的系统。
5.1 设计思路
在这一系统中,我们设计了MainWindow类作为架构的核心。这个类不仅是用户交互的主体,还起到了将处理逻辑和界面逻辑紧密联系起来的桥梁作用。通过精心设计的界面,用户能够轻松地管理和观察到从视频流中检测和跟踪的对象。此外,通过实时更新的视觉元素,比如标签和图像框,用户可以直观地看到模型的检测结果。
MainWindow类的设计巧妙地融合了处理层、界面层和控制层,使得整个系统既有良好的用户体验,又保持了强大的功能性:
-
处理层是系统的智能核心,利用先进的YOLOv8模型,它负责处理输入的视频流,并进行对象检测与跟踪。这层不仅需要高效地执行深度学习模型的推理,还要对检测到的对象信息进行实时更新和管理。
-
界面层是与用户直接交互的前端,通过PySide6构建的GUI元素,提供了一个清晰、响应迅速的界面。用户可以通过这个界面实时查看检测结果,以及各种统计信息和系统状态。
-
控制层承担着指挥和协调的角色,它通过连接处理层的逻辑和界面层的表现,将用户的操作转化为系统的响应。例如,用户的一次点击操作可能会触发一个槽函数,该函数会告诉模型开始处理下一帧视频或停止当前任务。
在此架构下,各层之间通过信号和槽机制进行高效通信。当处理层完成一帧的检测时,会发出一个信号,界面层的相应部件会捕捉这个信号,并更新显示的内容,如图像框中的对象位置和标签。这种机制使得我们的系统能够流畅地在用户操作和复杂的后端处理之间过渡,确保用户获得连贯和实时的体验。
通过这样的设计,我们不仅使得系统易于使用和扩展,而且还确保了它能够高效地处理复杂的多目标检测任务,并在动态环境下提供稳定的性能。这种架构设计使得我们的系统不仅适用于研究和学术领域,也能够满足工业级应用的需要。
下载链接
若您想获得博文中涉及的实现完整全部资源文件(包括测试图片、视频,py, UI文件,训练数据集、训练代码、界面代码等),这里已打包见可参考博客与视频,进行私信;已将所有涉及的文件同时打包到里面,点击即可运行,完整项目文件截图如下:
完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频,项目完整文件下载请见演示与介绍视频的简介处给出:
基于YOLOV8模型的智能PCB板缺陷检测系统_哔哩哔哩_bilibili
6.结束
本文详细介绍了一个基于YOLOv8/YOLOV5模型的PCB缺陷检测系统。系统以模块化的方式设计,充分采用了合理的架构设计,带来良好的可维护性和可扩展性。其用户界面友好,能够提供实时的多目标检测计数与跟踪和识别结果展示,同时支持用户账户管理,以便于保存和管理检测结果和设置。
该系统支持摄像头、视频、图像和批量文件等多种输入源,能够满足用户在不同场景下的需求。在后面可以添加更多预训练模型,增加检测和识别的种类;优化用户界面,增强个性化设置;并积极聆听用户反馈,以期不断改进系统,以更好地满足用户的需求。
非常感谢大家的支持!支出需要改进的地方,以便后续更改,共同追求更完美、更严谨的知识分享!
可订阅微信公众号获取相关内容
微信公众号: AI算法爱好者角落
知乎:基于YOLOV8/YOLOV5的PCB板缺陷检测识别系统 - 知乎