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

news2024/11/15 23:45:27

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或其他的都行,这一步就比较简单了,网上搜一下教程即可。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python笔记07-异常、模块和包

文章目录 异常及捕获方法python模块python包安装第三方包 异常及捕获方法 当检测到一个错误时,Python解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的“异常”, 也就是我们常说的BUG 例如:以r方式打开一个不存在的…

有没有一个完美的葡萄酒饮用温度呢?

我们很多人都有一个简单的冷藏葡萄酒的方法,把白葡萄酒扔进冰箱,在室温下饮用红葡萄酒。虽然这很容易,但会导致红葡萄酒上桌时温度过高,白葡萄酒上桌时温度过低。为了帮助你从你的葡萄酒收藏中获得最长的寿命、香气和风味&#xf…

前端如何结合数据库查看本地头像文件,配置静态资源

由于oss过期了,项目中又需要一个上传头像功能,于是研究了一下上传文件至本地,用java将文件存储到本地的代码好写,但是如何利用前端Vue把我难住了,因为之前存在OSS服务器直接查看就可以了,于是记录本文。 后…

集合框架 Map的常见使用及循环的五种方式

目录 一、Map常见方法使用二、Map循环的五种循环方式方式 一、Map常见方法使用 Java的集合框架中的Map接口表示一组键值对,并提供了各种方法来操作这些键值对。以下是Map接口中常见的方法: 代码示例如下: Testpublic void HashMapTest() {M…

为什么大型服务器要用 Linux 系统?

为什么大型服务器要用 Linux 系统? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!&#xff…

基于JAVA+SpringBoot的咖啡商城

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 随着互联网的普及和发…

JavaWeb实验报告

JavaWeb实验报告 JavaWeb实验报告 2024 年 1 月 7 日 课程名称: JavaWeb 实验名称: 期末作业 班级: 姓名 同组人: 指导教师评定&#xff…

【一文搞定】Linux、Mac、Windows安装Docker与配置教程!

【一文搞定】Linux、Mac、Windows安装Docker与配置教程! 文章目录 【一文搞定】Linux、Mac、Windows安装Docker与配置教程!一、Windows 安装1.1 安装与启用 Hyper-V1.2 安装 WSL1.3 Docker Desktop 官方下载1.4 安装Docker Desktop 二、MacOS 安装2.1 Do…

已解决 | Go Error: redeclared as imported package name 问题

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通Golang》…

杨中科 ASP.NET Core前后端分离开发

一、 前后端分离 1、传统MVC开发模式: 前后端的代码被放到同一个项目中,前端人员负责编写页面的模板,而后端开发人员负责编写控制器和模型的代码并且“套模板”。 缺点: 互相依赖,耦合性强,责任划分不清。 2、主流的“前后端分离…

数据库基本知识2

目录 为保证数据库是可恢复的,登记日志文件时 排他锁 并发操作带来的数据不一致性 数据模型的三要素 数据独立性 为保证数据库是可恢复的,登记日志文件时 为保证数据库是可恢复的,登记日志文件时必须遵循两条原则: 1. 登记的…

Redis Geo:掌握地理空间数据的艺术

欢迎来到我的博客,代码的世界里,每一行都是一个故事 Redis Geo:掌握地理空间数据的艺术 前言Redis Geo基本概念Geo模块的目的工作原理地理坐标系统 GEO的分值1. 经纬度范围2. 二分编码3. Base32编码4. 精度为什么使用Geohash? GEO…

【设计模式】一文理解记住设计模式的原则

目录——阅读所需预计5-10分钟 🎖️前言🎯单一职责原则📣1. 定义💞2. 定义很抽象,咱继续看🎉3. 举几个栗子💞4. 以上栗子出现了一个问题,单一职责的划分究竟可以分多细👉…

计算机毕业设计-----ssm+mysql实现的JavaWeb酒店管理系统

项目介绍 本项目为基于ssmmysql实现的JavaWeb酒店管理系统; 主要功能包括: 管理员登录,收入统计,客房管理,商品管理,客房预订,住宿登记,财务统计,旅客管理,接待对象管理等功能。 环境需要 1.运行环境:最好是java jdk 1.8,我们在这个平台上…

解压方法之一 zip

文章目录 解压方法之一 zip语法参数参考实例仅保存文件名更多信息 解压方法之一 zip … _linux-beginner-zip: Linux zip命令的功能是用于压缩文件,解压命令为unzip。 通过zip命令可以将很多文件打包成.zip格式的压缩包,里面会包含文件的名称、路径、…

#define宏定义的初探

前言&#xff1a; 最基本的#define定义方式 #define可以定义宏&#xff0c;这点相信大家并不陌生&#xff0c;其定义的方式十分简单&#xff0c;给大家随便来一个最简单、最基础的定义方式看看&#xff1a; #include<stdio.h> #define a 3 int main() { printf(&quo…

CSAPP cache lab - Optimizing Matrix Transpose

CSAPP cache lab part B 矩阵转置 矩阵转置是一种操作&#xff0c;它将矩阵的行和列互换位置&#xff0c;即将原始矩阵的行变为转置矩阵的列&#xff0c;将原始矩阵的列变为转置矩阵的行。转置操作可以通过改变矩阵的布局来方便地进行某些计算和分析。 假设有一个mn的矩阵A&…

java回溯算法、最短路径算法、最小生成树算法

回溯算法 回溯算法实际上一个类似枚举的搜索尝试过程&#xff0c;主要是在搜索尝试过程中寻找问题的解&#xff0c;当发现已不满足求解条件时&#xff0c;就“回溯”返回&#xff0c;尝试别的路径。 最短路径算法 从某顶点出发&#xff0c;沿图的边到达另一顶点所经过的路径中…

autodl学术加速

今天使用autodl加载预训练BERT模型失败&#xff0c;在官方文档里面找到了官方给的代理使用方法。 直接在bash输入&#xff1a; 开启学术加速&#xff1a; source /etc/network_turbo取消学术加速&#xff1a; unset http_proxy && unset https_proxy据说是只能访问这…

.pings勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言&#xff1a; 随着科技的发展&#xff0c;网络空间中的威胁也日益猖獗&#xff0c;其中之一就是勒索病毒&#xff0c;而.pings 勒索病毒则是其中的一种。本文将深入介绍.pings 勒索病毒的特征、恢复被其加密的数据文件的方法&#xff0c;并提供预防措施&#xff0c;以保障…