1.YOLOv8的基本原理
YOLOv8是一种前沿的目标检测技术,它基于先前YOLO版本在目标检测任务上的成功,进一步提升了性能和灵活性,在精度和速度方面都具有尖端性能。在之前YOLO 版本的基础上,YOLOv8 引入了新的功能和优化,使其成为广泛应用中各种物体检测任务的理想选择。主要的创新点包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行。YOLO各版本性能对比:
每个模型的准确率如下:
开源网址:https://github.com/ultralytics/ultralytics
2.PyQt5简介
- PyQt5 是 Digia的一套 Qt5 应用框架与 python 的结合,同时支持 python2.x和 python3.x。这里使用的是Python 3.x。Qt库由 Riverbank Computing开发,是最强大的GUI库之一 。
- PyQt5 是由一系列 Python 模块组成。超过 620 个类,6000 函数和方法。能在诸如 Unix、Windows 和Mac OS 等主流操作系统上运行。
- PyQt5 有两种证书,GPL和 商业证书。
PyQt5 的官网链接:https://riverbankcomputing.com/news
当然也可以在 Python 这里查看教程:https://pythonspot.com/pyqt5/
2.1 window 平台安装:
PyQt5 有两种安装方式,一种是从官网下载源码安装,另外一种是使用 pip 安装。
#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的具体内容如下:
#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】,代码如下:
#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无人机航拍太阳能电池板检测系统的部分内容,由于博主能力有限,难免有疏漏之处,希望小伙伴能批评指正。关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!