基于YOLO系列算法(YOLOv5、YOLOv6、YOLOv8以及YOLOv9)和Streamlit框架的行人头盔检测系统

摘要

本文基于最新的基于深度学习的目标检测算法 (YOLOv5、YOLOv6、YOLOv8)以及YOLOv9) 对头盔数据集进行训练与验证,得到了最好的模型权重文件。使用Streamlit框架来搭建交互式Web应用界面,可以在网页端实现模型对图像、视频和实时摄像头的目标检测功能,在网页端用户可以调整检测参数(IoU、检测置信度等)。本数据集标注了行人头盔目标,且已转换成YOLO格式的标注文件。本博文介绍了完整的YOLO算法综述、数据集介绍、关键技术解析以及系统功能演示,需要的朋友可从本博文的视频简介和评论置顶处获取下载链接。
(注:本文包含三个不同的系统变体
【1】基于YOLOv8和Streamlit框架的目标检测算法(Ultralytics版本为8.0),源码和数据集链接: https://mbd.pub/o/bread/ZpaVl51v
【2】基于YOLOv8和YOLOv5和Streamlit框架的目标检测算法(Ultralytics版本为8.0,YOLOv5的版本为7.0,源码和数据集链接:https://mbd.pub/o/bread/ZpaVl55p)
【3】基于YOLOv5、6、8、9和Streamlit框架的目标检测算法(Ultralytics版本为8.2),源码和数据集链接:https://mbd.pub/o/bread/ZpaVl55q)

环境搭建

  • 打开Anaconda prompt (管理员打开)
  • 进入项目目录:cd xxxxxxxx (如果在非c盘,需要先f: (以f盘为例))
  • 创建一个conda虚拟环境:conda create -n st python=3.10
  • 进入虚拟环境:conda activate st
  • 安装依赖环境:pip install -r requirements.txt
  • 登录时默认的用户名为111,密码也为111
    在这里插入图片描述

项目打开:(无登录界面,默认使用CPU检测):streamlit run app.py
(无登录界面,默认使用GPU检测):streamlit run app_gpu.py
(有登录界面,默认使用CPU检测):streamlit run login.py
(有登录界面,默认使用GPU检测):streamlit run login_gpu.py

YOLO算法综述

YOLO(You Only Look Once)系列算法是一系列用于实时目标检测的深度学习算法,由Joseph Redmon等人开发。该系列算法的主要思想是将目标检测问题转化为单一的回归问题,通过一个神经网络直接从整幅图像中输出目标的类别和边界框坐标,从而实现快速准确的目标检测。YOLO系列算法的主要版本包括YOLO、YOLOv2、YOLOv3、YOLOv4、YOLOv5、YOLOv6、YOLOv7、YOLOv8和YOLOv9等,每个版本都在前一版本的基础上进行了改进和优化,以提高检测精度和速度。下面将详细介绍每个版本的特点和改进。
YOLO(You Only Look Once):它将目标检测问题转化为一个单一的回归问题,并通过一个卷积神经网络直接输出目标的类别和边界框坐标。YOLO将图像分割为 S × S 个格子(grid),每个格子负责检测该格子内的目标,并输出目标的类别概率以及边界框的位置信息。由于采用单一网络直接输出结果,YOLO在速度上具有优势,但在小目标检测和定位精度上存在一定问题。
YOLOv2:YOLOv2在YOLO的基础上进行了改进和优化,主要包括使用更深的网络结构(Darknet-19)、采用多尺度预测和Anchor Boxes等技术。多尺度预测可以提高模型对不同尺度目标的检测能力,Anchor Boxes可以更好地适应不同形状的目标,并提高定位精度。此外,YOLOv2还引入了批标准化(Batch Normalization)和卷积替代池化(Convolutional With Pooling)等技术来提高模型的训练速度和精度。
YOLOv3:YOLOv3在YOLOv2的基础上进一步改进,主要包括引入残差网络(ResNet)作为主干网络、采用多尺度预测以及使用更细粒度的Anchor Boxes等技术。引入ResNet可以提高模型的特征提取能力,多尺度预测可以进一步提高模型对不同尺度目标的检测能力,使用更细粒度的Anchor Boxes可以提高模型的定位精度。此外,YOLOv3还采用了特征融合和跨尺度连接等技术来提高模型的检测性能。
YOLOv4:YOLOv4是YOLO系列算法的最新版本,它在YOLOv3的基础上进行了进一步的改进和优化,主要包括引入更深更宽的网络结构(CSPDarknet53)、采用更多的数据增强和正则化技术以及使用更大的Batch Size等。CSPDarknet53是一种全新的网络结构,可以提高模型的特征提取能力和泛化能力,更多的数据增强和正则化技术可以进一步提高模型的鲁棒性和泛化能力,使用更大的Batch Size可以提高模型的训练速度和稳定性。此外,YOLOv4还引入了模型融合和跨域训练等技术来进一步提高模型的检测性能。
YOLOv5:YOLOv5 是由ultralytics团队开发的目标检测算法,通过简化模型结构和优化训练流程,实现了更快的训练速度和更高的检测精度。YOLOv5采用了CSPDarknet53作为骨干网络,采用了CSP(Cross Stage Partial)结构,提高了模型的效率和准确性。YOLOv5引入了自适应训练策略,可以根据硬件资源自动调整训练超参数,提高了模型的泛化能力。YOLOv5具有多尺度训练和推理的能力,可以在不同大小的目标上取得良好的检测效果。
YOLOv6:YOLOv6 是美团视觉智能部研发的一款目标检测框架,致力于工业应用。本框架同时专注于检测的精度和推理效率,在工业界常用的尺寸模型中:YOLOv6-nano 在 COCO 上精度可达 35.0% AP,在 T4 上推理速度可达 1242 FPS;YOLOv6-s 在 COCO 上精度可达 43.1% AP,在 T4 上推理速度可达 520 FPS。在部署方面,YOLOv6 支持 GPU(TensorRT)、CPU(OPENVINO)、ARM(MNN、TNN、NCNN)等不同平台的部署,极大地简化工程部署时的适配工作。
YOLOv7:YOLOv7是一种优秀的端到端检测算法。YOLOv7由Alexey Bochkovskiy和Chien-Yao Wang等人(YOLOv4团队)于2022年提出。在 5 FPS 到 120 FPS 的范围内,YOLOv7 的速度和准确性都超过了所有已知的物体检测器,在 30 FPS 的所有已知实时物体检测器中,YOLOv7 的准确性最高,达到 56.8% AP。
YOLOv8:YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本。是一款强大、灵活的目标检测和图像分割工具,它提供了最新的 SOTA 技术。提供了一个全新的SOTA模型。基于缩放系数也提供了N/S/M/L/X不同尺度的模型,以满足不同部署平台和应用场景的需求;网络结构上引入C2F和SPPF模块,并对不同尺度的模型进行了精心微调,提升网络特征提取能力及模型性能的同时,平衡模型的推理速度;采用Anchor-Free代替Anchor-Based,对网络输出头进行解耦,分离类别预测和目标框的回归,同时去掉置信度分支;采用TaskAlignedAssigner 动态正样本分配策略,提高样本的生成质量;引入了 Distribution Focal Loss用于目标框的回归。
YOLOv9:YOLOv9引入了程序化梯度信息(Programmable Gradient Information, PGI),这是一种全新的概念,旨在解决深层网络中信息丢失的问题。传统的目标检测网络在传递深层信息时,往往会丢失对最终预测至关重要的细节,而PGI技术能够保证网络在学习过程中保持完整的输入信息,从而获得更可靠的梯度信息,提高权重更新的准确性。这一创新显著提高了目标检测的准确率,为实时高精度目标检测提供了可能。此外,YOLOv9采用了全新的网络架构——泛化高效层聚合网络(Generalized Efficient Layer Aggregation Network, GELAN)。GELAN通过梯度路径规划,优化了网络结构,利用传统的卷积操作符实现了超越当前最先进方法(包括基于深度卷积的方法)的参数利用效率。这一设计不仅提高了模型的性能,同时也保证了模型的高效性,使YOLOv9能够在保持轻量级的同时,达到前所未有的准确度和速度。在MS COCO这样的挑战性数据集上的验证结果显示,YOLOv9在目标检测领域设置了新的性能基准,无论是在效率、速度还是准确性方面,YOLOv9都展示了卓越的性能

实验数据集

本系统使用的头盔行人数据集手动标注了头盔和行人这两个类别,数据集总计1100张图片。该数据集中类别都有大量的旋转和不同的光照条件,有助于训练出更加鲁棒的检测模型。本文实验的头盔行人检测识别数据集包含训练集887张图片,验证集213张图片。

关键技术

Streamlit

Streamlit 是一个开源应用程序框架,旨在简化为机器学习和数据科学构建 web 应用程序的过程。近年来,它在应用 ML 社区中获得了很大的吸引力。 Streamlit 成立于 2018 年,是前谷歌工程师在部署机器学习模型和仪表盘时遇到的挑战所带来的挫折。使用 Streamlit 框架,数据科学家和机器学习实践者可以在几个小时内构建自己的预测分析 web 应用程序。不需要依赖前端工程师或 HTML 、 CSS 或 Javascript 知识,因为这一切都是用 Python 完成的。一个简单的Streamlit初始界面如下图所示。
在这里插入图片描述

Streamlit的官方Github仓库:https://github.com/streamlit/streamlit
Streamlit的官方文档:https://streamlit.io/

YOLOv8

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

YOLOv8 算法的核心特性和改动可以归结为如下:
提供了一个全新的 SOTA 模型,包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的实例分割模型。和 YOLOv5 一样,基于缩放系数也提供了 N/S/M/L/X 尺度的不同大小模型,用于满足不同场景需求
骨干网络和 Neck 部分可能参考了 YOLOv7 ELAN 设计思想,将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f 结构,并对不同尺度模型调整了不同的通道数,属于对模型结构精心微调,不再是无脑一套参数应用所有模型,大幅提升了模型性能。不过这个 C2f 模块中存在 Split 等操作对特定硬件部署没有之前那么友好了
Head 部分相比 YOLOv5 改动较大,换成了目前主流的解耦头结构,将分类和检测头分离,同时也从 Anchor-Based 换成了 Anchor-Free
Loss 计算方面采用了 TaskAlignedAssigner 正样本分配策略,并引入了 Distribution Focal Loss

YOLOv8官方Github:https://github.com/ultralytics/ultralytics
mmyolo官方参考资料:https://mmyolo.readthedocs.io/zh-cn/dev/recommended_topics/algorithm_descriptions/yolov8_description.html

YOLOv5

YOLOv5 是一个面向实时工业应用而开源的目标检测算法,受到了广泛关注。让 YOLOv5 爆火的原因不单纯在于 YOLOv5 算法本身的优异性,更多的在于开源库的实用和鲁棒性。简单来说 YOLOv5 开源库的主要特点为:
友好和完善的部署支持
算法训练速度极快,在 300 epoch 情况下训练时长和大部分 one-stage 算法如 RetinaNet、ATSS 和 two-stage 算法如 Faster R-CNN 在 12 epoch 的训练时间接近
框架进行了非常多的 corner case 优化,功能和文档也比较丰富
在这里插入图片描述

其他变体配置(n、s、m、x)与YOLOv5-l结构相同,唯一区别是模块数量与通道数
YOLOv5官方GitHub:https://github.com/ultralytics/yolov5
mmyolo官方资料:https://mmyolo.readthedocs.io/zh-cn/dev/recommended_topics/algorithm_descriptions/yolov5_description.html
YOLOv5封装成一个类:
在这里插入图片描述

YOLOv9
摘要:当今的深度学习研究主要关注设计最佳目标函数,以实现模型预测与真实值的高度一致性,并开发合适的架构以确保预测过程中信息的充分利用。然而,传统方法往往忽视了在特征提取和空间转换的多层处理过程中,输入数据可能遭受的信息损失问题。本研究深入探讨了深度网络中数据传递过程中的信息损失问题,特别是信息瓶颈和可逆函数的挑战。提出了一种新概念——可编程梯度信息(PGI),旨在解决深度网络处理复杂任务时遇到的信息变化挑战。通过PGI,可以在计算目标函数时保留完整的输入信息,从而提供准确的梯度信息以优化网络权重。进一步地,本文设计了一种创新的轻量级网络架构,即广义高效层聚合网络(GELAN),展示了PGI在提升轻量级模型性能方面的有效性。通过在MS COCO数据集上进行目标检测任务的实验验证,证明了GELAN在参数效率方面超越了依赖深度可分卷积的现有技术。PGI的适用性跨越从轻量级到大型模型,能够在无需大型预训练数据集的条件下,实现从头开始训练模型的性能优势。

PGI主要包括三个组成部分,即主分支、辅助可逆分支以及多级辅助信息;PGI的推理流程仅涉及主分支,避免了额外推理成本的产生。这一设计精巧地应对了深度学习中的关键挑战,通过两个关键组件提升模型性能:
辅助可逆分支:引入此组件是为了解决随着网络深度增加而引发的信息瓶颈问题。这种信息瓶颈会干扰损失函数生成有效梯度的能力,辅助可逆分支通过保持信息流动的完整性来克服这一障碍
多级辅助信息:此部分旨在解决深度监督可能导致的误差累积问题,尤其是在拥有多个预测分支的结构和轻量级模型中。通过引入多级辅助信息,模型能够更有效地学习并减少误差传播

Generalized ELAN:GELAN是通过融合两个先进的网络设计理念——具有梯度路径规划能力的CSPNet和ELAN——而诞生的。这种设计致力于实现一个既轻量又快速且精确的网络架构,全面优化了网络性能和效率。在此基础上,研究者对ELAN的应用范围进行了扩展,使其不再局限于传统的卷积层堆叠方式,而是能够灵活地适配各种计算单元,显著提升了网络的通用性和适应性。

论文地址:https://arxiv.org/abs/2402.13616
Yolov9源代码:https://github.com/WongKinYiu/yolov9

系统界面及功能演示

系统登录与注册:包含用户注册、创建用户、重设密码登功能(默认的用户名为111,密码也为111)
登录后系统界面左侧可调整:选择模型、置信度、IoU、选择设备、是否保存检测结果、选择检测任务等功能
图像检测:点击Browse files按钮上传本地图像(图像和项目路径下不要出现中文,为方便测试在项目的test_images目录下存放测试图片,在test_videos目录下存放测试视频),在项目的upload_files目录会保存用户上传的图片;之后点击开始检测按钮系统会自动检测图片,并在右侧显示检测后的结果,在上方显示测试相关信息,下方显示检测结果,用户可下载结果(默认下载格式为csv文件),系统会在saved_results保存结果图片
视频检测:点击Browse files按钮上传本地视频(图像和项目路径下不要出现中文,为方便测试在项目的test_images目录下存放测试图片,在test_videos目录下存放测试视频),在项目的upload_files目录会保存用户上传的视频;之后点击开始检测按钮系统会自动检测图片,并在右侧显示检测后的结果,在上方显示测试相关信息,下方显示检测结果,用户可下载结果(默认下载格式为csv文件),系统会在saved_results保存结果视频
摄像头检测:选择摄像头检测任务后,系统会自动打开本机摄像头并调用算法实时检测,系统会在saved_results保存结果视频

基于YOLO系列算法(YOLOv5、YOLOv6、YOLOv8以及YOLOv9)和Streamlit框架的行人头盔检测系统

模型训练及结果

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

Ultralytics框架下的YOLOv8m模型的训练结果
在这里插入图片描述

Ultralytics框架下的YOLOv5s模型的训练结果
在这里插入图片描述

Ultralytics框架下的YOLOv6s模型的训练结果
Ultralytics框架下的YOLOv9c模型的训练结果片描述Ultralytics框架下的YOLOv9c模型的训练结果

综上,本博文训练得到的YOLOv8模型在数据集上表现良好,具有较高的检测精度和鲁棒性,可以在实际场景中应用。另外本博主对整个系统进行了详细测试,最终开发出一版流畅的高精度目标检测系统界面。另外本博文的PDF与更多的目标检测识别系统请关注笔者的微信公众号 BestSongC,在后台回复20240524来获取,后续会有更多的项目首发于该公众号。

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络考试系统的设计与实现参考论文(论文 + 源码)

网络考试系统的设计与实现 摘 要 科技在进步,人们生活和工作的方式正发生着改变,不仅体现在人们的衣食住行,也体现在与时俱进的考试形式上。以前的考试需要组织者投入大量的时间和精力,需要对考试的试题进行筛选,对后期…

变量命名的艺术:从蛇形到驼峰

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、蛇形命名法的魅力 二、类名和模块名的特殊规则 三、驼峰命名法的魅力与挑战 四、保持…

DLRover:蚂蚁集团开源的AI训练革命

在当前的深度学习领域,大规模训练作业面临着一系列挑战。首先,硬件故障或软件错误导致的停机时间会严重影响训练效率和进度。其次,传统的检查点机制在大规模训练中效率低下,耗时长且容易降低训练的有效时间。资源管理的复杂性也给…

新建项目上传gitee

1.在项目根目录下打开黑窗口执行初始化 git init2.复制码云上新建仓库地址 3.本地仓库和远程仓库建立连接 远程仓库地址是之前复制的仓库地址,复制后直接在命令窗口中鼠标右键Paste即可在命令窗口粘贴出来 git remote add origin 远程仓库地址4.每次上传之前先更…

【嵌入式软件工程师面经】Socket,TCP,HTTP之间的区别

目录: 目录 目录: 一、Socket原理与TCP/IP协议 1.1 Socket概念: 1.2 建立Socket连接: 1.3 SOCKET连接与TCP/IP连接 二、HTTP连接: 2.1 HTTP原理 三、三者的区别和联系 前些天发现了一个巨牛的人工智能学习网站&#xf…

头歌openGauss-存储过程第1关:创建存储过程

编程要求 1、创建第1个存储过程,并调用; 1)创建存储过程,查询emp表数据; 2)调用存储过程; --创建存储过程,获得计算机(cs)系学生选课情况并将结果写入临时表t…

Excel插入多行VBA实现

我们还可以利用 VBA(Visual Basic for Applications)宏语言,在 Excel 中写一个 VBA 宏来自动插入多行数据。这种方法可以方便我们自定义需要插入的行数和插入位置。下面是编写 VBA 宏的步骤: 1、按下Alt F11快捷键,打…

JavaScript表达式和运算符

表达式 表达式一般由常量、变量、运算符、子表达式构成。最简单的表达式可以是一个简单的值。常量或变量。例:var a10 运算符 运算符一般用符号来表示,也有些使用关键字表示。运算符由3中类型 1.一元运算符:一个运算符能够结合一个操作数&…

忍の摸头之术游戏娱乐源码

本资源提供给大家学习及参考研究借鉴美工之用,请勿用于商业和非法用途,无任何技术支持! 忍の摸头之术游戏娱乐源码,抖音上面非常火的摸头杀画面,看得我眼花缭乱,源码拿去玩吧; 目录说明 忍の摸头之术:域…

物理服务器介绍

物理服务器介绍 概述分类按服务器应用分类按服务器结构分类塔式服务器机架式服务器刀片式服务器机架式服务器与刀片式服务器的对比按处理器个数分类按处理器架构分类 主板概述工作原理物理结构技术参数 CPU概述工作原理指令集相关技术技术参数主流产品 内存概述类型相关技术技术…

【linux特殊符号】

文章目录 学习目标一、Linux的特殊符号1.系统变量2.引号 总结 学习目标 1.学会查看系统变量 2.学会各种引号 3.一、Linux的特殊符号 1.系统变量 windows系统变量:echo %path% linux系统变量:echo $PATH2.引号 " " 双引号,换行…

Vue3路由配置

路由其实就是一组对应关系,将一个路径与一个组件对应起来,当路径发生变化,路由器就可以通过路由规则,找到当前路径对应的组件,并将该组件呈现到页面上 使用路由步骤: 1.终端输入 npm i vue-router 2.在App…

解耦:哪些方法可以用来解耦代码

目录 1.引用 2.为何解耦如此重要 3.如何判断代码是否需要解耦 4.如何给代码解耦 5.思考题 1.引用 前面我们曾经讲到,重构可以分为大型重构和小型重构。小型重构的主要目的是提高代码的可读性,大型重构的主要目的是解耦。本节讲解如何对代码进行解耦…

es问题汇总--待完善

1. 查询某个索引库中数据总量 方式一: CountRequest 鄙人喜欢这种方式 public long getTotalNum(String indexName) throws IOException {CountRequest countRequest new CountRequest(indexName);// 如果需要,你可以在这里添加查询条件// countReques…

MySQL之架构设计与历史(一)

架构设计与历史 概述 和其他数据库系统相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥好的作用,但同时也会带来一点选择上的困难。MySQL并不完美,却足够灵活,能够适应高要求的环境,例如…

【全开源】班级管家微信小程序(FastAdmin+ThinkPHP)

班级管家微信小程序 班级管家微信小程序,作为一款专注于家校沟通、作业管理、成绩发布等方面的工具,凭借其丰富的特色功能和显著的优势,已经成为广大教师、家长和学生日常学习生活中不可或缺的一部分。 一、特色功能 家校沟通便捷&#xff…

高效利用键盘上的 caps lock(大写键)实现中英切换

先看效果 在中文输入环境中,Caps Lock 键经常被忽视,占据了键盘上的黄金位置却很少派上用场。接下来,我将介绍如何将这个闲置的键合理利用,让它变得更加实用。 第一步 设置: 我以五笔为例: 1.输入法默认…

CCF20230301——田地丈量

CCF20230301——田地丈量 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n,a,b;cin>>n>>a>>b;int x1,x2,y1,y2,x,y,sum0;for(int i0;i<n;i){cin>>x1>>y1>>x2>>y2;xmin(x2,a)-max(x1,…

基础3 探索JAVA图形编程桌面:逻辑图形组件实现

在一个宽敞明亮的培训教室里&#xff0c;阳光透过窗户柔和地洒在地上&#xff0c;教室里摆放着整齐的桌椅。卧龙站在讲台上&#xff0c;面带微笑&#xff0c;手里拿着激光笔&#xff0c;他的眼神中充满了热情和期待。他的声音清晰而洪亮&#xff0c;传遍了整个教室&#xff1a;…

k8s 1.28.10 浏览器访问6443查看api,需要证书

添加证书 使用client-certificate-data和client-key-data生成一个p12文件 1.生成client-certificate-data grep client-certificate-data ~/.kube/config | head -n 1 | awk {print $2} | base64 -d >> kubecfg.crt2.生成client-key-data grep client-key-data ~/.kub…