基于深度学习YOLOv8\YOLOv5的花卉识别鲜花识别检测分类系统设计

本文将介绍基于深度学习YOLOv8\YOLOv5+PySide6+SQLite的花卉检测与识别系统,该系统基于YOLOv8算法,并与YOLOv5版本进行比较,该系统不仅实现了对花卉的精准识别和分类,还提供了包括用户认证管理、模型快速切换及界面个性化定制在内的多项功能,获取方式如下。

wx供重浩:创享日记
那边对话框发送:花卉61
获取完整源码源文件+数据集+训练好模型+配置和修改文档+配套设计说明文章+远程操作等

在这里插入图片描述
在这里插入图片描述


一、项目效果展示

基于深度学习YOLOv8\YOLOv5+PySide6的花卉识别鲜花识别检测系统设计

在这里插入图片描述


二、设计系统介绍

1、数据集介绍

在花卉识别研究中,一个精心设计的数据集是训练精确AI模型的基石。我们创建了一个包含10513张花卉图片的数据集,旨在推动该领域的技术发展。该数据集分为训练集、验证集和测试集,分别为9131张、919张和463张,确保模型在多样化数据上的训练和独立数据上的验证。

每张图片都经过了严格的预处理,包括方向校正、去除EXIF信息、统一分辨率调整至640x640像素,并应用自适应均衡化技术增强对比度,以突出花卉特征,优化模型学习效果。

在这里插入图片描述
该数据集中有13个类,即该模型能识别分类13种花卉,对应关系如下:‘Allium’: “大葱花”, ‘Borage’: “琉璃苣”, ‘Burdock’: “牛蒡”, ‘Calendula’: “金盏花”, ‘Chicory’: “菊苣”, ‘Chive blossoms’: “韭菜花”, ‘Coltsfoot’: “款冬”, ‘Common mallow’: “锦葵”,‘Common yarrow’: “洋蓍草”, ‘Coneflower’: “金光菊”, ‘Cow parsley’: “欧芹”, ‘Dandelion’: “蒲公英”,‘Gardenia’: “栀子花”。

在对数据集进行详尽分析后,我们发现了一些关键的分布特点。类别的不平衡性是一个显著的问题,这可能导致模型偏向于识别数量较多的类别。例如,Allium类花卉在数据集中占比较高,而Gardenia类则较少。为了解决这一问题,我们采用马赛克9数据增强技术,具体的数据集特性指标如下(在源码中有这些图表),具体代表什么可以详见配套论文。

在这里插入图片描述

2、系统介绍

深度学习技术栈:YOLOv8、YOLOv5
GUI(可视化操作界面)技术栈:PySide6
数据库技术栈:SQLite

(1)本系统引入了SQLite数据库支持的注册与登录机制。新用户需在注册页面填写用户名和密码,系统随后将这些信息存储于SQLite数据库。注册完成后,用户便可通过输入用户名和密码在登录页面进行验证。这样的设计旨在提升系统安全,同时为未来拓展个性化服务提供了便利。(所有的背景图标均可个性化修改)
在这里插入图片描述

(2)系统主界面提供了多样化的输入选项,包括图片、视频、实时摄像头以及批量文件上传功能,用户可以轻松点击相应按钮,选取进行花卉识别的素材,或启动摄像头进行实时识别。与此同时,还可以设定置信度和IOU,保留符合要求的识别结果。在识别过程中,系统不仅实时展示识别结果(包含类别、位置、置信度等),还将所有识别记录自动存储于数据库中,方便后续查询和管理。

系统还提供了一键切换YOLOv8/v5模型的功能,用户可通过点击"更换模型"按钮,轻松选择不同的YOLOv8模型进行检测。同时,系统内置的数据集可用于重新训练模型,满足用户在多样化场景下的检测需求。
在这里插入图片描述

为了打造个性化的使用体验,系统还支持界面自定义。用户可以根据自己的喜好,自由调整界面的图标、文字等元素。无论是选择个性化的图标风格,还是修改界面的文字描述,用户都可以根据详细的代码注释和说明文档轻松实现,享受定制化的操作体验。

在这里插入图片描述
在这里插入图片描述

3、模型介绍

YOLOv5和YOLOv8是目标检测领域的两个重要算法,它们分别代表了YOLO系列的第五代和第八代产品。

YOLOv5是由Glenn Jocher等人研发的,是Ultralytics公司的开源项目。YOLOv5根据参数量分为了n、s、m、l、x五种类型,参数量依次上升,效果也随之提升。从2020年6月发布至2022年11月已经更新了7个大版本,在v7版本中还添加了语义分割的功能。YOLOv5算法主要分为三个部分:Backbone网络、Neck网络和Head网络。其中,Backbone网络是整个算法的核心部分,通过多个卷积层和池化层对输入图像进行特征提取。Neck网络则负责对融合后的特征进行加强,使用SPP结构在不同尺度下应用池化操作。而Head网络则通过分类分支和回归分支两个部分来对融合后的特征进行分类和定位。
在这里插入图片描述

YOLOv8是Ultralytics公司在2023年1月10号开源的YOLOv5的下一个重大更新版本,目前支持图像分类、物体检测和实例分割任务。YOLOv8是一个SOTA模型,它建立在以前YOLO版本的成功基础上,并引入了新的功能和改进,以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新的Anchor-Free检测头和一个新的损失函数,可以在从CPU到GPU的各种硬件平台上运行。YOLOv8的开源库的两个主要优点是融合了众多当前SOTA技术于一体,未来将支持其他YOLO系列以及YOLO之外的更多算法。

在这里插入图片描述

YOLOv8相比YOLOv5精度提升非常多,但是相应的参数量和FLOPs也增加了不少,从性能曲线也可以看出相比YOLOv5大部分模型推理速度变慢了。YOLOv8提供了一个全新的SOTA模型,包括P5 640和P6 1280分辨率的目标检测网络和基于YOLACT的实例分割模型。和YOLOv5一样,基于缩放系数也提供了N/S/M/L/X尺度的不同大小模型,用于满足不同场景需求。

总的来说,YOLOv5和YOLOv8都是目标检测领域的重要算法,YOLOv5以其优异的检测速度和精度平衡而广泛应用,而YOLOv8则在YOLOv5的基础上引入更多创新,性能进一步提升,是YOLO系列的最新成果。

(1)模型训练:运行run_train_model.py文件可以进行训练; 本项目中已经保存了训练 好的模型和训练结果,可以不用再次训练而直接使用。run_train_model.py文件如下。

import os

import torch
import yaml
from ultralytics import YOLO  # 导入YOLO模型
from QtFusion.path import abs_path
device = "0" if torch.cuda.is_available() else "cpu"

if __name__ == '__main__':  # 确保该模块被直接运行时才执行以下代码
    workers = 1
    batch = 8

    data_name = "Flower"
    data_path = abs_path(f'datasets/{data_name}/{data_name}.yaml', path_type='current')  # 数据集的yaml的绝对路径
    unix_style_path = data_path.replace(os.sep, '/')

    # 获取目录路径
    directory_path = os.path.dirname(unix_style_path)
    # 读取YAML文件,保持原有顺序
    with open(data_path, 'r') as file:
        data = yaml.load(file, Loader=yaml.FullLoader)
    # 修改path项
    if 'path' in data:
        data['path'] = directory_path
        # 将修改后的数据写回YAML文件
        with open(data_path, 'w') as file:
            yaml.safe_dump(data, file, sort_keys=False)

    model = YOLO(abs_path('./weights/yolov8n.pt'), task='detect')  # 加载预训练的YOLOv8模型
    results2 = model.train(  # 开始训练模型
        data=data_path,  # 指定训练数据的配置文件路径
        device=device,  # 自动选择进行训练
        workers=workers,  # 指定使用2个工作进程加载数据
        imgsz=640,  # 指定输入图像的大小为640x640
        epochs=150,  # 指定训练150个epoch
        batch=batch,  # 指定每个批次的大小为8
        name='train_v8_' + data_name  # 指定训练任务的名称
    )

    model = YOLO(abs_path('./weights/yolov5nu.pt', path_type='current'), task='detect')  # 加载预训练的YOLOv5模型
    # model = YOLO('./weights/yolov5.yaml', task='detect').load('./weights/yolov5nu.pt')  # 加载预训练的YOLOv5模型
    # Training.
    results = model.train(  # 开始训练模型
        data=data_path,  # 指定训练数据的配置文件路径
        device=device,  # 自动选择进行训练
        workers=workers,  # 指定使用2个工作进程加载数据
        imgsz=640,  # 指定输入图像的大小为640x640
        epochs=150,  # 指定训练150个epoch
        batch=batch,  # 指定每个批次的大小为8
        name='train_v5_' + data_name  # 指定训练任务的名称
    )

在这里插入图片描述

(2)模型指标:训练好的模型指标图表数据等均在run文件夹里面,可以根据需要使用,具体代表什么可以详见配套论文或网上查看。如下展示YOLOv8模型部分指标。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)模型推理识别:首先导入了OpenCV库和YOLO模型。OpenCV库是一个开源的计算机视觉和机器学习软件库,包含了众多的视觉处理函数,使用它来读取和处理图像;YOLO模型则是要用到的目标检测模型。 接着,加载自己训练好的YOLO模型,可以直接用于目标检测任务。然后,使用OpenCV读取了一个图像文件,这个图像文件作为要进行目标检测的图像输入。在读取了图像文件之后,就可以使用加载的模型对图像进行预测了。(这就是这个系统的核心)


三、项目环境配置

在这里插入图片描述
在这里插入图片描述

获取以上完整资料和服务详见博客文字开头第二段

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

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

相关文章

ssm汉服文化平台网站

博主介绍:✌程序员徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

【TB作品】msp430f5529单片机墨水屏,口袋板,tmp421温度,温控风扇

文章目录 一、扬声器模块介绍二、驱动介绍三、程序介绍四、全部代码下载 msp430f5529d单片机墨水屏,口袋板,tmp421温度,温控风扇 基本要求:高于20度开转,温度越高转速越快,高于40度风扇停转,温…

Day45 动态规划part05

LC1049最后一块石头重量II(未掌握) 未掌握分析:其实本题跟LC416分割等和子集类似,本质上题目的要求是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,也就是01背包问题weight和value都是stones数组,题目可以看…

Java的JDK环境变量配置(Windows)

只写了需要配置的环境变量 注:从JDK1.5开始,配置Java环境变量时,不再需要配置CLASSPATH,只需要配置JAVA_HOME和Path 1、配置JAVA_HOME 找到自己的JDK位置,我这里是 C:\dev\java\jdk-17.0.119在环境变量-系统变量中&…

【已解决】Error in the HTTP2 framing layer

1.问题描述 在使用git将代码上传github的时候在最后一部push的时候遇到这个fatal 2.解决方案 由于我原先设置的origin是http协议下的,如下 git remote add origin https://github.com/Charlesbibi/Simple_Cloud.githttp协议下行不通不妨试一试ssh协议下&#xff…

代码随想录算法训练营 day23| ● 669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树

文章目录 前言669. 修剪二叉搜索树思路方法一 递归法方法二 迭代法 108.将有序数组转换为二叉搜索树思路方法一 递归法方法二 迭代法 538.把二叉搜索树转换为累加树思路方法一方法二 总结 前言 迭代法都没看主要是669和538【538很简单】 669. 修剪二叉搜索树 思路 不用看教程…

stack学习

std::stack 类是一种容器适配器,它给予程序员栈的功能——特别是 FILO(先进后出)数据结构。该类模板用处为底层容器的包装器——只提供特定函数集合。栈从被称作栈顶的容器尾部推弹元素。 operator 赋值给容器适配器 (公开成员函数) 元素访问…

C#开发的应用升级更新服务器端工具 - 开源研究系列文章 - 个人小作品

笔者开发过一些小应用,然后这些应用就需要有升级更新的功能,但是如果每个都集成进去也行,但是就是得写死更新的代码了。于是就想写一个应用升级更新的管理器,以前看到过Github上有一个AutoUpdate.Net,不过它那个要集成…

openssl 常用命令demo

RSA Private Key的结构(ASN.1) RSAPrivateKey :: SEQUENCE { version Version, modulus INTEGER, -- n publicExponent INTEGER, -- e privateExponent INTEGER, -- d prime1 INTEGER, -- …

Redis缓存(笔记一:缓存介绍和数据库启动)

目录 1、NoSQL数据库简介 2、Redis介绍 3、Redis(win系统、linux系统中操作) 3.1 win版本Redis启动 3.2 linux版本Redis启动 1、NoSQL数据库简介 技术的分类:(发展史) 1、解决功能性的问题:Java、Jsp、RDBMS、Tomcat、HTML、…

FreeRTOS任务调度机制(源码讲解)

任务的调度机制(核心是链表)!!! 使用链表来管理任务 在我前面写的FreeRTOS任务(深入到源码进行分析),我创建了三个任务,他们的优先级都是一样的,所以他们在FreeRTOS中是轮流执行的,实际上&…

【Python从入门到进阶】56、Mysql防止SQL注入及ORM库简化操作

接上篇《55、使用Python轻松操作Mysql数据库》 上一篇我们讲解了Mysql的基本链接和增删改查,本篇我们来介绍链接Mysql时参数化查询与防止SQL注入以及使用ORM(对象关系映射)库简化操作的内容。 一、参数化查询与防止SQL注入 在数据库操作中&…

Anaconda 出现HTTP000报错的解决方法

在使用Anaconda 安装python的时候遇到这个错误 chenchen-Standard-PC-i440FX-PIIX-1996:~$ conda create -n sdwebui python3.10.9Solving environment: failedCondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/r/noarch/repodata.jso…

如何跨渠道分析销售数据 - 6年软件销售经验小结

如何跨渠道分析销售数据 - 6年软件销售经验小结&#xff08;1&#xff09; 【前言】 在我过去6年销售工作生涯中&#xff0c;从第一年成为公司销冠后&#xff0c;我当时的确自满的一段时间&#xff0c;认为自己很了不起。但是第一年的销售业绩并没有拿到提成&#xff0c;最终…

架构设计之安全性属性深度剖析:从理论到实践的完美融合

文章目录 引言一、安全性属性的理论探讨1.1 定义说明1.2 安全原则1.3 安全模型1.4 安全机制 二、安全性属性的实践应用2.1 安全风险评估2.2 架构设计中的安全考虑2.3 技术手段和工具2.4 团队协作与沟通2.5 安全政策和流程2.6 合规性和标准2.7 持续监控和改进 三、理论与实践的融…

c++中 unordered_map 与 unordered_set 用法指南

unordered_map 与 unordered_set 区别与联系 unordered_map 和 unordered_set 都是 C 标准模板库&#xff08;STL&#xff09;中的容器&#xff0c;它们使用哈希表作为底层数据结构&#xff0c;提供了快速的查找、插入和删除操作。下面是它们之间的联系与区别&#xff1a; 联系…

大数据分析统计

大数据分析统计 from datetime import datetimeimport pandas as pd import matplotlib.pyplot as pltpm25files [PM2.5_2021.csv, PM2.5_2022.csv, PM2.5_2023.csv] pm10files [PM10_2021.csv, PM10_2022.csv, PM10_2023.csv]def read_csv_file(files):# 每个文件都有表头…

ch5链路层和局域网

回顾TCP/IP参考模型&#xff0c;明确链路层和物理层在整个模型中的地位&#xff0c;简要提出链路层要解决的问题是单段链路的数据传输&#xff0c;物理层解决的是数字信号与电气信号之间的相互转换。 链路层概述 节点&#xff1a;主机和路由器(包括网桥和交换机) 链路&#xf…

移动端路由切换解决方案 —— 虚拟任务栈让你的 H5 像APP一样丝滑

目录 01: 前言 02: 通用组件&#xff1a;trigger-menu 和 trigger-menu-item 构建方案分析 03: 通用组件&#xff1a;构建 trigger-menu 和 trigger-menu-item 04: 前台业务下 H5 的应用场景 05: 通用组件&#xff1a;transition-router-view 构建方案分析 与 虚拟任务栈…

04Linux文件系统

课程目标 1、了解Linux操作系统的硬盘分区信息 2、了解Linux操作系统重各目录的作用 3、了解Linux的启动级别以及关机和重启命令 课程实验 在xshell中使用df -h &#xff0c;df -T&#xff0c;du -sh,fdisk -|,cd ,pwd 使用top &#xff0c;free&#xff0c;cat/proc/xxx…