活體檢測(001)
阿新 • • 發佈:2020-12-12
1.活體檢測面臨的問題
在一些業務需要中,需要識別場景中的使用者是否為"真人",因此需要活體檢測技術,這篇文章將針對當前行業中的活體檢測技術進行總結。
在人臉檢測中,攻擊者往往會通過PA(Presentation Attacks)對系統進行攻擊,常見的PA操作包括列印照片,虛假錄製視訊,面部偽裝,3D人臉面具等方式,如果沒有活體檢測,系統的安全性會比較低。在2017年之前,行業主要的實現方向是使用傳統的機器視覺方法,在17年之後,較多的使用CNN卷積網路來輔助效能,在2019年CVPR中就有多篇關於活體檢測的Paper,目前已成熱門方向。
2.常見活體檢測方式調研
1.傳統的活體檢測處理方法
Ⅰ:基於傳統影象處理的活體檢測 傳統的活體檢測主要的思路是捕捉影象的紋理資訊,從而進行分類。 這類方法整體的流程大致如下: 1:影象預處理,對影象進行裁剪,對齊,分割等操作,同時對影象的空間進行變換和疊加,通過從時域到頻域,空域或者改變其顏色空間來進行操作。 2:使用如SIFT,HOG,LBP,SURF以及各種魔改變種來對影象的特徵進行提取。 3:使用如降維,編碼,多通道組合的方法進行進一步的特徵提取,進行分類前的預處理 4:使用SVM/LR等特徵分類器進行二分類 Ⅱ:傳統方法論文思想總結: ①:通過活體和PA攻擊紋理統計特性不一致,基於紋理特徵進行分類 比較具有代表性的論文: 1:Face Spoofing Detection Using Colour Texture Analysis 通過HSV空間人臉多級LBP特徵 + YCbCr空間人臉LPQ特徵 Link:https://ieeexplore.ieee.org/abstract/document/7454730 2: Face anti-spoofing based on color texture analysis 通過觀測在頻域上分佈不同,先區分活體還是照片攻擊 (因為照片中的人臉提取的頻域分佈不同),若判別上述結果是活體,再設計一個紋理LBP分類器,來區分活體還是螢幕攻擊(因為螢幕視訊中人臉頻率分佈與活體相近) Link:https://ieeexplore.ieee.org/abstract/document/735128 在這類論文中,活體和PA紋理不一致,如下圖:
可以通過LBP(區域性二值)來提取其紋理特徵,再對LBP進行分類:
使用到的模型架構:
②:基於紋理統計特性進行分類
代表論文:
1:Chromatic cooccurrence of local binary pattern for face presentation attack detection
Link:https://ieeexplore.ieee.org/document/8487325
模型架構:
②:On the effectiveness of local binary patterns in face anti-spoofing Link:https://ieeexplore.ieee.org/abstract/document/6313548 模型架構:
③:LBP-TOP based countermeasure against face spoofing attacks
Link:http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=271BCC281BDD5D9B869D3DB92A278BB0?doi=10.1.1.493.6222&rep=rep1&type=pdf
模型架構:
④:Face Liveness Detection with Component Dependent Descriptor
這篇文章也是用的紋理統計,但是比較有意思的是使用了面部分割的方法
模型流程:
1:檢測面部位置,將面部分割為輪廓,面部,左右眼,鼻,嘴,六個區域
2:提取面部特徵,LBP+HOG,將不同部位進行特徵聯結
3: SVM分類器進行二分類
以上為比較傳統的機器學習的活體檢測方法,雖然這些演算法有一些歷史,但大致流程不變,我們仍可以學習其處理的核心精神,下面我們將介紹下現在比較主流的基於深度學習的活體檢測!
2.深度學習活體檢測方法
An original face anti-spoofing approach using partial convolutional neural network
Link:ieeexplore.ieee.org/doc
模型架構:
和傳統的方法結構類似,只是使用了VGG進行特徵提取,通過CNN網路端到端學習anti-spoofing的表示空間
Face anti-spoofing using patch and depth-based cnns
Link:cvlab.cse.msu.edu/pdfs/
基本思想:基於紋理的特徵提取
主要表現為:區域性特徵+整體深度圖
人臉活體和PA的區域性區域提取出來的特徵不同,因此得到的統計特徵不同。同時採用圖片等攻擊方法的PA模型往往呈現為扁平,缺少面部深度特徵,如下圖,人臉活體會有深度圖狀。
模型框架:
模型主要使用了兩個CNN框架:
patch-based CNN:
端到端訓練的,併為每個從人臉影象中隨機抽取的patch打一個分數,取平均分。
使用patch的好處:
1. 增加訓練資料。
2. 不用resize整張臉,保持原本的解析度。
3. 在區域性檢測可用於活體檢測的特徵時,設定更具挑戰性的約束條件,加強特徵提取的效能。
輸入:相同大小的不同patches的RGB, HSV, YCbCr特徵圖等。
輸出:pacth spoof scores。
depth-based CNN:
完全卷積網路(FCN),對人臉影象的深度圖進行估計,並提供一個真實度評分。
研究表明高頻部分對anti-spoofing非常重要,為避免對原圖進行resize而損失圖片的高頻部分,因此使用FCN以無視輸入特徵圖的size。
並且還用到了兩個監督訊號:
1:patch spoof scores
從人臉影象中挑選某些區域性區域patches,根據patch內的文理統計特徵計算一個patch spoof scores,用於監督patch-based CNN部分。
2:深度圖Depth Map
面部深度圖顯示了面部不同位置的深度資訊,據此計算深損失,用於監督depth-based CNN部分。
整個模型的架構:
但是這個模型效能一般,甚至比不上一些傳統的演算法。
Deep Convolutional Dynamic Texture Learning with Adaptive Channel-discriminability for 3D Mask Face Anti-spoofing
*這篇文章值得讀一下,這篇文章主要是針對3D面具的攻擊。3D面具的攻擊和其他的PA攻擊不同,由於面具覆蓋了臉部,面具是無法呈現出人臉的臉部運動的,真實的人臉的面部運動更加的細膩,精細,比如蘋果肌,皺紋,眨眼,臉部肌肉的微動等等,我們可以認為是動態紋理的不同。
這套演算法基本流程與之前平面處理的不太一致:
1:首先需要對視訊進行預處理,這裡用到了CLNF模型,來檢測面部,對面部的68個特徵點進行檢測,並對面部進行align對齊。
CLNF模型論文地址:cl.cam.ac.uk/research/r
CLNK模型的介紹:
2:通過VGG網路提取特徵
從視訊流中連續的5幀選擇其中的一幀來作為VGG網路的輸入,3*3卷積網路輸出的特徵圖作為光流提取的輸入。
3:分類
使用SVM進行分類
模型結構:
網路結構:
結果:
①:Intra-dataset
②:Cross-dataset
Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision
這篇文章還是很有意思的,效能超過了傳統方法。整篇文章的亮點在於Non-rigid Registration部分來對齊各幀人臉的非剛性運動,然後再去讓RNN學習。
模型的基本思想:
①:基於紋理:活體和PA攻擊的面部深部圖不一致
②:基於生物訊號:可以通過面部資訊來測量相關的RRPG(心率)
模型的結構:
網路結構:
CNN
若干block串聯,每個block包括三個conv+exponential linear+bn和一個pooling。
每個block輸出特徵圖經過resize layer將其resize為64×64,並將其通道維聯結。
聯結後的特徵圖經過兩個branches,一個估計深度圖depth map,另一個估計特徵圖feature map。
RNN
Non-rigid Registration部分*
根據估計的3D面部形狀圖S對特徵圖feature map進行對齊,保證RNN跟蹤並學習面部同一個區域的特徵隨時間和物體的變化。RNN不用考慮表情、姿態、背景的影響。
這裡最有價值的就是為什麼設計這個對齊網路:
結合做運動識別的任務進行思考,做運動識別時只需簡單把連續幀 合併起來喂進網路就行了,是假定相機是不動的,物件在運動
而文中需要對連續人臉幀進行pulse特徵提取,主要物件是人臉上對應ROI在 temporal 上的 Intensity 變化,所以就需要把人臉當成是相機固定不動。
實驗結果:但是沒有找到開原始碼,比較遺憾。
Face De-Spoofing: Anti-Spoofing via Noise Modeling
*這篇論文比較抽象,程式碼雖然開源但質量一般,約等於沒有開源~
實際部署起來也比較難,主要針對print, replay, make-up類別的PA
以往的Anti-Spoofing在基於深度學習方法做的時候通常當做一個二分類,輸出是Real/Spoof,內部模型是一個黑箱。這個方法將De-Spoofing的模型的內部機理考慮了進去。
文章中假設:對於照片、視訊播放來進行的Spoof會引入噪聲,而這個噪聲普遍存在且可重複,因此,設公式為:
其中的x是原圖,是一個與原始圖片N(x)有關的噪聲函式,這個公式就是演算法的核心。通過估計x^,N(x^)並去除spoof noise、以重建x^。若給定x=x^,則其spoof noise = 0。
退化影象的頻譜分析:
造成影象退化的幾個原因:
1:色域:spoof介質色域更窄,顏色空間會出現錯誤
2: 顯示干擾:相機本身在輸出影象的時候,會出現顏色近似,下采樣的過程,這樣會導致畫素擾動,模糊等問題。
3:介質:存放影象的介質會產生比如反射,表面透明度等變化
4::CMOS和CCD的感測器陣列的成像矩陣會有光干涉,某些情況下會產生失真和摩爾紋。
以上這些噪聲干擾往往都是可加性的,因此也是可以消除,重建的。
模型結構:
模型分為三個部分:
輸入:256*256*6,RGB+HSV的顏色空間
1:DS Net
2:DQ Net
3:VQ Net
效果:
Exploiting Temporal and Depth Information for Multi-frame face Anti-Spoofing
基本思想:在視訊流中,物體的運動有利於提取人臉深度資訊,可將面部運動和麵部深度資訊結合,用於活體檢測。
文章給出了很好的思路和結論來使用多幀,這也是繼MSU使用多幀來預測rPPG頻域後的一大進步,這樣未來face anti-spoofing將更多focus在多幀上;而不是單幀深度,單幀color texture,這些方向上。
具體的文章解讀在後續會單獨拿出一篇文章瞭解.
總結: