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

原标题:计算机视觉方向简介 | 人脸识别中的活体检测算法综述

本文转载自“SIGAI人工智能学习与实践平台”(ID:SIGAICN)

导言

1. 什么是活体检测?

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

2. 为什么需要活体检测?

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

3. 活体检测对应的计算机视觉问题:

就是分类问题,可看成二分类(真 or 假);也可看成多分类(真人,纸张攻击,屏幕攻击,面具攻击)

Anti-spoofing 1.0 时代

从早期 handcrafted 特征的传统方法说起,目标很明确,就是找到活体与非活体攻击的difference,然后根据这些差异来设计特征,最后送给分类器去决策。

那么问题来了,活体与非活体有哪些差异?

1. 颜色纹理

2. 非刚性运动变形

3. 材料 (皮肤,纸质,镜面)

4. 图像or视频质量

所以这段时期的文章都是很有针对性地设计特征,列举几篇比较重要的:

Image Distortion Analysis[1], 2015

如下图,单帧输入的方法,设计了 镜面反射+图像质量失真+颜色 等统计量特征,合并后直接送SVM进行二分类。

71b661076d7182de0e8bff756eccbee7.png

Image Distortion Analysis[1]

Cons: 对于高清彩色打印的纸张 or 高清录制视频,质量失真不严重时,难区分开

Colour Texture[2], 2016

Oulu CMVS组的产物,算是传统方法中的战斗机,特别简洁实用,Matlab代码(课题组官网有),很适合搞成C++部署到门禁系统。

原理:活体与非活体,在RGB空间里比较难区分,但在其他颜色空间里的纹理有明显差异

算法:HSV空间人脸多级LBP特征 + YCbCr空间人脸LPQ特征 (后在17年的paper拓展成用Color SURF特征[12],性能提升了一点)

9a55e09d44d7a00e8d7cde624d0c477c.png

Colour Texture[2]

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)

f73387f95f83ac671ddcbe45c76ec363.png

Motion mag.-HOOF + LBP-TOP[3]

fef3148fe58216453294e29742909b69.png

DMD + LBP[4]

Cons: 基于Motion的方法,对于 仿人脸wrapped纸张抖动 和 视频攻击,效果不好;因为它假定了活体与非活体之间的非刚性运动有明显的区别,但其实这种微动作挺难描述与学习~

Pulse + texture[5], 2016

第一个将 remote pluse 应用到活体检测中,多帧输入(交代下背景:在CVPR2014,Xiaobai Li[14] 已经提出了从人脸视频里测量心率的方法)

算法流程:

1. 通过 pluse 在频域上分布不同先区分 活体 or 照片攻击 (因为照片中的人脸提取的心率分布不同)

2. 若判别1结果是活体,再 cascade 一个 纹理LBP 分类器,来区分 活体 or 屏幕攻击(因为屏幕视频中人脸心率分布与活体相近)

10b2ecd1f2e1aa6b82cfeca09a8cf5f5.png

Pulse + texture[5]

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,性能还是超越不了传统方法。

8f0b4d22e84fb00cce96a86c99223ab5.png

Deep Pulse and Depth[9], 2018

发表在 CVPR2018 的文章,终于超越了传统方法性能。

文章[8]的同一组人,设计了深度框架 准端到端 地去预测 Pulse统计量 及 Depth map (这里说的“准”,就是最后没接分类器,直接通过样本 feature 的相似距离,阈值决策)

在文章中明确指明:

1. 过去方法把活体检测看成二分类问题,直接让DNN去学习,这样学出来的cues不够general 和 discriminative

2. 将二分类问题换成带目标性地特征监督问题,即 回归出 pulse 统计量 + 回归出 Depth map,保证网络学习的就是这两种特征(哈哈,不排除假设学到了 color texture 在里面,黑箱网络这么聪明)。

ce7436a396dee34277eacb8089473d84.png

Deep Pulse and Depth[9]

回归 Depth map,跟文章[8]中一致,就是通过 Landmark 然后 3DMMfitting 得到 人脸3D shape,然后再阈值化去背景,得到 depth map 的 groundtruth,最后和网络预测的 estimated depth map 有 L2 loss。

而文章亮点在于设计了 Non-rigid Registration Layer 来对齐各帧人脸的非刚性运动(如姿态,表情等),然后通过RNN更好地学到 temporal pulse 信息。

2630e7ec1e81f136a79899611091ba03.png

Non-rigid Registration Layer[9]

为什么需要这个对齐网络呢?我们来想想,在做运动识别任务时,只需简单把 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,有兴趣的同学可以去细看。

e40b0e24e6c1e956af2b83fa57ff020e.png

texture + SSD or binocular depth[10]

De-Spoofing[11], ECCV2018

单帧方法,与Paper[8]和[9]一样,是MSU同一个课题组做的。

文章的idea很有趣,启发于图像去噪denoise 和 图像去抖动 deblur。无论是噪声图还是模糊图,都可看成是在原图上加噪声运算或者模糊运算(即下面的公式),而去噪和去抖动,就是估计噪声分布和模糊核,从而重构回原图。

39b69bc1af066ac1d3f4b96b388506b9.png

文中把活体人脸图看成是原图

92c5a201563b7d5dd32fc7bc3c19ca4e.png

,而非活体人脸图看成是加了噪声后失真的 x ,故 task 就变成估计 Spoof noiseN(

65879b10fed626742b314482cd00ff8e.png

) ,然后用这个 Noise pattern feature 去分类决策。

c6bb5fd8be3f90fcc377e12cf706794d.png

De-spoofing process[11]

那问题来了,数据集没有像素级别一一对应的 groundtruth,也没有Spoof Noise模型的先验知识(如果有知道Noise模型,可以用Live Face来生成Spoofing Face),那拿什么来当groundtruth,怎么设计网络去估计 Spoofing noise 呢?

如一般Low-level image 任务一样,文中利用Encoder-decoder来得到 Spoof noise N,然后通过残差重构出

4980d7a8d235eac3846874220ea2b574.png

,这就是下图的DS Net。为了保证网络对于不同输入,学出来的Noise是有效的,根据先验知识设计了三个Loss来constrain:

Magnitude loss(当输入是Live face时,N尽量逼近0);

Repetitive loss(Spooing face的Noise图在高频段有较大的峰值);

01Map Loss(让Real Face 的 deep feature map分布尽量逼近全0,而Spoofing face的 deep feature map 尽量逼近全1)

767e171eaacc28bb4a466cba2bcdfad0.png

De-spoofing网络架构[11]

那网络右边的 VQ-Net 和 DQ-Net 又有什么作用呢?因为没有 Live face 的 Groundtruth,要保证重构出来的分布接近 Live face,作者用了对抗生成网络GAN (即 VQ-Net )去约束重构生成的

3151125917862ddbcb85d67e700c5586.png

与Live face分布尽量一致;而用了文章[8]中的 pre-trained Depth model 来保证

01992ac85e587afd48d12570bd9b189b.png

的深度图与Live face的深度图尽量一致。

Pros: 通过可视化最终让大众知道了 Spoofing Noise 是长什么样子的~

Cons: 在实际场景中难部署(该模型假定Spoofing Noise是 strongly 存在的,当实际场景中活体的人脸图质量并不是很高,而非活体攻击的质量相对高时,Spoofing noise走不通)

后记:不同模态的相机输入对于活体检测的作用

1. 近红外NIR

由于NIR的光谱波段与可见光VIS不同,故真实人脸及非活体载体对于近红外波段的吸收和反射强度也不同,即也可通过近红外相机出来的图像来活体检测。从出来的图像来说,近红外图像对屏幕攻击的区分度较大,对高清彩色纸张打印的区分度较小。

从特征工程角度来说,方法无非也是提取NIR图中的光照纹理特征[15]或者远程人脸心率特征[16]来进行。下图可见,上面两行是真实人脸图中人脸区域与背景区域的直方图分布,明显与下面两行的非活体图的分布不一致;而通过与文章[5]中一样的rPPG提取方法,在文章[]中说明其在NIR图像中出来的特征更加鲁棒~

c4fac4e1003032995ac54ce1b5b8c9c0.png

NIR人脸区域与背景区域直方图[15]

2. 结构光/ToF

由于结构光及ToF能在近距离里相对准确地进行3D人脸重构,即可得到人脸及背景的点云图及深度图,可作为精准活体检测(而不像单目RGB或双目RGB中仍需估计深度)。不过就是成本较高,看具体应用场景决定。

3. 光场 Light field

光场相机具有光学显微镜头阵列,且由于光场能描述空间中任意一点向任意方向的光线强度,出来的raw光场照片及不同重聚焦的照片,都能用于活体检测:

3.1 raw光场照片及对应的子孔径照片[17]

如下图所示,对于真实人脸的脸颊边缘的微镜图像,其像素应该是带边缘梯度分布;而对应纸张打印或屏幕攻击,其边缘像素是随机均匀分布:

0bec215f40792be29b8622b22904990e.png

光场相机图

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返回搜狐,查看更多

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑客们的故事(连载三) 因为好奇

上期说到的肯和丹尼斯在黑客文化中的高知名度,不仅是因为他们开发出的操作系统和编程语言,更在于他们行为所体现出的价值观:求知、探索,以及追求极致。这些是黑客精神的精髓——虽然黑客们贯彻这些精神时的方式并不总是合理合法的…

css3禅密花园叫什么名字_新生儿起名:2021元旦出生男孩叫什么名字

2021年元旦节又是新的一年开始,在这辞旧迎新的日子里出生的男孩,都带有极好的寓意兆头,父母们如果能顺借此时机,取一个具有出生纪念意义的名字,那必然能让男孩的成长有着不同与众的历程。2021元旦出生男孩叫什么名字比…

10个让人很舒服的沟通技巧

转载于:https://www.cnblogs.com/yymn/p/4605237.html

idea将远程代码更新合并到本地_idea 本地调试远程服务器代码

基本原理本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信,传递调试指令和调试信息。 被调试程序的远程虚拟机:作为 Debug 服务端,监听 Debug 调试指令。jdwp是Java Debug Wire Protocol的缩写。 调试程序的本地虚拟机&#xff…

安卓手机网页 字体垂直方向对齐_初学Excel办公软件字体对齐调整

今天我们依然讲解Excel办公软件的字体对齐调整,上一节我们讲过在菜单栏的上方就可以看到十个功能,然后我们根据这十个功能的调解我们所需要的文字对齐,或者是居中对齐,顶端对齐等等。还有另外一种操作方法,也是方便快捷…

英伟达_如何超越英伟达?

从AI热潮中率先获益的英伟达,其GPU参数和性能频繁出现在不少AI芯片发布会的对比图中。这是在缺乏AI芯片衡量的标准时,新的AI芯片证明自己实力的不错方式。不过,声称性能超越英伟达GPU的创新AI芯片不少,但想要超越英伟达非常困难。…

在struts2中push方法的使用_【干货】网版印刷中水墨使用注意事项及助剂使用方法...

导LEAD语在印刷生产中,水性油墨的黏度、干燥速度和PH值等等都会直接影响印刷质量,那么具体到网版印刷中,在使用水性油墨时应该注意哪些问题呢?常用的印刷助剂都有哪些特点和使用方法?编辑:华印纸箱彩盒 小张…

限定概率抽奖_守护星已点亮,内测皮肤得到没?从天美抽奖概率分析:地址什么梗...

声明:原创文章,禁止抄袭,违者必究!大家好,我是你们的小抖。本次五五开黑节最引人注意的活动,当然不是超云龙胆新皮肤了。小抖觉得大家应该与我想的一样:内测皮肤。小抖点亮了所有守护星&#xf…

完美汽配管理系统v12服务器,完美汽车维修4S店管理系统

完美汽车维修4S店管理系统是一款十分不错的汽车修理系统,他可以帮助用户去处理好汽车维修,客户信息管理等问题,所以快来下载试试吧!软件介绍完美汽车维修4S店管理系统是款界面简洁大方且主要应用汽修行业的管理软件,完…

JPA中的@MappedSuperclass

说明地址:http://docs.oracle.com/javaee/5/api/javax/persistence/MappedSuperclass.html 用来申明一个超类,继承这个类的子类映射时要映射此类中的字段,可以当做是对entity抽取封装的类。如果子类想重写此类的映射信息,可以使用…

调用另一个cpp的变量_再谈条件变量—从入门到出家

再谈条件变量—从入门到出家C语言--条件变量条件变量是在线程中以睡眠的方式等待某一条件的发生;条件变量是利用线程间共享的全局变量进行同步的一种机制:一个线程等待"条件变量的条件成立"挂起另一个线程使"条件成立"条件变量的使用…

不同page页面选择不同页面模板的方法

仿制一个企业站的时候发现该站用了很多page页面,而且个别页面的样式不相同,同时区别于post文章页面,其实不同之处就在于每个页面的xhtmlcss的不同,关键是page模板选择的问题,恒宁总结了以下两种方法。 第一种&#xff…

jquer each 遍历的结果不显示 null_SpringBoot系列(三十一)- Thymeleaf如何用th:each 做条件遍历

步骤1:基于前面的知识点步骤2:先运行,看到效果,再学习步骤3:模仿和排错步骤4:TestController步骤5:普通遍历步骤6:带状态的遍历步骤7:结合 select步骤8:结合 单选框步骤9:完整的 test.html步骤10:重启测试步骤 1 : 基于前面的知识点本知识点是建立在上一…

python3.6sysos_求大佬,这是什么情况啊

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Traceback (most recent call last): File "manager.py", line 13, in sys.exit(main()) File "manager.py", line 8, in main manager.run() File "/root/imooc/lib/python3.5/site-packages/flask_sc…

.Net学习笔记----2015-06-30(超市收银系统01-仓库类)

GUID: 产生一个不会重复的ID static void Main(string[] args){//产生一个不会重复的编号Console.WriteLine(Guid.NewGuid().ToString());Console.WriteLine(Guid.NewGuid().ToString());Console.WriteLine(Guid.NewGuid().ToString());Console.WriteLine(Guid.NewG…

Winform开发之ADO.NET对象Connection、Command、DataReader、DataAdapter、DataSet和DataTable简介...

ADO.NET技术主要包括Connection、Command、DataReader、DataAdapter、DataSet和DataTable等6个对象,下面对这6个对象进行简单的介绍:(1)Connection对象的主要功能是与数据库进行连接(事物处理也使用此对象)…

python电子英汉词典显示_python网页抓取之英汉字典

linux的字典本人实在用起来不舒服(stardict挺不错的,但是界面好看些,功能简单易用就好了) ,在线翻译又得打开庞大的浏览器....就打算自己写个,但是时间有限,为了简单, 还是用python抓…

清空缓存的命令_超详细的mysql数据库查询缓存原理解析、涉及命令、流程分析等...

概述mysql查询缓存在数据库优化可以起到很大的作用,今天主要针对这一块做一个总结,下面一起来看看吧~一、缓存条件,原理MySQL Query Cache是用来缓存我们所执行的SELECT语句以及该语句的结果集,MySql在实现Query Cache的具体技术细…

和lua的效率对比测试_Unity游戏开发Lua更新运行时代码!

最近沉迷lua脚本热更,想说这个可以提高多少菜鸡的调试效率,找了网上好多文章,但是都不行,尝试了很久,并且自己测试和学习,写了一遍,勉强能热更了。下面记录一下热更Lua的过程。一、用来卸载表格…

nodejs cluster ip hash_redis集群架构了解一下?一致性hash了解吗?

在前几年,redis 如果要搞几个节点,每个节点存储一部分的数据,得借助一些中间件来实现,比如说有 codis,或者 twemproxy,都有。有一些 redis 中间件,你读写 redis 中间件,redis 中间件…