基于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.mzph.cn/news/840125.shtml

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

相关文章

C++中获取int最大与最小值

不知道大家有没有遇到过这种要求:“返回值必须是int,如果整数数超过 32 位有符号整数范围 [−2^31, 2^31 − 1] ,需要截断这个整数,使其保持在这个范围内。例如,小于 −2^31 的整数应该被固定为 −2^31 ,大…

保护元件-详实的熔断器(保险丝)知识

目录: 一、汽车保险丝设计与选型 1、概述 2、构造及工作原理 1)构造 2)工作原理 3)保险丝熔断及分断时间 4)时间/电流特性曲线 5)环境温度修正系数 3、熔化热能值I2t★ 4、三种电流模型 1&a…

java技术:spring-secrity实现认证、授权

目录 一、依赖 二、逻辑图 三、代码设计 1、WebSecurityConfigurerAdapter的实现类 2、设计登录接口 config配置: 1)UserDetailsService实现类重写: 2)书写登录实现类(调用authenticationManager、可以与后面的…

doxygen 1.11.0 使用详解(十)——包含表格

目录 Doxygen supports two ways to put tables in the documentation. The easiest is to use the Markdown format as shown in Markdown Extensions section Tables. Although this format is easy to use and read, it is also rather limited. It supports only a simpl…

Vue学习笔记2——创建一个Vue项目

Vue项目 1、创建一个Vue项目2、Vue项目的目录结构3、模版语法4、属性绑定5、条件渲染 1、创建一个Vue项目 vue官方文档: https://cn.vuejs.org/打开命令行界面( “winR"再输入"cmd”),切换位置到指定的位置创建vue项目…

Oracle 归档模式学习笔记

版权声明:本文为CSDN博主「杨群」的原创文章,遵循CC 4.0 BY-SA版权协议,于2024年5月17日首发于CSDN,转载请附上原文出处链接及本声明。   原文链接:https://blog.csdn.net/u011046671/article/details/139012428 一…

微星打造全球首款DDR5 CAMM2内存主板:这下清爽了

微星预告了新款主板“ Z790 Project Zero Plus”,这也是 全球第一款配备DDR5 CAMM2内存的桌面主板! CAMM全称为“Compression Attached Memory Module”,已被JEDEC组织接纳为行业标准,相比传统的SO-DIMM、DIMM内存最大特点就是取消…

MM模块五(采购订单)

创建采购订单:ME21N 参考报价单创建采购订单: 哪个采购部门的哪个采购员为哪个公司代码下的采购订单 点击保存 注:采购订单的数量不能大于采购申请的数量

Milvus 高级特性

引言 Milvus 的高级特性包括分布式架构、安全性和监控与日志管理,这些特性使得 Milvus 能够更好地适应企业级应用的需求。 一、分布式架构 1.1 集群部署 在当今大数据和人工智能的时代,向量数据库以其对高维数据的强大处理能力,成为了许多…

Map遍历、反射、GC

map的遍历 用foreach遍历 HashMap<Character,Integer> map new HashMap<>();map.put(A,2);map.put(B,3);map.put(C,3);for (Map.Entry<Character,Integer> entry: map.entrySet()) {char key entry.getKey();int value entry.getValue();System.out.prin…

影视解说5.0版零基础视频课程

课程简介 现在还能做解说吗、不会写解说文案怎么解决、不会配音怎么解决、如何找到合适的素材资源、如何变现…这是很多想做解说的伙伴最关心的几大问题。比如文案&#xff0c;我们推荐一个网站&#xff0c;10分钟搞定一篇文案&#xff0c;配音可以真人配音也可以软件配音。5.…

软考-2023年11月系统架构设计师真题回忆

2023年11月系统架构设计师真题回忆 选择题 1-2.Mccabe 度量法&#xff08;错误的是V(g&#xff09;m-n1、最大范围≤10) 3.多线程任务通信方式&#xff08;共享内存消息传递&#xff09; 4.星型拓扑结构最多2跳 5.数据库(A->B,B->C),属于2NF 6.数据库去除多值依赖属…

【区块链】fisco网络运维之添加节点黑名单

基于已完成的区块链系统与管理平台搭建工作&#xff0c;开展区块链节点的黑名单工作&#xff0c;具体操作如下 以node3为例子 1查看node0节点的连接状态日志&#xff08;现有4个节点连接&#xff09; 注意&#xff1a;如果查询不到连接状态&#xff0c;修改node0的配置文件中…

DataFrame—数据汇总4

文章最前&#xff1a; 我是Octopus&#xff0c;这个名字来源于我的中文名--章鱼&#xff1b;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github &#xff1b;这博客是记录我学习的点点滴滴&#xff0c;如果您对 Python、Java、AI、算法有兴趣&#xff0c;可以关注我的…

Flask多线程开发指南

文章目录 1. 什么是多线程&#xff1f;2. Flask中的多线程3. 注意事项结论 在Web应用程序开发中&#xff0c;有时候需要处理一些耗时的任务&#xff0c;例如与数据库交互、发送网络请求或执行计算密集型的操作。为了保持用户体验的流畅性&#xff0c;我们可以使用多线程来处理这…

LoadBalancer

一、手写随机负载均衡 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency><!--引入nacos discovery--> <dependency><groupId>com…

socket地址理解

socket介绍 套接字的基本概念 1. 套接字的定义&#xff1a; 套接字&#xff08;socket&#xff09;是计算机网络中用于通信的端点&#xff0c;它抽象了不同主机上应用进程之间双向通信的机制。 2. 套接字的作用&#xff1a; 套接字连接应用进程与网络协议栈&#xff0c;使…

vb.net打开CAD指指定路径文件

首先打开vsto,创建窗体&#xff0c;添加一个按钮&#xff0c;双击按钮录入代码&#xff1a; Public Class Form1Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.ClickDim cad As Objectcad CreateObject("autocad.Application")cad…

Java枚举的本质

目录 1.枚举简介 1.1.规范 1.2.枚举类真实的样子 1.3.枚举类的特点 1.4.枚举可以使用的方法 1.4.1.toString()方法 1.4.2.valueOf方法 1.4.3.values方法 1.4.4.ordinal方法 1.5.枚举的用法 1.5.1.常量 1.5.2.switch 1.5.3.枚举中增加方法 1.5.4.覆盖枚举方法 1.5…

工具推荐:市面上有哪些带有ai问答机器人的SaaS软件

众所周知&#xff0c;SaaS&#xff08;软件即服务&#xff09;模式下的AI问答机器人已经逐渐成为企业、个人在办公、生活和学习中的辅助工具。ai问答机器人凭借高效、便捷、智能的特点&#xff0c;为用户提供了全新的交互体验。本文将推荐几款市面上好用的带有ai问答机器人的Sa…