【YOLO 系列】基于YOLOV8的智能花卉分类检测系统【python源码+Pyqt5界面+数据集+训练代码】

前言:

花朵作为自然界中的重要组成部分,不仅在生态学上具有重要意义,也在园艺、农业以及艺术领域中占有一席之地。随着图像识别技术的发展,自动化的花朵分类对于植物研究、生物多样性保护以及园艺爱好者来说变得越发重要。为了提高花朵分类的效率和准确性,我们启动了基于YOLO V8的花朵分类智能识别系统项目。该项目利用深度学习技术,通过分析花朵图像,自动识别并分类不同种类的花朵,为用户提供一个高效的花朵识别工具。

通过对102种类别的花朵数据集进行深入分析和精确标注,我们训练了YOLO V8模型,使其能够准确识别和分类各种花朵。这一系统能够处理高质量的图像数据,提供准确的分类结果,即使在花朵形态多变和环境复杂的情况下,也能保持高准确度。

基于此项目,设计了一个使用Pyqt5库来搭建页面展示系统。本系统支持的功能包括训练模型的导入、初始化;置信度与IOU阈值的调节、图像上传、检测、可视化结果展示、结果导出与结束检测;视频的上传、检测、可视化结果展示、结果导出与结束检测;摄像头的上传、检测、可视化结果展示与结束检测;已检测目标信息列表、位置信息;以及推理用时。本博文提供了完整的Python代码和使用教程,适合新入门的朋友参考,完整代码资源文件请转至文末的下载链接。

优势:

  1. 多种类识别:系统能够识别102种不同种类的花朵,覆盖了广泛的花卉种类。

  2. 高准确性:YOLO V8模型经过专门训练,提高了对花朵特征的识别准确度。

  3. 实时性:系统能够快速处理图像数据,提供实时的花朵分类结果,适用于需要快速响应的应用场景。

  4. 鲁棒性:即使在花朵姿态多变、环境复杂的情况下,系统也能保持较高的识别率。

  5. 用户友好:系统界面简洁直观,易于用户操作和理解分类结果。

应用场景:

  1. 植物研究:系统可以辅助植物学家和研究人员快速识别和分类植物,促进植物分类学的研究。

  2. 生物多样性保护:在自然保护区和生态调查中,系统可以帮助监测和记录不同种类的花朵,评估生物多样性。

  3. 园艺应用:为园艺爱好者和专业人士提供花朵识别工具,帮助他们更好地了解和照顾植物。

  4. 农业管理:在农业生产中,系统可以用于识别和分类作物花朵,为作物管理提供信息支持。

  5. 教育工具:作为教育工具,帮助学生学习和了解不同种类的花朵,增强自然观察能力。

  6. 旅游和自然观察:在旅游和自然观察活动中,系统可以帮助游客识别遇到的花卉,增加活动的趣味性和教育性。

通过本项目,我们期望能够为花朵分类领域带来创新性的技术支持,提高分类的效率和准确性,为植物学研究、生物多样性保护和园艺实践提供有力的工具。


一、软件核心功能介绍及效果演示

软件主要功能

  1. 支持图片、图片批量、视频及摄像头进行检测,同时摄像头可支持内置摄像头和外设摄像头;

  2. 可对检测结果进行单独分析,并且显示单个检测物体的类别、置信度等;

  3. 支持图片、视频及摄像头的结果保存,将检测结果保持为excel文件;

界面参数设置说明

 

  1. 标签4 摄像头源/相机/网络源;

  2. 标签5 显卡选择:在进行推理时是否使用显卡,默认勾选(使用显卡);

  3. 标签6 训练好的模型:最终要进行推理的模型,一般选择最优的一个模型;

视频演示

智能花卉分类检测系统

图片检测演示

  1. 点击打开图片按钮,选择需要检测的图片,或者点击打开文件夹按钮,选择需要批量检测图片所在的文件夹,操作演示如下:

  2. 点击表格中的指定行,界面会显示该行表格所写的信息内容。

视频检测演示

  1. 点击视频按钮图标,打开选择需要检测的视频,在点击开始运行会自动显示检测结果。再次点击停止按钮,会停止检测视频。

  2. 点击表格中的指定行,界面会显示该行表格所写的信息内容。

摄像头检测演示

  1. 在选择相机源中输入需要检测的摄像头(可以是电脑自带摄像头,也可以是外接摄像头,视频流等方式),然后点击摄像头图标来固定选择的推理流方式,最后在点击开始运行即可开始检测,当点击停止运行时则关闭摄像头检测。

  2. 点击表格中的指定行,界面会显示该行表格所写的信息内容。

检测结果保存

点击导出数据按钮后,会将当前选择的图片【含批量图片】、视频或者摄像头的检测结果进行保存为excel文档,结果会存储在output目录下。

环境搭建

创建专属环境

conda create -n yolo python==3.8

激活专属环境

conda activate yolo

安装torch-GPU库

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "torch-2.0.1+cu118-cp38-cp38-win_amd64.whl"

安装torchvision-GPU库

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple "torchvision-0.15.2+cu118-cp38-cp38-win_amd64.whl"

安装ultralytics库

pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple

测试环境

yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'

此时就表明环境安装成功!!!

安装图形化界面库 pyqt5

pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple 
pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple

算法原理

YOLOv8是一种前沿的深度学习技术,它基于先前YOLO版本在目标检测任务上的成功,进一步提升了性能和灵活性,在精度和速度方面都具有尖端性能。在之前YOLO 版本的基础上,YOLOv8 引入了新的功能和优化,使其成为广泛应用中各种物体检测任务的理想选择。主要的创新点包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行。

YOLOv8目标检测算法具有如下的几点优势:

(1)更友好的安装/运行方式;

(2)速度更快、准确率更高;

(3)新的backbone,将YOLOv5中的C3更换为C2F;

(4)YOLO系列第一次使用anchor-free;

(5)新的损失函数。

YOLO各版本性能对比

网络结构

YOLOv8模型的整体结构如下图所示:

YOLOv8与YOLOv5模型最明显的差异是使用C2F模块替换了原来的C3模块;另外Head 部分变化最大,从原先的耦合头变成了解耦头,并且从 YOLOv5 的 Anchor-Based 变成了 Anchor-Free

YOLOv8的网络架构包含了多个关键组件,这些组件共同工作以实现快速而准确的目标检测。首先是其创新的特征提取网络(Backbone),YOLOv8的Backbone采用了最新的网络设计理念,通过深层次的特征融合和精细的特征提取策略来增强对目标的识别能力。这一策略的成功关键在于其特征提取器能够充分捕获目标的细微特征,同时保持计算效率。

YOLOv8在训练策略上也进行了优化。与YOLOv7相比,YOLOv8采用了SPFF(Spatial Pyramid Fusion Fast)策略,该策略通过高效的多尺度特征融合提高了模型对不同大小目标的检测能力。此外,YOLOv8在训练过程中引入了一种名为Task Aligned Assigner的新技术,这种技术能够更精准地将预测框与真实目标对齐,从而提高检测的准确率。

在损失函数的设计上,YOLOv8进行了创新,采用了JFL(Joint Family Losses),这是一种集成了多个损失函数的复合损失函数,能够同时优化目标检测的多个方面。这些损失函数包括用于提升模型对目标位置和大小预测准确性的CIOU Loss,以及优化分类准确性的分类损失函数。JFL的设计允许YOLOv8更全面地考虑检测任务中的不同需求,通过协调各种损失来提升总体的性能。

YOLOv8的原理不仅在于其创新的技术点,更在于这些技术如何被综合应用于解决实际的目标检测问题。通过其精心设计的网络架构、高效的训练策略以及综合的损失函数设计,YOLOv8实现了在保持实时性的同时,提高了在复杂场景下的检测准确率。这些改进使得YOLOv8成为了一个强大的工具,适用于从自动驾驶到智能视频监控等多种应用场景。

四、模型的训练、评估与推理

数据集准备

本文使用的 102类的花朵分类 数据集共包含 8189 张图片

Oxford 102 Flowers Dataset 是一个花卉集合数据集,主要用于图像分类,它分为 102 个类别共计 102 种花,其中每个类别包含 40 到 258 张图像。

该数据集由牛津大学工程科学系于 2008 年发布,相关论文有《Automated flower classification over a large number of classes》。

图片数据集的存放格式如下:

运行 data_process.py 即可得到 datasets 里面的分类数据。

模型训练

数据准备完成后,通过调用train.py文件进行模型训练,epochs参数用于调整训练的轮数,代码如下:

from ultralytics import YOLO

if __name__ == "__main__":
    # build from YAML and transfer weights
    model = YOLO("./weights/yolov8n-cls.pt")
    # Train the model
    model.train(data="./102flowers/datasets", epochs=100, imgsz=640)

训练结果分析

YOLOv8在训练结束后,可以在runs/目录下找到训练过程及结果文件,如下所示:

confusion_matrix_normalized.png

results.png

训练 batch

验证 batch

模型推理

模型训练完成后,可以得到一个最佳的训练结果模型best.pt文件,在runs/trian/weights目录下。我们通过使用该文件进行后续的推理检测。

图片检测代码如下:

from ultralytics import YOLO

if __name__ == "__main__":
    # Load a model
    model = YOLO('./runs/detect/train/weights/best.pt')
    # Run batched inference on a list of images
    model("./img", imgsz=640, save=True, device=0)

执行上述代码后,会将执行的结果直接标注在图片上,结果如下:

关于该系统涉及到的完整源码UI界面代码、数据集、训练代码、测试图片视频等相关文件,均已打包上传,感兴趣的小伙伴可以通过下载链接自行获取。

五、获取方式

本文涉及到的完整全部程序文件:包括 python源码、数据集、训练好的结果文件、训练代码、UI源码、测试图片视频等(见下图),获取方式见文末:

注意:该代码基于Python3.8开发,运行界面的主程序为GUI.py,其他测试脚本说明见上图。为确保程序顺利运行,请按照requirements.txt配置软件运行所需环境。

关注下方公众号:【AI算法与电子竞赛】,发送【YOLO系列源码】即可获取下载方式

六、链接作者

欢迎关注我的公众号:@AI算法与电子竞赛

硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!

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

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

相关文章

接口自动化三大经典难题

目录 一、接口项目不生成token怎么解决关联问题 1. Session机制 2. 基于IP或设备ID的绑定 3. 使用OAuth或第三方认证 4. 利用隐式传递的参数 5. 基于时间戳的签名验证 二、接口测试中网络问题导致无法通过怎么办 1. 重试机制 2. 设置超时时间 3. 使用模拟数据 4. 网…

【STM32开发】GPIO最全解析及应用实例

目录 【1】GPIO概述 GPIO的基本概念 GPIO的应用 【2】GPIO功能描述 1.IO功能框图 2.知识补充 3.功能详述 浮空输入 上拉输入 下拉输入 模拟输入 推挽输出 开漏输出 复用开漏输出和复用推挽输出 【3】GPIO常用寄存器 相关寄存器介绍 4个32位配置寄存器 2个32位数据寄存器 1个32位…

Android的logcat日志详解

Android log系统 logcat介绍 logcat是android中的一个命令行工具,可以用于得到程序的log信息。下面介绍 adb logcat中的详细参数命令以及如何才能高效的打印日志,或把日志保存到我们指定的位置。 可以输入 adb logcat --help,查看一下一些简…

深入CSS 布局——WEB开发系列29

CSS 页面布局技术允许我们拾取网页中的元素,并且控制它们相对正常布局流、周边元素、父容器或者主视口/窗口的位置。 一、正常布局流(Normal Flow) CSS的布局基础是“正常流”,也就是页面元素在没有特别指定布局方式时的默认排列…

图神经网络(2)预备知识

1. 图的基本概念 对于接触过数据结构和算法的读者来说,图并不是一个陌生的概念。一个图由一些顶点也称为节点和连接这些顶点的边组成。给定一个图G(V,E), 其 中V{V1,V2,…,Vn} 是一个具有 n 个顶点的集合。 1.1邻接矩阵 我们用邻接矩阵A∈Rnn表示顶点之间的连接关…

AI自动生成PPT哪个软件好?如何自动生成专业级PPT?

新学期伊始,准备开学演讲稿的你是否还在为制作PPT而烦恼?别担心,现在有了AI的帮助,生成专业且吸引人的PPT变得轻而易举。 本文将为你揭秘4种高效的AI自动生成PPT的方法,让你在新学期的演讲中脱颖而出。无论是简洁明了…

数据权限的设计与实现系列6——前端筛选器组件Everright-filter使用探索

linear 功能探索 最终我们是需要使用 API 的方式,调用后端服务拉取数据填充筛选器组件,不过在探索阶段,直接用 API 方式,就需要构造 mock 数据,比较麻烦,因此先使用 Function 方式来进行功能验证。 组件初…

Visual Studio Code:让你的工作效率飞升的秘密武器

在现代软件开发环境中,效率已成为每个开发者追求的目标。而在众多编程工具中,Visual Studio Code(简称VS Code)凭借其强大的功能、轻量的界面和高度的可定制性,成为了全球开发者的首选。无论你是编写前端代码、后端服务…

软考(计算机技术与软件专业技术资格(水平)考试)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

SpringBoot教程(十五) | SpringBoot集成RabbitMq(消息丢失、消息重复、消息顺序、消息顺序)

SpringBoot教程(十五) | SpringBoot集成RabbitMq(消息丢失、消息重复、消息顺序、消息顺序) RabbitMQ常见问题解决方案问题一:消息丢失的解决方案(1)生成者丢失消息丢失的情景解决方案1&#xf…

C++三位状态比较排序

数组相同元素个数及按序 void 交换3个数升(int& A, int& B, int& C, bool& k) {int J 0;if (B > A&&A > C)J C, C B, B A, A J, k true;//231else if (C > A&&A > B)J A, A B, B J, k true;//213else if (A > B&a…

使用python+opencv解析图像和文本数据

1. 创建虚拟环境 新建文件夹, 并在文件夹中创建虚拟环境,可以使用Vscode打开文件夹, 然后在终端中输入以下命令: python -m venv venv2. 激活虚拟环境 在终端中输入以下命令: venv\Scripts\activate3. 安装依赖 在终端中输入以下命令: pip install opencv-pythonpip inst…

ArmSoM CM5 RK3576核心板推出,强势替代树莓派CM4

ArmSoM团队隆重推出全新的CM5 RK3576核心板,这款模块专为嵌入式开发者设计,凭借其强大的性能与丰富的扩展性,完美替代树莓派CM4,成为开发者们的理想选择。 CM5核心板采用了先进的RK3576 SoC,凭借卓越的计算能力和出色…

MapSet之二叉搜索树

系列文章: 1. 先导片--Map&Set之二叉搜索树 2. Map&Set之相关概念 目录 前言 1.二叉搜索树 1.1 定义 1.2 操作-查找 1.3 操作-新增 1.4 操作-删除(难点) 1.5 总体实现代码 1.6 性能分析 前言 TreeMap 和 TreeSet 是 Java 中基于搜索树实现的 M…

第一个搭建SpringBoot项目(连接mysql)

首先新建项目找到Spring Initializr 我使用的URL是https://start.spring.io这里最低的JDK版本是17,而且当网速不好的时候可能会显示超时,这里可以选用阿里云的镜像https://start.aliyun.com可以更快一些但是里面还是有一些区别的 我们这里选择Java语言&a…

2024 数学建模高教社杯 国赛(A题)| “板凳龙”舞龙队 | 建模秘籍文章代码思路大全

铛铛!小秘籍来咯! 小秘籍团队独辟蹊径,运用等距螺线,多目标规划等强大工具,构建了这一题的详细解答哦! 为大家量身打造创新解决方案。小秘籍团队,始终引领着建模问题求解的风潮。 抓紧小秘籍&am…

《深度学习》OpenCV轮廓检测 轮廓近似 解析及实现

目录 一、轮廓近似 1、什么是轮廓近似 2、参数解析 1)用法 2)参数 3)返回值 4)代码解析及实现 运行结果为: 二、总结 1、概念 2、轮廓近似的步骤: 一、轮廓近似 1、什么是轮廓近似 指对轮廓进行…

Linux_kernel移植uboot07

一、移植 根据硬件平台的差异,将代码进行少量的修改,修改过后的代码在目标平台上运行起来 移植还需要考虑硬件环境,驱动只需要考虑内核的环境 二、移植内容 1、移植Uboot uboot属于bootloader的一种,还有其他的bootloader&#x…

Qt-常用控件(3)-多元素控件、容器类控件和布局管理器

1. 多元素控件 Qt 中提供的多元素控件有: QListWidgetQListViewQTableWidgetQTableViewQTreeWidgetQTreeView xxWidget 和 xxView 之间的区别,以 QTableWidget 和 QTableView 为例. QTableView 是基于 MVC 设计的控件.QTableView 自身不持有数据,使用 QTableView 的…

欧拉系统安装 NVIDIA 显卡驱动

1、安装显卡驱动编译工具 yum install gcc make kernel-devel 2、安装显卡驱动依赖包 yum install vulkan-loader 可选安装项,不安装该系统包时会出现以下警告提示,但不影响安装和使用。 3、安装 NVIDIA GPU 驱动 生产环境建议选择 .run 格式的驱动…