Skip to content

Jing-Xiaolong/liveness-detection-introduction

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ac0db32 · Aug 15, 2019

History

7 Commits
Jul 15, 2019
Aug 15, 2019

Repository files navigation

活体检测

motivation

PA - presentation attacks,包括:print, replay, 3D-mask, facial cosmetic makeup, etc

在人脸检测中,攻击者会通过PA对系统进行攻击,没有活体检测的系统安全性低,2017左右以前的研究方向主要是传统机器视觉方法,之后则多将CNN融入以增强性能

methods

traditional methods CNN-based methods
基本过程 根据手工设计的特征判断:
如LBP,SIFT,SURF等,进行检测
通过CNN网络端到端学习anti-spoofing的表示空间
缺点 1. 对PA敏感,如replay/ 3D mask attack
2. 某一特征难以判断所有/大部分PAs
1. 某些CNN方法仅将其视为二分类
2. 通过细节进行判别,并未学习到PA模式
- 皮肤细节损失、色彩失真、摩尔纹、运动模式、形变
常用的判别依据 1. 基于文理——空域信息:深度图、文理、各类算子 1. 基于**文理——空域信息**
- 包括深度图、文理、各类算子
- 噪声分解
2. 基于**运动 ——时域信息**
- 包括眨眼、运动模式等
3. 基于**其它信号——主要为频域信息**
- rPPG(非接触式获取生物信号,如心跳)
- 光谱分析(活体和PA反射的频率响应不同)

传统方法论文调研

传统方法大部分是基于文理,其基本思路为

  1. 原图预处理,如裁剪、对齐、分割等,同时进行表示空间的变换或叠加,如颜色空间、时域、空域、频域等
  2. 利用传统方法对图像进行特征提取,如SIFT,SURF,LBP,HOG,及各类改进和变种(主要区别在此)
  3. 分类前预处理,如多通道联结、降维、编码、进一步特征提取等
  4. 特征输入分类器进行real/spoof二分类,如SVM、LR等

2015icip - Face anti-spoofing based on color texture analysis

2016 - Face spoofing detection using color texture analysis

  • 基本思想:活体和PA的文理统计特征不一致(如下图),可对其文理特征进行分类

    通过LBP (local binary patterns 局部二值模式)提取文理特征,再对LBP进行分类,LBP算子如下

  • 模型架构:


2018 - Ccolbp: Chromatic cooccurrence of local binary pattern for face presentation attack detection

  • 基本思想:文理统计特性
  • 模型架构:


2012 - On the effectiveness of local binary patterns in face anti-spoofing

  • 基本思想:文理统计特性
  • 模型架构:

2012 - LBP-TOP based countermeasure against face spoofing attacks

2013 - Can face anti-spoofing countermeasures work in a real world scenario?

  • 基本思想:文理统计特性
  • 模型架构:


2017 - Face anti-spoofing based on color texture analysis

  • 基本思想:文理统计特性
  • 模型架构:


2013 - Face Liveness Detection with Component Dependent Descriptor

  • 基本思想:文理统计特性
  • 模型架构:
    1. 检测面部位置,并将面部分割为6个不同区域(轮廓,面部,左右眼,鼻,嘴)
    2. 提取特征,LBP、HOG等,并将不同部位的特征进行联结
    3. SVM分类real/spoofing



深度学习PA数据集

1. Replay-attack 2012

共1300视频样本,不能做商业用途,需由获机构授权者提交申请并签署EULA(End User License Agreement)才能下载

2. MSU-USSA

全称MSU Unconstraint Smartphone Spoof Attack Database,共9000图像样本(1000live+8000spoof),不能做商业用途,需签署MSU USSA Agreement才能下载

3. oulu-npu 2017

共4950视频样本,大部分CNN-based数据集都会使用的数据集,不能做商业用途,需由在学术机构担任永久性职位的人签署EULA才能下载

4. SiW 2018

165subjects共4478视频样本,商业用途需获授权,需由获机构授权者提交申请并签署DRA(dataset release agreement)才能下载

5. CASIA-SURF 2019.6

1000subjects共21000视频样本,目前只接受学术用途,需由学术机构签署CASIA-SURF release agreement才能下载



深度学习方法论文调研

An original face anti-spoofing approach using partial convolutional neural network

论文下载

motivation/基本思想

  • 基于文理:活体和PA的特征不同

models/模型架构

和传统方法过程类似,只不过提取特征这一步使用了预训练的VGG模型


Face anti-spoofing using patch and depth-based cnns

论文下载

缺点:性能堪忧,超不过传统方法

motivation/基本思想

  • 基于文理,主要表现为:
  1. 活体和PA的局部区域的具有不同特征文理,统计特性不同
  2. 活体和PA的面部深度图不同(PA为扁平,活体有人脸形状)

models/模型架构

  • Supervision Signals

    • patch spoof scores:从人脸图像中挑选某些局部区域patches,根据patch内的文理统计特征计算一个patch spoof scores,用于监督patch-based CNN部分

      patch spoof scores标签:1 - live,0 - spoof

    • Depth Map:面部深度图显示了面部不同位置的深度信息,据此计算深损失,用于监督depth-based CNN部分

      深度图标签:通过**3DMM(2003)**估计活体的3D面部形状图$A\in\mathbb{R}^{3\times Q}$,和2D面部深度图$M\in\mathbb{R}^{52\times 52}$作为深度图标签,用于计算深度图损失

  • 网络架构

    • patch-based CNN部分

      为何用patches:1. 增加训练数据 2. 不用resize整张脸,保持原本的分辨率 3. 在局部检测可用于活体检测的特征时,设定更具挑战性的约束条件,加强特征提取的性能

      输入:相同大小的不同patches的RGB, HSV, YCbCr, pixel-wised LBP特征图等

      输出:pacth spoof scores

    • Depth-based CNN部分

      研究表明高频部分对anti-spoofing非常重要,为避免对原图进行resize而损失图片的高频部分,因此使用FCN以无视输入特征图的size

      输入:HSV + YCbCr特征图

      输出:深度图 M ^ R 52 × 52

    • 网络架构信息


Deep Convolutional Dynamic Texture Learning with Adaptive Channel-discriminability for 3D Mask Face Anti-spoofing

论文下载

motivation/基本思想

本文主要针对3D mask类别的PA,其主要思想为

  • 基于动态文理——由于mask覆盖面部,mask难以完全呈现面部运动,而活体的面部运动更加精细、细腻(如眨眼,嘴唇、苹果肌微动等),也可以理解为基于文理的不同。

    3D mask的面部运动具有更加统一的运动模式,而活体的面部运动一致性更低

models/模型架构

  • 基本流程:1. 视频预处理,通过模型CLNF(2014), 2. 预训练VGG提取特征, 3. 通过光流方法对面部运动进行估计Subtle Facial Motion Estimation, 4. 提取动态文理Deep Conv Dynamic texture, 5. spoofing/live二分类

  • 网络架构

    • Subtle Facial Motion Estimation部分

      预处理后的特征为 X t R W × H × K ,其中$W,H,K$表示特征宽、高、通道,$t=1,2,...,T$表示视频帧,这些特征中包含有细粒的文理特征。

      将$X_t$分解为$K$个时间序列${C_k\in\mathbb{R}^{W\times H\times T}}_{k=1}^K$,再使用光流方法通过这些特征提取面部微运动:$\frac{\part{I}}{\part{x}}u+\frac{\part{I}}{\part{y}}v+\frac{\part{I}}{\part{t}}=0$

      其中$I(x,y,t)$是$(x,y)$处的亮度信息,$u,v$分别是$(x,y)$处的像素的水平、垂直速度(光流optical flow)

      计算每两帧之间的光流,对所有帧取得光流的平均值,最终得到动态文理为:$V\in\mathbb{R}^{K\times N},N= W \times H$

    • Adaptive Channel-discriminability constraint learning部分

      动态文理$V$中存在对活体和3D mask都无有效响应的通道,这些通道无助于甚至有害于模型,需要对每个通道进行加权。本部分对每个通道的权重$D\in\mathbb{R}^{1\times K}$学习。保留$D$中最大的40个分量,然后进行标准化

    • Deep Convolutional Dynamic Texture Learning部分

      m i n D , U l 1 2 l = 1 N | | D V l U l | | 2 , s . t . | | D | | 2 = 1 ,其中$U\in\mathbb{R}^{1\times N}$

      上述公式意在学习一个特征向量,该特征向量在某一距离度量下可以近似不同通道的加权动态文理特征

      对上述公式求导使导数为零,则最终的动态文理特征向量为:$U^l=DV^l, l=1,2,3,...,N$

implementation/实现

  • 需注意细节

    • 预处理模型:CLNF(2014)

      检测68个面部landmarks,并进行面部align

    • VGG提取特征

      视频流中连续5帧选择一帧输入VGG,将其conv3-3的输出特征图$F\in\mathbb{R}^{56\times56\times256}$作为光流提取的输入

    • classifier

      使用SVM进行分类

  • 结果

    Intra-dataset

    cross-dataset


Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision

论文下载

src codes:未开源

优缺点:性能终于超过传统方法

motivation/基本思想

  • 基于文理——活体和PA的面部深度图不同(PA为扁平,活体有人脸形状)
  • 基于相关生物信号——通过面部信息可测量相关rPPG(remote Photoplephysmography)信号,如心跳

models/模型架构

  • Supervision Signals

    • Depth Map:面部深度图显示了面部不同位置的深度信息,据此计算深损失,用于监督CNN部分。

      深度图标签:通过**DeFA(2017)**估计活体3D面部形状图$S\in\mathbb{R}^{3\times Q}$,和2D面部深度图$D\in\mathbb{R}^{32\times32}$作为深度图标签,用于计算深度图损失

    • rPPG:rPPG信号与面部皮肤的强度值的变化相关,该强度值与血液流动有高想关心。由于传统的提取rPPG信号的方法对姿态、表情、照明敏感,且无法防御replay attack,采用RNN对其进行估计。

      rPPG标签:从没有姿态、表情、照明变化的视频提取出的活体rPPG信号作为标签,用于计算rPPG损失

      计算:对DeFA估计出的面部区域,计算正交色度信号$x_f=3r_f-2g_f$,$y_f=1.5r_f+g_f-1.5b_f$,再计算血液流动信号$\gamma=\frac{\sigma(x_f)}{\sigma(y_f)}$,再计算信号$p=3(1-\frac{\gamma}{2})r_f-2(1+\frac{\gamma}{2})g_f+\frac{2\gamma}{2}b_f$,对$p$进行FFT即为rPPG

  • 网络架构

    • CNN部分

      若干block串联,每个block包括三个conv+exponential linear+bn和一个pooling

      每个block输出特征图经过resize layer将其resize为$64\times64$,并将其通道维联结

      联结后的特征图经过两个branches,一个估计深度图depth map,另一个估计特征图feature map

      Θ D = a r g m i n Θ D i = 1 N d | | C N N D ( I i ; Θ D ) D i | | 1 2

    • RNN部分

      Θ R = a r g m i n Θ R i = 1 N s | | R N N R ( [ F j j = 1 N F ] i ; Θ R ) f i | | 1 2

      其中$F_j$是正脸化frontilization后的feature map

    • Non-rigid Registration部分

      根据估计的3D面部形状图$S$对特征图feature map进行对齐align,保证RNN跟踪并学习面部同一个区域的特征随时间和物体的变化。RNN不用考虑表情、姿态、背景的影响

implementation/实现细节

  • 需注意细节

    • two-stream training
      1. 输入面部图$I$和深度图标签$D$,训练CNN部分
      2. 输入面部图序列${I_j}{j=1}^{N_f}$,深度图标签${D_j}{j=1}^{N_f}$,估计的3D面部形状图${S_j}_{j=1}^{N_f}$,rPPG信号标签,训练CNN和RNN部分
    • testing:根据分类得分 s c o r e = | | f ^ | | 2 2 + λ | | D ^ | | 2 2 进行活体判断
  • 结果

    intro-test和cross-test results


Face De-Spoofing: Anti-Spoofing via Noise Modeling

论文下载

src codes我是链接,README比较简略,源码很简略,约等于没有开源

优缺点:首次对spoofing noise进行建模和可视化;实际部署较难,在活体面部图像质量不高、PA质量高时失效

motivation/基本思想

本文主要针对print, replay, make-up类别的PA,其主要思想为

  • 基于文理:将spoof face视为live face和spoof noise的叠加,对spoof noise进行分类判断是否为PAs

    退化图像$x\in\mathbb{R}^m$可视为源图像的函数:$x=A\widehat{x}+n=\widehat{x}+(A-\mathbb{I})\widehat{x}+n=\widehat{x}+N(\widehat{x})$,其中$\widehat{x}$为源图、$A\in\mathbb{R}^{m\times m}$为退化矩阵、$n\in\mathbb{R}^m$为加性噪声,$N(\widehat{x})=(A-\mathbb{I})\widehat{x}$为image-dependent的噪声函数。通过估计$\widehat{x},N(\widehat{x})$并去除spoof noise、以重建$\widehat{x}$。若给定$x=\widehat{x}$,则其spoof noise = 0

    图像spoof退化的原因:1. spoof介质,如纸、显示屏 2. 介质与环境的交互作用

  • Spoof noise pattern study
    • 退化过程:
      1. color distortion:spoof介质色域更窄,导致颜色空间投影
      2. Display artifacts:相机在获取纸张、屏幕图像时,会产生颜色近似、下采样等过程,导致高频分量损失、模糊、像素扰动等
      3. Presenting artifacts::用于显示图像的纸张、屏幕与介质产生交互作用,包括反射、表面透明度等变化,此过程的噪声是加性(additive)
      4. Imaging artifacts:CMOS和CCD的传感器阵列的成像矩阵会有光干涉,在replay attack和某些print attack中产生失真alising和摩尔纹moire pattern,此过程的噪声也是加性的
    • 退化图像的频谱分析

models/模型架构

  • 模型架构

    • 输入图像$I\in\mathbb{R}^{256\times 256 \times 6}$,RGB+HSV颜色空间

    • DS Net部分

      De-Spoof Net,设计为encoder-decoder的结构,用于估计噪声模式$N(\widehat{I})$,并得到活体面部图像$\widehat{I}=I-N(\widehat{I})$。

      encoder:输出特征图$F\in\mathbb{R}^{32\times 32\times 32}$,用于表示spoof噪声模式

      decoder:输入$F$,然后重建噪声$N(\widehat{I})$

      0\1 Map Net:0 - live face,1 - spoof

    • DQ Net部分

      discriminative quality net,预训练网络,是[这篇论文中的CNN部分](#2018cvpr - Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision),其参数固定,不用训练。DQ Net部分用于确保估计的活体面部图$\widehat{I}$更加接近真实情况。

      通过DQ Net计算估计的活体面部图$\widehat{I}$的面部深度图$CNN_{DQ}(\widehat{I})$,深度图标签——2D面部深度图$D\in\mathbb{R}^{32\times32}$用来监督$\widehat{I}$。(文章并没提$D$怎么来的)

      J D Q = | | C N N D Q ( I ^ ) D | | 1

    • VQ Net部分

      visual quality net,通过GAN来验证$\widehat{I}$的visual quality。VQ输入$\widehat{I},I$,根据它们的差异大小区分$I$是否为PAs。在VQ Net训练时分两个步骤进行评估

      固定DS Net,更新VQ Net:$J_{VQ_{train}}=-\mathbb{E}{I\in R}log(CNN{VQ}(I))-\mathbb{E}{I\in S}log(1-CNN{VQ}(CNN_{DS}(I)))$

      固定VQ Net,更新DS Net:$J_{VQ_{test}}=-\mathbb{E}{I\in S}log(CNN{VQ}(CNN_{DS}(I)))$

      其中$R,S$分别是实际图像、合成图像

  • 损失函数

    • magnitude loss:使活体图像的spoof noise趋近与0

      J m = | | N | | 1

    • Zero\One map loss:增强spoof noise的普遍性(任意位置都有)

      J z = | | C N N 01 m a p ( F ; Θ ) M | | 1 ,其中$M\in0^{32\times 32} or M\in1^{32\times 32}$

    • repetitive loss:spoof noise的模式是重复性的,这有spoof媒介产生。将噪声$N$通过傅里叶变换$F$,并计算高频区域的最大值,这一个最大值即spoof noise。

      $J_r=\begin{cases}-max(H(F(N),k)),I\in Spoof \ ||max(H(F(N),k))||_1, I\in Live\end{cases}$,其中$H$是低频域掩码,即,将傅里叶变换的中心$k\times k$置零

    • 总损失

      J T o t a l = J z + λ 1 J m + λ 2 J r + λ 3 J D Q + λ 4 J V Q t e s t

implementation/实现细节

  • 结果


Exploiting Temporal and Depth Information for Multi-frame face Anti-Spoofing

论文下载

src models:未开源

motivation/基本思想

  • 基于运动——活体和PA的运动特征不同,可进行下列理论分析:

    在视频流中,物体的运动有利于提取人脸深度信息,可将面部运动和面部深度信息结合,用于活体检测

​ 在PA和liveness中,各器官间的角度不同,即$(a):\alpha>\beta_{2}, \beta_{1}<\gamma, (b):\alpha'<\beta_{2}', \beta_{1}'>\gamma'$

​ 针对面部的平移和旋转,存在不同的几何关系:

​ 在实际场景、PA场景中,$d1, d2$存在不同的几何关系,可通过该几何关系判断

​ real scene: d 1 / d 2 = d 1 / d 2 ,其中$d1'$是$d1$的估计

​ print attack: d 1 = 0 , d 2 = 0

​ replay attack:

d 1 / d 2 = d 1 / d 2 in perfect spoofing scene (keep stationary, nearly impossible)

d 1 / d 2 d 1 / d 2 in usual spoofing scene

​ 面部变化和运动非常复杂(包括上述平移、旋转,还包括混合运动、非刚性形变等),但通过上述分析,实际的活体和PA所产生的深度图(包括时域和空域)有很大区别,据此可以对活体和非活体进行区分。两者有何区别有待深入研究,网络会自行对这些区别进行提取。

Models模型架构:

  • 单帧场景

    • 深度图的生成:通过**PRNet(2017)**估计活体面部深度图,得到$V_{n\times3}$用于表示n个面部关键点的3D坐标,再投影到2D的UV空间,得到$D\in\mathbb{R}^{32\times32}$作为深度图标签$D^t$
    • 网络架构
    • depth loss = 欧几里得距离损失 + 对比(contrast)深度损失,两者分别为

      L s i n g l e a b s o l u t e = | | D s i n g l e D | | 2 2

      L s i n g l e c o n t r a s t = i | | K i c o n t r a s t D s i n g l e K i c o n t r a s t D | | 2 2

      L s i n g l e = L s i n g l e a b s o l u t e + L s i n g l e c o n t r a s t

      其中,$K_{i}^{contrast}$为

  • 多帧场景

    利用短期/长期瞬时运动信息,短期瞬时运动 -> OFFB,长期 -> ConvGRU

    • 网络构架

    • OFFB模块

      optical flow guided feature block,用于提取短期瞬时运动特征,主要是两连续帧之间

      在时刻$t$,$(x,y)$处的亮度信息为I(x,y,t),对其求导,并将求导结果重新调整

    ​ 其中,vx, vy表示x,y处的像素速度,(vx, vy)即光流,(vx, vy, 1)与亮度的导数F=(Fx, Fy, Ft)垂直,F即为optical flow guided features,并且可从图片中提取,它通过光流对时、空间梯度进行编码,如下

    • ConvGRU模块

      Convolution gated recurrent unit,用于提取长期瞬时运动特征,即提取长序列(时间维)信息,但忽略空间维信息,在隐藏层引入卷积提取空间维信息,得到ConvGRU:

      X t , H t , U t , R t 表示输入、出、update gate、reset gate,$K_{r},K_{u},K_{h}$卷积核,$H_{t}$即ConvGRU的深度图

    • 深度图和活体判别

      融合深度图 = 短期深度图 + 长期深度图

      D f u s i o n t = α D s i n g l e t + ( 1 α ) D m u l t i t , α [ 0 , 1 ]

      多帧场景的损失函数(对活体判别,深度图具有决定性作用,二分类辅助判别深度图的类别)包括:

      1. 多帧深度图损失 = 欧几里得距离损失 + 对比深度损失

        L m u l t i a b s o l u t e ( t ) = | | D f u s i o n t D t | | 2 2

        L m u l t i c o n t r a s t ( t ) = i | | K i c o n t r a s t D f u s i o n t K i c o n t r a s t D t | | 2 2

        L m u l t i d e p t h = t N F 1 ( L m u l t i a b s o l u t e ( t ) + L m u l t i c o n t r a s t ( t ) ) 对所有帧求和

        其中$D^t$是$t$时刻的深度图标签

      2. 多帧活体判别损失

        L m u l t i b i n a r y = B t l o g ( f c s ( [ D f u s i o n t N f 1 ] ) )

        其中$B^t$是$t$时刻的二分类标签,${D_{fusion}^t}^{N_f-1}$是$N_f-1$帧时(最后一帧时),将前面所有时刻$t$产生的融合深度图进行拼接而来的总的深度图

        f c s 表示网络的最后两个全连接层 + softmax(对攻击模式进行判别),得到score + 0/1

      3. 总损失 = 深度图损失 + 活体判别损失

        L m u l t i = β · L m u l t i b i n a r y + ( 1 β ) · L m u l t i d e p t h

implementation/实现细节

  • 需注意细节

  • two-staged training

    1. 通过单帧深度图损失训练单帧架构,得到一个基础的表示网络
    2. 固定单帧架构的参数,通过多帧混合损失微调多帧部分的参数。向网络输入$N_f$帧图像,每三帧采样一次
  • testing:

    b ^ 表示living logtis,$\widehat{b}=fcs(D_{fusion}^t)$,最终的living score为

    ​ $score=\beta·\widehat{b}+(1-\beta)·\frac{\sum_{t}^{N_f-1}||D_{fusion}^t*M_{fusion}^t||1}{N_f-1}$,$M{fusion}^t$为通过PRNet产生的t时刻的面部掩码

  • 结果

    OULU-NPU数据集intra-testing

​ cross-testing

​ hard examples

About

活体检测方法调研,introduction to liveness detection

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published