其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。
1. 什么是活体检测?
判断捕捉到的人脸是真实人脸,还是伪造的人脸攻击(如:彩色纸张打印人脸图,电子设备屏幕中的人脸数字图像 以及 面具 等)
2. 为什么需要活体检测?
在金融支付,门禁等应用场景,活体检测一般是嵌套在人脸检测与人脸识别or验证中的模块,用来验证是否用户真实本人
3. 活体检测对应的计算机视觉问题:
就是分类问题,可看成二分类(真 or 假);也可看成多分类(真人,纸张攻击,屏幕攻击,面具攻击)
从早期 handcrafted 特征的传统方法说起,目标很明确,就是找到活体与非活体攻击的difference,然后根据这些差异来设计特征,最后送给分类器去决策。
那么问题来了,活体与非活体有哪些差异?
所以这段时期的文章都是很有针对性地设计特征,列举几篇比较重要的:
Image Distortion Analysis[1], 2015
如下图,单帧输入的方法,设计了 镜面反射+图像质量失真+颜色 等统计量特征,合并后直接送SVM进行二分类。
Cons: 对于高清彩色打印的纸张 or 高清录制视频,质量失真不严重时,难区分开
Colour Texture[2], 2016
Oulu CMVS组的产物,算是传统方法中的战斗机,特别简洁实用,Matlab代码(课题组官网有),很适合搞成C++部署到门禁系统。
原理:活体与非活体,在RGB空间里比较难区分,但在其他颜色空间里的纹理有明显差异
算法:HSV空间人脸多级LBP特征 + YCbCr空间人脸LPQ特征 (后在17年的paper拓展成用Color SURF特征[12],性能提升了一点)
Pros: 算法简洁高效易部署;也证明了活体与非活体在 HSV等其他空间也是 discriminative,故后续深度学习方法有将HSV等channel也作为输入来提升性能。
Motion mag.-HOOF + LBP-TOP[3], 2014
DMD + LBP[4], 2015
前面说的都是单帧方法,这两篇文章输入的是连续多帧人脸图;
主要通过捕获活体与非活体微动作之间的差异来设计特征。
一个是先通过运动放大来增强脸部微动作, 然后提取方向光流直方图HOOF + 动态纹理LBP-TOP 特征;一个是通过动态模式分解DMD,得到最大运动能量的子空间图,再分析纹理。
PS:这个 motion magnification 的预处理很差劲,加入了很多其他频段噪声(18年新出了一篇用 Deep learning 来搞 Motion mag[13]. 看起来效果挺好,可以尝试用那个来做运动增强,再来光流or DMD)
DMD + LBP[4]
Cons: 基于Motion的方法,对于 仿人脸wrapped纸张抖动 和 视频攻击,效果不好;因为它假定了活体与非活体之间的非刚性运动有明显的区别,但其实这种微动作挺难描述与学习~
Pulse + texture[5], 2016
第一个将 remote pluse 应用到活体检测中,多帧输入
(交代下背景:在CVPR2014,Xiaobai Li[14] 已经提出了从人脸视频里测量心率的方法)
算法流程:
1. 通过 pluse 在频域上分布不同先区分 活体 or 照片攻击 (因为照片中的人脸提取的心率分布不同)
2. 若判别1结果是活体,再 cascade 一个 纹理LBP 分类器,来区分 活体 or 屏幕攻击(因为屏幕视频中人脸心率分布与活体相近)
Pros: 从学术界来说,引入了心理信号这个新模态,很是进步;从工业界来看,如果不能一步到位,针对每种类型攻击,也可进行 Cascade 对应的特征及分类器的部署方式
Cons: 由于 remote heart rate 的算法本来鲁棒性也一般,故出来的 pulse-feature 的判别性能力很不能保证;再者屏幕video里的人脸视频出来的 pulse-feature 是否也有微小区别,还待验证~
Anti-spoofing 2.0 时代
其实用 Deep learning 来做活体检测,从15年陆陆续续就有人在研究,但由于公开数据集样本太少,一直性能也超越不了传统方法:
CNN-LSTM[6], 2015
多帧方法,想通过 CNN-LSTM 来模拟传统方法 LBP-TOP,性能堪忧~
PatchNet pretrain[7],CNN finetune, 2017
单帧方法,通过人脸分块,pre-train 网络;然后再在 global 整个人脸图 fine-tune,作用不大
Patch and Depth-Based CNNs[8], 2017
第一个考虑把 人脸深度图 作为活体与非活体的差异特征,因为像屏幕中的人脸一般是平的,而纸张中的人脸就算扭曲,和真人人脸的立体分布也有差异;
就算用了很多 tricks 去 fusion,性能还是超越不了传统方法。。。
Deep Pulse and Depth[9], 2018
发表在 CVPR2018 的文章,终于超越了传统方法性能。
文章[8]的同一组人,设计了深度框架 准端到端 地去预测 Pulse统计量 及 Depth map (这里说的“准”,就是最后没接分类器,直接通过样本 feature 的相似距离,阈值决策)
在文章中明确指明:
回归 Depth map,跟文章[8]中一致,就是通过 Landmark 然后 3DMMfitting 得到 人脸3D shape,然后再阈值化去背景,得到 depth map 的 groundtruth,最后和网络预测的 estimated depth map 有 L2 loss。
而文章亮点在于设计了 Non-rigid Registration Layer 来对齐各帧人脸的非刚性运动(如姿态,表情等),然后通过RNN更好地学到 temporal pulse 信息。
为什么需要这个对齐网络呢?我们来想想,在做运动识别任务时,只需简单把 sampling或者连续帧 合并起来喂进网络就行了,是假定相机是不动的,对象在运动;而文中需要对连续人脸帧进行pulse特征提取,主要对象是人脸上对应ROI在 temporal 上的 Intensity 变化,所以就需要把人脸当成是相机固定不动。
Micro-texture + SSD or binocular depth[10] , 2018
ArXiv 刚挂出不久的文章,最大的贡献是把 活体检测 直接放到 人脸检测(SSD,MTCNN等) 模块里作为一个类,即人脸检测出来的 bbox 里有 背景,真人人脸,假人脸 三类的置信度,这样可以在早期就过滤掉一部分非活体。
所以整个系统速度非常地快,很适合工业界部署~
至于后续手工设计的 SPMT feature 和 TFBD feature 比较复杂繁琐,分别是表征 micro-texture 和 stereo structure of face,有兴趣的同学可以去细看。
De-Spoofing[11], ECCV2018
单帧方法,与Paper[8]和[9]一样,是MSU一个课题组做的。
文章的idea很有趣,启发于图像去噪denoise 和 图像去抖动 deblur。无论是噪声图还是模糊图,都可看成是在原图上加噪声运算或者模糊运算(即下面的公式),而去噪和去抖动,就是估计噪声分布和模糊核,从而重构回原图。
文中把活体人脸图看成是原图 ,而非活体人脸图看成是加了噪声后失真的 x ,故 task 就变成估计 Spoof noise ,然后用这个 Noise pattern feature 去分类决策。
那问题来了,数据集没有像素级别一一对应的 groundtruth,也没有Spoof Noise模型的先验知识(如果有知道Noise模型,可以用Live Face来生成Spoofing Face),那拿什么来当groundtruth,怎么设计网络去估计 Spoofing noise 呢?
如一般Low-level image 任务一样,文中利用Encoder-decoder来得到 Spoof noise N,然后通过残差重构出 ,这就是下图的DS Net。为了保证网络对于不同输入,学出来的Noise是有效的,根据先验知识设计了三个Loss来constrain:
Magnitude loss(当输入是Live face时,N尽量逼近0);
Repetitive loss(Spooing face的Noise图在高频段有较大的峰值);
0\1Map Loss(让Real Face 的 deep feature map分布尽量逼近全0,而Spoofing face的 deep feature map 尽量逼近全1)
那网络右边的 VQ-Net 和 DQ-Net 又有什么作用呢?因为没有 Live face 的 Groundtruth,要保证重构出来的分布接近 Live face,作者用了对抗生成网络GAN (即 VQ-Net )去约束重构生成的 与Live face分布尽量一致;而用了文章[8]中的 pre-trained Depth model 来保证的深度图与Live face的深度图尽量一致。
Pros: 通过可视化最终让大众知道了 Spoofing Noise 是长什么样子的~
Cons: 在实际场景中难部署(该模型假定Spoofing Noise是 strongly 存在的,当实际场景中活体的人脸图质量并不是很高,而非活体攻击的质量相对高时,Spoofing noise走不通)
由于NIR的光谱波段与可见光VIS不同,故真实人脸及非活体载体对于近红外波段的吸收和反射强度也不同,即也可通过近红外相机出来的图像来活体检测。从出来的图像来说,近红外图像对屏幕攻击的区分度较大,对高清彩色纸张打印的区分度较小。
从特征工程角度来说,方法无非也是提取NIR图中的光照纹理特征[15]或者远程人脸心率特征[16]来进行。下图可见,上面两行是真实人脸图中人脸区域与背景区域的直方图分布,明显与下面两行的非活体图的分布不一致;而通过与文章[5]中一样的rPPG提取方法,在文章[]中说明其在NIR图像中出来的特征更加鲁棒~
NIR人脸区域与背景区域直方图[15]
由于结构光及ToF能在近距离里相对准确地进行3D人脸重构,即可得到人脸及背景的点云图及深度图,可作为精准活体检测(而不像单目RGB或双目RGB中仍需估计深度)。不过就是成本较高,看具体应用场景决定。
光场相机具有光学显微镜头阵列,且由于光场能描述空间中任意一点向任意方向的光线强度,出来的raw光场照片及不同重聚焦的照片,都能用于活体检测:
3.1 raw光场照片及对应的子孔径照片[17]
如下图所示,对于真实人脸的脸颊边缘的微镜图像,其像素应该是带边缘梯度分布;而对应纸张打印或屏幕攻击,其边缘像素是随机均匀分布:
3.2 使用一次拍照的重聚焦图像[18]
原理是可以从两张重聚焦图像的差异中,估计出深度信息;从特征提取来说,真实人脸与非活体人脸的3D人脸模型不同,可提取差异图像中的 亮度分布特征+聚焦区域锐利程度特征+频谱直方图特征。
至此,Face anti-spoofing 的简单Survey已完毕~
毫无疑问,对于学术界,后续方向应该是用DL学习更精细的 人脸3D特征 和 人脸微变化微动作(Motion Spoofing Noise?) 表征;而也可探索活体检测与人脸检测及人脸识别之间更紧密的关系。
对于工业界,可直接在人脸检测时候预判是否活体;更可借助近红外,结构光/ToF等硬件做到更精准。
Reference:
[1] Di Wen, Hu Han, Anil K. Jain. Face Spoof Detection with Image Distortion Analysis. IEEE Transactions on Information Forensics and Security, 2015
[2] Zinelabidine Boulkenafet, Jukka Komulainen, Abdenour Hadid. Face Spoofing Detection Using Colour Texture Analysis. IEEE TRANSACTIONS ON INFORMATION FORENSICS AND SECURITY, 2016
[3] Samarth Bharadwaj. Face Anti-spoofing via Motion Magnification and
Multifeature Videolet Aggregation, 2014
[4] Santosh Tirunagari, Norman Poh. Detection of Face Spoofing Using Visual Dynamics. IEEE TRANS. ON INFORMATION FORENSICS AND SECURIT, 2015
[5] Xiaobai Li, , Guoying Zhao. Generalized face anti-spoofing by detecting pulse
from face videos, 2016 23rd ICPR
[6] Zhenqi Xu. Learning Temporal Features Using LSTM-CNN Architecture for Face Anti-spoofing, 2015 3rd IAPR
[7] Gustavo Botelho de Souza, On the Learning of Deep Local Features for
Robust Face Spoofing Detection, 2017
[8] Yousef Atoum, Xiaoming Liu. Face Anti-Spoofing Using Patch and Depth-Based CNNs, 2017
[9] Yaojie Liu, Amin Jourabloo, Xiaoming Liu, Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision ,CVPR2018
[10] Discriminative Representation Combinations for Accurate Face Spoofing Detection,2018 PR
[11] Amin Jourabloo, Face De-Spoofing: Anti-Spoofing via Noise Modeling, ECCV2018
[12]Zinelabidine Boulkenafet, Face Antispoofing Using Speeded-Up Robust Features and Fisher Vector Encoding, IEEE SIGNAL PROCESSING LETTERS, VOL. 24, NO. 2, FEBRUARY 2017
[13]Tae-Hyun Oh, Learning-based Video Motion Magnification, ECCV2018
[14]Xiaobai Li, Remote Heart Rate Measurement From Face Videos Under Realistic Situations
[15]Xudong Sun, Context Based Face Spoofing Detection Using Active Near-Infrared Images, ICPR 2016
[16]Javier Hernandez-Ortega, Time Analysis of Pulse-based Face Anti-Spoofing in Visible and NIR, CVPR2018 workshop
[17]Sooyeon Kim, Face Liveness Detection Using a Light Field Camera, 2014
[18]Xiaohua Xie, One-snapshot Face Anti-spoofing Using a Light Field Camera, 2017
推荐阅读
[1]机器学习-波澜壮阔40年【获取码】SIGAI0413.
[2]学好机器学习需要哪些数学知识?【获取码】SIGAI0417.
[3] 人脸识别算法演化史【获取码】SIGAI0420.
[4]基于深度学习的目标检测算法综述 【获取码】SIGAI0424.
[5]卷积神经网络为什么能够称霸计算机视觉领域?【获取码】SIGAI0426.
[6] 用一张图理解SVM的脉络【获取码】SIGAI0428.
[7] 人脸检测算法综述【获取码】SIGAI0503.
[8] 理解神经网络的激活函数 【获取码】SIGAI2018.5.5.
[9] 深度卷积神经网络演化历史及结构改进脉络-40页长文全面解读【获取码】SIGAI0508.
[10] 理解梯度下降法【获取码】SIGAI0511.
[11] 循环神经网络综述—语音识别与自然语言处理的利器【获取码】SIGAI0515
[12] 理解凸优化 【获取码】 SIGAI0518
[13] 【实验】理解SVM的核函数和参数 【获取码】SIGAI0522
[14]【SIGAI综述】行人检测算法 【获取码】SIGAI0525
[15] 机器学习在自动驾驶中的应用—以百度阿波罗平台为例(上)【获取码】SIGAI0529
[16]理解牛顿法【获取码】SIGAI0531
[17] 【群话题精华】5月集锦—机器学习和深度学习中一些值得思考的问题【获取码】SIGAI 0601
[18] 大话Adaboost算法 【获取码】SIGAI0602
[19] FlowNet到FlowNet2.0:基于卷积神经网络的光流预测算法【获取码】SIGAI0604
[20] 理解主成分分析(PCA)【获取码】SIGAI0606
[21] 人体骨骼关键点检测综述 【获取码】SIGAI0608
[22]理解决策树 【获取码】SIGAI0611
[23] 用一句话总结常用的机器学习算法【获取码】SIGAI0611
[24] 目标检测算法之YOLO 【获取码】SIGAI0615
[25] 理解过拟合 【获取码】SIGAI0618
[26]理解计算:从√2到AlphaGo ——第1季 从√2谈起 【获取码】SIGAI0620
[27] 场景文本检测——CTPN算法介绍 【获取码】SIGAI0622
[28] 卷积神经网络的压缩和加速 【获取码】SIGAI0625
[29] k近邻算法 【获取码】SIGAI0627
[30]自然场景文本检测识别技术综述 【获取码】SIGAI0627
[31] 理解计算:从√2到AlphaGo ——第2季 神经计算的历史背景 【获取码】SIGAI0704
[32] 机器学习算法地图【获取码】SIGAI0706
[33] 反向传播算法推导-全连接神经网络【获取码】SIGAI0709
[34] 生成式对抗网络模型综述【获取码】SIGAI0709.
[35]怎样成为一名优秀的算法工程师【获取码】SIGAI0711.
[36] 理解计算:从根号2到AlphaGo——第三季 神经网络的数学模型【获取码】SIGAI0716
[37]【技术短文】人脸检测算法之S3FD 【获取码】SIGAI0716
[38] 基于深度负相关学习的人群计数方法【获取码】SIGAI0718
[39] 流形学习概述【获取码】SIGAI0723
[40] 关于感受野的总结 【获取码】SIGAI0723
[41] 随机森林概述 【获取码】SIGAI0725
[42] 基于内容的图像检索技术综述——传统经典方法【获取码】SIGAI0727
[43] 神经网络的激活函数总结【获取码】SIGAI0730
[44] 机器学习和深度学习中值得弄清楚的一些问题【获取码】SIGAI0802
[45] 基于深度神经网络的自动问答系统概述【获取码】SIGAI0803
[46] 反向传播算法推导——卷积神经网络 【获取码】SIGAI0806
[47] 机器学习与深度学习核心知识点总结 写在校园招聘即将开始时 【获取 码】SIGAI0808
[48] 理解Spatial Transformer Networks【获取码】SIGAI0810
[49]AI时代大点兵-国内外知名AI公司2018年最新盘点【获取码】SIGAI0813
[50] 理解计算:从√2到AlphaGo ——第2季 神经计算的历史背景 【获取码】SIGAI0815
[51] 基于内容的图像检索技术综述--CNN方法 【获取码】SIGAI0817
[52]文本表示简介 【获取码】SIGAI0820
[53]机器学习中的最优化算法总结【获取码】SIGAI0822
[54]【AI就业面面观】如何选择适合自己的舞台?【获取码】SIGAI0823
[55]浓缩就是精华-SIGAI机器学习蓝宝书【获取码】SIGAI0824
[56]DenseNet详解【获取码】SIGAI0827
[57]AI时代大点兵国内外知名AI公司2018年最新盘点【完整版】【获取码】SIGAI0829
[58]理解Adaboost算法【获取码】SIGAI0831
[59]深入浅出聚类算法 【获取码】SIGAI0903
[60]机器学习发展历史回顾【获取码】SIGAI0905
[61] 网络表征学习综述【获取码】SIGAI0907
[62] 视觉多目标跟踪算法综述(上) 【获取码】SIGAI0910
[63] 计算机视觉技术self-attention最新进展 【获取码】SIGAI0912
[64] 理解Logistic回归 【获取码】SIGAI0914
[65] 机器学习中的目标函数总结 【获取码】SIGAI0917
原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不能用于商业目的