基于深度学习的PCB板缺陷检测系统(含UI界面、yolov5、Python代码、数据集)

在这里插入图片描述

在这里插入图片描述

项目介绍

项目中所用到的算法模型和数据集等信息如下:

算法模型:
    yolov5

    yolov5主要包含以下几种创新:
        1. 添加注意力机制(SECBAMCA等)
        2. 修改可变形卷积(DySnake-主干c3替换、DySnake-所有c3替换)

数据集:
    网上下载的数据集,详细介绍见数据集介绍部分。

以上是本套代码的整体算法架构和对目标检测模型的修改说明,这些模型修改可以为您的 毕设、作业等提供创新点和增强模型性能的功能

如果要是需要更换其他的检测模型,请私信。

注:本项目提供所用到的所有资源,包含 环境安装包、训练代码、测试代码、数据集、视频文件、 界面UI文件等。


项目简介

在本文中,我们将详细介绍如何利用深度学习中的YOLOv5算法来实现对PCB板缺陷的检测,并结合PyQt5设计了一个简约而强大的系统UI界面。通过该界面,您可以轻松选择自己的视频文件或图片文件进行检测,并且还能够根据需要替换训练好的yolov5模型,以适应不同的数据检测需求。

我们的系统界面不仅外观优美,而且具备出色的检测精度和强大的功能。它支持多目标实时检测,并允许您自由选择感兴趣的检测目标。

本博文提供了完整的Python程序代码和使用教程,非常适合新入门者参考学习。您可以通过文末的下载链接获取完整的代码资源文件。以下是本博文的目录大致内容:

目录

  • 项目介绍
  • 项目简介
  • 效果展示:
  • 🌟一、环境安装
  • 🌟二、数据集介绍
  • 🌟三、 目标检测介绍
    • yolov5相关介绍
      • 1. YOLOv5的网络结构
  • 四、 yolov5训练步骤
    • 五、 yolov5评估步骤
    • 六、 训练结果
  • 🌟下载链接

效果展示:

功能:
1. 支持单张图片识别
2. 支持遍历文件夹识别
3. 支持识别视频文件
4. 支持结果导出(xls、csv两种格式)
5. 支持切换检测到的目标


🌟一、环境安装

本项目提供所有需要的环境安装包(python、pycharm、cuda、torch等),可以直接按照视频讲解进行安装。具体的安装流程见此视频:视频链接
环境安装视频是以车牌项目为例进行讲解的,但是可以适用于任何项目。

视频快进到 3:18 - 21:17,这段时间讲解的是环境安装,可直接快进到此处观看。
在这里插入图片描述

环境安装包可通过百度网盘下载:
链接:https://pan.baidu.com/s/17SZHeVZrpXsi513D-6KmQw?pwd=a0gi
提取码:a0gi
–来自百度网盘超级会员V6的分享

上面这个方法,是比较便捷的安装方式(省去了安装细节),按照我的视频步骤和提供的安装包安装即可,如果要是想要多学一点东西,可以按照下面的安装方式走一遍,会更加熟悉。

环境安装方法2:
追求快速安装环境的,只看上面即可!!!

下面列出了5个步骤,是完全从0开始安装(可以理解为是一台新电脑,没有任何环境),如果某些步骤已经安装过的可以跳过。下面的安装步骤带有详细的视频讲解和参考博客,一步一步来即可。另外视频中讲解的安装方法是通用的,可用于任何项目

  1. python环境安装:B站视频讲解
  2. cuda、cudnn安装:B站视频讲解
  3. torch安装: B站视频讲解
  4. pycharm安装: B站视频讲解
  5. 第三方依赖包安装: B站视频讲解

按照上面的步骤安装完环境后,就可以直接运行程序,看到效果了。


🌟二、数据集介绍

数据集总共包含下面6个类别,且已经分好 train、val、test文件夹,也提供转好的yolo格式的标注文件,可以直接使用。

missing_hole 				# 漏孔
mouse_bite  				# 鼠牙洞
open_circuit				# 开路
short       				# 短路
spur						# 毛刺
spurious_copper				# 杂铜

数据样式如下:
在这里插入图片描述


🌟三、 目标检测介绍

yolov5相关介绍

1. YOLOv5的网络结构

YOLOV5有YOLOv5n,YOLOv5s,YOLOv5m,YOLOV5l、YOLO5x五个版本。这个模型的结构基本一样,不同的是deth_multiole模型深度和width_multiole模型宽度这两个参数。就和我们买衣服的尺码大小排序一样,YOLOV5n网络是YOLOV5系列中深度最小,特征图的宽度最小的网络。其他的三种都是在此基础上不断加深,不断加宽。不过最常用的一般都是yolov5s模型。
在这里插入图片描述

  本系统采用了基于深度学习的目标检测算法YOLOv5,该算法是YOLO系列算法的较新版本,相比于YOLOv3和YOLOv4,YOLOv5在检测精度和速度上都有很大的提升。YOLOv5算法的核心思想是将目标检测问题转化为一个回归问题。此外,YOLOv5还引入了一种称为SPP(Spatial Pyramid Pooling)的特征提取方法,这种方法可以在不增加计算量的情况下,有效地提取多尺度特征,提高检测性能。

  在YOLOv5中,首先将输入图像通过骨干网络进行特征提取,得到一系列特征图。然后,通过对这些特征图进行处理,将其转化为一组检测框和相应的类别概率分数,即每个检测框所属的物体类别以及该物体的置信度。YOLOv5中的特征提取网络使用CSPNet(Cross Stage Partial Network)结构,它将输入特征图分为两部分,一部分通过一系列卷积层进行处理,另一部分直接进行下采样,最后将这两部分特征图进行融合。这种设计使得网络具有更强的非线性表达能力,可以更好地处理目标检测任务中的复杂背景和多样化物体。

在这里插入图片描述

  在YOLOv5中,每个检测框由其左上角坐标(x,y)、宽度(w)、高度(h)和置信度(confidence)组成。同时,每个检测框还会预测C个类别的概率得分,即分类得分(ci),每个类别的得分之和等于1。因此,每个检测框最终被表示为一个(C+5)维的向量。在训练阶段,YOLOv5使用交叉熵损失函数来优化模型。损失函数由定位损失、置信度损失和分类损失三部分组成,其中定位损失和置信度损失采用了Focal Loss和IoU Loss等优化方法,能够有效地缓解正负样本不平衡和目标尺寸变化等问题。

  YOLOv5网络结构是由Input、Backbone、Neck、Prediction组成。Yolov5的Input部分是网络的输入端,采用Mosaic数据增强方式,对输入数据随机裁剪,然后进行拼接。Backbone是Yolov5提取特征的网络部分,特征提取能力直接影响整个网络性能。YOLOv5的Backbone相比于之前Yolov4提出了新的Focus结构。Focus结构是将图片进行切片操作,将W(宽)、H(高)信息转移到了通道空间中,使得在没有丢失任何信息的情况下,进行了2倍下采样操作。


四、 yolov5训练步骤

此代码的训练步骤极其简单,不需要修改代码,直接通过cmd就可以命令运行,命令都已写好,直接复制即可,命令如下图:
在这里插入图片描述
下面这条命令是 训练 添加 CBAM 注意力机制的命令,复制下来,直接就可以运行,看到训练效果(**需要将coco_NEU-DET.yaml修改为自己的数据集的yaml文件 **)。

python ./train.py --epochs 500 --cfg models/yolov5s-CBAM-2.yaml --hyp data/hyps/hyp.scratch-low.yaml --data data/coco_NEU-DET.yaml --weight weights/yolov5s.pt --workers 4 --batch 16

执行完上述命令后,即可完成训练,训练过程如下:
在这里插入图片描述

下面是对命令中各个参数的详细解释说明:

  • python: 这是Python解释器的命令行执行器,用于执行后续的Python脚本。

  • ./train.py: 这是要执行的Python脚本文件的路径和名称,它是用于训练目标检测模型的脚本。

  • --epochs 500: 这是训练的总轮数(epochs),指定为500,表示训练将运行500个轮次。

  • --cfg models/yolov5s-CBAM-2.yaml: 这是YOLOv5模型的配置文件的路径和名称,它指定了模型的结构和参数设置。

  • --hyp data/hyps/hyp.scratch-low.yaml: 这是超参数文件的路径和名称,它包含了训练过程中的各种超参数设置,如学习率、权重衰减等。

  • --data data/coco_NEU-DET.yaml: 这是数据集的配置文件的路径和名称,它指定了训练数据集的相关信息,如类别标签、图像路径等。

  • --weight weights/yolov5s.pt: 这是预训练权重文件的路径和名称,用于加载已经训练好的模型权重以便继续训练或进行迁移学习。

  • --workers 4: 这是用于数据加载的工作进程数,指定为4,表示使用4个工作进程来加速数据加载。

  • --batch 16: 这是每个批次的样本数,指定为16,表示每个训练批次将包含16个样本。

通过运行上面这个命令,您将使用YOLOv5模型对目标检测任务进行训练,训练500个轮次,使用指定的配置文件、超参数文件、数据集配置文件和预训练权重。同时,使用4个工作进程来加速数据加载,并且每个训练批次包含16个样本。


五、 yolov5评估步骤

评估步骤同训练步骤一样,执行1行语句即可,注意--weights需要变为自己想要测试的模型路径,VOC_PCB.yaml替换为自己的数据集的yaml文件。

python ./val.py --data  data/VOC_PCB.yaml --weights ../weights/yolov5s.yaml/weights/best.pt

评估结果如下:
在这里插入图片描述


六、 训练结果

我们每次训练后,会在 run/train 文件夹下出现一系列的文件,如下图所示:
在这里插入图片描述


🌟下载链接

   该代码采用Pycharm+Python3.8开发,经过测试能成功运行,运行界面的主程序为main.py,提供用到的所有程序。为确保程序顺利运行,请按照requirements.txt配置Python依赖包的版本。Python版本:3.8,为避免出现运行报错,请勿使用其他版本,详见requirements.txt文件;

    若您想获得博文中涉及的实现完整全部程序文件(包括训练代码、测试代码、训练数据、测试数据、视频,py、 UI文件等,如下图),这里已打包上传至博主的面包多平台,可通过下方项目讲解链接中的视频简介部分下载,完整文件截图如下:
在这里插入图片描述

项目讲解链接:B站

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/303275.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux执行.sh文件出现问题--排查以及解决

阿丹问题描述: 今天在运行.sh文件的时候出现 现象1: 现象2: 现象3: 出现这三种问题 问题解释以及问题排查: 现象1: 排查: 1、判断文件是否存在 2、判断权限是否足够 解决&#xff1…

【AI视野·今日Sound 声学论文速览 第四十二期】Fri, 5 Jan 2024

AI视野今日CS.Sound 声学论文速览 Fri, 5 Jan 2024 Totally 10 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers PosCUDA: Position based Convolution for Unlearnable Audio Datasets Authors Vignesh Gokul, Shlomo Dubnov深度学习模型需要大量干净的…

1.8 day6 IO进程线程

使用有名管道实现两个进程之间的通信 进程A #include <myhead.h> int main(int argc, const char *argv[]) {//创建两个文件描述符用于打开两个管道int fd1-1;int fd2-1;//创建一个子进程int pid-1;if((fd1open("./mkfifo1",O_RDWR))-1){perror("open er…

java中常见的一些小知识(1)

1.数组转List 1.1. Arrays.asList public class Tesr {public static void main(String[] args) {String[] ary new String[]{ "1", "a"};List<String> list Arrays.asList((ary));list.add("ddsdsa");System.out.println(list);}}但是…

SCI一区级 | Matlab实现RIME-CNN-LSTM-Mutilhead-Attention多变量多步时序预测

SCI一区级 | Matlab实现RIME-CNN-LSTM-Mutilhead-Attention多变量多步时序预测 目录 SCI一区级 | Matlab实现RIME-CNN-LSTM-Mutilhead-Attention多变量多步时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现RIME-CNN-LSTM-Mutilhead-Attention霜冰算法…

简单几步,实现餐厅扫码点餐

越来越多的人选择外出就餐&#xff0c;而餐厅的点餐方式也随着科技的发展而不断进步。其中&#xff0c;扫码点餐是最为常见的一种方式&#xff0c;它不仅方便快捷&#xff0c;还能节省人力成本。本文将介绍一种简单易行的餐厅扫码点餐解决方案。 打开乔拓云平台&#xff0c;登录…

华为认证 | 这门HCIE认证正式发布!

华为认证openEuler专家HCIE-openEuler V1.0&#xff08;中文版&#xff09;自2023年12月29日起&#xff0c;正式在中国区发布。 01 发布概述 基于“平台生态”战略&#xff0c;围绕“云-管-端”协同的新ICT技术架构&#xff0c;华为公司打造了覆盖ICT领域的认证体系&#xff0…

【JavaSE】Java中的反射动态代理

本篇文章整理的内容来源于: 反射原理 文章目录 一. 动态代理1. 优点2. 动态代理三要素3. 创建代理对象并使用 二. 反射1. 什么是反射2. 获取字节码文件对象的三种方式(1) Class.forName()获取 (源代码阶段)(2) 通过class属性获取(3) 通过对象获取字节码文件对象 3. 获取构造方…

基于深度学习的停车位关键点检测系统(代码+原理)

摘要&#xff1a; DMPR-PS是一种基于深度学习的停车位检测系统&#xff0c;旨在实时监测和识别停车场中的停车位。该系统利用图像处理和分析技术&#xff0c;通过摄像头获取停车场的实时图像&#xff0c;并自动检测停车位的位置和状态。本文详细介绍了DMPR-PS系统的算法原理、…

django websocket实现聊天室功能

注意事项channel版本 django2.x 需要匹配安装 channels 2 django3.x 需要匹配安装 channels 3 Django3.2.4 channels3.0.3 Django3.2.* channels3.0.2 Django4.2 channles3.0.5 是因为最新版channels默认不带daphne服务器 直接用命令 python manage.py runsever 默认运行的是w…

数据库系统-甘晴void学习笔记

数据库系统笔记 计科210X 甘晴void 202108010XXX 教材&#xff1a;《数据库系统概论》第6版 &#xff08;图片来源于网络&#xff0c;侵删&#xff09; 文章目录 数据库系统<br>笔记第一篇 基础篇1 绪论1.1数据库系统概述1.2数据模型1.3数据库系统的结构(三级模式结构…

JSP内置对象:forward动作标记和sendRedirect()方法实现页面跳转的区别

1.forward为服务器跳转&#xff0c;浏览器的地址栏不变&#xff1b; sendRedirect&#xff08;&#xff09;为客户端跳转&#xff0c;浏览器的地址栏改变变新页面的URL。 2.执行到forward标记出现处停止当前JSP页面的继续执行&#xff0c;而转向标记中的page属性指定的页面&am…

k8s的三种发布方式

三种常见的发布方式 应用程序升级面临最大挑战是新旧业务切换&#xff0c;将软件从测试的最后阶段带到生产环境&#xff0c;同时要保证系统不间断提供服务。而最为常见三种发布方式分别为&#xff1a;蓝绿发布&#xff0c;灰度发布和滚动发布。 三种发布方式的最终目的都是为了…

12 月 NFT 市场动态:强劲增长塑造年终趋势

作者&#xff1a;stellafootprint.network 数据来源&#xff1a;NFT Research 12 月加密货币和 NFT 领域出现了显著的上涨趋势&#xff0c;比特币和以太坊价格的大幅上涨标志着市场的复苏。与此同时&#xff0c;NFT 领域的交易量飙升&#xff0c;独立用户&#xff08;钱包&am…

508基于51单片机的火灾检测与报警系统设计

基于51单片机的火灾检测与报警系统设计[proteus仿真] 火灾检测与报警系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个基于51单片机的火灾检测与报警系统设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 …

【开源硬件篇】STM32F103C8T6核心板

STM32F103C8T6核心板 文章目录 STM32F103C8T6核心板一、STM32F103C8T6芯片1.1 STM32F103C8T6简介1.2 芯片引脚说明 二、去耦电路2.1 原理图设计2.2 原理分析2.2.1 结论2.2.2 去耦效果图2.2.3 放置距离问题2.2.3 放置位置问题 2.3 PCB设计示例 三、晶振电路3.1 原理图设计3.2 原…

龙芯+RT-Thread+LVGL实战笔记(29)——电子琴弹奏

【写在前面】临近期末,笔者工作繁忙,因此本系列教程的更新频率有所放缓,还望订阅本专栏的朋友理解,请勿催更。笔者在此也简要声明几点: 有些硬件模块笔者并没有,如LED点阵、压力传感模块、RFID模块等,因此这些模块的相关任务暂时无法给出经过验证的代码。其实,教程进行…

uniapp地图兼容小程序和APP(高德地图),点击marker并弹框详情

1.uniapp地图页面兼容小程序和APP 2.小程序使用map组件APP使用高德地图 3.点击定位按钮地图自动移动到定位点 4.APP地图逻辑是视图层交互使用renderjs 5.点击地图marker弹框详情 6.全部代码 <template><page-meta :page-style"overflow:(show?hidden:visible)&…

视频号小店怎么上架商品?实操分享,干货满满!

我是电商珠珠 视频号小店从22年7月到现在也不过才发展了一年&#xff0c;它的风口才刚刚开始。 平台为了吸引商家入驻&#xff0c;会将大量红利向商家倾斜&#xff0c;只要把握住风口&#xff0c;就会很快起飞。 视频号小店对于很多人来说&#xff0c;都是新平台&#xff0c…

P9 视频码率及其码率控制方式

前言 从本章开始我们将要学习嵌入式音视频的学习了 &#xff0c;使用的瑞芯微的开发板 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《Linux C应用编程&#xff08;概念类&#xff09;_C…