活体检测
原理
活体检测
随着人脸识别、人脸解锁等技术在金融、门禁、移动设备等日常生活中的广泛应用,人脸防伪/活体检测(Face Anti-Spoofing)技术在近年来得到了越来越多的关注。一个可以正常工作的人脸识别系统,除了实现“认人”还包括应用于人脸识别身份认证系统中至关重要的一项技术————活体检测。
活体检测就是判断捕捉到的人脸是真实人脸,还是伪造的人脸攻击(如:彩色纸张打印人脸图,电子设备屏幕中的人脸数字图像 以及 面具 等)。本质是分类问题,可看成二分类(真 or 假);也可看成多分类(真人,纸张攻击,屏幕攻击,面具攻击)
攻击方法
PA(Presentation Attacks)常用的攻击方式:
- print attack(即打印出人脸照片)
- replay attack(播放视频)
- mask attack(带人脸假体面具等)
照片攻击
最简单的攻击方式是用照片。可以轻易的从朋友圈和微博等渠道,搞到一张别人的照片。所以,照片自然是活体检测首要的防范对象。对付照片的方式,很简单,照片是死的,不能做出眨眼张嘴转头这些动作。所以在活体检测这一关,下达几个动作的指令,让你做动作给我看,这就是交互式动作活体检测。
视频攻击
把他人的动作录成视频,再拿来播放攻击,攻击难度已经上升一个级别了。要搞到另外一个人的视频,还得包含很规矩的这几个动作,这就比照片要难了。视频需要用屏幕进行播放,这就漏马脚了。用屏幕播放视频,然后再经过摄像头成像的画面,和真人在摄像头面前成像的画面,二者其实很不一样。前者会有一堆纹路,我们称之为摩尔纹。用高清屏播放的效果会好一些,可是也有很多不一样,比如反光、倒影,最关键是画面质量总是模糊一些,失真度明显高一些。所以根据这些线索搞对应的算法,视频攻击也能防得很好。
立体面具攻击
照片和视频回放攻击都是把人脸图像投射到一个平面上,这次的攻击方式就是做一个和真人比较相似的立体面具。到这里,攻击难度又上升了一个级别。面具有很多种,最普通的是塑料或者硬纸做成的面具,这种面具虽然成本低廉,但材质相似度极低,用普通纹理特征就可以识别出来。另外,还有用硅胶、乳胶以及3D打印的的立体面具,这类面具的表观和皮肤更加接近,但它们的材料表面反射率和真实人脸还是不同的,因此在成像上仍然有差别,这种差别是可以用最先进的机器学习算法学习到,很难达到以假乱真的程度。
静默活体
动作活体检测的方式具有很高的安全性,但另一方面,对用户来说,由于要配合着做几个动作,因此体验不是非常好。新的活体检测方式,不需要用户做任何动作,只需要自然正对摄像头三四秒钟,就可以完成检测了。原因是虽然没有刻意做动作,但真实的人脸并不是绝对静止的,总有一些微表情存在,比如眼皮和眼球的律动、眨眼、嘴唇及其周边面颊的伸缩等,利用这些特征,我们完全可以防住照片攻击。至于视频回放攻击和立体面具攻击,防范的原理和之前介绍的一样。
红外活体
在有些应用场景,比如ATM机上,我们可以安装红外摄像头,利用红外图片,我们可以实现更好的防攻效果。不管是可见光还是红外光,其本本质都是电磁波。最终看到的图像长什么样,与材质表面的反射特性有关。真实的人脸和纸片、屏幕、立体面具等攻击媒介的反射特性都是不同的,所以成像也不同,而这种差异在红外波反射方面会更加明显,比如说,一块屏幕在红外成像的画面里,就只有白花花的一片,连人脸都没了,攻击完全不可能得逞。
pytorch 介绍
PyTorch 是一个 Torch7 团队开源的 Python 优先的深度学习框架,提供两个高级功能:
- 强大的 GPU 加速 Tensor 计算(类似 numpy)
- 构建基于 tape 的自动升级系统上的深度神经网络。
通常使用 PyTorch 是将其作为:
- 作为 numpy 的替代品,以使用强大的 GPU 能力;
- 一个深度学习研究平台,提供最大的灵活性和速度。
PyTorch中所有的神经网络都来自于autograd包,autograd 包提供Tensor所有操作的自动求导方法。autograd.Variable 这是这个包中最核心的类。 它包装了一个Tensor,并且几乎支持所有的定义在其上的操作。一旦完成了你的运算,你可以调用 .backward()来自动计算出所有的梯度。
使用 torch.nn 包可以进行神经网络的构建。而nn建立在autograd的基础上来进行模型的定义和微分。nn.Module中包含着神经网络的层,同时forward(input)方法能够将output进行返回。
api
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