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

其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。

 

1. 什么是活体检测?
判断捕捉到的人脸是真实人脸,还是伪造的人脸攻击(如:彩色纸张打印人脸图,电子设备屏幕中的人脸数字图像 以及 面具 等)

2. 为什么需要活体检测?
在金融支付,门禁等应用场景,活体检测一般是嵌套在人脸检测与人脸识别or验证中的模块,用来验证是否用户真实本人

3. 活体检测对应的计算机视觉问题:
 就是分类问题,可看成二分类(真 or 假);也可看成多分类(真人,纸张攻击,屏幕攻击,面具攻击)

 

Anti-spoofing 1.0 时代

从早期 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 的相似距离,阈值决策)

在文章中明确指明:

  1. 过去方法把活体检测看成二分类问题,直接让DNN去学习,这样学出来的cues不够general 和 discriminative
  2. 将二分类问题换成带目标性地特征监督问题,即 回归出 pulse 统计量 + 回归出 Depth map,保证网络学习的就是这两种特征(哈哈,不排除假设学到了 color texture 在里面,黑箱网络这么聪明

回归 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=\bar{x}+N(\tilde{x})

文中把活体人脸图看成是原图 \tilde{x} ,而非活体人脸图看成是加了噪声后失真的 x ,故 task 就变成估计 Spoof noise N(\tilde{x}) ,然后用这个 Noise

  • 9
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值