项目中所用到的算法模型和数据集等信息如下:
算法模型:
? ? yolov5
? ? yolov5主要包含以下几种创新:
? ? ? ? 1. 添加注意力机制(SE
、CBAM
、CA
等)
? ? ? ? 2. 修改可变形卷积(DySnake
-主干c3
替换、DySnake-所有c3替换)
数据集:
? ? 网上下载的数据集,详细介绍见数据集介绍部分。
以上是本套代码的整体算法架构和对目标检测模型的修改说明,这些模型修改可以为您的 毕设、作业等提供创新点和增强模型性能的功能 。
如果要是需要更换其他的检测模型,请私信。
注:本项目提供所用到的所有资源,包含 环境安装包、训练代码、测试代码、数据集、视频文件、 界面UI文件
等。
在本文中,我们将详细介绍如何利用深度学习中的YOLOv5算法来实现对PCB板缺陷的检测,并结合PyQt5设计了一个简约而强大的系统UI界面。通过该界面,您可以轻松选择自己的视频文件或图片文件进行检测,并且还能够根据需要替换训练好的yolov5模型,以适应不同的数据检测需求。
我们的系统界面不仅外观优美,而且具备出色的检测精度和强大的功能。它支持多目标实时检测,并允许您自由选择感兴趣的检测目标。
本博文提供了完整的Python程序代码和使用教程,非常适合新入门者参考学习。您可以通过文末的下载链接获取完整的代码资源文件。以下是本博文的目录大致内容:
功能:
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开始安装(可以理解为是一台新电脑,没有任何环境),如果某些步骤已经安装过的可以跳过。下面的安装步骤带有详细的视频讲解和参考博客,一步一步来即可。另外视频中讲解的安装方法是通用的,可用于任何项目
。
按照上面的步骤安装完环境后,就可以直接运行程序,看到效果了。
数据集总共包含下面6个类别,且已经分好 train、val、test
文件夹,也提供转好的yolo
格式的标注文件,可以直接使用。
missing_hole # 漏孔
mouse_bite # 鼠牙洞
open_circuit # 开路
short # 短路
spur # 毛刺
spurious_copper # 杂铜
数据样式如下:
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倍下采样操作。
此代码的训练步骤极其简单,不需要修改代码,直接通过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个样本。
评估步骤同训练步骤一样,执行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站