当前位置: 首页 > news >正文

【人脸识别】FROM:提升遮挡状态下的人脸识别效果

论文题目:《End2End Occluded Face Recognition by Masking Corrupted Features》
论文地址:https://arxiv.org/pdf/2108.09468v3.pdf
代码地址:https://github.com/haibo-qiu/from

1.前言

       人脸识别技术已经取得了显著的进展,主要归功于以下三个因素:

  • loss functions: Center loss、CosFace、ArcFace etc. (损失函数)
  • carefully designed convolutional neural network architectures (CNNs): ResNet etc.(网络设计)
  • large-scale training datasets: LFW、WebFace etc.(数据集)

       人脸识别技术在真实场景中面临的主要挑战:

  • extreme illumination (极端的光线)
  • rare head pose (罕见的头部姿态)
  • lowresolutions, and occlusions (低分辨率以及遮挡)

       目前为了缓解因遮挡造成的效果下降主要采用两种方式:Recovering and Removing。

  • Recovering means recovering the occluded facial parts first, and then performing recognition on the recovered face images.
    (恢复是指先恢复被遮挡的面部部位,然后对恢复后的人脸图像进行识别)
  • Removing represents first removing the features that are corrupted by occlusions, and then utilizing the remaining clean
    features for recognition.(删除表示首先删除被遮挡损坏的特征,然后利用剩余的干净特征进行识别)

在这里插入图片描述
       图1:上半部分可视化了面部图像上的九种不同遮挡。 下半部分展示了基线和我们的方法之间的准确性比较。 请注意,右边的图例表示不同遮挡的遮挡程度(例如,(4)-0.12 表示遮挡嘴巴的面积占人脸图像总面积的 12%)。从上图可以大致看出:1)面部遮挡明显影响到了模型效果;2)不同的遮挡区域和遮挡面积造成模型效果下降的程度不一样(例如眼睛被遮挡会显著降低准确率);3)本文提出的算法不仅可以在遮挡状态下明显超过baseline的效果,而且在未遮挡状态下也能保持相当的效果。

2.FROM

2.1.整体架构

在这里插入图片描述

       FROM的整体结构如图 2 所示,FROM是一种新颖的单网络端到端方法。 它以一小批随机遮挡和无遮挡(未配对)的面部图像作为输入,并生成金字塔特征,然后将其用于解码特征掩码。 然后,获得的掩码通过乘法mask损坏的元素来清理深层特征,以进行最终识别。

FROM 的核心思想是学习准确的特征掩码以有效地清除损坏的特征。

2.2.Mask Decoder

在这里插入图片描述在这里插入图片描述
       FROM 的原理是学习一个 Mask Decoder 来生成特征掩码,用于精确去除由遮挡引起的损坏特征。 如图 2 所示,它将特征金字塔提取器获得的 conv 特征图 X3 中的遮挡信息解码为特征掩码 M。 期望通过逐元素乘积来屏蔽 X1 的损坏特征元素,以生成清洁的特征 X’1 以供后续识别。 如图 3a 所示,Mask Decoder 被实现为一个简单的“Conv-PReLU-BN-Conv-Sigmoid”结构,其中“Sigmoid”函数用于将输出特征掩码约束到 (0, 1)。 请注意,两个“Conv”层的步幅都设置为 2,以缩小 4 倍分辨率以与 X1 的大小完全匹配。

简而言之,Mask Decoder结构就类似于一个注意力机制模块,让网络去学习出一个合适的权重矩阵来mask掉原特征图中损坏的特征。(只是注意力机制是让网络自适应的去学习,而Mask Decoder后续还有一个Occlusion Pattern Predictor来监督它的学习)在得到权重矩阵M之后,与原特征图进行一个乘积的操作,来mask掉损坏特征以更好的进行后续的识别。

2.3.Occlusion Pattern Predictor

在这里插入图片描述
在这里插入图片描述
       为了鼓励 Mask Decoder 生成与输入人脸图像的遮挡模式相关的掩码,我们将模块 Occlusion Pattern Predictor 引入我们的网络以监督特征掩码学习。 如图 2 所示,它将学习到的特征掩码作为输入并预测遮挡模式向量,然后使用 softmax 损失对其进行分类。 它有一个简单的“BNDropout-FC-BN”结构,其输出通道等于图 3b 中遮挡模式的数量(比如你只想预测口罩遮挡这一个类型,最后的FC层节点个数就设置为2,即二分类是否戴口罩)。 因此,Mask Decoder 被训练生成掩码:1)与输入图像的遮挡相关; 2) 正确屏蔽掉对人脸识别有害的损坏特征。 虽然第一点是通过引入遮挡模式预测器实现的,但第二点是通过应用于掩蔽特征的人脸识别损失(本文中的 CosFace 损失 [4])来监督的。

2.3.1.Proximate Occlusion Patterns

       为了探究遮挡模式,提出邻近性。相邻块在实际应用中通常具有相似的遮挡状态(例如,如果嘴巴被遮挡,那么鼻子也很有可能被遮挡)。具体操作如下图所示:
在这里插入图片描述
       当人脸图像被分成 4 × 4 块时,邻近遮挡模式的示例(左)和每个遮挡大小的模式数量(右)。 数值矩阵中 (i, j) 位置的值表示大小为 i × j 的遮挡模式的数量。通过总结矩阵的所有值,我们有 101 种遮挡模式(100 种被遮挡和另外 1 种未被遮挡)。

举例说明:当图像被分成4 x 4时。以左上角为坐标原点,比如左上角的16,意思就是(1x1)大小的块遮挡模式有16种,同理,右下角的1,意思就是(4x4)大小的块遮挡模式只有1种。

2.3.2.Pattern Prediction

       生成的特征掩码应该用于正确预测相应的参考模式。 特别是,在训练阶段,我们有每个图像的遮挡位置。 对于每个图像 Xi,我们通过将其遮挡位置与 226(当 K = 5)遮挡模式匹配来获得其遮挡模式 Yi。 我们的匹配策略是计算遮挡和 226 个参考模式之间的 IoU 分数,然后选择具有最大 IoU 分数的模式作为相应的标签。 从遮挡模式预测器获得遮挡特征向量后,我们采用传统的 softmax 损失及其遮挡模式 Yi,公式如下:
在这里插入图片描述

简而言之,就是对于训练数据要确定好遮挡模式,才能进行后续的分类计算。首先,按照预先设定好的K值(也就是图像怎么切,有多少种遮挡模式),将训练数据的真实遮挡情况与设定好的遮挡模式计算iou,这一步是确定图片属于那种类型的遮挡,以便确定好分类标签。然后就是计算分类损失就好了。注意:遮挡模式预测器最终FC层的维度一定要与你设定好的遮挡模式的个数一致。

2.4.总损失

在这里插入图片描述

3. 实验

3.1. 遮挡数据集构建

在这里插入图片描述
       AR 人脸数据集示例和我们合成遮挡的人脸图像。 第一行图​​像在 WebFace 上以 1 : 0.5 : 5 的随机比例被遮挡。 第二行和第三行图像在 LFW 和 Facescrub 上分别被 1.0、1.5、2.0 遮挡。 最后一行图像来自 AR Face 数据集。

在这里插入图片描述

3.2.训练细节

       训练阶段可以分为两个步骤。 首先,我们使用具有较大margin的cosine loss在 WebFace 数据集上学习主干网络(即图 2 中的上部分支)。 主干网络训练了 40 个 epoch,初始学习率为 0.1,batch size 为 512。使用权重衰减为 0.0005 和动量为 0.9 的 SGD,在第 15 和 30 个 epoch 将学习率降低 10 倍。然后我们将训练好的来自步骤 1 的模型作为我们的预训练模型,并在 OccWebFace 数据集上微调整个网络,包括特征金字塔提取器、掩码解码器和遮挡模式预测器,该数据集是通过从 1.0 : 0.5 : 5.0 中随机选择作为 Alg1 中的 Scale s 和来自原始 WebFace 数据集的每个图像的遮挡器构建的。

3.3.部分实验结果

3.3.1.Ablation Study

在这里插入图片描述
       对比权重向量M矩阵的值是使用sigmoid,还是大于某个值直接置为1,反之置为0,意思也就是抑制还是删除(损坏特征)。实验证明抑制好于删除。

在这里插入图片描述       K4, K5, K6的表现基本相同,K3略落后。考虑到速度和精度的权衡,我们采用K = 5(即将人脸图像划分为5 × 5网格)进行其余实验。

在这里插入图片描述
λ=0.5, λ=1具有较好的精度

3.3.2.Comparision to Baselines

在这里插入图片描述
1)带Mask Decoder的Baseline_x0002_MD的性能比Baseline-Aug好,这可能是由额外的网络参数带来的。
2)我们首先发现Baseline- aug的性能略差于Baseline,这可能是由于其遮挡数据微调过程中存在过拟合问题。

3.3.3.Effects of Different Occluded Areas

在这里插入图片描述
另一个观察结果是,模型在左脸和右脸上的表现非常相似,这可能有助于训练人脸图像的翻转增强。

3.3.4.Benchmark on RMF2, LFW-SM and O_LFW

在这里插入图片描述
occluded faces (N-O) and occluded face pairs (O-O)

3.3.5.Benchmark on Megaface Challenge 1

在这里插入图片描述
       同样值得注意的是,PDSN的56.34%的精度是50个遮挡区域的平均精度,然而,在他们的论文中没有详细说明。因此,在相同的配置下,我们无法得到公平比较的结果。但是,我们在随机位置遮挡上上获得了60.84%的准确率,这比50个区域更不受约束,也更困难,使我们的结果更有说服力。

3.3.6.Benchmark on AR Face Dataset

在这里插入图片描述
1)对于SphereFace,我们使用public code及其预训练的模型 。
2)对于CosFace和ArcFace,我们自己用相应的损失训练模型,并得到实验结果。

相关文章:

【人脸识别】FROM:提升遮挡状态下的人脸识别效果

论文题目:《End2End Occluded Face Recognition by Masking Corrupted Features》 论文地址:https://arxiv.org/pdf/2108.09468v3.pdf 代码地址:https://github.com/haibo-qiu/from 1.前言 人脸识别技术已经取得了显著的进展,主要…...

浏览器缓存

什么是缓存? 当第一次访问网站的时候,比如www.baidu.com,电脑会图片,文件等下载下来,当第二次访问网站的时候,网站就会直接被加载出来. 缓存的好处? 减轻服务器压力,减少请求的放松.提高性能,在本地打开资源肯定比在服务器上获取要快减少宽带的消耗,当我们使用缓存时,只会…...

【软考 系统架构设计师】论文范文③ 论数据访问层设计技术及其应用

>>回到总目录<< 文章目录 论数据访问层设计技术及其应用范文摘要正文论数据访问层设计技术及其应用 在信息系统的开发与建设中,分层设计是一种常见的架构设计方法,区分层次的目的是为了实现“高内聚低耦合”的思想。分层设计能有效简化系统复杂性,使设计结构清…...

802.11 MCS 的最低SNR分析

常常看到这样的表格: 那么这个SNR如何而来? 看看RSSI和SNR的关系,它们之间隔了一个noise floor。从表格看得出,这个底噪在-80~-90之间。 而SNR的核心,也有类似的原因,它和BER有关。...

用于C++的对象关系映射库—YB.ORM

1 介绍YB.ORM YB.ORM 旨在简化与关系数据库交互的 C 应用程序的开发。 对象关系映射器(ORM) 通过将数据库表映射到类并将表行映射到应用程序中的对象来工作&#xff0c;这种方法可能不是对每个数据库应用程序都是最佳的&#xff0c;但它被证明在需要复杂逻辑和事务处理的应用程…...

Cesium 100K数据加载 支持弹窗 动态更改位置

前言&#xff1a;今天总结关于point、label、billboard海量数据加载。后续会研究下大量model加载以及大bim(几百G上T)模型记载 海量点加载 弹窗 加载点位时&#xff0c;不加载弹窗。点击点位时在加载弹窗&#xff0c;及有效的减少加载量&#xff0c;优化性能。 const handler …...

MySQL管理表

在创建表时需要提前了解mysql里面的数据类型 常见的数据类型 创建表 创建表方式1&#xff1a; 格式&#xff1a; CREATE TABLE [IF NOT EXISTS] 表名( 字段1, 数据类型 [约束条件] [默认值], 字段2, 数据类型 [约束条件] [默认值], 字段3, 数据类型 [约束条件] [默认值], ………...

【Java 面试合集】打印一个int整数的32位表示

打印一个int整数的32位表示 1. 概述 嗨&#xff0c;大家好【Java 面试合集】又来了&#xff0c;今天给大家分享的主题是打印一个int整数的32位表示. 2. 32位分析 2.1 为什么是32位呢 不知道看到这篇文章的各位是否都知道&#xff0c;一个int类型的表示方式就是32位呢&#x…...

这样在管理后台里实现 403 页面实在是太优雅了

前言403 页面通常表示无权限访问&#xff0c;与 404 页面代表着不同含义。而大部分管理后台框架仅提供了 404 页面的支持&#xff0c;但却忽略了对 403 页面的处理&#xff0c;有的框架虽然也有对 403 页面的处理&#xff0c;但处理效果却不尽人意。那怎么样的 403 页面才是即好…...

c++提高篇——STL常用算法

STL常用算法一、常用遍历算法一、for_each 遍历容器二、transform 搬运容器到另一个容器中二、常用查找算法一、find二、find_if三、adjacent_find四、binary_search五、count六、count_if三、常用排序算法一、sort二、random_shuffle三、 merage四、reverse四、常用拷贝和替换…...

Materials - DistanceField Nodes

以前的相关笔记&#xff0c;归档发布&#xff1b;距离场相关节点&#xff1a;DistanceToNearestSurface节点&#xff1a;求出传入的Position位置到最近的面的距离并输出&#xff0c;在没有Position输入的时候&#xff0c;默认值会直接使用World Position&#xff1a;Position的…...

【ARMv8 编程】ARMv8 指令集介绍

ARMv8 架构中引入的最重要的变化之一是增加了 64 位指令集。该指令集补充了现有的 32 位指令集架构。这种增加提供了对 64 位宽整数寄存器和数据操作的访问&#xff0c;以及使用 64 位长度的内存指针的能力。新指令被称为 A64&#xff0c;以 AArch64 执行状态执行。ARMv8 还包括…...

大数据之Phoenix基本介绍

文章目录前言一、Phoenix简介二、Phoenix入门&#xff08;一&#xff09;创建表语法&#xff08;二&#xff09;查看表信息&#xff08;三&#xff09;删除表&#xff08;四&#xff09;大小写问题前言 #博学谷IT学习技术支持# 上篇文章介绍了Phoenix环境搭建&#xff0c;点击…...

算法leetcode|38. 外观数列(多语言实现)

文章目录38. 外观数列&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a;分析&#xff1a;题解&#xff1a;rustgocpythonjava38. 外观数列&#xff1a; 给定一个正整数 n &#xff0c;输出外观数列的第 n 项。 「外观数列」是一个整数序列&#xff0c;从数字…...

异步交互的关键——Ajax

文章目录1,Ajax 概述1.1 作用1.2 同步和异步1.3 案例1.3.1 分析1.3.2 后端实现1.3.3 前端实现2&#xff0c;axios2.1 基本使用2.2 快速入门2.2.1 后端实现2.2.2 前端实现2.3 请求方法别名最后说一句1,Ajax 概述 AJAX (Asynchronous JavaScript And XML)&#xff1a;异步的 Jav…...

Android自定义View实现打钩签到动画

效果图实现原理我们看实现的动画效果&#xff0c;其实是分为1. 绘制未选中状态图形&#xff08;圆弧和对号&#xff09;2. 绘制选中状态圆弧的旋转的动画3. 绘制选中状态圆弧向中心收缩铺满动画4. 绘制选中状态对号5. 绘制选中状态下圆的放大回弹动画6. 暴露接口接口回调传递选…...

python+pytest接口自动化(3)-接口测试一般流程及方法

首先我们要明确&#xff0c;通常所接口测试其实就属于功能测试&#xff0c;主要校验接口是否实现预定的功能&#xff0c;虽然有些情况下可能还需要对接口进行性能测试、安全性测试。在学习接口自动化测试之前&#xff0c;我们先来了解手工接口测试怎样进行。URL组成为了更好的理…...

《MySQL学习》 表中随机取记录的方式

一.初始化测试表 创建表 words CREATE TABLE words ( id int(11) NOT NULL AUTO_INCREMENT, word varchar(64) DEFAULT NULL, PRIMARY KEY (id)) ENGINEInnoDB;插入测试数据 create procedure idata()begin declare i int; set i 0; while i<10000 do insert into words…...

功率信号源有什么作用和功能呢

功率信号源是指集信号发生器与功率放大器为一体的电子测量仪器&#xff0c;它具有高电压、大功率的特点&#xff0c;在电子实验室中能够帮助用来驱动压电陶瓷、换能器以及电磁线圈等&#xff0c;可以有效的帮助电子工程师解决驱动负载和放大功率的问题。功率信号源和功率放大器…...

一些cmake error fixed

建完虚拟环境后 运行 pip install . 出现报错&#xff0c;显示svox2安装出错&#xff0c;然后开始进入到svox2中进行手动编译和安装。 1. cmake svox2/csrc pybind11找不到 conda install pybind11用 pip install 在虚拟环境中安装不行&#xff0c;据说会安装到全局下… 2. c…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...