重慶師范大學 楊杰之 袁玉杰
人臉識別在課堂簽到領域的應用越來越廣泛,同時人臉識別也容易受到人為的攻擊,例如頭戴面具或者手持照片讓網(wǎng)絡做出錯誤的判斷,針對目前基于深度學習的活體檢測算法大都為大型卷積神經(jīng)網(wǎng)絡,而部署到移動端的課堂簽到系統(tǒng)對于網(wǎng)絡具有輕量化要求的問題,搭建了一種基于輕量級網(wǎng)絡的快速人臉識別系統(tǒng)。
首先,利用SSD進行人臉檢測,對輸入圖片進行人臉區(qū)域的識別再利用OpenCV對人臉區(qū)域進行分割,其次,以基于VGG改進的輕量級網(wǎng)絡VGG_light為基礎網(wǎng)絡進行活體檢測,從RGB圖中提取特征,再使用Softmax層作出真假人臉的判斷,最后利用ArcFace進行人臉匹配,判斷輸入人臉是否在庫中,從而得到簽到是否成功的判斷。然后,將此技術部署到了移動端,利用JAVA與Android SDK完成了一個課堂簽到APP,并在APP進行了應用。實驗結果顯示,改進的輕量化網(wǎng)絡不僅保證了活體檢測算法的高效性,同時也具有很高的準確率,滿足實時性需求,并且對于多種欺騙手段的都具有很好的防御效果,使得整個系統(tǒng)在人臉識別上更加可靠,得到的判斷結果更加準確。
本系統(tǒng)主要功能是搭建一個輕量級的網(wǎng)絡,以手機端為數(shù)據(jù)傳輸入口,可以快速的對人臉進行活體檢測,判別識別出來的人臉是真實的人臉,還是采用了欺騙手段的假體人臉。總體步驟如圖1所示。

圖1 總體算法流程圖
主要包括人臉識別,人臉活體檢測兩個部分。人臉識別采取的是SSD方法,以矩形框的形式找到人臉的區(qū)域;人臉活體檢測是將識別出來的人臉區(qū)域利用改進的輕量級VGG網(wǎng)絡進行真實以及欺騙的判斷,并得到一個為真實人臉的得分,然后將最后的結果以及得分返回到使用者的移動端設備當中,在移動端進行一個實時的檢測。
在人臉識別的過程中,它也面臨著許多2D(2紙質(zhì)面具、視頻、電子照片等)或者3D(逼真的頭模頭套以及面具等)的假體人臉攻擊,因此,為系統(tǒng)配置魯棒的抗欺騙干擾算法是非常有必要的,該方法能夠?qū)铙w以及假體人臉進行辨別,保證人臉識別系統(tǒng)的完全性。
為了保證活體檢測模型在一定準確率的情況下,同時保證算法的實時性以及魯棒性,需要對網(wǎng)絡結構進行調(diào)整,尤其對于移動端的部署更加需要網(wǎng)絡模型的參數(shù)足夠小,因此本文選擇對VGG網(wǎng)絡進行輕量化改進,使其滿足對移動端部署要求。
VGG是一種在多分類任務上十分有效的卷積神經(jīng)網(wǎng)絡,采用的是Conv2D卷積層以及邊緣補0的相等池化,即給圖像矩陣四周都加0。卷積核使用為大小為3x3,卷積核個數(shù)為64的濾波器,一個卷積核掃完圖像矩陣數(shù)據(jù)后,生成一個新的矩陣,有64個卷積核就會生成64層新的矩陣,然后再使用使用局部歸一化層,加快模型的訓練和防止模型訓練過擬合,然后在卷積后使用relu激活函數(shù),最后做3層全連接層,前兩個全連接層的神經(jīng)元個數(shù)為4096。本系統(tǒng)的方法主要是在VGGNet的基礎上進行的輕量化改進,利用了VGGNet的模型模塊,搭建了一個全新的輕量級網(wǎng)絡VGG_light,網(wǎng)絡的結構如圖2所示。
人臉識別是基于人的臉部特征信息進行身份驗證的一種生物識別技術,系統(tǒng)首先通過讀取攝像頭中傳入帶有人臉的照片,對照片中人臉的部分通過人臉檢測算法進行提取,將提取后的人臉傳入卷積神經(jīng)網(wǎng)絡提取特征,通過計算數(shù)據(jù)庫中的特征于傳入進來的人臉的特征進行比對(如求歐式距離或余弦相似度),選擇距離最小的作為比對的結果,判斷該結果是否滿足閾值設置,滿足則輸出比對結果,不滿足則人臉匹配失敗。

圖2 VGG_light模型圖
使用深度卷積神經(jīng)網(wǎng)絡進行大規(guī)模人臉的特征提取,中心損失會懲罰歐式空間中深層特征與其對應的類中心之間的距離,具有類內(nèi)緊湊性,導致不同人臉之間容易混淆網(wǎng)絡的判斷。ArcFace提出了“相加角余量損失”,以獲取用于面部識別的高緯判別特征。由于與超平面上的歐式距離精確對應,因此ArcFace具有清晰的幾何解釋。ArcFace在10多個人臉識別比賽,充分驗證了其在不同數(shù)據(jù)集中都具備泛化能力,其中包括具有萬億對的新的大型圖像數(shù)據(jù)庫和大型視頻數(shù)據(jù)集。在ArcFace中,加法角余量損失(ArcFace)可以進一步提高人臉識別模型的判別能力并穩(wěn)定訓練過程。如圖3所示,DCNN特征和最后一個完全連接的層之間的點積等于特征和權重歸一化后的余弦距離。

圖3 ArcFcae模型示意圖
ArcFace利用反余弦函數(shù)來計算當前特征與目標權重之間的角度。然后向目標角度添加一個附加的角余量,通過余弦函數(shù)再次獲得目標對數(shù),再按照固定的特征范數(shù)重新縮放。

圖4 活體檢測數(shù)據(jù)集
ArcFace具有以下優(yōu)點:(1)通過歸一化超平面中角度與弧線的對應關系,優(yōu)化距離間距,使之能夠很好的區(qū)別類內(nèi)關系。(2)ArcFace在十項人臉識別的比賽中取得了最好的結果。(3)ArcFace易于通過各類深度學習框架復現(xiàn),并且對各類人臉數(shù)據(jù)庫都有很好的收斂性。(4)在訓練期間,ArcFace的計算復雜度低,足以保證系統(tǒng)運行時的實時性需求。
實驗環(huán)境配置CPU為Intel(R)Core(TM)i7-8700 3.20GHz,內(nèi)存32GB,顯卡NVIDIA GeForce GTX 1070Ti,Windows 10系統(tǒng)下搭建。模型框架的搭建基于Keras+opencv,服務器端基于Flask框架,移動端開發(fā)在AndroidStudio環(huán)境下完成。
4.2.1 數(shù)據(jù)集
(1)活體檢測的數(shù)據(jù)
考慮到活體檢測任務對于欺騙手段的多樣性要求,以及本系統(tǒng)部署到移動端對于攝像頭的要求,采集了針對于本系統(tǒng)的數(shù)據(jù)集。關于人臉活體檢測數(shù)據(jù)集的采集方式,對于真實人臉的數(shù)據(jù)集,采樣了三個樣本,具體的采集方式如下所示,固定攝像頭,每個樣本錄制了一段時間在15 s左右的視頻,期間樣本在攝像頭前前后移動,小幅度的轉(zhuǎn)頭,再在視頻上以每5幀為間隔截取圖片,一共采集了709個真實人臉照片;對于欺騙人臉,人手持欺騙樣本,同樣固定攝像頭,樣本在攝像頭前前后移動,小幅度的轉(zhuǎn)頭,每個樣本錄制時長15s左右的視頻,一共采集了512張欺騙人臉的照片。

圖5 LFW數(shù)據(jù)集
視頻的格式為avi。圖像的格式要求為jpg。部分數(shù)據(jù)集如圖4所示。
(2)人臉匹配數(shù)據(jù)集
對于人臉匹配任務,利用對于人臉匹配模塊,采用LFW(Labeled Faces in the Wild)數(shù)據(jù)集中的6000對國內(nèi)外人臉進行訓練,3000對用于比對驗證。數(shù)據(jù)集可以從下面的網(wǎng)址中獲得http://vis-www.cs.umass.edu/lfw/。數(shù)據(jù)集的部分數(shù)據(jù)如圖5所示。
4.2.2 結果展示

圖6 桌面程序結果展示

圖7 APP結果展示
本系統(tǒng)搭建了一個活體檢測桌面程序和人臉識別課堂簽到手機APP,并在課堂簽到的任務上面進行應用,具體結果分別對這兩個部分進行闡述。
(1)活體檢測桌面程序展示
桌面程序主要展示的是人臉活體檢測的模塊,綠色的方框代表框出來的人臉部分是真實人臉,方框上的數(shù)字代表的是真實人臉的置信度;紅色的方框代表框出來的人臉是欺騙人臉,同樣,方框上的數(shù)字代表的是欺騙人臉的置信度。如圖6所示。
(2)課堂簽到APP結果展示
主要展示的是包含了人臉檢測,活體檢測以及人臉匹配三個模塊的課堂簽到APP的效果,對于輸入到APP的照片,上傳到本地服務器之后,將對于此人臉的真假以及此人臉是否在庫中進行判斷,其中,若系統(tǒng)判定該人臉為欺騙樣本將返回:“請不要試圖攻擊神經(jīng)網(wǎng)絡”;若系統(tǒng)判斷人臉為真實樣本但不在人臉庫中返回:“未在簽到名單之內(nèi)”;若系統(tǒng)判斷人臉為真實人臉,并且該人臉在人臉庫中返回:“簽到成功”,具體結果如圖7所示。
總結:基于改進的VGG的移動端快速活體檢測系統(tǒng)的功能是從移動端輸入的圖片進行人臉檢測,再進行人臉活體檢測,最后進行人臉匹配,該系統(tǒng)包含SSD人臉檢測,OpenCV人臉區(qū)域剪裁模塊,改進的輕量級網(wǎng)絡VGG_light人臉活體檢測模塊,以及基于ArcFace的人臉匹配模塊。并且在移動端對于集成了上訴模塊的課堂簽到APP進行了部署與測試。
系統(tǒng)基于JAVA以及Python語言的集成開發(fā)環(huán)境,以類的方式進行編寫,結構清晰。系統(tǒng)界面簡潔、操作簡單,并且本系統(tǒng)不僅僅適用于課堂簽到,還可以應用到人臉支付,門禁等場景當中。