2017 IEEE International Joint Conference on Biometrics (IJCB)
传统的人脸识别系统做活体检测的方法大致可以分为如下三类
大部分是基于手动设计的特征,很容易受到如下几种 presentation attack(PA)的攻击:
因此需要设计更加鲁棒的 face anti-spoofing 特征或者 PA detection system!
随着人脸欺骗数据库数量的增加,CNN被认为能够利用更大数量的训练数据,并学习可归纳的信息来区分真实和欺骗样本——特征不是手工设计,鲁棒性更强,可应付的 PA 更多!
本文,作者基于 CNN 的方法,提出 local features(利用 random 的图像 patch) 和 holistic depth maps(利用整张人脸,把活脸描述为 3D 的 object)two stream 的结构
local feature 分支的每个 patch 会计算的出来一个分数,之后取平均值
holistic depth maps 也会通过评估 depth 图像给出 living score
这两个分支的得分最后会结合起来,来给出最后的分类结果,live or spoof(作者深度指的是 the height map of the face region,而不是严格上的 object-surface-to-camera distance)
两个 stream 的最终得分通过加权的形式融合在一起,patch stream 权重为1,depth steam 权重为 0.4
用 patch 而不是用整张图的好处 (在人脸中取 patch)
相关先验知识的引入更有利于 CNN 学习到 spoof-specific discriminative information,例如利用不同的颜色空间作为输入( R G B RGB RGB, H S V HSV HSV, Y C b C r YC_bC_r YCbCr)
RGB 在活检应用场景中,发挥的作用有限,因为RGB不能很好的分开亮度和色度信息( H S V HSV HSV, Y C b C r YC_bC_r YCbCr 可以,因此也能提供额外的可能利于活检的信息), 且 R,B,G三个通道相关性较高,
其中 I H = I − f l p ( I ) I_H = I - f_{lp}(I) IH=I−flp(I), f l p f_{lp} flp 表示 low-pass filter
3 个 fc,来一张图片,先 detection 人脸,然后再进行后续的 two-branch 操作,patch-based CNN 分支中,如果图片是 live 的,所有 patch 的标签都是 1,如果是 spoof 的,所有 patch 的标签则为 0
printed paper or dispaly 类型的 PAs,它们的 depth 明显与 live faces 不同
Depth-based CNN 结构,输入是 face images,输出是 corresponding depth maps,从 table 1 可以看出,输入输出的分辨率大约隔了 2 倍(有反卷积操作)
1)Generating the depth labels
Fig 2 热力图标签是根据 SOTA 的 3D face model fitting 获得
注意到一些 print attack,例如 paper attack,纸张有可能是 bent 的,作者把这些 spoof face 的 label 也都设置为了 flat plain
2)FCN structure
FCN(fully convolutional network) structure, f ( I ; Θ ) f(I;\Theta ) f(I;Θ), I I I 是输入的图片, Θ \Theta Θ 表示 network parateter
图 table1 所示,有 downsampling part and upsampling part(transpose convolutional layer) 两个部分构成,损失函数如公式2所示
M M M 表示 depth map(label)
3)Depth Map for Classification
可以根据深度图来区别 live or spoof face,作者进一步通过训练 SVM,使得 depth map 具有 classify live vs. spoof 的能力,具体做法如下
作者将 CNN learning 得到的 depth map M M M 划分为 N × N N \times N N×N 大小的网格(有 overlaid),然后计算每个 cell 里的深度值的平均值作为当前 cell 的特征,这样一个二维的深度图 M M M 就转化为了 N 2 N^2 N2 的特征 vector,用该特征作为 SVM 的输入!
作者用不同的 N 训练出了很多 SVM
先检测出人脸,然后处理成不同的输入,最后再分成许多 patch,
LBP 的算法参考 LBP原理介绍以及算法实现
注意这个 cut print attack,是把打印的图片裁剪部分,露出相应的真人,例如:眼睛
可以看到,虽然 Depth-based CNN learning 出来的和 fig.4 中的 label 还有差距,但是 live 和各种 anti-spoofing 已经有效的被 CNN 区分开来,有利于后续的 SVM 进行分类
可以看出核心的还是 depth 方法,fusion 的话仅在 normal quality 图像上有较为明显的提升
CASIA-FASD 数据集上的比较
评价指标的介绍参考:
Moire Pattern 这方法这么牛?都 0 了
MSU-USSA 数据集上的比较