基于YOLOv7的口罩检测

目录

  • 1. 作者介绍
  • 2. YOLOv7网络模型
    • 2.1 算法简介
    • 2.2 数据集介绍
    • 2.3 YOLO格式数据集制作
  • 3. 代码实现
    • 3.1 分割数据集
    • 3.2 修改数据配置文件
    • 3.3 修改训练代码,进行训练
    • 3.4 修改测试代码,进行测试
    • 3.5 检测结果

1. 作者介绍

曹宇欢,女,西安工程大学电子信息学院,2023级研究生
研究方向:模式识别与人工智能
电子邮件:1472644890@qq.com

张思怡,女,西安工程大学电子信息学院,2022级研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:981664791@qq.com

2. YOLOv7网络模型

2.1 算法简介

YOLOv7是一种面向对象检测算法,它利用单次神经网络前向传播实现高效检测并且通过将检测任务分解为多个子任务来完成,从而显著提高了检测的速度和精度。
注意:YOLOv7官方给出了相关论文及源码,地址如下

论文地址:https://arxiv.org/abs/2207.02696
论文代码下载地址:https://github.com/WongKinYiu/yolov7

在这里插入图片描述
上图展示了YOLOv7目标检测算法的整体网络结构。从图中可看出yolov7网络由三个部分组成:input,backbone和head,与yolov5不同的是,将neck层与head层合称为head层,实际上的功能的一样的。对各个部分的功能和yolov5相同,如backbone用于提取特征,head用于预测。

输入层主要是对输入的图片进行预处理,主要包括 Mosaic数据增强、自适应锚框计算、自适应图片缩放等操作。

主干网络主要功能是特征提取,主要包括CBS模块、ELAN模块和MP模块。CBS模块是由1个卷积层、1个归一化层和1个Silu激活函数层构成。ELAN模块由多个CBS模块构成,它通过控制最短和最长的梯度路径,使一个更深的网络同样可以有效地进行学习和收敛。MP模块的主要作用是进行下采样。

头部网络主要包括SPPCSPC模块、UP模块、ELAN-H模块和REP模块。SPP模块的作用是通过最大池化来增大感受野,提升模型精度。CSP模块的主要作用是减小计算量。它将特征分为两部分,其中一部分进行常规处理,另一部分进行SPP结构处理,最后再将两部分合并在一起。这样做可以减少计算量,而且还可以提升模型的精度。UP模块的主要作用是通过最近邻插值的方式进行上采样。ELAN-H模块与ELAN模块非常相似,不同的是ELAN-H模块选取的输出数量比ELAN模块多。REP模块在训练时将1个用于特征提取的3x3卷积、1个用于平滑特征的1x1卷积和1个无卷积操作融合在1个卷积层中,在推理时则重参数化1个3x3的卷积。

2.2 数据集介绍

在疫情期间,佩戴口罩是防止病毒传播的有效措施之一。基于YOLOv7的口罩检测可以帮助政府和公共卫生机构实时监控公共场所人员是否正确佩戴口罩,从而提高防疫措施的有效性。将口罩检测系统集成到现有的监控摄像头中,可以在公共场所(如车站、机场、商场、学校等)实时检测和提醒未佩戴口罩的人员,有助于提高公众卫生意识,减少传染病传播风险。因此,研究佩戴口罩的检测算法,具有重大的意义和广泛的应用价值。

使用网络上的工口罩检测数据集,该数据集共标注2个类别(‘mask’,‘no-mask’),下面给出该数据集下载链接:

口罩数据集百度网盘下载链接:https://pan.baidu.com/s/1Gud8jemSCdjG00TYA74WpQ
提取码:sv74

2.3 YOLO格式数据集制作

本文使用labelimg标注工具,标注了1000张左右作为训练集和验证,分了2个类别:mask,no-mask。

  1. 安装数据集制作工具
    执行如下命令进行数据集制作工具的安装:pip install labelimg
  2. 运行数据集制作工具
    在Terminal执行如下命令打开labelimg、
    在这里插入图片描述
    Labelimg界面如下:
    在这里插入图片描述
  3. 制作数据集
    点击Open Dir打开待制作的图片文件(尽量将图片放在images目录下,以便进行数据集的分割),点击左侧的模式切换,将PascalVOC切换到YOLO模式
    在这里插入图片描述
    绘制box框,并指明标签,点击Create RectBox按钮绘制矩形边框并设置标签文本(no-mask),点击save保存样本标签信息(可以将标签文件存放在labels文件夹下,以便后续进行数据集的分割)
    在这里插入图片描述

3. 代码实现

完整代码已打包到百度网盘:

链接:https://pan.baidu.com/s/1BsPmILw-Nnwn9ZT2anwQ3g
提取码:ddll

3.1 分割数据集

将数据集分割成训练集和验证集,同时可以根据RAIN_RATIO=80来调整训练集和验证集数据比例。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 修改数据配置文件

将coco.yaml复制到新建的mask.yaml中,该步骤主要进行修改训练集、验证集、测试集的地址以及类别和名称。
在这里插入图片描述
在这里插入图片描述
修改cfg配置文件,主要将nc:修改为自己数据集的类别数。
在这里插入图片描述
在这里插入图片描述

3.3 修改训练代码,进行训练

修改预训练模型权重(在训练时使用的权重可以在yolov7的readme文档中自行下载用来进行模型的训练)、cfg路径、数据集路径
在这里插入图片描述
修改模型输出路径
在这里插入图片描述
训练轮数,默认为300,训练时间比较久,在这里可以将其修改成100;batch-size用来调整每批处理的图片数量,如果电脑显存较小,可以将其修改为2或4。
在这里插入图片描述
修改完成即可进行模型训练,生成的best.pt即为最佳模型参数。
在这里插入图片描述

3.4 修改测试代码,进行测试

修改模型参数文件(这里使用的权重即为训练时产生的最佳的权重best.pt),数据集路径。
在这里插入图片描述

检测文件参数修改,将source里边的default值改为0也可调用自己的摄像头进行实时检测。
在这里插入图片描述

3.5 检测结果

在训练阶段,使用YOLOv7算法对数据集进行训练,总计训练了300个epochs。从下图可以看出,随着训练次数的增加,模型的训练损失和验证损失都逐渐降低,说明模型不断地学习到更加精准的特征。在训练结束后,我们使用模型在数据集的验证集上进行了评估,得到了以下结果。
在这里插入图片描述
通过分析下述曲线,可以了解到模型在不同置信度下的性能表现。
在这里插入图片描述
下图则是输入指定图片进行检测的结果,也可根据上述代码的修改调用自己的摄像头进行实时检测。
在这里插入图片描述

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

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

相关文章

跨越国界, 纷享销客助力企业全球业务增长

出海,已不再是企业的“备胎”,而是必须面对的“大考”!在这个全球化的大潮中,有的企业乘风破浪,勇攀高峰,也有的企业在异国他乡遭遇了“水土不服”。 面对“要么出海,要么出局”的抉择&#xff…

盲盒风尚:拆盒吧引领新潮消费趋势

在当下这个快速变化的消费时代,拆盒吧以其独特的盲盒经济模式,成为了新潮文化消费的引领者。不同于传统的购物方式,拆盒吧通过创新的玩法和多元化的产品线,为消费者带来了前所未有的购物体验。 一、拆盒吧:解锁盲盒新玩…

现代密码学-国密算法

商用密码算法种类 商用密码算法 密码学概念、协议与算法之间的依赖关系 数字签名、证书-公钥密码、散列类算法 消息验证码-对称密码 ,散列类 安全目标与算法之间的关系 机密性--对称密码、公钥密码 完整性--散列类算法 可用性--散列类、公钥密码 真实性--公…

数据结构之初始泛型

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构(Java版) 目录 深入了解包装类 包装类的由来 装箱与拆箱 面试题 泛型 泛型的语法与使用…

可长期操作的赚钱项目,时间自由,但不适合大学生

如何评价现在的csgo市场? 可长期操作的赚钱项目,时间自由,但不适合大学生。 都在问,有哪些可以长期做下去的赚钱项目,童话就不拐弯抹角了,csgo/steam游戏搬砖一定是最适合长期做下去的赚钱项目。 不说别人…

CondaSSLError: OpenSSL appears to be unavailable on this machine.

conda create -n x1 python3.7报错 PS C:\Users\Richardo.M.Song\Desktop\lele_seg\x1> conda create -n x1 python3.7 Collecting package metadata (current_repodata.json): failed CondaSSLError: OpenSSL appears to be unavailable on this machine. OpenSSL is requ…

Varnish讲解文章、缓存代理配置、核心功能、优势、Varnish在什么情况下会选择缓存哪些类型的内容、Varnish如何实现负载均衡功能?

varnish官网链接 Varnish文章概览 Varnish是一款高性能的HTTP加速器(web应用加速器),是一款开源软件,它能够显著提高网站的响应速度和减少服务器的负载。Varnish的设计理念是利用缓存技术,将频繁访问的静态内容存储在…

【Python】 探索Pytz库中的时区列表

基本原理 在Python中,处理时区是一个常见但复杂的问题。pytz是一个Python库,它提供了对时区的精确和丰富的支持。pytz库是datetime模块的补充,它允许更准确地处理时区信息。pytz库包括了IANA时区数据库,这个数据库包含了全球的时…

13-至少有5名直接下属的经理(高频 SQL 50 题基础版)

13-至少有5名直接下属的经理 select name from Employee where id in (select managerId -- 查找大于5的经理idfrom Employeegroup by managerId -- 根据id分组having count(*)>5); -- 根据分组的数据进行求个数

小白级教程—安装Ubuntu 20.04 LTS服务器

下载 本教程将使用20.04版进行教学 由于官方速度可能有点慢,可以下方的使用清华镜像下载 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/ 点击20.24版本 选择 ubuntu-20.04.6-live-server-amd64.iso 新建虚拟机 下载好后 我们使用 VMware 打开它 这里选…

使用Python和wxPython将PNG文件转换为JPEG文件

简介: 在图像处理中,有时候我们需要将PNG格式的图像文件转换为JPEG格式。本篇博客将介绍如何使用Python编程语言和wxPython图形用户界面库,以及Pillow图像处理库来实现这一转换过程。通过本文的指导,您将学习如何快速将指定文件夹…

Docker run 命令常用参数详解

Docker run 命令提供了丰富的参数选项,用于配置容器的各种设置。以下是docker run命令的主要参数详解, 主要参数详解 后台运行与前台交互 -d, --detach: 在后台运行容器,并返回容器ID。-it: 分配一个伪终端(pseudo-TTY&#xff0…

路由策略案例

一、路由策略案例 如图所示,某公司内终端通过Switch接入公司内部网络。如果该公司内存在非如图1所示,运行OSPF协议的网络中,RouterA从Internet网络接收路由,并头RouterB提供了部分Internet路由。其中: RouterA仅提供172.1…

Unity DOTS技术(五)Archetype,Chunk,NativeArray

文章目录 一.Chunk和Archetype什么是Chunk?什么是ArchType 二.Archetype创建1.创建实体2.创建并添加组件3.批量创建 三.多线程数组NativeArray 本次介绍的内容如下: 一.Chunk和Archetype 什么是Chunk? Chunk是一个空间,ECS系统会将相同类型的实体放在Chunk中.当一个Chunk…

蓝桥杯物联网竞赛_STM32L071_20_用printf将数据显示在OLED上

需求: 第十五届国赛确实有点变态,显示部分大概有6个所以需要大量将sprintf与OLED_ShowString配合使用才能显示相应格式的数据,所以我在想能不能简化一下这一部分直接用写好的printf语句将数据显示到显示屏上呢? 代码&#xff1a…

重学java 61.IO流 字节流 ② 字节输出流

夜色难免黑凉,前行必有曙光 —— 24.6.4 一、I0流介绍以及输入输出以及流向的介绍 1.单词: output:输出 Input:输入 write:写数据 read:读数据 2.IO流: 将一个设备上的数据传输到另外一个设备上,称之为IO流技术 3.为什么要学IO流? 之前学了…

树的知识总结

一:树的基本术语(只写了查漏的部分 1 双亲:就是父节点 2 层序编号 3 有序无序树 4 森林 二:逻辑结构上与线性结构的比较 三:树的存储结构 ①双亲表示节点法:

第一个SpringBoot项目

目录 💭1、新建New Project IDEA2023版本创建Sping项目只能勾选17和21,却无法使用Java8?🌟 2、下载JDK 17🌟 💭2、项目创建成功界面 1、目录 🌟 2、pom文件🌟 💭3、…

基础篇03——SQL约束

概述 约束示例 完成以下案例&#xff1a; create table user (id int primary key auto_increment comment 主键,name varchar(10) not null unique comment 姓名,age tinyint unsigned check ( age > 0 and age < 120 ) comment 年龄,status char(1) default 1 commen…

VUE3 学习笔记(13):VUE3 下的Element-Plus基本使用

UI是页面的门面&#xff0c;一个好的UI自然令人赏心悦目&#xff1b;国人团队开发的ElementUI在众多UI中较为常见&#xff0c;因此通过介绍它的使用让大家更好的了解第三方UI的使用。 安装 Npm install element-plus --save 或 Cnpm install element-plus --save 配置 全局配置…