活體檢測新文by京東金融:利用多幀人臉來預測更精確的深度
接著上次的《活體檢測Face anti-spoofing綜述》,再來講講arXiv上新掛的文章:
京東金融和中科院聯合發表的“Exploiting temporal and depth information for multi-frame face anti-spoofing”[1]
它的主要創新和貢獻是:利用了多幀的時空資訊來更精準地預測深度圖,再而進行活體檢測
Related Work
先把提一下之前的state-of-the-art,就是MSU發表在CVPR2018上的工作 [2]。
文中的主要思路是:
1. 通過活體與非活體的單幀人臉圖,來預測其深度圖(因為先驗知識知道 真人圖 與 紙張或螢幕攻擊載體 的深度很不同)
2. 通過活體與非活體的多幀人臉圖,來預測其rPPG訊號的頻域分佈(同理先驗知道 真人人臉的rPPG訊號 與 無生命的紙張或螢幕 很不同)
上述共享一個 backbone,後接兩個分支。分支一直接回歸深度圖;分支二用來預測rPPG頻域分佈:即是通過non-rigid registration層來將pose都歸一到正臉同姿態,後接RNN來獲得temporal資訊。這裡就列下共享的主幹網路,因為京東這文章也是用相同的網路:
圖1.主幹網路
依據與Motivation
作者認為,MSU上述方法有一定drawback:
1. 因為使用了non-rigid註冊層去除臉部表情和姿態的影響,這樣忽略了重要的線索:非活體臉部不同表情與姿態的不自然變化(unnatural changes)
2. 只用了單幀影象來預測深度,忽略了多幀間的空間微變化可以幫助重構環境3D資訊。
基於上面兩點,作者發現可以把該問題看出multi-view的SLAM問題,無論是攝像頭在動,還是人臉在動,它們幀間的動態資訊都可以用來重構3D空間,即用多幀資訊理論上會比單幀更好地重構深度圖。
作者畫出下面草圖來描述活體與非活體間幀間的微變化,可見在 左邊(a)活體場景,明顯側臉時鼻子與耳朵的角度比正臉時大;而對於右側(b)螢幕攻擊,則反之。
圖2.活體與非活體的多幀視差
演算法框架
總框架主要分兩部分(單幀部分和多幀部分),如下圖所示:
圖3.網路總框架圖
單幀部分和MSU文章的主幹網路基本一致(唯一的不同就是MSU用了 RGBHSV 6通道作為輸入,本文用的是RGB三通道),就是每幀單獨預測深度圖:
圖4. 單幀網路部分
多幀部分主要由 optical flow guided features (OFF) Block 和 ConvGRU Unit 組成,因為OFF Blcok主要構建在相鄰兩幀間,而 ConvGRU 是構建在整個多幀的clips間,故前者用來獲取short-term資訊,後者則獲得Long-term資訊。
下圖是OFF Block架構圖,我們來看看都做了什麼:
1. Fl(t)為當前幀特徵經過1x1卷積後降維的特徵
2. FlS(t)為當前幀特徵經過Sobel運算元後的空間XY方向梯度
3. FlT(t)為當前幀特徵與相鄰後一幀特徵的差異(空間梯度)
4. FlS(t+△t)為相鄰後一幀特徵的Sobel運算元後的空間XY方向梯度
5. OFFl-1(t)為上個OFF Blcok輸出的特徵 (即多個OFF Block是 stacked)
最後把上述5個特徵都concatenate在一起,3x3卷積再降維~~
圖5. OFF Block的架構
至於作者為什麼要這樣設計呢?OFF全稱是optical flow guided features,則作者希望使用相鄰幀間feature-level的光流,這樣比起傳統光流,表徵能力更強且計算消耗更小。傳統光流公式如下:
通過泰勒分解和變形後,得到:
這裡的 (vx,vy) 就是光流,而通過上面公式可得正交關係:
故是被光流引導的。而通常傳統光流需要通過 Low-level 和 high-level 特徵去匹配得到,故我們將上式的輸入影象 I 換成特徵圖來輸入,則使用多級特徵圖的X方向梯度,Y方向梯度和時間梯度,便可類似地表示光流。所以OFF block裡的5個元素,就是按照這個來的~~
PS:文中光流假設有點問題,文中說光流前後(x,y) 與(x+△t,y+△t)的亮度應不變。不過在人臉的應用中,肯定是會換的,即人臉相同位置的pixel,隨著心臟驅動的血液流動,它的亮度值也會週期性地變化,這就是做rPPG的原理~~Whatever, 我們這裡先不談這個,作者開心就好~~
最後我們來說說 Loss function,主要由三部分組成:
1. 二值分類誤差(活體or非活體)
2. 每幀深度圖的 L1 loss
3. 作者自己提出的每幀深度圖的 contrasive depth regression loss:
目的是更好學到每個 pixel 的拓撲關係,更強約束其與周邊neighbor的對比度。對應的Kernel如下圖所示:
圖6.對比深度損失的Kernel
實驗結果
在Oulu-NPU上的結果:
圖7. Oulu-NPU結果
FAS-BAS 指的是 MSU文章[2] 的方法,可見京東的方法用單純的Depth,還是要比MSU的 rPPG+Depth 方法效能要好~~
接著我們來看看網路裡各個模組及Loss的作用:
可見 OFF-Block 和 Contrastive Depth loss 的作用還是蠻大的~~
最後來定性視覺化下出來的深度圖的可判別性如何:
圖8. 深度圖視覺化
使用多幀來重構的深度圖,對於Replay螢幕攻擊有明顯的改善。對於Print列印攻擊,好像還更糟糕了一點。
總結與展望未來
文章給出了很好的思路和結論來使用多幀,這也是繼MSU使用多幀來預測rPPG頻域後的一大進步,這樣未來face anti-spoofing將更多focus在多幀上;而不是單幀深度,單幀color texture~~
未來展望的話,可以看看其他影象預測深度圖的文章如位元組跳動DeepLens[3]等等,來激發靈感用於活體的任務~~另外正如前面綜述所說,探索臉部微變化如rPPG等,和結合人臉檢測,人臉識別,人臉微表情等任務來找關聯性都是值得探索~~
Reference:
[1] Zezheng Wang et al. Exploiting temporal and depth information for multi-frame face anti-spoofing, 2018
[2] Yaojie Liu, Amin Jourabloo, Xiaoming Liu, Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision ,CVPR2018
[3]LIJUN WANG et al. DeepLens: Shallow Depth Of Field From A Single Image, 2018