基于深度学习的高精度水下目标检测识别系统(PyTorch+Pyside6+YOLOv5模型)

news2024/12/29 13:52:24

摘要:基于深度学习的高精度水下目标(鱼(fish)、水母(jellyfish)、企鹅(penguin)、海鹦(puffin)、鲨鱼(shark)、海星(starfish)、黄貂鱼(stingray))检测识别系统可用于日常生活中或野外来检测与定位水下目标目标,利用深度学习算法可实现图片、视频、摄像头等方式的水下目标目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数据集,使用Pysdie6库来搭建页面展示系统,同时支持ONNX、PT等模型作为权重模型的输出。本系统支持的功能包括水下目标训练模型的导入、初始化;置信分与IOU阈值的调节、图像上传、检测、可视化结果展示、结果导出与结束检测;视频的上传、检测、可视化结果展示、结果导出与结束检测;摄像头的上传、检测、可视化结果展示与结束检测;已检测目标列表、位置信息;前向推理用时。另外本水下目标检测识别系统同时支持原始图像与检测结果图像的同时展示,原始视频与检测结果视频的同时展示。本博文提供了完整的Python代码和使用教程,适合新入门的朋友参考,完整代码资源文件请转至文末的下载链接。
在这里插入图片描述

基本介绍

近年来,机器学习和深度学习取得了较大的发展,深度学习方法在检测精度和速度方面与传统方法相比表现出更良好的性能。YOLOv5是单阶段目标检测算法YOLO的第五代,根据实验得出结论,其在速度与准确性能方面都有了明显提升,开源的代码可见https://github.com/ultralytics/yolov5。因此本博文利用YOLOv5检测算法实现一种高精度水下目标识别检测模型,再搭配上Pyside6库写出界面系统,完成目标检测识别页面的开发。注意到YOLO系列算法的最新进展已有YOLOv6、YOLOv7、YOLOv8等算法,将本系统中检测算法替换为最新算法的代码也将在后面发布,欢迎关注收藏。

环境搭建

(1)下载完整文件到自己电脑上,然后使用cmd打开到文件目录
(2)利用Conda创建环境(Anacodna),conda create -n yolo5 python=3.8 然后安装torch和torchvision(pip install torch1.10.0+cu113 torchvision0.11.0+cu113 -f https://download.pytorch.org/whl/torch_stable.html -i https://pypi.tuna.tsinghua.edu.cn/simple)其中-i https://pypi.tuna.tsinghua.edu.cn/simple代表使用清华源,这行命令要求nvidia-smi显示的CUDA版本>=11.3,最后安装剩余依赖包使用:pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
在这里插入图片描述
在这里插入图片描述

(3)安装Pyside6库 pip install pyside6==6.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
在这里插入图片描述

(4)对于windows系统下的pycocotools库的安装:pip install pycocotools-windows -i https://pypi.tuna.tsinghua.edu.cn/simple

界面及功能展示

下面给出本博文设计的软件界面,整体界面简洁大方,大体功能包括训练模型的导入、初始化;置信分与IOU阈值的调节、图像上传、检测、可视化结果展示、结果导出与结束检测;视频的上传、检测、可视化结果展示、结果导出与结束检测;已检测目标列表、位置信息;前向推理用时。希望大家可以喜欢,初始界面如下图:
在这里插入图片描述

模型选择与初始化

用户可以点击模型权重选择按钮上传训练好的模型权重,训练权重格式可为.pt、.onnx以及。engine等,之后再点击模型权重初始化按钮可实现已选择模型初始化信息的设置。

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

置信分与IOU的改变

在Confidence或IOU下方的输入框中改变值即可同步改变滑动条的进度,同时改变滑动条的进度值也可同步改变输入框的值;Confidence或IOU值的改变将同步到模型里的配置,将改变检测置信度阈值与IOU阈值。

图像选择、检测与导出

用户可以点击选择图像按钮上传单张图片进行检测与识别。
在这里插入图片描述

再点击图像检测按钮可完成输入图像的目标检测功能,之后系统会在用时一栏输出检测用时,在目标数量一栏输出已检测到的目标数量,在下拉框可选择已检测目标,对应于目标位置(即xmin、ymin、xmax以及ymax)标签值的改变。
在这里插入图片描述

再点击检测结果展示按钮可在系统左下方显示输入图像检测的结果,系统将显示识别出图片中的目标的类别、位置和置信度信息。
在这里插入图片描述

点击图像检测结果导出按钮即可导出检测后的图像,在保存栏里输入保存的图片名称及后缀即可实现检测结果图像的保存。
在这里插入图片描述

点击结束图像检测按钮即可完成系统界面的刷新,将所有输出信息清空,之后再点击选择图像或选择视频按钮来上传图像或视频。

视频选择、检测与导出

用户可以点击选择视频按钮上传视频进行检测与识别,之后系统会将视频的第一帧输入到系统界面的左上方显示。
在这里插入图片描述

再点击视频检测按钮可完成输入视频的目标检测功能,之后系统会在用时一栏输出检测用时,在目标数量一栏输出已检测到的目标数量,在下拉框可选择已检测目标,对应于目标位置(即xmin、ymin、xmax以及ymax)标签值的改变。
在这里插入图片描述

点击暂停视频检测按钮即可实现输入视频的暂停,此时按钮变为继续视频检测,输入视频帧与帧检测结果会保留在系统界面,可点击下拉目标框选择已检测目标的坐标位置信息,再点击继续视频检测按钮即可实现输入视频的检测。
点击视频检测结果导出按钮即可导出检测后的视频,在保存栏里输入保存的图片名称及后缀即可实现检测结果视频的保存。
在这里插入图片描述

点击结束视频检测按钮即可完成系统界面的刷新,将所有输出信息清空,之后再点击选择图像或选择视频按钮来上传图像或视频。

摄像头打开、检测与结束

用户可以点击打开摄像头按钮来打开摄像头设备进行检测与识别,之后系统会将摄像头图像输入到系统界面的左上方显示。
在这里插入图片描述

再点击摄像头检测按钮可完成输入摄像头的目标检测功能,之后系统会在用时一栏输出检测用时,在目标数量一栏输出已检测到的目标数量,在下拉框可选择已检测目标,对应于目标位置(即xmin、ymin、xmax以及ymax)标签值的改变。
在这里插入图片描述

点击结束视频检测按钮即可完成系统界面的刷新,将所有输出信息清空,之后再点击选择图像或选择视频或打开摄像按钮来上传图像、视频或打开摄像头。

算法原理介绍

本系统采用了基于深度学习的单阶段目标检测算法YOLOv5,相比于YOLOv3和YOLOv4,YOLOv5在检测精度和速度上都有很大的提升。YOLOv5算法的核心思想是将目标检测问题转化为一个回归问题,通过直接预测物体中心点的坐标来代替Anchor框。此外,YOLOv5使用SPP(Spatial Pyramid Pooling)的特征提取方法,这种方法可以在不增加计算量的情况下,有效地提取多尺度特征,提高检测性能。YOLOv5s模型的整体结构如下图所示。

在这里插入图片描述

YOLOv5网络结构是由Input、Backbone、Neck、Prediction组成。YOLOv5的Input部分是网络的输入端,采用Mosaic数据增强方式,对输入数据随机裁剪,然后进行拼接。Backbone是YOLOv5提取特征的网络部分,特征提取能力直接影响整个网络性能。在特征提取阶段,YOLOv5使用CSPNet(Cross Stage Partial Network)结构,它将输入特征图分为两部分,一部分通过一系列卷积层进行处理,另一部分直接进行下采样,最后将这两部分特征图进行融合。这种设计使得网络具有更强的非线性表达能力,可以更好地处理目标检测任务中的复杂背景和多样化物体。在Neck阶段使用连续的卷积核C3结构块融合特征图。在Prediction阶段,模型使用结果特征图预测目标的中心坐标与尺寸信息。博主觉得YOLOv5不失为一种目标检测的高性能解决方案,能够以较高的准确率对目标进行分类与定位。当然现在YOLOv6、YOLOv7、YOLOv8等算法也在不断提出和改进,后续博主也会将这些算法融入到本系统中,敬请期待。

数据集介绍

本系统使用的水下目标数据集手动标注了鱼、水母、企鹅、海鹦、鲨鱼、海星、黄貂鱼这七个类别,数据集总计643张图片。该数据集中类别都有大量的旋转和不同的光照条件,有助于训练出更加鲁棒的检测模型。本文实验的水下目标检测识别数据集包含训练集448张图片,验证集127张图片,测试集68张图片,选取部分数据部分样本数据集如下图所示。由于YOLOv5算法对输入图片大小有限制,需要将所有图片调整为相同的大小。为了在不影响检测精度的情况下尽可能减小图片的失真,我们将所有图片调整为640x640的大小,并保持原有的宽高比例。此外,为了增强模型的泛化能力和鲁棒性,我们还使用了数据增强技术,包括随机旋转、缩放、裁剪和颜色变换等,以扩充数据集并减少过拟合风险。
在这里插入图片描述

关键代码解析

本系统的深度学习模型使用PyTorch实现,基于YOLOv5算法进行目标检测。在训练阶段,我们使用了预训练模型作为初始模型进行训练,然后通过多次迭代优化网络参数,以达到更好的检测性能。在训练过程中,我们采用了学习率衰减和数据增强等技术,以增强模型的泛化能力和鲁棒性。
在测试阶段,我们使用了训练好的模型来对新的图片和视频进行检测。通过设置阈值,将置信度低于阈值的检测框过滤掉,最终得到检测结果。同时,我们还可以将检测结果保存为图片或视频格式,以便进行后续分析和应用。本系统基于YOLOv5算法,使用PyTorch实现。代码中用到的主要库包括PyTorch、NumPy、OpenCV、PyQt等。
在这里插入图片描述
在这里插入图片描述

Pyside6界面设计

Pyside6是Python语言的GUI编程解决方案之一,可以快速地为Python程序创建GUI应用。在本博文中,我们使用Pyside6库创建一个图形化界面,为用户提供简单易用的交互界面,实现用户选择图片、视频进行目标检测。
我们使用Qt Designer设计图形界面,然后使用Pyside6将设计好的UI文件转换为Python代码。图形界面中包含多个UI控件,例如:标签、按钮、文本框、多选框等。通过Pyside6中的信号槽机制,可以使得UI控件与程序逻辑代码相互连接。

实验结果与分析

在实验结果与分析部分,我们使用精度和召回率等指标来评估模型的性能,还通过损失曲线和PR曲线来分析训练过程。在训练阶段,我们使用了前面介绍的水下目标数据集进行训练,使用了YOLOv5算法对数据集训练,总计训练了300个epochs。在训练过程中,我们使用tensorboard记录了模型在训练集和验证集上的损失曲线。从下图可以看出,随着训练次数的增加,模型的训练损失和验证损失都逐渐降低,说明模型不断地学习到更加精准的特征。在训练结束后,我们使用模型在数据集的验证集上进行了评估,得到了以下结果。
在这里插入图片描述

下图展示了我们训练的YOLOv5模型在验证集上的PR曲线,从图中可以看出,模型取得了较高的召回率和精确率,整体表现良好。
在这里插入图片描述

下图展示了本博文在使用YOLOv5模型对水下目标数据集进行训练时候的Mosaic数据增强图像。
在这里插入图片描述
在这里插入图片描述

综上,本博文训练得到的YOLOv5模型在数据集上表现良好,具有较高的检测精度和鲁棒性,可以在实际场景中应用。另外本博主对整个系统进行了详细测试,最终开发出一版流畅的高精度目标检测系统界面,就是本博文演示部分的展示,完整的UI界面、测试图片视频、代码文件等均已打包上传,感兴趣的朋友可以关注我私信获取。

其他基于深度学习的目标检测系统如西红柿、猫狗、山羊、野生目标、烟头、二维码、头盔、交警、野生动物、野外烟雾、人体摔倒识别、红外行人、家禽猪、苹果、推土机、蜜蜂、打电话、鸽子、足球、奶牛、人脸口罩、安全背心、烟雾检测系统等有需要的朋友关注我,从博主其他视频中获取下载链接。

完整项目目录如下所示:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

<Windows>《UltraEdit 编辑器之正则表达式(高级查找与替换)》

《UltraEdit 编辑器之正则表达式(高级查找与替换)》 1 查找和替换时开启正则表达式2 正则表达式关键字3 常用操作3.1 替换空行3.2 替换行尾空格3.3 替换行首空格3.4 替换数字0-93.5 替换空格前内容3.5 替换空行或仅含有空格TAB键的行3.6 末尾加分号 4 其…

PostgreSQL入门教程

目录 一、PostgreSQL安装 1、下载 2、安装 二、PostgreSQL操作 1、数据库操作 2、表操作 3、数据操作 一、PostgreSQL安装 本章节以windows系统安装为例,讲解PostgreSQL 15.0的安装过程。 1、下载 访问PostgreSQL官方网站,下载对应的安装包&am…

phpstudy搭建网站,通过快解析端口映射外网访问

phpstudy是一款集成了apache、mysql、php、ftp等web平台的环境搭建工具,可以让用户轻松搭建测试和开发环境,且不必有过多的配置设置工作。使用phpstudy可以快速搭建出一个本地环境的网站,方便进行调试和开发工作。当然也可以快速搭建部署个人…

Antlr4 语法解析器(下)

Antlr4 的两种AST遍历方式:Visitor方式 和 Listener方式。 Antlr4规则文法: 注释:和Java的注释完全一致,也可参考C的注释,只是增加了JavaDoc类型的注释;标志符:参考Java或者C的标志符命名规范,针对Lexer 部分的 Token 名的定义,采用全大写字母的形式,对于parser rule…

VSCode配置Java环境 全程记录 配置成功| Windows

目录 1 配置电脑Java环境 1.1 下载jdk: 1.2 配置环境变量 1.3 测试Java环境 2. vscode中创建一个Java项目 2.1 创建一个项目根目录 2.2 配置插件 2.3 创建Java项目 1 配置电脑Java环境 1.1 下载jdk: ​​​​​​Java Download | 官网 下载完后双击运行该软件&#xff0c…

kafka入门,文件存储机制(十六)

文件存储机制 1、Topic数据的存储机制 topic是逻辑上的概念,而partition是物理上的概念,每个partition对应一个log文件,该log文件中存储就是Producer生产的数据。Producer生产的数据会不断追加到该log文件末端,为防止log文件过大…

用户标签画像如何建立?用户营销数字化系统推荐

什么是客户管理系统?如蚓链客户管理系统就是基于数字化技术手段,搭配客户标签、客户画像、客户跟进等机制的设计,从而构建可以记录、跟踪和管理公司客户的系统就属于客户管理系统。利用客户管理系统的一系列功能,公司可以真正了解…

Dependency ‘com.google.code.gson:gson:2.10.1‘ not found

当Maven依赖无法导入时,咱们如图操作File->Project Structure 这里输入指定包名之后记得要点击搜索按钮!!! 最后根据搜索结果导入指定包名即可! 最后,如果本文对您有帮助,可以给本文点个赞…

[前端]JS语法——检测数据类型typeof

typeof用于检测数据类型&#xff0c;返回以下基本的数据类型&#xff1a; number、string、boolen、undefined、function、object 注意&#xff1a; NaN检测结果为number; 对象、数组、null检测结果为object&#xff1b; 未定义的变量检测结果为undefined. <script>…

2023 中兴捧月算法挑战赛-自智网络-参赛总结

“中兴捧月”是由中兴通讯面向在校大学生举办的全球性系列赛事活动&#xff0c;致力于培养学生建模编程、创新、方案策划和团队合作能力。今年是在学校的宣传下了解到比赛&#xff0c;最初抱着学习的态度报名了比赛&#xff0c;最终进入了决赛&#xff0c;完成了封闭的开发与赛…

MySQL数据库基础(一):数据库安装和DataGrip安装

学习目录 数据库介绍 MySQL数据库安装和使用 SQL语句 DDL之数据库操作 DDL之表操作 DML数据库操作语言 SQL约束 DQL操作 多表操作 学习目标 掌握DDL操作 了解mysql的约束 掌握DML操作 掌握DQL操作 掌握多表联查 一、数据库概述 1、数据库介绍 数据库就是存储数据…

SpringBoot(原理篇)

SpringBoot原理篇 自动配置 bean加载方式 xml方式声明bean 相关类&#xff1a; domain域中的实体类&#xff1a; public class Mouse { }public class Cat { }public class Dog { }测试&#xff1a; public class App1 {public static void main(String[] args) {ClassP…

MyBatis学习笔记--下篇

MyBatis学习笔记–下篇 文章目录 MyBatis学习笔记--下篇1、多对一的处理(关联)1.1、表的创建1.2、实体类1.2、按照查询嵌套处理1.3、按照结果嵌套处理&#xff08;联表查询 &#xff09; 2、一对多的处理&#xff08;Collection&#xff09;2.1、实体类2.2、按结果查询&#xf…

《绝地求生》提示d3dcompiler_47.dll缺失怎么修复win11,三个简易的修复方法

在打开《绝地求生》游戏的时候&#xff0c;报错提示“由于找不到d3dcompiler_47.dll”&#xff0c;“d3dcompiler_47.dll缺失”等问题&#xff0c;都是由于电脑系统的中的d3dcompiler_47.dll文件丢失或者损坏了。d3dcompiler_47.dll 是 Microsoft 的 DirectX 11 核心组件之一&a…

彻底搞懂Linux中10位含义的文件权限以及修改文件权限

彻底搞懂Linux中10位含义的文件权限以及修改文件权限 1. 前言1.1 创建用户及简单权限问题1.2 抛出文件权限问题 2. 第二段&#xff08;连接数&#xff09;3. 第三段&#xff08;所属者&#xff09; 第四段&#xff08;所属组&#xff09;3.1 介绍Linux中的三种角色3.2 更改文件…

Kubernetes删除ns(namespace)

一、前言 删除某个应用或模块的时候&#xff0c;可能会出现命名空间的状态一直处于Terminating状态&#xff0c;无论是重启k8s还是重启所有服务器都没卵用。 k8s遇到有无法删除的ns&#xff08;namespace&#xff09;命名空间的时候&#xff0c;可以尝试几种删除方式 二、删…

zabbix拓扑图主机拓扑的分组设置

目录 一、需求描述 二、实现方法 &#xff08;一&#xff09;第一步 编辑拓扑图 &#xff08;二&#xff09;第二步 编辑形状 &#xff08;三&#xff09;第三步 点“更新” 一、需求描述 在zabbix-监测-拓扑图-服务器拓扑图中&#xff0c;需要按照各业务来分组展示&#…

「STC8A8K64D4开发板」第2-5讲:I/O中断

第2-5讲&#xff1a;I/O中断 学习目的学习中断的相关概念。掌握中断向量大于 31的处理方法。掌握中断服务程序的编写。 STC8A8K64D4 I/O中断 STC8A8K64D4单片机的所有GPIO都支持I/O 中断&#xff0c;且支持 4 种中断触发模式&#xff1a;下降沿中断、上升沿中断、低电平中断和…

Pegasus开发环境

文章目录 Pegasus开发环境开发环境部署步骤1 安装 vs code步骤2 DecEco Device Tool 下载安装步骤3 下载Hi3861 Openharmony SDK步骤4 下载开发者工具步骤5 工程管理配置1. 打开DevEco Device Tool 主页 导入工程2. 选择Hi3861 Openharmony SDK目录3. 芯片选型4. 进行后续代码开…

Spring ServiceLocatorFactoryBean 小结

前言 偶然看到一篇微信公众号文章的分享 https://mp.weixin.qq.com/s/11VKseROGVcJHPCJ8xQ3XA&#xff0c;感觉挺有意思&#xff0c;在这里记录下。 为什么感觉有意思呢&#xff1f;是因为它通过spring 提供的ServiceLocatorFactoryBean 来实现服务定位模式&#xff0c;将服务…