竞赛选题 基于机器视觉的行人口罩佩戴检测

news2025/2/22 0:53:19

简介

2020新冠爆发以来,疫情牵动着全国人民的心,一线医护工作者在最前线抗击疫情的同时,我们也可以看到很多科技行业和人工智能领域的从业者,也在贡献着他们的力量。近些天来,旷视、商汤、海康、百度都多家科技公司研发出了带有AI人脸检测算法的红外测温、口罩佩戴检测等设备,依图、阿里也研发出了通过深度学习来自动诊断新冠肺炎的医疗算法。

🔥 优质竞赛项目系列,今天要分享的是

图像口罩识别

该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

效果展示

不多说, 先上效果
在这里插入图片描述
在这里插入图片描述

实现方法

模型介绍

在深度学习时代之前,人脸检测一般采用传统的、基于手动设计特征的方法,其中最知名的莫过于Viola-
Jones算法,至今部分手机和数码相机内置的人脸检测算法,仍旧采用Viola-
Jones算法。然而,随着深度学习技术的蓬勃发展,基于深度学习的人脸检测算法逐步取代了传统的计算机视觉算法。

在人脸检测最常用的数据集——WIDER Face数据集的评估结果上来看,使用深度学习的模型在准确率和召回率上极大的超过了传统算法。下图的青线是Viola-
Jones的Precision-Recall图。
在这里插入图片描述

下图是众多基于深度学习的人脸检测算法的性能评估PR曲线。可以看到基于深度学习的人脸检测算法的性能,大幅超过了VJ算法(曲线越靠右越好)。近两年来,人脸检测算法在WIDER
Face的简单测试集(easy 部分)上可以达到95%召回率下,准确率也高达90%,作为对比,VJ算法在40%召回率下,准确率只有75%左右。
在这里插入图片描述

其实,基于深度学习的人脸检测算法,多数都是基于深度学习目标检测算法进行的改进,或者说是把通用的目标检测模型,为适应人脸检测任务而进行的特定配置。而众多的目标检测模型(Faster
RCNN、SSD、YOLO)中,人脸检测算法最常用的是SSD算法,例如知名的SSH模型、S3FD模型、RetinaFace算法,都是受SSD算法的启发,或者基于SSD进行的任务定制化改进,
例如将定位层提到更靠前的位置,Anchor大小调整、Anchor标签分配规则的调整,在SSD基础上加入FPN等。

在我个人看来,SSD是最优雅、简洁的目标检测模型,因此,我们实现的人脸口罩检测模型,也是采用SSD的思想,限于篇幅原因

在本项目中,我们使用的是SSD架构的人脸检测算法,相比于普通的人脸检测模型只有人脸一个类别,而人脸口罩检测,只不过是增加了一个类别,变成戴口罩人脸和不戴口罩的人脸两个类别而已。

我们开源的模型是一个非常小的模型,输入是260x260大小,主干网络只有8层,有五个定位和分类层,一共只有28个卷积层。而每个卷积层的通道数,是32、64、128这三种,所有这个模型总的参数量只有101.5万个参数。下图是网络的结构图。
在这里插入图片描述

其中,上面八个卷积层是主干网络,也就是特征提取层,下面20层是定位和分类层(注意,为了方便显示,我们没有画出BN层)。

训练目标检测模型,最重要的合理的设置anchor的大小和宽高比,笔者个人在做项目时,一般会统计数据集的目标物体的宽高比和大小来设置anchor的大小和宽高比。例如,在我们标注的口罩人脸数据集上,我们读取了所有人脸的标注信息,并计算每个人脸高度与宽度的比值,统计得到高度与宽比的分布直方图,如下:
在这里插入图片描述

因为人脸的一般是长方形的,而很多图片是比较宽的,例如16:9的图片,人脸的宽度和高度归一化后,有很多图片的高度是宽度的2倍甚至更大。从上图也可以看出,归一化后的人脸高宽比集中在1~2.5之间。所以,根据数据的分布,我们将五个定位层的anchor的宽高比统一设置为1,0.62,
0.42。(转换为高宽比,也就是约1,1.6:1,2.4:1)

五个定位层的配置信息如下表所示:

在这里插入图片描述

笔者使用基于Keras实现的目标检测微框架训练的人脸口罩检测模型,为了避免一些网友提到的使用手挡住嘴巴就会欺骗部分口罩检测系统的情况,我们在数据集中加入了部分嘴巴被手捂住的数据,另外,我们还在训练的过程中,随机的往嘴巴部分粘贴一些其他物体的图片,从而避免模型认为只要露出嘴巴的就是没戴口罩,没露出嘴巴的就是带口罩这个问题,通过这两个规避方法,我们很好的解决了这个问题,大家可以在aizoo.com体验我们的模型效果。

后处理部分主要就是非最大抑制(NMS),我们使用了单类的NMS,也就是戴口罩人脸和不戴口罩人脸两个类别一起做NMS,从而提高速度。

获取数据集

人脸口罩数据集下载

下载人脸口罩数据集的目的是利用OpenCV进行模型训练,这里采用口罩数据集的正负比列为1:3,即500张戴口罩的人脸图片和1500张不戴口罩的人脸图片。

数据集获取:联系博主获取

解压之后,将压缩包中的mask文件自行选择文件夹放置,以便之后的操作。

如下:
在这里插入图片描述

上面带口罩的人脸图像我们命名为正样本,相反,没带口罩的数据集合命名为负样本, 如下:

在这里插入图片描述
由于数据集解压后样本图像命名是乱序的,我们要进行重命名,上面两幅图是已经处理好的, 下面给出示例代码



    #对数据集重命名
    #coding:utf-8
    import os
    path = "E:\\facemask\\mask\\have_mask" #人脸口罩数据集正样本的路径
    filelist = os.listdir(path)
    count=1000 #开始文件名1000.jpg
    for file in filelist:   
        Olddir=os.path.join(path,file)  
        if os.path.isdir(Olddir):  
            continue
        filename=os.path.splitext(file)[0]   
        filetype=os.path.splitext(file)[1]
     
        Newdir=os.path.join(path,str(count)+filetype)  
        os.rename(Olddir,Newdir)
        count+=1


    #对数据集重命名
    #coding:utf-8
    import os
    path = "E:\\facemask\\mask\\no_mask" #人脸口罩数据集的路径
    filelist = os.listdir(path)
    count=10000 #开始文件名1000.jpg
    for file in filelist:   
        Olddir=os.path.join(path,file)  
        if os.path.isdir(Olddir):  
            continue
        filename=os.path.splitext(file)[0]   
        filetype=os.path.splitext(file)[1]
     
        Newdir=os.path.join(path,str(count)+filetype)  
        os.rename(Olddir,Newdir)
        count+=1

最后

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

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

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

相关文章

C++下标运算符详解

C++ 规定,下标运算符[ ]必须以成员函数的形式进行重载。该重载函数在类中的声明格式如下: 返回值类型 & operator[ ] (参数); const 返回值类型 & operator[ ] (参数) const; 使用第一种声明方式,[ ]不仅可以访问元素,还可以修改元素。使用第二种声明方式,[ ]只…

点灯科技实现 “ESP8266-01/01s + 继电器” 远程开关

教程视频 ESP-01S继电器插座怎么使用? 所需硬件 继电器 ESP-01S继电器插座 WIFI模块 esp8266-01s wifi模块 烧录器 软件准备 Arduino IDE需安装好esp8266扩展 点击下载 下载并安装blinker APP Android下载: 点击下载 或 在android应用商店…

构建健壮的Spring MVC应用:JSON响应与异常处理

目录 1. 引言 2. JSON 1. 轻量级和可读性 2. 易于编写和解析 3. 自描述性 4. 支持多种数据类型 5. 平台无关性 6. 易于集成 7. 社区支持和标准化 3. 高效处理异常 综合案例 异常处理方式一 异常处理方式二 异常处理方式三 1. 引言 探讨Spring MVC中关键的JSON数据…

day18-API(常见API,对象克隆)

课程目标 能够熟练使用Math类中的常见方法 能够熟练使用System类中的常见方法 能够理解Object类的常见方法作用 能够熟练使用Objects类的常见方法 能够熟练使用BigInteger类的常见方法 能够熟练使用BigDecimal类的常见方法 1 Math类 1.1 概述 tips:了解内容…

nbcio-boot移植到若依ruoyi-nbcio平台里一formdesigner部分(三)

因为这个版本的若依plus不支持本地文件上传&#xff0c;所以需要增加这些本地上传文件的后端代码 和前端代码修改。 1、后端部分 先配置跳过测试吧&#xff0c;平时编译也不需要这个 <!--添加配置跳过测试--><plugin><groupId>org.apache.maven.plugins<…

LVS负载均衡群集——LVS-NAT模式搭建和LVS-DR模式搭建

目录 lvs工作模式 1、NAT模式&#xff08;VS-NAT&#xff09; 2、直接路由模式&#xff08;VS-DR&#xff09; 3、IP隧道模式&#xff08;VS-TUN&#xff09; LVS调度算法 LVS群集类型 1&#xff09;负载均衡群集 LB 2&#xff09;高可用群集 HA 3&#xff09;高性能运…

分享篇:Canvas绘制简单图像

目录 Canvas绘制简单图形需要用到的基本知识&#xff1a; 1.moveTo() 2. lineTo() 3.stroke() 4.strokeStyle/lineWidth 5.beginPath() 6.closePath() 7.arc&#xff08;&#xff09; 8.createLinearGradient&#xff08;&#xff09; 9.createRadialGradient&#xf…

el-table 翻页记住上页选项,包含回显选中的数据

需求为翻页记住上页选项,包含回显选中的数据,然后还能进行新增和取消勾选 首先element管网有提供及住翻页功能 所以可以根据官网提供的方法来改造 一定要做的操作就是清空一下选中的数据,否则不生效,this.$refs.selectTable.clearSelection(); 然后就是处理选中的数据,和原…

Qt Quick Layouts Overview

Qt快速布局概述 #【中秋征文】程序人生&#xff0c;中秋共享# Qt快速布局是用于在用户界面中排列项目的项目。由于Qt快速布局还可以调整其项目的大小&#xff0c;因此它们非常适合可调整大小的用户界面。 开始 可以使用文件中的以下导入语句将 QML 类型导入到应用程序中。.qml…

机器视觉康耐视visionpro-脚本常见的编辑编译错误和运行错误及警告性错误,调试解决办法

3.康耐视VisionPro高级脚本系列教程-3.脚本编辑错误和运行错误调试方法,break和Continue的差别_哔哩哔哩_bilibili 目录 第一:康耐视visionpro脚本-编辑编译错误第二:康耐视visionpro脚本-运行错误第三:康耐视visionpro脚本-警告性错误第一:康耐视visionpro脚本-编辑编译…

三分钟图解事务隔离级别

详细见&#xff1a; 三分钟图解事务隔离级别&#xff0c;看一遍就懂数据库中事务指的是什么 “锁" 是数据库系统区别于文件系统的一个关键特性&#xff0c;其对象是事务&#xff0c;用来锁定的是数据库中的对象&#xff0c;如表、页、行等。锁确实提高了并发性&#xff…

C++之修改结构体成员字节对齐(二百一十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

深度优先搜索和广度优先搜索(C++、MATLAB代码迷宫应用)

深度优先搜索算法与广度优先搜索算法及其C、MATLAB代码迷宫应用 1. 深度优先搜索算法&#xff08;DFS&#xff09;1.1 深度优先搜索伪代码&#xff1a;1.2 案例应用&#xff1a;迷宫最小步数1.2.1 DFS算法MATLAB代码1.2.1 DFS算法C代码 2. 广度优先搜索算法&#xff08;BFS&am…

Redis主从复制(Redis6.2.5版本)

1、Redis单击服务问题&#xff1f; Redis的单机服务在实际的应用中会有很多的问题&#xff0c;所以在实际的使用中如果使用了redis服务&#xff0c;往往都不是单机服务&#xff0c;都会配置主从复制或者哨兵机制及redis的集群服务等。 Redis的单机服务&#xff0c;当主机发生机…

nbcio-boot移植到若依ruoyi-nbcio平台里一formdesigner部分(四)

到目前为止&#xff0c;虽然基础的formdesigner部分已经完成&#xff0c;但流程用formdesigner提交与审批过程中的显示还有问题。 1、后端部分 其中FormConf修改如下&#xff1a; package com.ruoyi.flowable.core;import lombok.Data;import java.util.List; import java.uti…

慢查询SQL如何优化

一.什么是慢SQL? 慢SQL指的是Mysql中执行比较慢的SQL,排查慢SQL最常用的方法是通过慢查询日志来查找慢SQL。Mysql的慢查询日志是Mysql提供的一种日志记录&#xff0c;它用来记录Mysql中响应时间超过long_query_time值的sql,long_query_time的默认时间为10s. 二.查看慢SQL是否…

华为云云耀云服务器L实例评测|基于云耀云服务器在Docker上部署nginx服务

文章目录 1、服务介绍云耀云服务器Docker介绍Docker-Compse介绍 2、在云耀云服务器安装Docker3、通过Docker run命令运行nginx服务4、在云耀云服务器安装docker-compose5、通过docker-compose方式启动nginx服务 1、服务介绍 云耀云服务器 云耀云服务器&#xff08;Hyper Elas…

ArcGIS 10.3安装教程!

软件介绍&#xff1a;ArcGIS是一款专业的电子地图信息编辑和开发软件&#xff0c;提供一种快速并且使用简单的方式浏览地理信息&#xff0c;无论是2D还是3D的信息。软件内置多种编辑工具&#xff0c;可以轻松的完成地图生产全过程&#xff0c;为地图分析和处理提供了新的解决方…

java高级:动态代理

动态代理介绍、准备功能 这节课我们学习一个Java的高级技术叫做动态代理。首先我们认识一下代理长什么样&#xff1f; 假设现在有一个明星坤坤&#xff0c;它有唱歌和跳舞的本领&#xff0c;作为明星是要用唱歌和跳舞来赚钱的&#xff0c;但是每次做节目&#xff0c;唱歌的时…

多线程和并发编程(3)—AQS和ReentrantLock实现的互斥锁

一、管程模型—MESA模型 管程是什么&#xff1f; 管程就是指管理共享变量&#xff0c;以及对共享变量的相关操作。 在管程的发展史上&#xff0c;先后出现过三种不同的管程模型&#xff0c;分别是Hasen模型、Hoare模型和MESA模型。现在正在广泛使用的是MESA模型。 MESA模型…