真人還是照片?——人臉活體檢測
介紹
隨著人臉識別、人臉解鎖等技術在金融、門禁、移動設備等日常生活中的廣泛應用,人臉防偽/活體檢測(Face Anti-Spoofing)技術在近年來得到了越來越多的關注。設想一下,假設你的Face Verification演算法做的再漂亮,而Face Anti-Spoofing做的很爛,如果這個時候恰恰有某位同學拿著馬雲臉的視頻去刷了支付寶,那............
人臉驗證(Face Verification):意思就是說,給定兩張圖,演算法要判斷出這兩張圖是不是同一個人,這是近年來一個非常熱門的研究方向,也產生了一大批模型和 Loss Function。
人臉防偽(Face Anti-Spoofing):意思就是說,你刷臉的時候,演算法要判別這張臉是不是真人活體臉,而對於合成的、或者他人照片來攻擊演算法的,應該予以拒絕。
PA(Presentation Attacks)是常用的攻擊方式,主要包含print attack(即列印出人臉照片)、replay attack(播放視頻)、mask attack(帶人臉假體面具等)。
Face Anti-Spoofing已經有好些年的研究歷史了,傳統方法將其視為一個「活體」VS「假體」的二分類問題。人臉活體檢測主要有以下三種方案(註:更多方案請參考文章末尾附錄2,3,或相關研究綜述查閱更多):
- Texture-based Methods 提取人臉的幾何特徵、紋理特徵等再結合SVM、LR等分類器進行分類,為了克服光照等因素的影響,會常常將RGB輸入空間變換到HSV,YCbCr或Fourier spectrum空間;AlexNet之後,研究者們紛紛轉向設計更有效的深度神經網路結構來做二分類。
- Temporal-based Methods通過執行系統發出的「眨眼」、「點頭」、「轉向」等指令來辨別真假活體。
- Remote Photoplethysmography (rPPG)rPPG可以在不接觸皮膚的情況下獲取生物信號(例如心率等),因此可利用rPPG來進行活體檢測,之前也有基於rPPG的研究發表。
儘管這些Deep Models在很多benchmark上均取得了不錯的成績,但是筆者認為很多模型在現實中的可用性幾乎為零。利用 Softmax Loss + DNN 取得良好成績的原因極有可能是 DNN 僅僅學習到了分類因素(例如用照片攻擊時CNN學習到了照片邊框;用錄製視頻攻擊時CNN學習到了如何根據「水波紋」來區分),而並不是學習到了真正如何區分活體與非活體。所以這些模型往往都是在某一個benchmark上嚴重過擬合,在 cross-datasets testing(即將模型用於其他數據集測試) 的時候,泛化結果就會非常非常差。儘管這種現象可以通過搜集更加 diverse 的數據集來緩和,但是依然不能從根本上解決問題。下面介紹一篇CVPR2018上的 Face Anti-Spoofing 相關的文獻,大致看了一遍,還是非常不錯的工作,有興趣的讀者請去閱讀原文。
http://openaccess.thecvf.com/content_cvpr_2018/papers/Liu_Learning_Deep_Models_CVPR_2018_paper.pdf方法
這篇Paper的idea主要是基於這樣一個思想:
充分利用活體與假體人臉的時空信息來形成更為有效的特徵;
從空間信息角度來看,活體人臉是帶有一定的距離信息的,例如正面拍照時,活體人臉的鼻子與攝像頭的距離會比臉部其他部位要近一些(因為鼻子是凸出來的嘛~),而列印的照片像素深度上往往都是平的,所以可以用來進行基本的區分。
從時間信息角度來看,有研究表明,可以從真實人臉視頻中檢測出rPPG信息(例如心律信號)。因此可以利用rPPG來輔助分類。
本文模型(CNN-RNN)利用CNN提取人臉特徵,然後將feature map與depth map(即從2D圖像中得到的3D形狀表達)輸入到作者提出的non-rigid registration layer,再將aligned feature maps與rPPG輸入到RNN進行分類。Method pipeline如 Fig 2. 所示。
人臉正面的3D信息 可以表示為identity base與expression base的線性組合:
由於從2D圖像中估計3D信息是一件比較困難的事情,因此在這裡對其進行歸一化到 區間,然後將 Z-Buffer 演算法應用於 來投影到2D平面,這樣就得到了人臉圖像預估的2D depth map 。
傳統rPPG信息往往容易受到光照、人臉表情、面部姿態等因素的影響使得結果不夠精確。本文提出利用 RNN 來學習rPPG。
對於跟蹤到的人臉區域,首先計算正交色度信號:
然後利用色度信號標準差的比例 來計算血流信號:
(註:這一塊兒的處理超出了我的知識儲備,所以我不太明白是否這樣能work,還是說先前已有生物、醫學領域的成果表明這樣能work...)
接下來對 應用快速傅里葉變換,就得到了50維的 rPPG 信號。
網路結構如下圖所示:
用於預測 depth map 以及生成feature map 的 CNN 的 Loss 如下:
用於預測 rPPG 信號的 RNN Loss 如下:
Classification score的計算方式如下:
其中, 代表rPPG信號, 代表最後一幀的depth map。
為了讓 RNN學習不同時間和不同人物主體下的相同臉部區域的activation變化信息,作者添加了Non-rigid Registration Layer,個人認為是整個方法裡面一個非常亮眼的idea。
首先保留depth map中超過threshold的部分:
然後計算mask 和 feature map 的內積:
接下來再利用3D信息 得到frontalized image :
Non-rigid Registration Layer的作用在於消除了臉部表情、姿態,背景區域,以及更好地利用depth map信息方面,從而有效地提升了spoofing recognition的性能。
總結
個人覺得,這篇文章整體上idea還是不錯的,novelty也很夠。實驗結果也還比較漂亮,個人比較肯定的點在於利用時空信息結合rPPG做特徵融合,以及Non-rigid Registration Layer的助攻,來綜合提高活體檢測的性能,以及可解釋性方面的工作。而不像傳統活體檢測領域的 Paper 單純只是 train 個 binary classifier,各種花式 part-based + ensemble model 來刷分。
先前沒有做過Face Anti-Spoofing相關的東西,這篇只總結了一些我認為比較 insightful 的點,一些細節之處沒有提及,歡迎去閱讀原文!也歡迎做這個方向的童鞋指出本文可能存在的遺漏或錯誤之處~
References
- Yaojie Liu, Amin Jourabloo, Xiaoming Liu. Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision[C]. // IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2018
- 人臉識別中的活體檢測
- 人臉活體檢測技術簡介
推薦閱讀:
※目標檢測Tensorflow object detection API之構建自己的模型
※[CVPR2018筆記]Learning Face Age Progression: A Pyramid Architecture of GANs
※人臉辨識技術也存在膚色和性別歧視?
※iphone X或許成就不了自己卻可以成就人臉識別
※世紀晟3D動態人像識別解決方案