人脸识别——探索戴口罩对人脸识别算法的影响
1. 概述
人脸识别是一种机器学习技术,广泛应用于各种领域,包括出入境管制、电子设备安全登录、社区监控、学校考勤管理、工作场所考勤管理和刑事调查。然而,当 COVID-19 引发全球大流行时,戴口罩就成了日常生活中的必需品。广泛使用的人脸识别技术受到严重影响,传统人脸识别技术的性能显著下降。虽然在过去几年中已有报道称支持口罩的人脸识别模型达到了一定的准确度,但佩戴口罩对人脸识别的影响尚未得到充分研究。
因此,本文比较并评估了多种人脸识别模型在辨别 "蒙蔽 "和 "未蒙蔽 "人脸图像时的性能。本文使用了六种传统的机器学习算法:支持向量机(SVC)、K 近邻(KNN)、线性判别分析(LDA)、决策树(DT)、逻辑回归(LR)和天真贝叶斯(NB)。(深度学习模型尚未经过验证)。
它研究了蒙面人脸图像的最佳和最差性能模型。论文还根据一个蒙面和未蒙面人脸图像数据集以及一个半蒙面人脸图像数据集对性能进行了评估。与以往的研究相比,本文的独特之处在于研究了广泛的面具佩戴数据和机器学习模型。
论文地址:https://arxiv.org/pdf/2306.08549.pdf
2. 机器学习模型和数据集
本文评估了六种模型:支持向量机(SVC/Support Vector Classifier)、线性判别分析(LDA/Linear Discriminant Analysis)、K-近邻(KNN/K-Nearest Neighbours)、决策树(DT/Decision Trees)、逻辑回归(LR/Logistic Regression)和奈夫贝叶斯(NB/Naïve Bayes)。(DT/决策树)、逻辑回归(LR/逻辑回归)和奈夫贝叶斯(NB/奈夫贝叶斯)。
该数据集还使用了 (ORL),其中包含 41 个受试者和每个受试者 10 张图像,共计 410 张未掩盖的人脸图像。下图显示了 ORL 的样本数据。

本文使用开源软件 MaskTheFace 为 ORL 人脸图像添加面具,并制作出佩戴面具的人脸图像。佩戴的面具是从六个面具模板中随机选择并添加的。下图显示了添加面具后的样本数据。

2. 实验细节
本文使用上述机器学习模型和数据集进行了六项实验。请注意,在所有实验中,特征提取都使用了局部二进制模式(LBP)算法。
**(实验 1)**在为 41 名受试者每人准备的 10 幅图像中,有 9 幅被用作未戴面罩的人脸图像,并对 6 个机器学习模型进行训练。在为 41 名受试者每人准备的 10 张图像中,剩下的一张也用作无遮罩的人脸图像,并对每个机器学习模型进行测试。
(实验 2)在为 41 名受试者每人准备的 10 张图像中,9 张作为未戴面罩的人脸图像用于训练 6 个机器学习模型。在为 41 名受试者每人准备的 10 张图像中,剩下的一张图像将与 MaskTheFace 一起使用,作为戴面具的人脸图像对每个模型进行测试。图 3
(实验 3)在为 41 名受试者每人准备的 10 幅图像中,有 9 幅被用作戴了面具的人脸图像,并训练了 6 个机器学习模型。在为 41 名受试者每人准备的 10 张图像中,剩下的一张也被用作无面具人脸图像,用于测试每个机器学习模型。
(实验 4)在为 41 名受试者每人准备的 10 幅图像中,有 9 幅被用作戴上面具后的人脸图像,并训练了 6 个机器学习模型。然后,使用 MaskTheFace 将为 41 名受试者分别准备的 10 幅图像中的其余一幅图像作为戴上面具的人脸图像,对每个模型进行测试。图 4
(实验 5)在为 41 名受试者每人准备的 10 幅图像中,保留一幅图像用于测试,其余 9 幅图像中的 4 幅在 MaskTheFace 软件中组合为戴面具的人脸图像,4 幅为未戴面具的人脸图像,总共 8 幅人脸图像。这样就形成了一个半数人脸图像戴有面具的数据集。利用这个数据集,可以训练出六个机器学习模型,每个模型都要在一张未戴面具的人脸图像上进行测试。
**(实验 6)**使用实验 5 中创建的数据集训练了六个机器学习模型,该数据集由半张被遮挡的人脸图像组成,每个模型都在单张被遮挡的人脸图像上进行了测试。图 5
3. 实验结果
下表显示了六个机器学习模型在所有六个实验中的准确率。对于在未屏蔽人脸图像(UM)上训练并在屏蔽人脸图像(M)上测试的机器学习模型(UM/M),LDA 的准确率下降幅度最小,为 61%,而 KNN 的准确率下降幅度最大,为 24%。还可以看出,对于在蒙版人脸图像(M)上训练并在蒙版图像(M)上测试的机器学习模型,LR 的准确率最高,为 80%,而 KNN 的准确率最低,为 37%。

下表显示了六种机器学习模型在所有六次实验中的 F1 分数。对于在未遮挡人脸图像(UM)上训练并在遮挡人脸图像(M)上测试的机器学习模型,LDA 的 F1 分数最高,为 76%,KNN 的分数最低,为 39%。而对于一半在蒙蔽人脸图像(HM)上训练,一半在蒙蔽图像(M)上测试的模型,LR 的 F1 得分最高,为 89%,KNN 的得分最低,为 54%。在蒙蔽图像(M)上训练并在蒙蔽图像(M)上测试的模型中,LR 的 F1 得分最高,为 89%,DT 的得分最低,为 54%。

回顾下表(再次),我们可以看到,在未蒙面的人脸图像(UM)上训练和在未蒙面的人脸图像(UM)上测试时,最佳平均性能为 81%。这是很自然的结果,因为机器学习模型是基于人脸图像没有戴面具这一假设建立的。另一方面,当模型在未戴面具的人脸图像上训练并在戴面具的人脸图像上测试时,平均性能最低,仅为 45%。这表明,正如 Corona 灾难所报告的那样,在未戴面具的人脸图像上训练的模型并不适合识别戴面具的人脸图像。这与已报告的结果具有可重复性。

我们还发现,如果在一个由不戴面具的人脸图像或一半戴面具的人脸图像组成的数据集上进行训练,机器学习模型在蒙面人脸图像测试中的平均准确率会下降。如果机器学习模型在戴了面具的人脸图像上进行训练,则测试戴了面具的人脸图像的准确率会提高。
上表还显示,在所有三种类型的训练数据上,LR 在识别未蒙蔽人脸图像方面都优于其他模型。当在带有遮挡或半遮挡图像的数据集上进行训练时,LR 在识别遮挡图像方面优于其他模型。
对于需要识别遮挡和未遮挡面部图像的系统来说,最好在由半遮挡面部图像组成的数据集上进行训练,并使用 LR,如上表所示。
4. 总结
本文为了研究戴面具对机器学习模型的影响,使用支持向量机(SVC/Support Vector Classifier)、线性判别分析(LDA/Linear Discriminant Analysis)、K-近邻(KNN/K-Nearest NeighboursSVC/Support Vector Classifier)、线性判别分析(LDA/Linear Discriminant Analysis)、K-Nearest Neighbours(KNN/K-Nearest Neighbours)、决策树(DT/Decision Trees)、逻辑回归(Logistic Regression (LR/Logistic Regression)和奈夫贝叶斯(NB/Naïve Bayes),并使用六种机器学习模型进行了详尽的实验。
实验结果表明,在 "半遮挡和半未遮挡面部图像数据集 "上进行训练时,LR 作为同时识别遮挡和未遮挡面部图像的系统表现最佳。
在识别被遮挡的人脸图像时,在更多被遮挡的人脸图像上训练的模型的准确率呈上升趋势,但与此同时,在识别未被遮挡的图像时,准确率呈下降趋势。
相关文章:
人脸识别——探索戴口罩对人脸识别算法的影响
1. 概述 人脸识别是一种机器学习技术,广泛应用于各种领域,包括出入境管制、电子设备安全登录、社区监控、学校考勤管理、工作场所考勤管理和刑事调查。然而,当 COVID-19 引发全球大流行时,戴口罩就成了日常生活中的必需品。广泛使…...
磁盘管理后续——盘符漂移问题解决
之前格式化磁盘安装了文件系统,且对磁盘做了相应的挂载,但是服务器重启后挂载信息可能有问题,或者出现盘符漂移、盘符变化、盘符错乱等故障,具体是dev/sda, sdb, sdc 等等在某些情况下会混乱掉 比如sda变成了sdb或者sdc变成了sdb等…...
基于GO 写的一款 GUI 工具,M3u8视频下载播放器-飞鸟视频助手
M3u8视频下载播放器-飞鸟视频助手 M3u8视频飞鸟视频助手使用m3u8下载m3u8 本地播放 软件下载地址m3u8嗅探 M3u8视频 M3u8视频格式是为网络视频播放设计,视频网站多数采用 m3u8格式。如腾讯,爱奇艺等网站。 m3u8和 mp4的区别: 一个 mp4是一个…...
关于EasyExcel导入数据时表格日期格式识别为数字问题
参考官方地址 自定义日期转字符串转换器 /*** 自定义excel日期转换器** author li* date 2024-05-29*/ public class CustomStringDateConverter implements Converter<String> {Overridepublic Class<?> supportJavaTypeKey() {return String.class;}Overridep…...
高通Android 12/13打开省电模式宏开关
1、添加到SettingsProvider配置项宏开关 默认节电助手自动开启百分比battery saver frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java private void loadGlobalSettings(SQLiteDatabase db) {在该方法中添加 ......final i…...
2023年西安交通大学校赛(E-雪中楼)
E.雪中楼 如果算出按南北的序列,再转成从低到高的编号序列,岂不是太麻烦了,幸好,没有在这方面费长时间,而是意识到,本质就是要从低到高的编号序列,所以我就按样例模拟了一下,当a[i]0…...
如何在vue2中使用tailwind
查看官方文档,不要去看过时的文章! 使用官网推荐的第一个安装方法 Installation - Tailwind CSS vue版本:2.6.10 1. 安装tailwind的包 npm install -D tailwindcss npx tailwindcss init 2. tailwind.config.js 文件中的content是你需要…...
【OrangePi AIpro】开箱初体验以及OAK深度相机测试
1. 简介 Orangepi AIPRO 是一款采用昇腾AI技术路线,集成4核64位处理器AI处理器的单板计算机,集成图形处理器,支持8TOPS AI算力,拥有8GB/16GB LPDDR4X,可以外接eMMC模块,支持双4K高清输出。 Orange Pi AIpr…...
滑动窗口模板(Java)
题目描述 有一个长为 𝑛 的序列 𝑎,以及一个大小为 𝑘 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。 例如,对于序列 [1,3,−1,−3,5,3,6,7] …...
transformers.BertTokenizer入门使用
教程link 示例代码 from transformers import OpenAIGPTLMHeadModel, GPT2LMHeadModel, BertTokenizer import torch tokenizer BertTokenizer.from_pretrained("thu-coai/CDial-GPT_LCCC-large") model OpenAIGPTLMHeadModel.from_pretrained("thu-coai/CD…...
快乐数-力扣
使用一个set来存储遇到的每个数,如果遇到的数在set中,那么说明这个数不是快乐数,否则一直循环下去,直到n 1结束循环,表示这个数是个快乐数。 需要注意的是,给定一个数 n, 怎样对这个数 n 进行每一位求和。…...
Git标签的使用
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
【uni-app】Pinia 持久化
小程序端 Pinia 持久化 说明:Pinia 用法与 Vue3 项目完全一致,uni-app 项目仅需解决持久化插件兼容性问题。 持久化存储插件 安装持久化存储插件: pinia-plugin-persistedstate pnpm i pinia-plugin-persistedstate插件默认使用 localStor…...
Flink 窗口
窗口(Window) 窗口是处理无限流的核心。 窗口将流分割成有限大小的“桶”,我们可以计算窗口中的数据。 窗口程序一般有键控流(keyed streams)的窗口程序 和 非键控流(non-keyed streams)的窗口…...
基于大模型和RAG技术实现的开源项目
基于大模型和RAG技术实现的开源项目 为解决大模型的不足,使用RAG技术增强大模型生成内容的针对性和可读性能力,有很多不错的开源项目。例如下面的项目。 1 ragflow 优点:可以对文档和知识库进行管理,构建不同的知识库ÿ…...
mac m1安装homebrew管理工具(brew命令)完整流程
背景 因为mac上的brew很久没用了,版本非常旧,随着mac os的更新,本机的homebrew大部分的功能都无法使用,幸好过去通过brew安装的工具比较少,于是决定重新安装一遍brew。 卸载旧版brew 法一:通过使用线上…...
Liunx学习随笔
Linux学习随笔 Linux学习随笔一.前期准备1.安装Vmware Workstation软件2.下载linux镜像3.安装操作系统4.配置静态ip5.下载安装远程连接工具 二.语法2.1 linux哲学思想(原则)2.2 小命令 夕阳无限好,只是近黄昏,时隔一年,重新提笔 没有比脚更远…...
mac中文件夹怎么显示.git隐藏文件
1. 打开终端应用程序,然后进入到包含.git文件夹的目录,可以使用以下命令来显示隐藏文件和文件夹: defaults write com.apple.finder AppleShowAllFiles YES 2. 然后重启 Finder: killall Finder...
【PB案例学习笔记】-13 徒手做个电子时钟
写在前面 这是PB案例学习笔记系列文章的第11篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gite…...
Java多线程——线程强制执行
Join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞。 可以想象成插队。 代码演示: //测试Join方法 //想象为插队 public class TestJoin implements Runnable{Overridepublic void run() {for (int i 0; i < 1…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
