论文链接:Face Anti-Spoofing Using Transformers With Relation-Aware Mechanism | IEEE Journals & Magazine | IEEE Xplore

同一图像不同 patch 之间的信息为区分真假人脸提供了重要信息,如下图所示,与真实人脸相比,从假体人脸提取的 patch 之间的相关性很强,不论这两个 patch 是否处在相邻位置。有两个原因导致这样的结果:(1)打印和重放攻击的假体人脸通常仅携带二维平面信息。相比之下,真实人脸具有丰富的 3D 结构信息;(2)大部分假体人脸的材质具有相同的材料属性,例如纸张和玻璃屏幕。而真实人脸呈则包含更细微的细粒度细节。考虑到以上两个因素,可以利用不同局部块之间的差异来判断真假人脸。

文章创新点

(1) 基于 learning-based 的方法,提出了跨层关系感知注意(cross-layer relation-aware attentions,CRA)来权衡来自不同层的局部 patch

(2)为了减少浅层的纹理信息丢失并充分利用深层的语义信息,深入探索了最佳跨层特征融合(hierarchical feature fusion,HFF)方法

(3)模型采用二元和深度监督联合优化

方法论

TransFAS 的整体网络结构如下图所示。算法首先将人脸图像划分成不同的块,并通过线性投影提取特征。接着,将 patch embedding、分类 embedding 和位置 embedding 融合为 transformers 层的输入。最后,使用解码器生成深度图,同时使用深度损失(L_{MSE} + L_{CDL})和二元损失(L_{Binary})来监督模型。

1)Transformers for FAS

为了研究真实人脸和假体人脸中 patch 之间的关系,作者使用 transformers 来进行特征提取。具体来说,首先将图片划分成 N × N 个非重叠图像块。经过一些线性变换后,将这些 patch 嵌入到 1D 的 embedding 空间 z_{i}\epsilon R^{1\times C} 中,并将它们合并为 z_{P}\epsilon R^{L\times C}L 为 patch 的数量,数值上等于 N^{2}C 为 embedding 空间的维度。接着随机初始化分类 embedding z_{cls}\epsilon R^{1\times C} 和位置 embedding z_{pos}\epsilon R^{(L+1)\times C}并将它们与 z_{p} 绑定在一起作为可学习的 embedding。再把上述特征 embedding 输入到编码器中,公式如下:

编码器层由多头自注意力 (multi-head selfattention,MSA) 和多层感知机 (multi-layer perceptron,MLP) 组成。 各层编码器逐层计算 patch 和分类 embedding 之间的关系。 因此,相邻层的特征embedding 可以表示为:

其中,z_{l}\epsilon R^{(L+1)\times C} 是第 l 层编码器的输入,y^{l} 是中间变量。

2)CRA

区分真假人脸的关键线索存在于不同的 patch 中。捕获不同的局部 patch 之间的关系有助于模型对真假人脸的判别。然而,这些局部 patch 可能来自不同尺寸的特征图。因此,我们需要去推断来自不同层的 patch 之间的关系。基于这层考虑,作者提出了 CRA,它使模型在学习同层 patch 之间相关性的同时,还能学习不同层的 patch 之间的相关性。

假设每层的 patch 数为 L。为了更好地探索不同层的 patch 之间的关系,作者使用了 GCN 来提取不同 patch 之间的信息 (具体操作如整体网络结构中的 CRA 部分所示,将两个 patch 拼接后再进行特征提取)。定义一个图 G(V,\xi ),它包含 2L 个节点 V=(z_{1},z_{2},...,z_{2L}) 以及对应的边缘 \xi,作用是推理不同 patch 之间的关系。邻接矩阵 A 用于表示局部 patch 之间的关系。公式如下:

其中,\varphi(z_{i}) =wz_{i}\varphi ^{'}(z_{j})=w^{'}z_{j}。具体来说,w 和 w^{'} 为 (1\times 1)Conv-BN-ReLU 结构。

为了结合空间顺序信息,将第 i 个 patch 和所有 patch 之间的关系堆叠在一起,获得:

为了学习重要性分数 w_{i} (对应 patch z_{i}),作者首先对局部特征 z_{i} 和全局关系信息 R_{i} 进行拼接,随后利用一个 embedding 函数来进行推理,公式如下:

其中,v 和 v^{'} 表示 (1\times 1)Conv,分别对 z_{i} 和 R_{i} 进行映射。\mu 为卷积层,用于学习重要性分数 w_{i}

对于来自不同层的两个 patch,可以得到重要性分数列表:

随后利用 sigmoid 激活函数来标准化重要性分数:

最后,得到加权后的 patch embedding,公式如下:

3)HFF

与 CNN 不同,Transformer 编码器层采用自注意力来分层计算每个 patch 之间的相关性。在低层特征图中,patch 与周围区域的相关性更强,有利于提取纹理细节。在深层特征图中,patch 可以与整个区域相关联,有利于提取语义信息。但随着网络深度的增加,低级特征的信息也在不断丢失,而许多重要的区分信息以低级特征表示。因此,为了减少低层特征的丢失并充分利用不同层特征之间的互补性,作者提出了 HFF 融合来自不同层的特征,如下图所示。

图中从左到右为 HFF 不同的特征融合方案,分别为 bottom-up fusion, bidirectional fusion 和 top-down fusion。

作者通过消融实验证明方案 (c) 的特征融合效果最优,这表明从高到低进行特征融合更适合 FAS。 具体来说,更深的信息引导下层关注具有语义相关性的区域,而低层相应地提取更重要的纹理细节。

4)损失函数

为了充分利用全局和局部信息, TransFAS 网络中同时采用了二元和深度监督。 整体损失 L_{Overall} 定义如下:

其中,L_{Binary} 表示二元交叉熵损失,L_{Depth} 由 MSE 和 CDL 组成,用于度量真实值 (D_{G}) 与预测值 (D_{P}) 之间的差异,深度监督真实值由 PRNet 生成,PRNet 算法的环境配置在我之前的一篇博客中有提到,感兴趣的可以去看看:

PRNet 论文学习、Windows系统代码环境配置及demo展示_Cassiel_cx的博客-CSDN博客

回归正题,上式中的 \alpha 是一个比例系数,用于平衡两个损失函数;s 表示用于调整绝对值的尺度系数。

5)训练及测试细节

训练设置

batch size 为256;优化器为 Adam;lr 和 weight decay 均为 5e-5,lr 每隔 50 epoches 下降一半;epoch 为 150;\alpha 为 0.4;s 为 1;patch 的大小为 16×16;特征 embedding 的通道数为 192。

测试设置

在测试期间,区分真假人脸的分数定义如下:

其中,\alpha 的值与训练时的一致;b_{l} 表示二分类真人概率值;D_{mean} 表示 D_{P} 中所有像素点的均值,D_{P} 为 28×28 的特征图。

实验结果

在 OULU-NPU 测试集上的实验结果如下:

在 SIW 测试集上的实验结果如下:

在 OULU-NPU、CASIA-MFSD、REPLAY-ATTACK 和 MSU-MFSD 的跨数据集测试结果如下:

在已知和未知场景中的测试结果如下:

来自 OULUNPU 数据集的一些示例的图像注意力可视化如下图所示,

其中,(a) 原图;(b) w/o CRA;(c) w/o HFF;(d) TransFAS

结论

TransFAS 可以跨不同层学习全面的关系感知局部表示,CRA 可以提供 patch 之间的信息以提高性能,HFF 探索了融合跨层特征的最佳方法。大量实验也证明了 TransFAS 模型在已知和未知场景中的鲁棒性。

活体检测 Face Anti-Spoofing Using TransformersWith Relation-Aware Mechanism 学习笔记相关推荐

  1. 活体检测很复杂?仅使用opencv就能实现!(附源码)

    什么是活体检测,为什么需要它? 随着时代的发展,人脸识别系统的应用也正变得比以往任何时候都更加普遍.从智能手机上的人脸识别解锁.到人脸识别打卡.门禁系统等,人脸识别系统正在各行各业得到应用.然而,人脸 ...

  2. 活体检测python_活体检测很复杂?仅使用opencv就能实现!(附源码)!

    摘要: 活体检测在各行各业应用比较广泛,如何实现一个活体检测系统呢?早期实现很困难,现在仅使用opencv即可实现,快来尝试一下吧. 什么是活体检测,为什么需要它? 随着时代的发展,人脸识别系统的应用 ...

  3. 人脸检测实战进阶:使用 OpenCV 进行活体检测

    使用 OpenCV 进行活体检测 在本篇博文中,您将学习如何使用 OpenCV 执行活体检测.您将创建一个活体检测器,该检测器能够在人脸识别系统中发现假人脸并执行反人脸欺骗. 在教程的第一部分,我们将 ...

  4. 人脸活体检测系统(Python+YOLOv5深度学习模型+清新界面)

    摘要:人脸活体检测系统利用视觉方法检测人脸活体对象,区分常见虚假人脸,以便后续人脸识别,提供系统界面记录活体与虚假人脸检测结果.本文详细介绍基于YOLOv5深度学习技术的人脸活体检测系统,在介绍算法原 ...

  5. 9月10日OpenCV学习笔记——Mask、彩色直方图、人脸检测

    文章目录 前言 一.Mask 二.彩色直方图 三.画出基本图形 四.图片上显示文本 五.人脸检测 前言 本文为9月10日OpenCV学习笔记--Mask.彩色直方图.人脸检测,分为五个章节: Mask ...

  6. 人脸静默活体检测最新综述

    ©PaperWeekly 原创 · 作者|燕皖 单位|渊亭科技 研究方向|计算机视觉.CNN 活体检测在人脸识别中的重要环节.以前的大多数方法都将面部防欺骗人脸活体检测作为监督学习问题来检测各种预定义 ...

  7. 计算机视觉子方向,计算机视觉方向简介 | 人脸识别中的活体检测算法综述

    原标题:计算机视觉方向简介 | 人脸识别中的活体检测算法综述 本文转载自"SIGAI人工智能学习与实践平台"(ID:SIGAICN) 导言 1. 什么是活体检测? 判断捕捉到的人脸 ...

  8. CVPR AAAI 2020 |人脸活体检测最新进展

    本文原载自知乎,已获作者授权转载,请勿二次转载. https://zhuanlan.zhihu.com/p/114313640 今年活体检测(FAS)比较火热,这块的文章投稿和录用量剧增,AAAI录了 ...

  9. 人脸识别中的活体检测算法综述

    其它机器学习.深度学习算法的全面系统讲解可以阅读<机器学习-原理.算法与应用>,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造. 书的购买链接 书的勘误,优化,源代码资源 1. 什 ...

最新文章

  1. 乔布斯在斯坦福大学毕业典礼上的演讲
  2. laravel 目录
  3. 转:linux svn常用命令
  4. css 两边宽度固定中间自适应宽度
  5. awk命令扩展使用操作
  6. 图解 Python 深拷贝和浅拷贝
  7. VOIP术语及相关知识
  8. matlab 解非齐次方程组,各位看一下为什么这里的LU解不出非齐次线性方程组?
  9. Transact-SQL 存储过程(c#调用执行)
  10. 【精选】那些莫名其妙但又不得不服的经济学/社会学/心理学著名定律/效应
  11. 360通讯录同步java版_360同步助手app下载_360同步助手官方下最新安卓版v 2.0.3-麦块安卓网...
  12. Beini奶瓶U盘PE完整教程[2018-11-28]
  13. linux查看weblogic安装路径,linux下weblogic安装
  14. 什么是ESAM安全模块
  15. PDF怎么转换成图片?这两种转换方法快速转换
  16. 用Python分析1585家电商车厘子销售数据,发现这些秘密
  17. 面向资源受限安全芯片的开放式运行环境设计
  18. mtk6592处理器怎么样,mtk6592参考设计原理图下载
  19. 如何克服焦虑,不安,紧张
  20. java中的相对路径和绝对路径,获取一个文本上每个字符出现的次数

热门文章

  1. html如何让窗口不在任务栏显示,电脑最小化窗口后无法在任务栏中显示怎么解决...
  2. 阿里云营收破百亿很牛?和AWS等全球头部厂商还差太多!
  3. Codeforces Round #540 (Div. 3) Coffee and Coursework
  4. 计算机组成原理汇编语言设计实验,《计算机组成原理汇编语言程序设计》实验指导书.doc...
  5. 第一次去中关村图书大厦
  6. www.etiger.vip 1612题 高斯求和
  7. 腾讯游戏人生 android,腾讯游戏
  8. SE14造成表丢失后找回数据
  9. 优雅のJava(五)—— 优雅的观察对象与订阅信息 观察者模式 好莱坞原则
  10. XMU 1617 刘备闯三国之汉中之战 【BFS+染色】