蔡體健,劉文鑫,塵福春,陳 均,羅詞勇
華東交通大學 信息工程學院,南昌 330013
人臉識別系統在金融、門禁、移動設備等生活場景中得到了廣泛的應用。然而,卻存在偽造人臉攻擊的風險,例如非法用戶可能通過打印照片[1]、數字圖像視頻[2](即重放攻擊)和3D 面具[3]等手段欺騙人臉識別系統。為了提高人臉識別系統的安全性,需要開展人臉反欺詐(face anti-spoofing,FAS)技術的研究。
人臉反欺詐技術就是檢測輸入樣本是活體人臉還是欺詐人臉,在計算機視覺領域中它是一個二分類或多分類問題,而解決這個問題的方式又分為基于傳統機器學習的方法和基于深度學習的方法。
傳統機器學習方法常在提取人臉圖像中的紋理特征或者色調、飽和度和明度顏色空間(hue,saturation,value,HSV)等手工設計特征后,再利用支持向量機等分類器進行分類。手工制作的特征是專門為某種特定類型的欺詐而設計的,很容易受到環境條件,如相機設備、照明條件和演示攻擊儀器(presentation attack instruments,PAIs)的影響,這使得傳統方法人臉活體檢測效果往往不是很好。
隨著深度學習技術的發展,以及大規模數據集的發布,研究人員提出了多種基于二分類的深度FAS網絡結構來判別人臉真假。如Yang等人[4]提出了第一種使用8層淺CNN 進行特征表示的深度FAS 方法。Chen等人[5]對預訓練的VGG16進行微調用于FAS。文獻[6]使用光流和卷積神經網絡提取具有判別性的圖像特征。Yu等人[7]提出了一種中心差分卷積網絡(central difference convolution network,CDCN),能夠通過聚集強度和梯度信息來捕獲人臉圖像的固有細節信息。然而由于欺詐樣本的多樣性影響了有效的決策邊界建模,這些方法雖然在數據集內測試中表現良好,但容易過擬合,泛化性差,不能很好地推廣到新的攻擊類型。為了減輕欺詐多樣性對決策邊界建模的影響,很多研究者又開始從異常檢測的角度研究人臉反欺詐問題。異常檢測是從一組正常數據中識別異常樣本的任務,假設正常樣本屬于封閉集,不同類型欺詐樣本都屬于封閉集的離群點,屬于開放集。基于這種假設,多數異常檢測的方法通過深度度量學習的方式訓練一個分類器來準確聚類。然后,將正常樣本簇邊緣以外的任何樣本(如未知攻擊)都被檢測為異常樣本。如Schroff 等人[8]提出用一種基于深度度量學習的超球損失(hypersphere loss)來監督深度FAS 模型,以保持活樣本的類內緊湊性,同時保持活體樣本和欺騙樣本之間的類間分離。最后在學習到的特征空間上直接檢測未知攻擊,不需要額外的分類器。Pérez-Cabo等人[9]從異常檢測的角度對FAS問題進行了改造,提出了一種三重聚焦損失(triplet focal loss)的深度度量學習模型,它將三元組損失和焦點損失結合起來,利用度量學習使樣本特征在類內緊湊,類間分散。Feng 等人[10]設計了一種只對正樣本進行顯示監督的回歸損失模型,來生成欺詐線索,并且依據欺詐線索分數對樣本進行分類,在跨數據集上取得了很好的結果。
異常檢測的FAS方式,被證明了能夠提高模型的泛化能力,這些方式多是基于度量學習來實現的,而基于度量學習方法的性能很大程度上依賴于它們挖掘困難樣本[11]的能力,即提取特征信息的能力。盡管開發了各種復雜的抽樣方案,如batch-all[11]、batch-hard[12],但難樣本挖掘能力本質上還是受到了batchsize的限制,使得提取出困難樣本受到限制,網絡學習不到好的特征進行分類,從而導致精確度和泛化能力變差。
針對上述問題,本文提出了一種結合度量學習與跨批存儲機制的人臉活體檢測算法,改進基于異常檢測的FAS 模型,使得網絡能獲得更多的困難樣本對,提取出更具區分性的微特征,提高FAS的精度和泛化能力。
整體網絡結構如圖1所示,由欺詐線索生成器和一個輔助分類器組成。欺詐線索生成器采用U-Net 架構來生成欺詐線索映射圖,并通過異常檢測的方式最小化活體樣本的欺詐特征來學習欺詐線索。輔助分類器可以放大欺詐特征,來學習更具有分辨性的欺詐線索。同時本文在欺詐線索生成器中引入多尺度度量學習技術,并結合跨批存儲機制來改進樣本挖掘策略,以提取更多的困難樣本對,增加類內相似度并加大類間的距離,以學習出更清晰的分類邊界。

圖1 本文網絡結構Fig.1 Network structure
該模塊采用U-Net架構,在多個尺度上建立從編碼器到解碼器的跳躍連接,以生成欺詐特征。具體做法是:使用在ImageNet[13]上預訓練的ResNet18[14]作為編碼器E,其中包含5個編碼器殘塊;而解碼器D由4個解碼器殘塊組成,在E 后面對信息進行解碼,生成欺詐特征。在每個解碼器殘塊中,前一層的特征圖通過最近鄰插值進行上采樣,然后通過連接操作,將編碼器中對稱位置到解碼器的特征映射集合起來,然后輸入到解碼器殘塊中。在解碼器最后的一個殘塊連著一個Tanh激活層來產生欺詐特征。
由于活體樣本不具有任何欺詐材質構成,所以活體樣本的欺詐特征應為0,而不同材質的欺詐樣本應具有不同的欺詐特征,稱之為欺詐線索。因此本文采用異常檢測的方式:只對活體樣本進行監督來學習欺詐線索,而對欺詐樣本的欺詐線索不施加約束,這樣可以學習到更多樣的欺詐類型,能將模型推廣應用到未知的欺詐攻擊檢測。
具體算法如下:假設給定RGB輸入圖像I,欺詐線索生成器輸出相同大小的欺詐線索映射圖C。活體樣本的欺詐線索映射C是全0的特征圖;而欺詐樣本的C是未知的。欺詐線索生成器的目標函數是像素級的L1回歸損失,其表達式為:
式中,Nl是活體樣本的數量,此目標函數只約束活體樣本的訓練,促使活體樣本的欺詐線索最小化,但并沒有約束欺詐樣本,這樣可保證欺詐形式的多樣性。
本文使用輔助分類器作為欺詐線索的放大器,有助于學習更具有分辨性的欺詐線索。欺詐線索生成后,將生成的欺詐線索映射C添加到輸入圖像I中,形成疊加圖像S。以S作為輔助分類器的輸入,使用ResNet18網絡提取圖像特征,并利用二元交叉熵損失對網絡進行優化,其表達式為:
式中,N為樣本個數,zi為活體或者欺詐樣本的標簽,qi為網絡輸出的分類概率。
1.3.1 多尺度三元組損失
為了獲得更清晰的分類邊界,本文在欺詐線索生成器中引入多尺度度量學習技術。首先提取E5 層至D4層共5 層的多尺度特征,使用全局平均池化(global average pooling,GAP)將他們向量化,得到一組特征向量{V},然后計算多尺度特征向量的三元組損失,其目標是促使錨樣本和正樣本之間的距離盡量小,而錨樣本與負樣本之間的距離盡量大。三元組損失函數的表達式如下:
式中,T是樣本對個數,ai代表錨樣本,pi代表正樣本,ni代表負樣本,m是預定義的邊界常數,d(i,j)表示兩個歸一化特征向量之間的歐幾里德距離,其表達式如下
度量學習技術在很大程度上依賴于樣本挖掘策略。目前常用的在線三元組挖掘(online triplet mining)[11]是在一小批樣本(batch-size)中,選擇有效的三元組樣本,即滿足d(ra,rn)<m+d(ra,rp)要求的難樣本或半難樣本對(以下統稱為困難樣本對),去除了簡單樣本,也就是那些遠離錨樣本的負樣本,以及與錨樣本過近的正樣本,它們對模型的訓練并不會有什么貢獻。在線三元組挖掘又有兩種處理策略:batch-all[11]和batch-hard[12]。batch-all 是選擇所有有效的三元組,然后計算目標函數的平均損失;batch-hard是對于每個錨樣本,選擇最難的正樣本和負樣本構成三元組,使用此策略可以得到與batch-size 相同數量的三元組對。不管是batch-all 還是batch-hard 策略,都只是在一小批樣本(batch)中選擇難樣本,難樣本挖掘受到了batch-size的限制,所生成的樣本只是在一小批樣本中的難樣本,而不是整個數據集的難樣本。一個簡單的處理方法是增大batch 的大小[11],在更大的范圍尋找難樣本,但batch的增大,意味著計算量的增加。那么如何在不增加計算量的基礎上,擴大難樣本的尋找范圍?為此,本文在多尺度度量學習中引入了跨批存儲機制(cross-batch memory(XBM))[15]的樣本挖掘策略。
1.3.2 跨批存儲器(XBM)機制
跨批存儲器(XBM)機制可用來存儲前期迭代的特征向量,允許模型在多個批數據中甚至整個數據集上收集足夠的難樣本對,來提高度量學習的性能。XBM 算法并不是在模型訓練初期即使用的,而是要在特征向量出現“慢偏移”現象時,才可以引入XBM機制。
(1)“慢偏移”現象
在度量學習中,前期的小批量特征向量通常被認為是過時的,因為模型參數在整個訓練過程中不斷優化[16-18],這些過時的特征總是被丟棄。但實際上特征向量的更新有時存在“慢偏移”現象,也就是同一實例在不同的訓練迭代中所生成的特征差異較小。為了量化“慢偏移”現象,本文將步長Δt迭代時,輸入樣本x的特征偏移量定義為:
式中,f(x;θt)是樣本x在t時刻提取的特征,θ是模型參數。
為了描述“慢偏移”現象,下面本文將網絡訓練過程中的特征向量,按照公式(5)計算出隨著迭代次數的增加時的偏移量,結果如圖2 所示,其中圖2(a)是隨著迭代次數增加的特征向量;而圖2(b)是隨著迭代次數增加的偏移量。由圖可知,在迭代前期,特征向量的變化還是比較大的;但大約在2 500次迭代后,特征向量變得相對穩定,特征偏移量變小,出現了“慢偏移”現象。當特征向量出現“慢偏移”現象時,意味著前期訓練的特征向量與當前的特征向量之間只存在微小的差異,這時可以將前期訓練的特征暫時存儲并利用起來,用于輔助當前的網絡訓練,這樣可以擴大難樣本的挖掘范圍,同時不需要任何額外的計算,只是需要增加少量額外的存儲空間。

圖2 隨著網絡訓練迭代次數變化的特征偏移量Fig.2 Characteristic offset varies with number of network training iterations
(2)跨批存儲機制算法
當特征向量出現“慢偏移”現象(本模型是在迭代次數達到2 500)時,可以將XBM 嵌入度量學習中。為了使用XBM機制,首先需要在內存中建一些隊列Mi,其中i∈{E5,D1,D2,D3,D4},被初始化為第j個樣本的第i個解碼器輸出的特征向量,表示第j個樣本的標簽,q為隊列長度,通常為batch-size 的倍數,并且把存儲比定義為Rn=q/n,隊列長度q與訓練集樣本總數n之比。圖3展示了XBM機制的工作流程,其主要工作是維護和更新內存中的隊列:在每次迭代中,首先將當前批的特征向量v和標簽y進入隊列M,并將最早的批特征向量和標簽退出隊列,始終保持隊列的長度為q。

圖3 跨批存儲機制Fig.3 Cross-batch storage mechanism
添加了XBM機制的度量學習過程如算法1所示:
算法1XBM跨批存儲機制
在算法中,整個模型訓練分成兩個階段:前期迭代訓練和后期迭代訓練。前期迭代訓練采用一般三元組的batch-all[12]樣本挖掘策略,前期迭代訓練k次,特征向量出現“慢偏移”現象后,進入后期迭代訓練,此時采用XBM的難樣本挖掘策略。
后期迭代訓練過程中,首先對內存中的隊列M進行初始化,然后計算當前批的特征向量,并進行隊列更新,即將當前批進入隊列,最早批移出隊列,接著在整個隊列M中挖掘三元組困難樣本對,計算樣本之間的相似度,最后利用三元組損失對網絡進行優化。
由于隊列長度一般是遠大于batch-size,因此XBM策略比batch-all策略擴展了難樣本的挖掘范圍,可以得到更好的性能;此外,由于是直接將當前批特征向量放入內存模塊,因此沒有任何額外的計算。并且因為存儲特征向量特征所需的內存非常有限,所以整個訓練集都可以緩存到該內存模塊中,可以保證模型能夠搜集到足夠的有效樣本對。在前期迭代中,模型采用公式(3)作為目標函數來訓練網絡;進入后期迭代,使用XBM難樣本挖掘策略時,則采用以下目標函數來訓練網絡:
式中,pxbm和nxbm是在整個內存存儲隊列中挖掘出的有效正樣本和負樣本。
該模型的損失函數分為三個部分:活體樣本欺詐線索的像素級回歸損失Lr,所有訓練樣本上的三元組損失Lt或Lt_xbm和輔助二值分類損失La。將這些損失綜合起來,得出在訓練期間的總損失L:
式中,k表示應用三元組損失懲罰的層,a1、a2、a3是平衡不同損失分量影響的權重。
在測試階段,本文使用生成的欺詐線索映射C而不是分類器的輸出來進行欺詐檢測。理想情況下,活體樣本具有全0的欺詐線索映射,而不同類型的欺詐樣本具有不同的欺詐線索映射。本文可將欺詐得分定義為樣本欺詐映射圖C的均值,則測試樣本的欺詐得分為:
為了驗證提出方法的有效性,本文分別在OULUNPU[19]、CASIA-FASD[20]、Replay-Attack[21]數據集上進行了測試。
OULU-NPU 可以較好地模擬真實場景,它由4 950個真實和攻擊視頻組成。視頻是在不同的背景以及光照情況下收集,并采用6個不同的手機進行錄制。攻擊類型劃分為4種,分別為兩種打印攻擊和兩種視頻重放攻擊。在上面的基礎上,數據集劃分了4 種協議,用來測試算法針對不同場景的有效性。協議1 是為了評估模型在不同背景和光照下的泛化能力,協議2是為了評估模型對于不同的攻擊媒介的泛化能力,協議3是為了評估模型對于不同的拍攝設備的泛化能力,協議4則是對上面3 種場景的匯總,即評估模型在不同環境,攻擊媒介,拍攝設備下的泛化能力。
CASIAMFSD 包含50 個不同主題的600 個視頻片段。這些視頻被分為150個活體訪問視頻和450個欺騙攻擊視頻。欺騙人臉由真實人臉的高質量記錄制成,扭曲照片攻擊、剪切照片攻擊和視頻重放攻擊是數據集中的3種欺騙攻擊。
Replay Attack 包含了來自50 個受試者的1 300 個視頻。這些視頻是在不同環境條件下收集的,分為訓練集、開發集和測試集,分別有15個、15個和20個主題
在實驗中,首先將所有RGB 人臉圖像裁剪為224×224×3,然后隨機選擇訓練數據,以保持正負樣本比率為1∶1。Batch size 設置為32,存儲比Rn設置為0.2,初始學習率為1E-3,選擇Adam[22]作為優化器。在欺詐線索生成器中,使用Tanh作為激活函數,將三元組損失中邊界常量m設為0.5,同時在訓練的迭代次數達到2 500次時,引入跨批存儲機制來進行難樣本挖掘,以保證提取更有效的樣本對。
在損失函數權重值方面,將a1,a2,a3設為5,1 和5,公式(8)中的評分閾值是通過開發集實驗設置的。實驗的硬件環境為NVDIA GeForce RTX 2080Ti 顯卡,編程語言為Python3.7,框架采用Pytorch。
性能評價指標方面,在數據集內部實驗中使用了平均分類錯誤率(average classification error rate,ACER),它是假體人臉分類錯誤率(attack presentation classifi cation error rate,APCER)和活體人臉分類錯誤率(bona fide presentation classification error rate,BPCER)的均值。在跨數據集實驗中,本文使用了半總錯誤率(half total error rate,HTER),它是錯誤拒絕率(false rejection rate,FRR)和錯誤接受率(false acceptance rate,FAR)的平均值。
2.3.1 數據集內部測試
本文在OULU-NPU數據集上進行了數據集內部測試。表1 是在OULU-NPU 數據集4 種協議上的實驗結果,是本文算法與其他的算法包括STASN[23]、CILF[24]、BCN[25]、CDCN-PS[26]、DC-CDN[7]、Spoof Trace[27]和LGSC[10]的實驗比較。由表可知,在協議1 下,本文算法可以獲得最好的APCER、BPCER、ACER 指標,而在其他3 個協議下,本文算法也可以獲得綜合最好的指標,例如表中DC-CDN 算法雖然采用中央差分卷積來提高特征信息豐富度,但最后只使二元交叉熵損失對網絡進行優化,而本文算法用三元組損失結合二元交叉熵進行輔助監督能比DC-CDN 獲得更好的分類邊界。同時相比較于LGSC 算法使用單一的三元組損失,即只用一般的batch-all策略在一個小批內獲得有效的樣本對用于網絡學習,而本文結合三元組損失以及跨批存儲機制在多個批次內獲得更多的有效的三元組樣本對,來提取信息更豐富的特征進行網絡學習,從而獲得更優的結果。

表1 在OULU-NPU數據集上進行測試Table 1 Testing on OULU-NPU dataset 單位:%
2.3.2 跨數據集測試
為了驗證模型的泛化能力,本文進行了跨數據集測試實驗,即在一個數據集上訓練,然后在另一個數據集上測試。不同數據集之間由于背景、光照、攻擊類型等因素影響,數據分布差異很大,這使得跨數據集的模型評估具有挑戰性。本文在CASIA-MFSD 和Replay-Attack 數據集進行了交叉測試,以評估模型的泛化能力。表2 是跨數據集上測試得到的HTER 指標,是本文算法與其他的FAS算法包括CNN[4]、Patch CNN[28]、Color Texture[29]、STASN[21]、DENet[30]、Disentangled[31]和LGSC[10]的實驗比較。由表可知,與當前的算法比較,本文算法可以取得較好的HTER結果,具有較明顯的優勢。如相較于表中算法Patch CNN 也使用了基于度量學習的三元組損失進行輔助監督,但最后還是利用二元交叉熵進行分類,即將所有不同欺詐類型的樣本歸為一類,這樣會模糊各種欺詐人臉的欺詐特征。而本文除了結合三元組損失與跨批存儲機制作為輔助監督外,還利用只對活體樣本進行像素級回歸損失作為監督,這樣可以加深真假樣本之間,以及不同欺詐樣本之間的特征差異。并最后利用欺詐線索的均值進行分類,提高泛化能力。

表2 跨數據集上測試得到的HTER指標Table 2 HTER indicators from tests across datasets單位:%
2.3.3 消融實驗及分類比較
(1)消融實驗
本文在OULU協議1數據集上進行了消融實驗,來驗證在本模型中各個組件對整個模型的影響。本文將相應的模塊定義為“TripletLoss”“XBM”“AC”分別表示三元組損失、跨批存儲機制、輔助監督,“√”表示在模型中使用該技術模塊。消融實驗如表3所示。由表可知,去掉跨批存儲機制集成的三元組損失模塊,導致ACER分別上升3.4個百分點;只去掉跨批存儲機制后,ACER上升了1.1個百分點,去掉輔助分類器后,ACER上升了1.2 個百分點。相比于其他模塊,跨批存儲機制集成的三元組損失對結果的影響更大。
(2)分類比較
本文分別在跨數據集上使用樣本欺詐線索的值進行分類,以及使用輔助分類器的二元交叉熵進行分類,來說明哪種分類效果更好。如表4所示,相比較于輔助分類器,使用欺詐線索的值在Repay-Attacks 數據集上進行分類HTER 下降了0.6 個百分點,同樣在CASIAMFSD 上HTER 下降了2.8 個百分點,這說明了直接使用欺詐線索進行分類,能提高模型的泛化能力。
2.4.1 欺詐線索可視化
為了更直觀地理解欺詐線索,本文對欺詐線索的空間分布進行了可視化展示。具體做法是:首先從OULU測試數據集挑選樣本生成欺詐線索,然后將欺詐線索特征圖的三個通道分別求平均值,作為樣本在軸上的坐標,并用○表示活體樣本,△表示打印攻擊樣本,s表示視頻重放攻擊樣本,三類樣本的欺詐線索分布如圖4所示。從圖4 可以觀察到活體樣本(正常樣本)屬于封閉集,而欺詐樣本(異常樣本)屬于封閉集的離群點。圖5是OULU 數據集中各類樣本及對應生成的欺詐線索映射圖。由圖5可以看到,活體樣本的欺詐線索映射圖像素值幾乎為0,與欺詐樣本的欺詐線索映射圖具有明顯的差異,這些差異的產生可能和欺詐樣本的顏色失真、云紋圖案或材質有關。

圖4 欺詐線索在特征空間中的分布Fig.4 Distribution of SpoofCues in feature space

圖5 不同類型樣本及對應生成的欺詐線索映射圖Fig.5 Different types of samples and corresponding generated spoof cue maps
2.4.2 跨批存儲機制的比較
(1)可視化比較
本文對去除或添加跨批存儲模塊的兩種情況下,所獲得的嵌入D4 層的特征進行可視化比較,來進一步展示跨批存儲機制對FAS 性能的影響。具體做法是首先獲取OULU 測試集在D4 層的特征,然后使用T-SNE 技術[32]將數據降維,最后在二維平面上展示,效果如圖6所示。圖中每個紅色○點代表一個活體樣本,每個黑色□點代表一個欺詐樣本。圖6(a)是去掉了跨批存儲機制的特征分布;而圖6(b)則是增加了跨批存儲機制的特征分布。明顯地圖6(b)比圖6(a)具有較清晰的分類邊界,這證明了跨批存儲機制可以通過提取更多有效的樣本對來提高模型的性能。

圖6 D4層特征的T-SNE可視化Fig.6 T-SNE visualization of D4 layer features
(2)與其他樣本挖掘算法比較
在本文網絡結構中,分別將樣本挖掘策略設置為跨批存儲機制(XBM),以及其他通用的在線三元組挖掘策略:batch-all、batch-hard,來對比不同樣本挖掘策略對網絡性能的影響。表5 展示了是由不同的樣本挖掘策略組成的網絡結構在OULU數據集上進行測試的結果,以及在訓練過程中一個迭代次數內所能挖掘出的最大樣本對數,其中n表示一個batch 的大小,q表示XBM隊列的長度,一般為n的整數倍。如表所示,使用跨批存儲機制的網絡結構與使用batch-all 在OULU 數據集上的APCER 值相比,該方法的APCER值減少了1.1個百分點;與使用batch-hard 的APCER 值相比,減少了31.7個百分點。同時XBM機制在一個迭代次數內獲得的樣本對數遠大于batch-all、batch-hard 的大小,即所獲得的困難樣本數也遠大于這些策略。這說明跨批存儲機制能通過挖掘出更多的困難樣本對來獲得比其他樣本挖掘策略更好的性能。

表5 樣本挖掘策略比較Table 5 Comparison of sample mining strategies單位:%
本文提出了一種結合跨批存儲機制與度量學習的人臉活體檢測算法。在度量學習中利用跨批存儲機制使得網絡可以在多個批數據中挖掘困難樣本對,提取更加豐富的特征信息,從而避免網絡在進行特征提取時,樣本挖掘被限制在一個批數據中,導致所提取的特征信息量不夠,模型精度下降。另外為了提高模型泛化能力,本文采用異常檢測的方式,只對活體樣本進行像素級回歸損失的監督,來生成欺詐線索,并用欺詐線索來對樣本進行分類,結果表明相較于二元交叉熵損失,使用欺詐線索進行分類能得到更好的結果。最后本文對欺詐線索進行了可視化,證明了真實樣本和不同欺詐類型的欺詐線索是具有明顯的差異。雖然本文猜測這些差異的產生可能和欺詐樣本的顏色失真、云紋圖案或材質有關,但真實情況仍不確定。未來本文會針對這種情況進行更進一步的探索。