[人脸活体检测] 论文: Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision

Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision

论文简介

与人脸生理相关的rppG信号被研究者广泛运用于活体检测,文[3]中使用了CNN和RNN分别预测人脸深度和rppG信号提升了活体检测的精度。

文章引用量:50+

推荐指数:✦✦✦✦✦

[3] Liu Y, Jourabloo A, Liu X. Learning deep models for face anti-spoofing: Binary or auxiliary supervision[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018: 389-398.

作者认为现存大多数活体算法用binary classification监督不够合理,也不能说明预测结果的依据(模型是否学习到真正的活体与攻击之间差异),故提出CNN-RNN框架,采用pixel-wise的深度图监督方式和sequence-wise的rPPG信号监督方式(如下图),并提出高分辨率+丰富PIE的数据集SiW;试验在cross-test取得了sota。

img

主要贡献:

  • 提出用深度图和rPPG信号作为CNN学习的监督信息,提高模型泛化能力;
  • 提出CNN-RNN框架,支持深度图和rPPG信号的end-to-end训练;
  • 发布全新数据集,包含多种PIE和其他影响因素,并取得sota。

方法介绍:

首先我们看rPPG是什么,Remote Photoplethysmography (rPPG)是在不接触人体皮肤的情况下,跟踪如心率等重要信号的技术。作者引用了很多文献来解释rPPG的发展,然而结论却是,分析这种信号的解决方案太容易实现了,那么它一定很容易受到PIE变化的影响!因此,作者用RNN来学习从人脸视频到rPPG信号的映射,对于PIE变化可能不够鲁棒,但是足够区分真人和攻击。

img

1. Face Anti-Spoofing with Deep Network

如Figure 2所示,先用CNN提取特征,用深度图做监督信息,然后把预测的深度图和最后一层的特征图输入到non-rigid registration layer,获得aligned后的特征图,再用aligned的特征图和rPPG监督信息训练RNN,使其通过视频序列获得区分真人和攻击的能力。

2. 深度图监督

深度图是二维图像的三维信息表达,表示不同区域和相机之间不同距离。这种表达比二维标签传达出更多的信息,可以从根本上区分真人与打印、视频回放的攻击方式。作者用DeFA估计3D信息(具体的没太看懂),考虑到绝对深度不方便训练也没太大作用,就将深度归一化到[0, 1],再用z-Buffer算法把归一化的z值映射回2D图像,这样作为CNN部分pixel-wise监督信息的“ground truth”就产生了。

3. rPPG 监督

rPPG信号最近已经被用到活体识别领域了,为face liveness提供时域信息,这类信息与血液流动高度相关。传统的rPPG信号提取方法有三个弊端:对姿态太敏感,很难跟踪某个特定的面部区域;对光照敏感,额外的光照会影响皮肤反光的总量;对于活体识别而言,从视频提取的rPPG信号可能无法与真实视频区分。

作者认为用RNN去估计rPPG信号可以有效解决上述所有问题,假设,同一subject的视频在不同PIE条件下的ground truth rPPG信号是相同的。由于同一人的心跳在视频中(拍摄时间小于5分钟)是相似的,所以假设有效。作者把某个subject的constrained(PIE 无变化)视频中提取出的rPPG信号作为这个subject所有rPPG信号的groundtruth。这种可持续的监督信息有助提升CNN和RNN的鲁棒性。作者用DeFA提取人脸区域用于计算两个正交色度信号,然后FFT变换至频域。

4. CNN网络

img

作者用了全卷积网络,包含三个block,每个block的输出都resize到64*64再合并。合并后的feature分别输入到两个分支,第一个分支用于估计深度图,目标函数:

img

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-exIRa0F5-1606997701480)(https://www.zhihu.com/equation?tex=%5Ctheta)] D为CNN参数,Nd为训练集样本总数。第二个分支输入到non-rigid registration layer。

5. RNN网络

RNN网络基于图像序列估计rPPG信号,然后FFT变换到频域,目标函数:

img

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QZTEcizG-1606997701482)(https://www.zhihu.com/equation?tex=%5Ctheta)]R是RNN参数,Fj是frontalized feature map,Ns是图像序列的总数。作者在FFT之后对FFT求Loss,那么bp的时候怎么FFT过乘求导呢?先IFFT么?既然FFT没有参数,为什么不把fc的输入接入loss呢,不解。

img

6. 实现

1)ground truth

作者按照2. 中方法生成深度图的ground truth,并把攻击样本的深度设为一个平面,如全部设为“0”;同样,按照3. 中方法生成rPPG的ground truth,并做L2归一化,攻击样本的rPPG设为“0”

2)训练策略

作者合并CNN和RNN,做端到端训练。CNN部分需要的数据需要打乱所有subject的所有样本,再分成多个batch,以此来维持训练的稳定性和模型的泛化能力,但是RNN模型需要某个subject的较长视频序列来利用跨帧的时域信息。这两方面是互相矛盾的,也对显存要求很高,为此作者设计了two-stream 策略:第一个stream满足CNN,输入为RGB图片和深度图“ground truth”;第二个stream满足RNN,输入是视频序列,深度图“ground truth”,预测的3Dshapes和rPPG “ground truth”。训练时,交替训练两个stream,训练CNN时只更新CNN参数,训练RNN时更新CNN和RNN的参数(很难理解,怎么通过non-rigid registration反传回去的)。

3)测试

输入视频序列,得到预测的深度图和rPPG信号,计算最后的

得分:

img

为常数权重,用来合并两个输出。

4)Non-rigid registration 层

作者设计non-rigid registration层,用于RNN输入数据的预处理。这一层用预测的稠密3Dshape align CNN输出的feature map的activations,确保RNN跟踪和学习到不同人脸同一部分的变化。如下图,该层有三个输入:CNN输出的feature map T,估计的深度图Dhat,3D shape S;首先把Dhat二值化,得到V,然后计算V和T的内积,得到U,相当于把V当成T的mask来使用。

img

最后,用S frontalize U(不理解):

img

作者认为该层对整个网络有三个贡献:输入数据被对齐,RNN在学习特征是不受到面部姿态和表情的影响;减少feature map中背景的影响;对于攻击样本,深度图几乎接近0,因此和feature做内积时,极大弱化了feature map的activation,有利于RNN学习并输出的rPPG信号为0,因此,rPPG loss也有助于CNN产生值为0的深度图。

实验与结论:

作者在tf框架下进行试验,学习率为 3e-3,10个epoch,CNN stream batch 为10,CNN-RNN stream batch 为2,视频序列长度为5,公式(6)中为0.015,公式(7)的阈值为0.1。作者用APCER,BPCER,ACER,HTER作为测试的metric,ablation 测试结果如下:

img

Model 1: CNN + pooling layer + fc layer + softmax

Model 2: CNN + depth map

Model 3: CNN + RNN + depth map + rPPG(w/o non-rigid registration)

Model 4: 作者提出的框架

作者用SiW数据集中的20个subject进行试验,显然本文提出的框架效果最好,作者还研究了不同视频长度对结果的影响,见下图,视频序列越长取得效果越好,对显存要求也就越高。

img

其他测试结果如下:

img

img

img

其他

1)可视化

从下图可以看到,辅助的监督信息是有效的。

img

img

img

更多信息请关注公众号:
img

posted @ 2023-02-08 22:54  野哥李  阅读(160)  评论(0编辑  收藏  举报  来源