原理

活体检测

随着人脸识别、人脸解锁等技术在金融、门禁、移动设备等日常生活中的广泛应用,人脸防伪/活体检测(Face Anti-Spoofing)技术在近年来得到了越来越多的关注。一个可以正常工作的人脸识别系统,除了实现“认人”还包括应用于人脸识别身份认证系统中至关重要的一项技术————活体检测。

活体检测就是判断捕捉到的人脸是真实人脸,还是伪造的人脸攻击(如:彩色纸张打印人脸图,电子设备屏幕中的人脸数字图像 以及 面具 等)。本质是分类问题,可看成二分类(真 or 假);也可看成多分类(真人,纸张攻击,屏幕攻击,面具攻击)

攻击方法

PA(Presentation Attacks)常用的攻击方式:

  • print attack(即打印出人脸照片)
  • replay attack(播放视频)
  • mask attack(带人脸假体面具等)
照片攻击

最简单的攻击方式是用照片。可以轻易的从朋友圈和微博等渠道,搞到一张别人的照片。所以,照片自然是活体检测首要的防范对象。对付照片的方式,很简单,照片是死的,不能做出眨眼张嘴转头这些动作。所以在活体检测这一关,下达几个动作的指令,让你做动作给我看,这就是交互式动作活体检测。

视频攻击

把他人的动作录成视频,再拿来播放攻击,攻击难度已经上升一个级别了。要搞到另外一个人的视频,还得包含很规矩的这几个动作,这就比照片要难了。视频需要用屏幕进行播放,这就漏马脚了。用屏幕播放视频,然后再经过摄像头成像的画面,和真人在摄像头面前成像的画面,二者其实很不一样。前者会有一堆纹路,我们称之为摩尔纹。用高清屏播放的效果会好一些,可是也有很多不一样,比如反光、倒影,最关键是画面质量总是模糊一些,失真度明显高一些。所以根据这些线索搞对应的算法,视频攻击也能防得很好。

立体面具攻击

照片和视频回放攻击都是把人脸图像投射到一个平面上,这次的攻击方式就是做一个和真人比较相似的立体面具。到这里,攻击难度又上升了一个级别。面具有很多种,最普通的是塑料或者硬纸做成的面具,这种面具虽然成本低廉,但材质相似度极低,用普通纹理特征就可以识别出来。另外,还有用硅胶、乳胶以及3D打印的的立体面具,这类面具的表观和皮肤更加接近,但它们的材料表面反射率和真实人脸还是不同的,因此在成像上仍然有差别,这种差别是可以用最先进的机器学习算法学习到,很难达到以假乱真的程度。

静默活体

动作活体检测的方式具有很高的安全性,但另一方面,对用户来说,由于要配合着做几个动作,因此体验不是非常好。新的活体检测方式,不需要用户做任何动作,只需要自然正对摄像头三四秒钟,就可以完成检测了。原因是虽然没有刻意做动作,但真实的人脸并不是绝对静止的,总有一些微表情存在,比如眼皮和眼球的律动、眨眼、嘴唇及其周边面颊的伸缩等,利用这些特征,我们完全可以防住照片攻击。至于视频回放攻击和立体面具攻击,防范的原理和之前介绍的一样。

红外活体

在有些应用场景,比如ATM机上,我们可以安装红外摄像头,利用红外图片,我们可以实现更好的防攻效果。不管是可见光还是红外光,其本本质都是电磁波。最终看到的图像长什么样,与材质表面的反射特性有关。真实的人脸和纸片、屏幕、立体面具等攻击媒介的反射特性都是不同的,所以成像也不同,而这种差异在红外波反射方面会更加明显,比如说,一块屏幕在红外成像的画面里,就只有白花花的一片,连人脸都没了,攻击完全不可能得逞。

pytorch 介绍

PyTorch 是一个 Torch7 团队开源的 Python 优先的深度学习框架,提供两个高级功能:

  1. 强大的 GPU 加速 Tensor 计算(类似 numpy)
  2. 构建基于 tape 的自动升级系统上的深度神经网络。

通常使用 PyTorch 是将其作为:

  1. 作为 numpy 的替代品,以使用强大的 GPU 能力;
  2. 一个深度学习研究平台,提供最大的灵活性和速度。

PyTorch中所有的神经网络都来自于autograd包,autograd 包提供Tensor所有操作的自动求导方法。autograd.Variable 这是这个包中最核心的类。 它包装了一个Tensor,并且几乎支持所有的定义在其上的操作。一旦完成了你的运算,你可以调用 .backward()来自动计算出所有的梯度。

使用 torch.nn 包可以进行神经网络的构建。而nn建立在autograd的基础上来进行模型的定义和微分。nn.Module中包含着神经网络的层,同时forward(input)方法能够将output进行返回。

api

https://github.com/SoftwareGift/FeatherNets_Face-Anti-spoofing-Attack-Detection-Challenge-CVPR2019/blob/regression/models/FeatherNet.py

model = FeatherNetB()

实践

pytorch 安装

tar xvf pytorch_install.tar
cd pytorch_install
./install.sh

模型介绍

本次实践的模型是用来检测深度图,只适合能获取深度的摄像头。 深度图:包含与视点场景对象表面距离有关信息的图像通道,通道本身类似于灰度图像,每个像素值是传感器测出距离物体的实际距离

RGB-D相机主要两种实现方式

  • 结构光法:Kinect v1,iPhone X
  • 飞行时间法(TOF):Kinect v2,Phab 2 Pro

参考

https://zhuanlan.zhihu.com/p/25401788
https://new.qq.com/omn/20200716/20200716A0U5QN00.html

https://zhuanlan.zhihu.com/p/44904820
https://blog.csdn.net/ffcjjhv/article/details/84260060
https://blog.csdn.net/u013841196/article/details/81176498
https://blog.csdn.net/SIGAI_CSDN/article/details/82772813
https://zhuanlan.zhihu.com/p/43480539
https://github.com/zj19941113/FaceLivenessDetection_SVM
https://blog.csdn.net/qunniem/article/details/116269345
https://zhuanlan.zhihu.com/p/344043024
https://blog.csdn.net/donkey_1993/article/details/80781773
https://www.w3cschool.cn/pytorch/pytorch-z7mj3buo.html
https://zhuanlan.zhihu.com/p/25572330
https://github.com/tonylins/pytorch-mobilenet-v2/blob/master/MobileNetV2.py
https://github.com/moskomule/senet.pytorch
https://github.com/SoftwareGift/FeatherNets_Face-Anti-spoofing-Attack-Detection-Challenge-CVPR2019
https://github.com/SoftwareGift/FeatherNets_Face-Anti-spoofing-Attack-Detection-Challenge-CVPR2019/issues/40
https://github.com/SoftwareGift/FeatherNets_Face-Anti-spoofing-Attack-Detection-Challenge-CVPR2019/issues/65
https://bbs.huaweicloud.com/blogs/156812
https://www.gitmemory.com/issue/SoftwareGift/FeatherNets_Face-Anti-spoofing-Attack-Detection-Challenge-CVPR2019/73/560012153
https://zhuanlan.zhihu.com/p/95700549
https://github.com/tonylins/pytorch-mobilenet-v2
https://github.com/moskomule/senet.pytorch
https://github.com/shamangary/SSR-Net
https://zhuanlan.zhihu.com/p/27401516
https://www.cnblogs.com/wangguchangqing/p/11058525.html

标签: none

添加新评论