当前位置: 首页 > news >正文

【2023-Pytorch-检测教程】手把手教你使用YOLOV5做电线绝缘子缺陷检测

随着社会和经济的持续发展,电力系统的投资与建设也日益加速。在电力系统中,输电线路作为电能传输的载体,是最为关键的环节之一。而绝缘子作为输电环节中的重要设备,在支撑固定导线,保障绝缘距离的方面有着重要作用。大多数高压输电线路主要架设在非城市内地区,绝缘子在输电线路中由于数量众多、跨区分布,且长期暴露在空气中,受恶劣自然环境的影响,十分容易发生故障。随着大量输电工程的快速建设,传统依靠人工巡检的模式,已经越来越难以适应高质量运维的要求。随着国网公司智能化要求的提升,无人机技术的快速应用,采取无人机智能化巡视,能够大幅度减少运维人员及时间,提升质量,因此得到快速发展。

深度学习技术的大量应用,计算机运算性能的不断提高,为无人机准确识别和定位绝缘子,实时跟踪拍摄开辟了新的解决途径。本文对输电线路中绝缘子进行识别及定位,利用深度学习技术采取基于YOLOv5 算法的目标检测手段,结合绝缘子数据集的特点,对无人机拍摄图片进行训练,实现对绝缘子精准识别和定位,大幅提升无人机巡检时对绝缘子设备准确跟踪、判定的效率,具有十分重要的应用效果。

废话不多说,咱们先看两张实际效果。

val_batch0_pred

注意事项

  1. 尽量使用英文路径,避免中文路径,中文路径可能会导致代码安装错误和图片读取错误。
  2. pycharm运行代码一定要注意左下角是否在虚拟环境中。
  3. 库的版本很重要,使用本教程提供的代码将会事半功倍

遇到解决不了的问题可以通过私信(QQ:3045834499)联系我,粉丝儿朋友远程调试该项目(包含数据集和训练好的三组模型)仅需99个圆子。

前期准备

项目下载地址: YOLOV5电线绝缘子缺陷检测数据集+代码+模型+教学视频+参考论文资源-CSDN文库

电脑设置

大部分小伙伴使用的电脑一般都是windows系统,在windows系统下跑代码,难免会遇到各种各样的bug,首先是编码问题,为了防止代码在运行过程中,出现编码错误,我们首先要将我们电脑的语言设置为utf-8格式,具体如下。首先在搜索框搜索语言,点击这里。

image-20230314162708618

找到管理语言设置。

image-20230314162736950

勾选utf-8即可。

image-20230314162809457

另外有的电脑初始设置的时候内存是由电脑自行分配的,很可能在运行训练代码的时候出现显存溢出的情况,为了防止该情况的出现,我们需要在高级系统设置中对虚拟内存进行设置,如下。

首先打开高级系统设置,点开性能中的设置。

image-20230314163125410

在高级中找到虚拟内存的设置。

g

以d盘为例,这里我们将虚拟内存设置在4G到8G之间,其余操作一样。

image-20230314163343142

其他盘也设置完成之后,点击确定之后按照电脑提示重启即可。

相关软件安装

  • Nvidia驱动安装(可选)

    首先是驱动的安装,这个小节主要是针对电脑带有Nvidia显卡的小伙伴,如果你的电脑没有Nvidia显卡,你直接跳过就可以了,你可以通过右下方的任务栏判断是是否具有这个显卡,如果是笔者这里的绿色小眼睛图标,说明你是具有Nvidia显卡的。

    image-20230314163712808

    驱动下载的地址为:官方驱动 | NVIDIA

    注意请按照你电脑具体的型号来选择驱动文件,不清楚的可以通过设备管理器来查看你显卡的具体型号。

    image-20230314163843861

    image-20230314164934119

    下载exe文件之后,直接下一步下一步按照默认安装就好,注意这里最好按照默认目录安装,否则可能导致安装失败的情况如下,安装完毕之后重启电脑,在命令行中输入nvidia-smi,如果正常输出显卡的信息说明显卡驱动安装已经成功。

    image-20230314164556374

    另外,这里多叭叭两句。

    很多的远古教程会教你去安装cuda和cudnn,这个过程非常麻烦,并且需要你注册nvidia的账户,由于众所周知的原因,账户注册就很繁琐。其实,在新版本的驱动安装中,就已经自带最新版本的cuda,比如我上图所示的在笔者驱动安装完毕之后已经自带了12.0的cuda,cuda这个东西是向下兼容的,后续的cudnn那些我们直接通过anaconda来安装就可以了,这样真的省心很多。

  • Anaconda安装

    conda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同版本的软件包及其依赖,并能够在不同的环境之间切换。我强烈推荐你使用他,他的作用类似于java中的maven和我们平时使用的虚拟机,他能够保证的项目之间互相是隔离的。举个简单的例子,如果你同时有两个项目,你一个使用的pytorch1.8,一个用的是pytorch1.10,这样一个环境肯定就不够了,这个时候anaconda就派上大用场了,他可以创建两个环境,各用各的,互不影响。

    Anaconda有完全版本和Miniconda,其中完整版太臃肿了,我这边推荐使用miniconda,下载地址在:Index of /anaconda/miniconda/ | 北京外国语大学开源软件镜像站 | BFSU Open Source Mirror

    下滑到最下方,点击这个版本的下载即可。

    image-20230314165429511

    同样的,下载之后安装即可,注意不要安装在C盘!!!,另外,添加到系统路径这个选项也请务必选上,后面使用起来会带来很多便捷,并且这里的安装位置请你一定要记得,后面我们在Pycharm中将会使用到。

    image-20230314165627756

  • Pycharm安装

    OK,Anaconda安装完成之后,我们还需要一个编辑器来写代码,这里推荐大家使用Pycharm,Pycharm有专业版和社区版,社区版是免费的,专业版如果你有教育邮箱的话也可以通过教育邮箱注册账户来使用,但是社区版的功能已经够绝大多数小伙伴来用了,Pycharm的下载地址在:Download PyCharm: Python IDE for Professional Developers by JetBrains

    image-20230314170220451

    注意也是安装的时候不要安装在c盘,并且安装过程中这些可选的选项要勾上。

    image-20230314170445393

    完成之后,比如我们用pycharm打开一个项目,在新版本的下方会出现命令行无法使用的情况。请使用管理员模型打开powershell。

    image-20230314171029040

    然后执行执行指令set-ExecutionPolicy RemoteSigned,输入Y然后enter完成即可。

    image-20230314171244840

    另外,在Pycharm的右下方是表示的是你所处的虚拟环境,这里先简单说下在pycharm中如何使用anaconda中创建的虚拟环境。

    image-20230314171639225

    点击ok之后,右下角出现你的虚拟环境名称就表示成功了。

    image-20230314171911330

以上这些步骤完成之后,恭喜你,差不多一半的工作就完事了,剩下无非就是根据不同的项目来配置环境和执行代码了。

嗷,对这里我们也说一下,如何在Pycharm中选Anaconda的虚拟环境。

环境配置

OK,来到关键环境配置的部分,首先大家下载代码之后会得到一个压缩包,在当前文件夹解压之后,进入CMD开始我们的环境配置环节。

image-20230315150456715

为了加快后期第三方库的安装速度,我们这里需要添加几个国内的源进来,直接复制粘贴下面的这些指令到你的命令行即可。

conda config --remove-key channels
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes
pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple

执行完毕大概是下面这个样子,后面你就可以飞速下载这些库了。

image-20230315150835331

创建虚拟环境

首先,我们需要根据我们的项目来创建一个虚拟环境,通过下面的指令创建并激活虚拟环境。

我们创建一个Python版本为3.8.5,环境名称为yolo的虚拟环境。

conda create -n yolo python==3.8.5
conda activate yolo

image-20230315152037806

切记!这里一定要激活你的虚拟环境,否则后续你的库会安装在基础环境中,前面的小括号表示你处于的虚拟环境。

Pytorch安装

注意Pyotorch和其他库不太一样,Pytorch的安装涉及到conda和cudnn,一般而言,对于30系的显卡,我们的cuda不能小于11,对于10和20系的显卡,一般使用的是cuda10.2。下面给出了30系显卡、30系以下显卡和cpu的安装指令,请大家根据自己的电脑配置自行下载。笔者这里是3060的显卡,所以执行的是第一条指令。

conda install pytorch==1.10.0 torchvision torchaudio cudatoolkit=11.3 # 30系列以上显卡gpu版本pytorch安装指令
conda install pytorch==1.8.0 torchvision torchaudio cudatoolkit=10.2 # 10系和20系以及mx系列的执行这条
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cpuonly # CPU的小伙伴直接执行这条命令即可

安装之后,可以和笔者一样,输入下面的指令测试以下gpu是否可用,如果输出的是true表示GPU是可用的。

image-20230315152204221

其余库安装

其余库的安装就非常简单了,我们通过pip来进行安装,注意这里一定要确保你执行的目录下有requirements.txt这个文件,否则你将会遇到文件找不到的bug,你可以通过dir指令来查看是否有这个文件。

pip install -r requirements.txt

image-20230315152933301

Pycharm中运行

一是为了查看代码方便,二是为了运行方便,这里我们使用Pycharm打开项目,点击这里右键文件夹直接打开项目即可非常方便。

打开之后你将会看到这样的一个界面,其中左侧是文件浏览器,中间是编辑器,下方是一些工具,右下角是你所处的虚拟环境 。

image-20230315153430378

之后,我们就需要为当前的项目选择虚拟环境了,这一步非常重要,有的兄弟配置好了没选环境,你将会遇到一堆奇怪的bug,选环境的步骤如下。

首先点击,添加解释器。

image-20230315153552702

三步走选择我们刚才创建的虚拟环境,点击ok。

image-20230315153636384

image-20230315153728665

之后你可以你可以右键执行main_window.py这个文件,出现下面的画面说明你就成功了。

image-20230315153838054

image-20230315154014173

数据集准备

数据集这里我放在了CSDN中,大家可以执行标注准备数据集,或者使用这里我处理好的数据集,数据集下载之后放在和代码目录同级的data目录下。

image-20230315154210695

数据集打开之后你将会看到两个文件夹,images目录存放图片文件,labels目录存放标签文件。

image-20230315154304336

之后记住你这里的数据集路径,在后面的训练中我们将会使用到,比如笔者这里的F:\new_project\sfid\data\target_sfid

image-20230315154400117

训练和测试

注:这里你可以选择去自己尝试以下,笔者在runs的train目录下已经放了训练好的模型,你是可以直接使用。

下面就是训练的过程,笔者这里已经将数据集和模型的配置文件写好了,你只需要将数据集中的数据路径替换成你的路径,执行go_train.py即可开始训练了。

image-20230315154659234

执行go_train.py文件中,包含三条指令,分别表示yolov5中small模型、medium模型和large模型,比如我这里要训练s模型,我就将其他两个模型训练的指令注释掉就好了。

image-20230315155028259

运行之后,下方会输出运行的信息,这里的红色只是日志信息,不是报错,大家不要惊慌。

image-20230315155258835

以笔者这里的s模型为例,详细含义如下。

image-20230315155441956

图形化程序

最后就是执行我们的图形化界面程序了。

image-20230315155624329

直接右键执行window_main.py执行即可,这里上两章效果图。

image-20230315155809201

image-20230315155840755

相关文章:

【2023-Pytorch-检测教程】手把手教你使用YOLOV5做电线绝缘子缺陷检测

随着社会和经济的持续发展,电力系统的投资与建设也日益加速。在电力系统中,输电线路作为电能传输的载体,是最为关键的环节之一。而绝缘子作为输电环节中的重要设备,在支撑固定导线,保障绝缘距离的方面有着重要作用。大…...

交叉编译(NDK)

文章目录前言Android-NDK使用NDK目录结构主流的Android NDK交叉编译前言 交叉编译是指在一种计算机体系结构上编译和构建应用程序,但是生成的可执行文件和库是针对另一种不同的体系结构,比如ARM、MIPS、PowerPC、x86 等。 常见的交叉编译工具集&#x…...

【数据库】MySQL 解读事务的意义及原则

目录 1.事务的概念 2.为什么要用事物 3.使用 4.事务的原则(ACID) 4.1原子性(Atomicity) 4.2一致性(Consistency) 4.3持久性(Durability) 4.4隔离性(Isolation…...

【Linux】冯诺依曼体系结构

冯诺依曼体系结构一、计算机结构体系来源二、冯诺依曼体系结构三、冯诺依曼体系结构中的数据流动一、计算机结构体系来源 研制电子计算机的想法产生于第二次世界大战期间,主要用来进行弹道计算,在"时间就是胜利"的战争年代,迫切需…...

【小白】git是什么?gitee和git和github的关系?

gitee问题一、git是什么?gitee和git和github的关系?问题二、能不能通俗易懂的说?问题一、git是什么?gitee和git和github的关系? Git是一种版本控制系统,用于管理文件的版本、记录文件的修改历史以及协同开…...

UDS 14229 -1 刷写34,36,37服务,标准加Trace讲解,没理由搞不明白

🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…...

【Android -- 软技能】聊聊程序员的软技能

什么是软技能? 所谓软技能,就是相对于「硬技能」而言的技能,对于程序员来说,「硬技能」就是计算机专业技术能力,软技能则是专业之外的所有技能,包括职业规划能力、处理人际关系能力、专业态度、做事的方式…...

【Java学习笔记】27.Java 抽象类

Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 抽象类除了不能实例化对象…...

Vite4 + Vue3 + vue-router4 动态路由

动态路由,基本上每一个项目都能接触到这个东西,通俗一点就是我们的菜单是根据后端接口返回的数据进行动态生成的。表面上是对菜单的一个展现处理,其实内部就是对router的一个数据处理。这样就可以根据角色权限或者一些业务上的需求&#xff0…...

MS(mbed l432KC)-->速通9个lab详细解析[5]

Exercise5 这次实验我们将正式接触到一个相对来说有点意思并且有点牌面的传感器了----->数码管。数码管是我们生活中非常常见的一种传感器,比如计时器,秒表,以及数字显示大屏幕,其实原理都跟数码管差不多。如果是没有单片机基础的同学,突然一下接触到相对来说比较常见…...

XXE漏洞复现

目录XML基础概念XML数据格式DTD基础定义DTD作用分类DTD实体实体的分类DTD元素XXE漏洞介绍实操如何探测xxe漏洞XML基础 概念 什么是XML 是一种可扩展标记语言 (Extensible Markup Language, XML) ,标准通用标记语言的子集,可以用来标记数据、定义数据类型…...

初识C++需要了解的一些东西(2)

😁关注博主:翻斗花园第一代码手牛爷爷 😃Gitee仓库:牛爷爷爱写代码 目录🌍内联函数🌕内联函数概念🌖内联函数特性🌓auto关键字(C11)🌞类型别名⭐️auto简介☀️auto的使…...

全国程序员薪酬大曝光!看完我酸了····

2023年,随着互联网产业的蓬勃发展,程序员作为一个自带“高薪多金”标签的热门群体,被越来越多的人所关注。在过去充满未知的一年中,他们的职场现状发生了一定的改变。那么,程序员岗位的整体薪资水平、婚恋现状、职业方…...

改进YOLO系列 | CVPR2023最新Backbone | FasterNet 远超 ShuffleNet、MobileNet、MobileViT 等模型

论文地址:https://export.arxiv.org/pdf/2303.03667v1.pdf 为了设计快速神经网络,许多工作都集中在减少浮点运算(FLOPs)的数量上。然而,作者观察到FLOPs的这种减少不一定会带来延迟的类似程度的减少。这主要源于每秒低浮点运算(FLOPS)效率低下。并且,如此低的FLOPS主要…...

Nginx常见用法

一、Niginx是什么? Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Niginx是一款轻量级的web服务器/反向代理器,Nginx是高性能的HTTP和 反向代理的web服务器,处理高并发的能力十分强大&#xff0c…...

MySQL存储引擎和日志管理

MySQL存储引擎和日志管理一、存储引擎的概念1、Myisam的特点2、Myisam表支持 3 种不同的存储格式3、innodb4、死锁5、查看系统支持的存储引擎6、查看表使用的存储引擎7、修改存储引擎8、通过 create table 创建表时指定存储引擎二、日志管理1、错误日志2、通用查询日志3、慢查询…...

Arduino 驱动DS1307时钟模块使用介绍

Arduino 驱动DS1307时钟模块使用介绍 🔖DS1307时钟模块 📍DS1307时钟模块资料 https://pan.baidu.com/s/1mtXruLAktZj7UDhFD54BNw 提取码:d9xh 📋模块简介:DS1307 I2C实时时钟芯片(RTC) 24C32 32K I2C EEPROM存储器 解决DS1307带备用电池不能读写的问题。 充满电后,…...

为什么 Python 没有 main 函数?

众所周知,Python中没有所谓的main函数,但是网上经常有文章提到“ Python的main函数”和“建议编写main函数”。 其实,可能他们是想模仿真正的main函数,但是许多人都被误导(或误解),然后编写了非…...

【无标题】使用Bibtex4word 整理毕业论文参考文献

Bibtex4Word使用一览需要安装和配置的软件texLiveBibtex4word需要安装和配置的软件 texLive 这个就不多说啦,大家自己找教程安装吧,因为我之前装过这一系列所以就不再来一遍了,但是有两条配置需要注意! 添加环境变量 key: BIB…...

19--网络API(java版)

什么是网络API在一个网站里面发起https请求是很常见的,但是,由于微信小程序是腾讯内部的产品,不能直接打开一个外部的链接,例如,您在微信小程序里面无法直接打开网站,但是,在做小程序开发的时候…...

ElasticSearch - 分片内部原理之动态更新索引、近实时搜索、持久化变更、段合并

文章目录01. ElasticSearch 倒排索引是什么?02. ElasticSearch 倒排索引为什么是不可变的?03. ElasticSearch 索引文档原理?04. ElasticSearch 如何动态更新索引?05. ElasticSearch 文档的新增、删除、更新?06. Elasti…...

模拟数据采集卡之ADCTDC 模拟时间/数字转换器组合应用选型指南

简介 产品组合包括一系列多功能时间到数字转换器(TDC)和模数转换器(ADC)。我们的许多客户的应用场景依赖于对飞行时 间(TOF)的测量。该系列产品非常适合用于质谱系统(TOF-MS),光学相干断层扫描(OCT),荧光寿命成像显微镜(FLIM), 时间相关单光子…...

R语言编程基础

文章目录安装运算符判断函数递归安装 根据自己的操作系统,下载R语言环境后,安装,并将安装路径加入到环境变量,即可从命令行进入R环境 >rR version 4.2.2 (2022-10-31 ucrt) -- "Innocent and Trusting" Copyright …...

2023-03-15:屏幕录制并且显示视频,不要用命令。代码用go语言编写。

2023-03-15:屏幕录制并且显示视频,不要用命令。代码用go语言编写。 答案2023-03-15: 使用moonfdd/ffmpeg-go和moonfdd/sdl2-go库来实现屏幕录制并显示视频,大体流程如下: 1.使用libavdevice库中的AVInputFormat&…...

STM32外设-DMA

1. 简介 DMA(Direct Memory Access)—直接存储器存取,是单片机的一个外设,它的主要功能是用来搬数据,但是不需要占用 CPU,即在传输数据的时候, CPU 可以干其他的事情,好像是多线程一样。数据传输支持从外设…...

【面试题】面试官:如果后端给你 1w 条数据,你如何做展示?

最近一位朋友参加阿b的面试,然后面试官问了她这个问题,我问她咋写的,她一脸淡定的说:“虚拟列表。”大厂面试题分享 面试题库前后端面试题库 (面试必备) 推荐:★★★★★地址:前端面…...

第十二届蓝桥杯省赛详解

试题A:空间 1B是8位,32位二进制数占用4B空间,1MB2^10KB2^20B 那么可以存放32位二进制数的个数为256*2^20*8/3267108864 试题B:卡片 分析:因为数据只有2021,所以直接模拟即可 结果为:3181&…...

ssh创建秘钥对

1. 使用ssh-keygen 生成秘钥对 [root6zix89b87qmvuv ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): 按回车键或设置密钥的存储路径 Enter passphrase (empty for no passphrase): 按回车键或设置密钥的存…...

JS中sort()方法返回值?

参考 https://segmentfault.com/q/1010000043489928 精辟解释 就是说 sort() 会修改原数组项的排序,sort() 结束后会返回一个数组结果,这个结果其实就是原数组。并不是说会返回一个新的数组。 原理讲解 JS 分为栈内存和堆内存,栈内存可以…...

07从零开始学Java之如何正确的编写Java代码?

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者前言在上一篇文章中,壹哥带领大家开始编写了第一个Java案例,在我们的cmd命令窗口中输出了”Hello World“这…...

如何利用淘宝建设网站挣钱/微信朋友圈推广软文

工具下载地址: http://www.anysql.net/tools/sqluldr2-non-free-features.html 右侧下载SQLULDR2 分别对应32为,64位的win和Linux平台 安装步骤 1.需要安装oracle_client 2.复制sqluldr2_linux32_10204.bin(64位系统用sqluldr2_linux64_102…...

网站空间怎么登陆/网络推广有前途吗

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼br0 Link encap:Ethernet HWaddr D2:23:4A:E2:84:84inet addr:192.168.1.130 Bcast:192.168.1.255 Mask:255.255.255.0inet6 addr: fe80::d023:4aff:fee2:8484/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX p…...

台州网络优化/2020 惠州seo服务

试题来源:http://www.itmian4.com/forum.php?modviewthread&tid3622&extrapage%3D1 1.升序排列下列数值:(101001)2,(40)10,(23)8,(18)16 解:个人理解,全统一到某一进制,如10进制数,再进行比较…...

wordpress做cms网站/怎么推广网站链接

给定一个包含 n 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4…...

长治网站建设电话/软文广告范文

地下城礼包不断,才在商城上架3款(777、2999、11800)礼包后,体验服8.08又有新礼包“空域之怒海霸主”(19900),上一篇已介绍过,主要是2个新道具的出现,宠物BUFF技能宝珠和装扮跨界石,而一次更新出1个礼包太少…...

如何安装 wordpress/在线培训网站

[mysql] # 设置mysql客户端默认字符集 default-character-setutf8[mysqld] #设置3306端口 port 3306 # 设置mysql的安装目录 basedirI:\数据库\数据库3\mysql-5.7.21-winx64\mysql-5.7.21-winx64 # 设置mysql数据库的数据的存放目录 datadirI:\数据库\数据库3\mysql-5.7.21-w…...