基于yolov5的PCB板缺陷检测(附有详细步骤通俗易懂版)

PCB板缺陷检测

模型训练

在初学的时候,可能不太了解到底模型训练是个什么流程,到底是什么意思。其实也很简单,就是我们用一个框架(如pytorch,tensorflow等)通过一定的算法如yolov5,对一定的数据集进行训练后等形成一个可以直接调用模型(例如用pytorch训练的模型通常是.pt或.pth文件,当然也有一些其他的,这就是看具体的需要了),通过一定的方法调用模型后(通常是简单的.load()语句),直接输入数据就可以按照一定的格式输出训练后的数据。

选择数据集

PCB缺陷检测我查到的有两种数据集,一种是deepPCB,另一种是北京大学智能机器人开放实验室数据,因为北京大学的数据已经处理好了,不用我们再处理了,所以我们在本次实验采用的是北京大学的数据,数据内容如下:
在这里插入图片描述
我们可以打开Annotations文件夹,然后再随便打开一个缺陷类型的文件,我们发现都是一些xml的文件,如下图所示:
在这里插入图片描述
这就是已经标注好的文件,用xml文件的形式保存,这个文件是在软件上手动标注后导出的文件,我们需要通过一定的处理,将标注信息提取出来。而这一步北京大学的数据集也替我们做了,连处理都不用了,我们可以看一下labels文件夹,内容如下:
在这里插入图片描述
这一个一个的txt文件就是我们训练需要的标签文件,我们可以随便打开一个,内容如下:
在这里插入图片描述
一共是三行五列数据,开头的0表示缺陷的类型(这里的0~5表示5种缺陷类型),后面的四列表示的是图像的一些其他的信息。三行表示这张图片总共有三个缺陷的地方。

划分训练集

上一步中,我们已经有了初步的数据集,下一步我们要将数据集处理成yolo可以处理的形式,什么意思呢,就是只要我们将yolo模型中的数据集位置改成自己的,就可以直接训练。yolo的数据集如下图所示:
在这里插入图片描述
先建立一个主文件夹datasets
在这里插入图片描述
然后在里面建立两个文件夹,一个labels,一个images
在这里插入图片描述
images里面建立两个文件夹 train和val
在这里插入图片描述
labels里面也建立两个文件夹train,val
然后,两个文件夹里的train和val放置对应的文件就行,images里面放图片,labels里面放txt文件,其他就不用管了,因为这个数据集的iamge和txt的文件名称已经对应起来了。另外要注意的是images和labels里面的文件要对应起来,一定是images的train里面放什么图片,labels的train里面就放什么txt文件,val也是如此。train和val的比例这个可以根据需求设置,我这里是设置的8:2。这样数据集就算完成了。

环境配置

首先需要下载yolo模型:yolo下载
下载并解压完成后,我们需要配置文件,打开yolo的那个文件,找到一个requirements文件,如下图:
在这里插入图片描述
这个里面就是运行yolo所需要的配置,我们在我们的python的那个终端界面中或者是anaconda的终端窗口中找到自己准备运行的环境,运行下面的语句:

pip install -r requirements.txt

这样我们就下载了所有的依赖包

模型训练

我们需要改变这个模型的几个地方
在/yolov5-master/data下面新建一个pcb.yaml,如下图:
在这里插入图片描述
内容如下:

# PCB data

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: D:/AI_PCB_test/datasets #改为自己的数据集的位置
train: images/train # train是txt文件
val: images/val # labels是目录文件

nc: 6  # number of classes

names: ['missing_hole', 'mouse_bite', 'open_circuit', 'short', 'spur', 'spurious_copper']

我们可以从上面看到,这里的train和val都是images的,但是,训练的代码的内部应该是会调用到labels里面的,所以,我们还是要严格的按照上面数据集划分那样来分。
再一个就是修改/yolov5-master/models/yolov5s.yaml(这里取决于自己,我们在这里选择的是small的模型)中修改一个内容,如下:在这里插入图片描述
将这个nc改为6,表示有6种分类
最后就是对train.py的修改
首先找到下面的一个函数:
在这里插入图片描述
然后将下面三个对应的参数修改即可:

parser.add_argument('--weights', type=str, default='yolov5s.pt', help='initial weights path')
parser.add_argument('--cfg', type=str, default='models/yolov5s.yaml', help='model.yaml path')
parser.add_argument('--data', type=str, default='data/pcb.yaml', help='dataset.yaml path')
#注意,第三行中的pcb.yaml如果修改的不是这个名字,换成自己的名字就行

完成了上面的操作,所有的预备条件就完成了,如果用自己的电脑训练的话,直接运行train.py文件就可以了,因为我的电脑配置相对来说不是很好,所以我直接租用服务器来训练,这里的我也建议租用服务器来训练,这里是一个服务器的地址:AutoDL,一方面是服务器的训练速度很快,另一方面训练这样的大模型可能会在电脑上加点东西,还不知道在哪删除,所以建议在服务器上训练。当然自己电脑性能很好的话在自己电脑上训练也完全没有问题。如果不知道AutoDL如何使用的话去看一下上面的说明,很简单的,类似于anaconda的使用。(如果实在不会使用的话,可以私聊我)。

如果上面的操作完成后,只需要在服务器上配置环境(同样是刚才那个pip语句),然后直接训练即可。

调用模型

训练完成后,我们在\yolov5-master1\yolov5-master\runs\train\exp\weights中好到best.pt这个文件,这就是我们训练好的模型,当然有可能有很多的exp文件,我们找一下,一定会有一个exp文件中有这个模型
在这里插入图片描述
这些图片都是对模型的评估,可以根据自己的需要对图片进行分析。

如果是在服务器上训练的,建议将整个yolo文件下载下来,因为这个模型的位置并不是随便的,在yolo的代码中可能是已经定义好的,否则直接调用会出现奇怪的bug。下面是调用的一个模板,建议直接粘贴复制:

import os
import torch
import torchvision
import torchvision.models as models
from torchvision import transforms
from PIL import Image
import sys
sys.path.insert(0, './yolov5-master')#这句话一定要加,因为不加会奇怪的错误
#载入本地模型
model = torch.hub.load('D:\yolov5-master', 'custom', 'D:\AI_PCB_test\yolov5-master\\runs\\train\\exp9\\weights\\best.pt', source='local')
#载入图片并显示
img = 'D:\\AI_PCB_test\\PCB_DATASET\\images\\Open_circuit\\12_open_circuit_10.jpg'
result = model(img)
result.show()

我是将yolov5-master放到AI_PCB_test下,然后运行了上面代码既可调用模型,模型调用结果如下图所示:
在这里插入图片描述
为什么这么强调文件的位置,因为我在运行的过程中出现了很多的错误,可以多试一下,毕竟这是最后一步,还是这一步完成了就大功告成了。
最后还要注意的是,模型预测的图片应该会最终存入runs/dectect下面,自己不需要创建,如果没有的话,他会自动创建,在调用图片的时候需要注意

图形化界面

用pyqt5或其他的都行,这一步就比较简单了,网上搜一下教程即可。

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

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

相关文章

Linux第18步_安装“Ubuntu系统下的C语言编GCC译器”

Ubuntu系统没有提供C/C的编译环境,因此还需要手动安装build-essential软件包,它包含了 GNU 编辑器,GNU 调试器,和其他编译软件所必需的开发库和工具。本节用于重点介绍安装“Ubuntu系统下的C语言编译器GCC”和使用。 1、在安装前…

Flume实时读取本地/目录文件到HDFS

目录 一、准备工作 二、实时读取本地文件到HDFS (一)案例需求 (二)需求分析 (三)实现步骤 三、实时读取目录文件到HDFS (一)案例需求 (二)需求分析 …

竞赛保研 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的人脸表情识别 该项目较…

特征工程(特征提取数据预处理)

一、特征提取 在房价模型的例子中,我们提取房子的长度(frontage)和宽度(depth)作为特征之一。并得到初步的特征方程: 然而我们知道,房屋面积可以表示为:。用土地面积作为独立特征可…

09.简单工厂模式与工厂方法模式

道生一,一生二,二生三,三生万物。——《道德经》 最近小米新车亮相的消息可以说引起了不小的轰动,我们在感慨SU7充满土豪气息的保时捷设计的同时,也深深的被本土品牌的野心和干劲所鼓舞。 今天我们就接着这个背景&…

web左侧伸缩菜单栏/导航栏

效果展示&#xff1a; 百度网盘链接下载全部资源&#xff1a; http://链接&#xff1a;https://pan.baidu.com/s/1ZnKdWxTH49JhqZ7Xd-cJIA?pwd4332 提取码&#xff1a;4332 html/JQuery代码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head&g…

垂直领域大模型——文档图像大模型的思考与探索

〇、前言 12月1日&#xff0c;2023中国图象图形学学会青年科学家会议在广州召开。超1400名研究人员齐聚一堂&#xff0c;进行学术交流与研讨&#xff0c;共同探索促进图象图形领域“产学研”交流合作。 大会上&#xff0c;合合信息智能技术平台事业部副总经理、高级工程师丁凯博…

UE5 C++(十一)— 碰撞检测

文章目录 代理绑定BeginOverlap和EndOverlapHit事件的代理绑定碰撞设置 代理绑定BeginOverlap和EndOverlap 首先&#xff0c;创建自定义ActorC类 MyCustomActor 添加碰撞组件 #include "Components/BoxComponent.h"public:UPROPERTY(VisibleAnywhere, BlueprintRea…

UG装配-爆炸图

当我们将零件装配成总成的时候&#xff0c;通常需要绘制爆炸图来说明总成零件组成&#xff0c;需要用到爆炸图命令&#xff0c;首先点击新建爆炸&#xff0c;然后为爆炸图命名 然后我们可以选择编辑爆炸或者自动爆炸&#xff1a; 编辑爆炸是通过手动的方式选择部件&#xff0c…

CentOS 7 基于官方源码和openssl制作openssh 9.6 rpm包(含ssh-copy-id) —— 筑梦之路

之前写了一篇&#xff1a; CentOS 7 制作openssh 9.6 rpm包更新修复安全漏洞 —— 筑梦之路_升级openssh9.6-CSDN博客 有好几个网友反馈&#xff0c;ssh-keygen生成密钥存在问题&#xff0c;之前的rsa \ dsa加密算法用不了&#xff0c;因此写了一篇&#xff1a; 关于openssh…

华为OD机试 - 反射计数(Java JS Python C)

题目描述 给定一个包含 0 和 1 的二维矩阵。 给定一个初始位置和速度,一个物体从给定的初始位置出发,在给定的速度下进行移动,遇到矩阵的边缘则发生镜面发射。 无论物体经过 0 还是 1,都不影响其速度。 请计算并给出经过 t 时间单位后,物体经过 1 点的次数。 矩阵以左…

JVM,Java堆区、新生代、老年代,创建对象的内存分配,分代垃圾收集思想、堆区产生的错误

JVM堆区 堆&#xff08;Heap&#xff09;堆区的组成&#xff1a;新生代老年代堆空间的大小设置创建对象的内存分配堆区的分代垃圾收集思想堆区产生的错误 堆&#xff08;Heap&#xff09; ​ Heap堆区&#xff0c;用于存放对象实例和数组的内存区域 ​ Heap堆区&#xff0c;是…

如何写一篇专利?格式与要求

如何写一篇专利&#xff1f;格式与要求 知识产权专利类型发明实用新型外观设计 专利的审查专利授权的标准新颖性创造性实用性 不授予专利的情形 专利的挖掘专利五书权力要求书说明书技术领域背景技术发明内容附图说明具体实施方式 说明书附图说明书摘要摘要附图 知识产权 市场…

使用 Windows 调试器查找 GDI 泄漏

文章目录 介绍为什么!htrace命令无法使用?总结附:GDI使用的几个注意点:本文将带您了解如何使用 Windows 调试器跟踪 GDI 句柄泄漏,并了解如何修复它们。 介绍 本文是有关使用 Windows 调试器查找和修复 GDI 句柄泄漏的演练。Windows调试器应该是最后的手段,首先在整个代…

基于sigma-delta和MASHIII调制器的频率合成器simulink建模与仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 Sigma-Delta调制器原理 4.2 数学模型 4.3 噪声整形 4.4 MASH III调制器原理 4.5 基于Sigma-Delta和MASH III的频率合成器 5.算法完整程序工程 1.算法运行效果图预览 其误差当系统进…

ELK的搭建—Elasticsearch-8.11.3的安装及集群的搭建

es的安装及其集群的搭建 一、Elasticsearch服务的安装部署1. Elasticsearch的rpm包下载2. 安装Elasticsearch服务3. 设置系统资源及内存大小分配4. Elasticsearch的配置修改 二、建立Elasticsearch集群1. 安装Elasticsearch主节点server12. 配置server1&#xff0c;及配置文件的…

python实现目录和文件管理

目录 一&#xff1a;模块介绍&#xff1a; 二&#xff1a;目录创建 三&#xff1a;目录删除 四&#xff1a;目录复制 五&#xff1a;目录移动 六&#xff1a;文件创建 七&#xff1a;文件删除 八&#xff1a;文件读取 一&#xff1a;模块介绍&#xff1a; Python的os和…

《2024 AIGC 应用层十大趋势白皮书》:近屿智能OJAC带您一起探索AI未来

Look&#xff01;&#x1f440;我们的大模型商业化落地产品&#x1f4d6;更多AI资讯请&#x1f449;&#x1f3fe;关注Free三天集训营助教在线为您火热答疑&#x1f469;&#x1f3fc;‍&#x1f3eb; 近日国际知名咨询机构IDC发布《2024 AIGC 应用层十大趋势白皮书》的发布&am…

熟悉HBase常用操作

1. 用Hadoop提供的HBase Shell命令完成以下任务 (1)列出HBase所有表的相关信息,如表名、创建时间等。 启动HBase: cd /usr/local/hbase bin/start-hbase.sh bin/hbase shell列出HBase所有表的信息: hbase(main):001:0> list(2)在终端输出指定表的所有记录数据。 …

音频文件元数据:批量修改技巧,视频剪辑高效修改元数据的方法

随着数字媒体技术的快速发展&#xff0c;音频文件已成为日常生活中的重要组成部分。无论是音乐、语音还是其他音频内容&#xff0c;元数据都是描述这些文件的重要信息。下面来看下云炫AI智剪如何批量修改音频文件元数据&#xff0c;在视频剪辑中高效修改元数据的方法。 下面来看…