基于YOLOV8+Pyqt5无人机航拍太阳能电池板检测系统

news/2024/10/18 10:28:01/

1.YOLOv8的基本原理

YOLOv8是一种前沿的目标检测技术,它基于先前YOLO版本在目标检测任务上的成功,进一步提升了性能和灵活性,在精度和速度方面都具有尖端性能。在之前YOLO 版本的基础上,YOLOv8 引入了新的功能和优化,使其成为广泛应用中各种物体检测任务的理想选择。主要的创新点包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行。YOLO各版本性能对比:
在这里插入图片描述
每个模型的准确率如下:
在这里插入图片描述
开源网址:https://github.com/ultralytics/ultralytics

PyQt5_6">2.PyQt5简介

  1. PyQt5 是 Digia的一套 Qt5 应用框架与 python 的结合,同时支持 python2.x和 python3.x。这里使用的是Python 3.x。Qt库由 Riverbank Computing开发,是最强大的GUI库之一 。
  2. PyQt5 是由一系列 Python 模块组成。超过 620 个类,6000 函数和方法。能在诸如 Unix、Windows 和Mac OS 等主流操作系统上运行。
  3. PyQt5 有两种证书,GPL和 商业证书。

PyQt5 的官网链接:https://riverbankcomputing.com/news
当然也可以在 Python 这里查看教程:https://pythonspot.com/pyqt5/

2.1 window 平台安装:

PyQt5 有两种安装方式,一种是从官网下载源码安装,另外一种是使用 pip 安装。

python">#1、安装 PyQt5
pip install PyQt5 -i https://pypi.douban.com/simple
#2、安装 PyQt5-tools
pip install PyQt5-tools -i https://pypi.douban.com/simple

注:这里有个需要注意的地方,PyQt5 版本的不同,安装成功之后,PyQt5 相关文件夹以及目录也会存在一些差异。Mac平台或者其他平台自行百度

3. 数据集准备与训练

该数据集于2024年4月26日格林尼治时间上午8:56通过roboflow.com导出
Roboflow是一个端到端计算机视觉平台,可以帮助您
*在计算机视觉项目上与你的团队合作
*收集和组织图像
*理解和搜索非结构化图像数据
注释和创建数据集
*导出、训练和部署计算机视觉模型
随着时间的推移,使用主动学习来改进你的数据集
对于最先进的计算机视觉训练笔记本,您可以使用此数据集,请访问https://github.com/roboflow/notebooks
要查找超过10万个其他数据集和预训练模型,请访问https://universe.roboflow.com
该数据集包括5699张图像。
pv面板以YOLOv8面向对象检测格式注释。
对每张图像进行如下预处理:
未使用图像增强技术。
由Roboflow用户提供
许可:CC BY 4.0

在这里插入图片描述
在这里插入图片描述
图片数据的存放格式如下,在项目目录中新建datasets目录,同时将检测的图片分为训练集与验证集放入Data目录下。
在这里插入图片描述
同时我们需要新建一个data.yaml文件,用于存储训练数据的路径及模型需要进行检测的类别。YOLOv8在进行模型训练时,会读取该文件的信息,用于进行模型的训练与验证。data.yaml的具体内容如下:

python">#path: ../datasets/roboflowtrain: D:\Solar Panels\Solar Panels\Solar Panels\datasets\image_chips\train\images
val: D:\Solar Panels\Solar Panels\Solar Panels\datasets\image_chips\test\images
test: D:\Solar Panels\Solar Panels\Solar Panels\datasets\image_chips\train\images
# number of classes
nc: 1# Classes
names: ['panels' ]

注:train与val后面表示需要训练图片的路径,建议直接写自己文件的绝对路径。
数据准备完成后,通过调用train.py文件进行模型训练,epochs参数用于调整训练的轮数,batch参数用于调整训练的批次大小【根据内存大小调整,最小为1】,代码如下:

python">#coding:utf-8
from ultralytics import YOLO# 加载模型
model = YOLO("yolov8n.pt")  # 加载预训练模型
# Use the model
if __name__ == '__main__':# Use the modelresults = model.train(data='D:\Solar Panels\Solar Panels\Solar Panels\datasets\image_chips\data.yaml', epochs=250, batch=4)  # 训练模型

4.训练结果评估

在深度学习中,我们通常用损失函数下降的曲线来观察模型训练的情况。YOLOv8在训练时主要包含三个方面的损失:定位损失(box_loss)、分类损失(cls_loss)和动态特征损失(dfl_loss),在训练结束后,可以在runs/目录下找到训练过程及结果文件,如下所示:
在这里插入图片描述

4.1 各损失函数作用说明

  • 定位损失box_loss:预测框与标定框之间的误差(GIoU),越小定位得越准;
  • 分类损失cls_loss:计算锚框与对应的标定分类是否正确,越小分类得越准;
  • 动态特征损失(dfl_loss):DFLLoss是一种用于回归预测框与目标框之间距离的损失函数。在计算损失时,目标框需要缩放到特征图尺度,即除以相应的stride,并与预测的边界框计算Ciou Loss,同时与预测的anchors中心点到各边的距离计算回归DFLLoss。这个过程是YOLOv8训练流程中的一部分,通过计算DFLLoss可以更准确地调整预测框的位置,提高目标检测的准确性。

本文训练结果如下:
在这里插入图片描述
常用PR曲线来体现精确率和召回率的关系,本文训练结果的PR曲线如下。mAP表示Precision和Recall作为两轴作图后围成的面积,m表示平均,@后面的数表示判定iou为正负样本的阈值。mAP@.5:表示阈值大于0.5的平均mAP,可以看到本文模型目标检测的mAP@0.5值为0.987,结果还是不错的。
在这里插入图片描述

5.界面展示

在这里插入图片描述

  • 支持图片、视频及摄像头进行检测,同时支持图片的批量检测
  • 界面可实时显示目标位置、目标总数、置信度、用时等信息;
  • 支持图片或者视频的检测结果保存;

6.检测结果显示

在这里插入图片描述

7.结束语

以上便是博主开发的基于YOLOV8+Pyqt5无人机航拍太阳能电池板检测系统的部分内容,由于博主能力有限,难免有疏漏之处,希望小伙伴能批评指正。关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!


http://www.ppmy.cn/news/1446928.html

相关文章

C#调用skiasharp实现绘制并拖拽图形

SkiaSharp是基于.net的跨平台二维图形库,封装的谷歌的Skia库,SkiaSharp支持在以下平台或运行时中使用,能够在图片中绘图,也提供控件在Winform、WPF等使用。本文学习skiasharp在Winform的基本用法,并参照参考文献5实现绘…

类和对象【三】析构函数和拷贝构造函数

文章目录 析构函数析构函数的定义析构函数的作用主要作用次要作用 析构函数的特点 拷贝构造函数拷贝构造函数的定义拷贝构造函数的作用主要作用次要作用 拷贝构造函数的特点浅拷贝和深拷贝浅拷贝深拷贝 拷贝构造函数的调用场景 析构函数 析构函数的定义 析构函数(destructor) …

Systemback Ubuntu14.04 制作自定义系统ISO镜像

工作需要,要基于ubuntu自定义一些编译环境并将自己配置好的ubuntu做成镜像。 硬件准备 ​ 为保证能够顺利完成系统iso镜像的制作与系统还原,推荐准备一个较大容量的U盘或者移动固态硬盘,同时确保自己的Ubuntu系统还有比较大的可用空间。 1 S…

对话访谈——五问RAG与搜索引擎:探索知识检索的未来

记一次关于RAG和搜索引擎在知识检索方面的对话访谈,针对 RAG 与传统搜索引擎的异同,以及它们在知识检索领域的优劣势进行了深入的探讨。 Q:传统搜索引擎吗,通过召回-排序的两阶段模式,实现搜索逻辑的实现,当前RAG技术也…

IP模块——计算机网络

IP模块在计算机网络中通常指的是处理互联网协议(Internet Protocol,简称IP)的部分,它负责网络中的数据包的发送和接收。IP是一种无连接的协议,意味着它不需要建立持久的连接才能在网络中传输数据。IP模块的主要任务包括…

机器学习:深入解析SVM的核心概念【一、间隔与支持向量】

直接阅读原始论文可能有点难和复杂,所以导师直接推荐我阅读周志华的《西瓜书》!!然后仔细阅读其中的第六章:支持向量机 间隔与支持向量 **问题一:什么叫法向量?为什么是叫法向量**什么是法向量?…

5.Labview簇、变体与类(下) -- 项目与Labview类的使用

本文介绍Labview类的使用,在Labview中,何为类?应该如何理解?具体有什么应用场景? 本文基于Labview软件,讲解了类函数的使用方法和场景,从理论上讲解其数据流的底层概念,从实践上建立…

vue3、element-plus递归实现动态菜单

vue3、element-plus递归实现动态菜单 使用场景:动态菜单为什么使用递归递归在动态菜单中的实现 使用场景:动态菜单 动态菜单是指菜单项的数量和层次结构可能是动态的,通常来自后端或用户输入。这些菜单的特征包括: 多层嵌套&…