单目可见光静默活体检测 Binary or Auxiliary Supervision论文解读
点击我爱计算机视觉标星,更快获取CVML新技术
前段时间,52CV正式运营子品牌OpenCV中文网公众号,旨在分享最新的OpenCV实用技术与计算机视觉突破,无意中分享了两篇活体检测的代码:
CVPR 2019 活体检测比赛第二名、第三名方案开源
OpenCV活体检测
(强烈推荐大家点击上述链接关注OpenCV中文网)
不想竟然引起了52CV人脸识别群友们的热切关注,后来新开了活体检测群,群内筹划后续系统性总结相关论文和数据集。
今天的文章来自52CV群友王哲的知乎专栏活体检测论文分享,原文地址:
https://zhuanlan.zhihu.com/p/60155768
该文解读了CVPR 2018 活体检测论文《Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision》。
原论文作者来自美国密歇根州立大学。
所属范畴:单目可见光静默活体
简介:
作者认为现存大多数活体算法用binary classification监督不够合理,也不能说明预测结果的依据(模型是否学习到真正的活体与攻击之间差异),故提出CNN-RNN框架,采用pixel-wise的深度图监督方式和sequence-wise的rPPG信号监督方式(如下图),并提出高分辨率+丰富PIE的数据集SiW;试验在cross-test取得了state-of-the-art。
主要贡献:
提出用深度图和rPPG信号作为CNN学习的监督信息,提高模型泛化能力;
提出CNN-RNN框架,支持深度图和rPPG信号的end-to-end训练;
发布全新数据集,包含多种PIE和其他影响因素,并取得sota。
方法介绍:
首先我们看rPPG是什么,Remote Photoplethysmography (rPPG)是在不接触人体皮肤的情况下,跟踪如心率等重要信号的技术。作者引用了很多文献来解释rPPG的发展,然而结论却是,分析这种信号的解决方案太容易实现了,那么它一定很容易受到PIE变化的影响!因此,作者用RNN来学习从人脸视频到rPPG信号的映射,对于PIE变化可能不够鲁棒,但是足够区分真人和攻击。
1. Face Anti-Spoofing with Deep Network
如Figure 2所示,先用CNN提取特征,用深度图做监督信息,然后把预测的深度图和最后一层的特征图输入到non-rigid registration layer,获得aligned后的特征图,再用aligned的特征图和rPPG监督信息训练RNN,使其通过视频序列获得区分真人和攻击的能力。
2. 深度图监督
深度图是二维图像的三维信息表达,表示不同区域和相机之间不同距离。这种表达比二维标签传达出更多的信息,可以从根本上区分真人与打印、视频回放的攻击方式。作者用DeFA估计3D信息(具体的没太看懂),考虑到绝对深度不方便训练也没太大作用,就将深度归一化到[0, 1],再用z-Buffer算法把归一化的z值映射回2D图像,这样作为CNN部分pixel-wise监督信息的“ground truth”就产生了。
3. rPPG 监督
rPPG信号最近已经被用到活体识别领域了,为face liveness提供时域信息,这类信息与血液流动高度相关。传统的rPPG信号提取方法有三个弊端:对姿态太敏感,很难跟踪某个特定的面部区域;对光照敏感,额外的光照会影响皮肤反光的总量;对于活体识别而言,从视频提取的rPPG信号可能无法与真实视频区分。
作者认为用RNN去估计rPPG信号可以有效解决上述所有问题,假设,同一subject的视频在不同PIE条件下的ground truth rPPG信号是相同的。由于同一人的心跳在视频中(拍摄时间小于5分钟)是相似的,所以假设有效。作者把某个subject的constrained(PIE 无变化)视频中提取出的rPPG信号作为这个subject所有rPPG信号的groundtruth。这种可持续的监督信息有助提升CNN和RNN的鲁棒性。作者用DeFA提取人脸区域用于计算两个正交色度信号,然后FFT变换至频域。
4. CNN网络
作者用了全卷积网络,包含三个block,每个block的输出都resize到64*64再合并。合并后的feature分别输入到两个分支,第一个分支用于估计深度图,目标函数:
D为CNN参数,Nd为训练集样本总数。第二个分支输入到non-rigid registration layer。
5. RNN网络
RNN网络基于图像序列估计rPPG信号,然后FFT变换到频域,目标函数:
R是RNN参数,Fj是frontalized feature map,Ns是图像序列的总数。作者在FFT之后对FFT求Loss,那么bp的时候怎么FFT过乘求导呢?先IFFT么?既然FFT没有参数,为什么不把fc的输入接入loss呢,不解。
6. 实现
1)ground truth
作者按照2. 中方法生成深度图的ground truth,并把攻击样本的深度设为一个平面,如全部设为“0”;同样,按照3. 中方法生成rPPG的ground truth,并做L2归一化,攻击样本的rPPG设为“0”
2)训练策略
作者合并CNN和RNN,做端到端训练。CNN部分需要的数据需要打乱所有subject的所有样本,再分成多个batch,以此来维持训练的稳定性和模型的泛化能力,但是RNN模型需要某个subject的较长视频序列来利用跨帧的时域信息。这两方面是互相矛盾的,也对显存要求很高,为此作者设计了two-stream 策略:第一个stream满足CNN,输入为RGB图片和深度图“ground truth”;第二个stream满足RNN,输入是视频序列,深度图“ground truth”,预测的3Dshapes和rPPG “ground truth”。训练时,交替训练两个stream,训练CNN时只更新CNN参数,训练RNN时更新CNN和RNN的参数(很难理解,怎么通过non-rigid registration反传回去的)。
3)测试
输入视频序列,得到预测的深度图和rPPG信号,计算最后的
得分:
为常数权重,用来合并两个输出。
4)Non-rigid registration 层
作者设计non-rigid registration层,用于RNN输入数据的预处理。这一层用预测的稠密3Dshape align CNN输出的feature map的activations,确保RNN跟踪和学习到不同人脸同一部分的变化。如下图,该层有三个输入:CNN输出的feature map T,估计的深度图Dhat,3D shape S;首先把Dhat二值化,得到V,然后计算V和T的内积,得到U,相当于把V当成T的mask来使用。
最后,用S frontalize U(不理解):
作者认为该层对整个网络有三个贡献:输入数据被对齐,RNN在学习特征是不受到面部姿态和表情的影响;减少feature map中背景的影响;对于攻击样本,深度图几乎接近0,因此和feature做内积时,极大弱化了feature map的activation,有利于RNN学习并输出的rPPG信号为0,因此,rPPG loss也有助于CNN产生值为0的深度图。
实验与结论:
作者在tf框架下进行试验,学习率为 3e-3,10个epoch,CNN stream batch 为10,CNN-RNN stream batch 为2,视频序列长度为5,公式(6)中为0.015,公式(7)的阈值为0.1。作者用APCER,BPCER,ACER,HTER作为测试的metric,ablation 测试结果如下:
Model 1: CNN + pooling layer + fc layer + softmax
Model 2: CNN + depth map
Model 3: CNN + RNN + depth map + rPPG(w/o non-rigid registration)
Model 4: 作者提出的框架
作者用SiW数据集中的20个subject进行试验,显然本文提出的框架效果最好,作者还研究了不同视频长度对结果的影响,见下图,视频序列越长取得效果越好,对显存要求也就越高。
其他测试结果如下:
其他
1)可视化
从下图可以看到,辅助的监督信息是有效的。
CV君在网上找了下,目前还未发现该文有开源代码,如果各位读者有推荐的相关代码,欢迎留言。
加群交流
关注活体检测相关技术,欢迎加入52CV-活体检测交流群,下方扫码CV君拉你入群,验证信息请务必注明:活体检测(不然不会通过好友验证)。
喜欢在QQ交流的童鞋可以加52CV官方QQ群:702781905。
(不会时时在线,如果没能及时通过还请见谅)
长按关注我爱计算机视觉
单目可见光静默活体检测 Binary or Auxiliary Supervision论文解读相关推荐
- 人脸静默活体检测最新综述
©PaperWeekly 原创 · 作者|燕皖 单位|渊亭科技 研究方向|计算机视觉.CNN 活体检测在人脸识别中的重要环节.以前的大多数方法都将面部防欺骗人脸活体检测作为监督学习问题来检测各种预定义 ...
- 活体检测论文研读三:Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision
Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision 论文简介 一.指出先前的深度学习方法将人脸反欺 ...
- [人脸活体检测] 论文: Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision
Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision 论文简介 与人脸生理相关的rppG信号被研究者 ...
- 静默活体检测-人脸活体识别
活体检测技术一般分为配合式活体检测和非配合式活体检测. 配合式活体检测是最常见的活体检测方式,通过眨眼.张嘴.摇头.点头.甚至读出随机数字等配合式组合动作,使用人脸关键点定位和人脸追踪等技术,验证用户 ...
- 工业级静默活体检测开源算法技术解析记录
工业级静默活体检测开源算法技术解析(小视科技分享) 视频链接: https://www.bilibili.com/video/BV1qZ4y1T7CH 相关背景 定义:无感鉴别镜头前人脸的真伪,人脸识 ...
- 活体识别6:小视科技开源的静默活体检测
说明 该项目为小视科技的静默活体检测项目.开源地址在 https://github.com/minivision-ai/Silent-Face-Anti-Spoofing. 由于不是论文衍生项目,所以 ...
- c#和java部署pytorch同事识别两个图片_人脸识别漏洞频出?这里有个开源静默活体检测算法,超低运算量、工业级可用...
小视科技团队开源的基于 RGB 图像的活体检测模型,是专门面向工业落地场景,兼容各种复杂场景下的模型.该自研的剪枝轻量级模型,运算量为 0.081G,在麒麟 990 5G 芯片上仅需 9ms.同时基于 ...
- 人脸识别漏洞频出?这里有个开源静默活体检测算法,超低运算量、工业级可用...
来源:机器之心 本文约3259字,建议阅读7分钟. 本文介绍小视科技团队开源的基于 RGB 图像的活体检测模型,是专门面向工业落地场景,兼容各种复杂场景下的模型.该自研的剪枝轻量级模型,运算量为 0. ...
- 9ms 静默活体检测,小视开源工业级品质算法
小视科技团队开源的基于 RGB 图像的活体检测模型,是专门面向工业落地场景,兼容各种复杂场景下的模型.该自研的剪枝轻量级模型,运算量为 0.081G,在麒麟 990 5G 芯片上仅需 9ms.同时基于 ...
最新文章
- 反向R?削弱显著特征为细粒度分类带来提升 | AAAI 2020
- (深入理解)强化学习中Model-based和Model-free的区别是什么
- 2018-2019年新一代AI领域十大最具成长性技术展望
- docker 2375 vulnerability and self-signatuer certifications
- 【PAT甲级 BigInteger】1019 General Palindromic Number (20 分) Java版 7/7通过
- 推荐一个视频 Postive Psychology
- Springboot使用Filter以及踩过的坑
- vue echarts数据变化重新渲染_vue实例创建及数据挂载渲染
- floodlight make the VMs can not getDHCP IP address
- eclipse下载支持compiler compliance level 1.8的插件
- windows操作系统定时关机和取消定时关机命令
- flash builder激活
- word 任意页设置开始页码
- 面试时工作经验不足,如何才能打动HR?
- ETL讲解(很详细!!!)
- 招聘 | 胡传鹏博士课题组招硕士、博士
- ISP算法----基本DPC算法实现代码
- linux主机名(静态主机名、临时主机名)
- 【14天鸿蒙设备开发实战-第七章 设备联网上云 学习笔记】
- 网页悬浮在线人工客服代码.
热门文章
- STM32 - 定时器的设定 -高级- 08 - One-pulse mode - 触发波的实现 - 可变长度和相位
- 手机学linux软件下载,Linux标准教科书下载
- 在…视域下是什么意思_电影中出现的出品人是什么意思?你需要了解下
- html写出五个文本标签,HTML的几个常用标签
- 联想微型计算机功率,解锁全部潜力,联想这款笔记本可以将CPU功耗提升至24W
- linux定时任务小程序,linux定时任务
- 计算机算法设计与分析读后感,算法设计与分析基础经典读后感有感
- 运维在浏览器搜索linux日志,Graylog日志管理系统---搜索查询方法使用简介
- linux修改非root用户密码永不过期
- uri=http: //java.sun.c om/jsp/jstl/core 出错