林平榮, 吳梓華, 陳 鑫, 施曉權
(1.廣州軟件學院軟件研究所, 廣東 廣州 510990;2.華南理工大學廣州學院計算機工程學院, 廣東 廣州 510800;3.廣東機電職業技術學院人工智能學院, 廣東 廣州 510550)
基于深度學習的人臉識別技術是目前人工智能領域被廣泛研究的主題之一。人臉識別技術相比傳統的身份認證技術,具有顯著的可區分特征,并且不用與驗證設備進行接觸式交互,方便快捷,是人工智能領域一種重要的無接觸式身份識別技術[1]。隨著人臉識別技術的不斷更新和發展,其識別準確度大幅提升,實際使用場景也越來越廣泛。基于人工設計的特征和傳統機器學習技術的傳統人臉識別方法,已被基于神經網絡的深度學習方法所取代[2]。本文主要論述基于深度學習的人臉識別系統,闡述其人臉檢測和人臉識別算法的選型思路,最后進行驗證測試。
卷積神經網絡(Convolutional Neural Network,CNN)是深度學習的代表算法之一,相比傳統機器學習方法,它含有更復雜的網絡結構和更強大的特征學習與特征表達能力,能夠實現非常高的準確度[3]。該算法被廣泛應用于圖像分類[4]、物體檢測[5]、人臉識別[6]、語音識別[7]等多個計算機應用領域。截至目前,已經有許多優秀的CNN網絡被提出,例如LeNet、AlexNet、GoogleNet、ResNet等,將這些網絡應用到各種檢測和識別任務中,實現較高的檢測和識別的精度,甚至可以超越人類的感官[8]。
人臉識別系統由人臉圖像采集及檢測、人臉圖像預處理、人臉圖像表征和人臉匹配與識別四個部分構成,其結構如圖1所示。

圖1 人臉識別系統結構Fig.1 Face recognition system structure
系統完成人臉識別任務的流程如下。
(1)攝像頭視頻流解析:通過攝像頭硬件獲取視頻流并對其進行解析,完成人臉圖像采集,輸出預設條件的人臉圖像。
(2)人臉檢測:對采集到的人臉圖像使用人臉檢測算法尋找圖像中人臉的位置和大小,包含人臉的邊界框坐標等信息,以便后續進行人臉圖像預處理操作。
(3)圖片預處理:使用人臉對齊、裁剪、歸一化等方法對已檢測到的部分人臉圖片進行圖像預處理,以便更好地進行人臉特征提取。
(4)人臉特征提取:利用訓練好的人臉識別模型對“步驟(2)”和“步驟(3)”中已檢測和預處理后的人臉圖像進行人臉圖像表征,以獲得可判別的特征向量。
(5)人臉特征比對:將“步驟(4)”中的人臉特征與數據庫中的已知人臉特征進行相似度判斷,最后輸出判斷結果。
人臉檢測及識別對系統的實時性要求較高,因此系統的性能表現是一個很重要的指標。依據軟件性能測試中的“響應時間2-5-8原則”(用戶在2 s內得到響應時,感覺系統響應速度比較快;在2~5 s得到響應時,感覺系統響應速度還可以;在5~8 s響應時,感覺系統響應速度比較慢;超過8 s,則感覺系統響應速度很慢),系統在進行人臉識別的過程中響應時間應該控制在2 s內,以達到實時識別效果及提升用戶體驗感。
人臉識別過程需要在頁面實時顯示流式視頻。通過Flask+Python+OpenCV搭建流媒體服務器,使用流式響應提供從Motion-JPEG格式的攝像機捕獲的視頻幀流,將本地圖像轉為網絡URL地址,輸出帶識別框的圖像[9]。Motion-JPEG格式具有易于生成且延遲低的優點,適用于任何瀏覽器,對瀏覽器的版本也沒有特殊要求[10]。通過模擬的相機驅動程序,使用OpenCV調用本地攝像機獲取圖像,并且可以傳輸由相機獲取的一系列jpeg圖像,主要通過camera_opencv類和base_camera類實現。瀏覽器實時視頻流效果圖如圖2所示。

圖2 瀏覽器實時視頻流效果Fig.2 Real-time video streaming effect of the browser
camera_opencv類通過get()函數進行一個循環,通過OpenCV連接攝像機硬件并從中獲取實時視頻幀流,并將它從攝像機獲得的連續返回幀作為響應塊。在Html頁面中相應圖像標記的src屬性指向此后臺中的路由,最終實現瀏覽器的流式實時視頻傳輸。流式傳輸是讓每個塊替換頁面中的前一塊,這使得流可以在瀏覽器窗口中“播放”,讓視頻流中的每個塊都成為一個圖像,并提供瀏覽器中運行的實時視頻源。
人臉檢測是識別數字圖像中人臉的計算機技術,它在不同的人臉識別方法中都是關鍵且基礎的一步。能不能從給定的圖像中通過算法搜索圖像、判斷圖像是否存在人臉以及提取的人臉是否符合后期處理標準等,都將直接影響系統后續的識別率。對于人臉檢測而言,每個人的表情、相貌都是有區別的,即使同一個人也時刻會產生不同的變化,而且檢測過程中可能會受到遮擋物、光照和角度等因素的影響,因此人臉檢測算法對環境變化干擾應具有較好的魯棒性。
本文選擇的人臉檢測算法為MTCNN(Multi-Task Cascaded Convolutional Networks),并使用人臉數據集對模型進行訓練。MTCNN是由ZHANG等[11]于2016年提出的一種多任務人臉檢測模型。MTCNN由三個神經網絡級聯組成,即P-Net、R-Net和O-Net,具體對應的網絡結構如圖3所示。MTCNN可以同時完成人臉檢測和對準任務,與傳統方法相比,MTCNN具有更好的性能,可以準確定位人臉且速度更快,此外MTCNN可以實時檢測,對自然環境中的光線、角度和面部表情變化都有更好的魯棒性,可以很好地滿足人臉檢測的實時性要求。
給定一個圖像,MTCNN算法在進入三個級聯網絡前,會先將原始圖片調整為不同的尺寸,以構建圖像金字塔。然后將不同尺寸的圖片送到3個級聯網絡進行訓練,讓網絡可以檢測到不同大小的人臉而進行多尺度檢測。生成圖像進入第一個網絡層P-Net,它是一個淺層的卷積網絡,采用非最大抑制(NMS)合并高度重疊的候選窗口,主要用于生成候選窗口和邊界回歸向量。接下來,P-Net輸出的候選窗口的人臉區域會進入第二個網絡層,即R-Net進行處理。R-Net結構與P-Net非常相似,只是多了一層全連接層,因此對臉部特征和窗口的篩選更加嚴格,它將過濾掉大多數錯誤窗口(非人臉候選窗口),并將可信度較高的人臉區域輸送到下一層網絡,即O-Net網絡。O-Net比R-Net多了一層卷積層,擁有更加復雜的網絡架構,但也因此獲得了更好的性能。O-Net對輸入圖像進行人臉判別和特征點定位后,將輸出人臉區域的5個特征點位置。
通過Tensorflow深度學習框架結合MCTNN人臉檢測算法搭建檢測模型。搭建好檢測模型之后,基于公開人臉數據集WIDER FACE對模型進行迭代訓練。根據參與任務的不同,將訓練數據分為四類:人臉正樣本(Positive)、非人臉負樣本(Negative)、部分臉(Part faces)、關鍵點(Landmark)。由于系統主要是進行人臉識別任務,MTCNN模型主要用于檢測人臉并返回邊界框,所以只需要將數據集分成Negative、Positive、Part faces三個部分即可,即不對人臉關鍵點進行訓練。三部分數據的比例為1∶1∶3,在標注好的人臉圖片上進行隨機人臉剪裁,根據切割到的邊框和真實人臉框進行交并比(Intersection over Union,IoU)計算,其中最大IoU值為正樣本(Positive)數據,IoU大于0.4的為部分臉(Part faces)數據,IoU小于0.3的為負樣本(Negative)數據。將三種12×12的圖像作為P-Net的輸入并進行模型訓練,通過P-Net得到了是否有人臉的概率[batch,2],人臉框的偏移量[batch,4],以及關鍵點的偏移量[batch,10]。訓練過程中的一部分訓練數據圖像如圖4所示。

圖4 部分訓練數據圖像Fig.4 Partial training data image
對訓練好的模型進行測試,測試結果如表1所示,人臉檢測效果如圖5所示。由表1可見,訓練好的模型在不同視覺角度及遮擋情況下對人臉檢測的識別率都有較好的表現,具有較好的魯棒性。

表1 模型測試結果Tab.1 Model test result

(a)側臉

(b)俯角

(c)仰角

(d)遮擋圖5 人臉檢測效果圖Fig.5 Diagram of face detection effect
人臉相關任務分為兩個部分:人臉檢測和人臉識別。輸入一張人臉圖像,判斷其屬于人臉數據庫的具體哪一個人,這是人臉識別過程中的重要一環。近年來,隨著深度卷積神經網絡的引入,人臉識別準確率不斷提升。許多經典的基于深度學習的人臉識別模型被提出,如DeepFace、DeepID、VGGFace和FaceNet等,其中的代表算法是FaceNet。表2列舉了近幾年比較成功的人臉識別模型及在公開數據集LFW上的測試情況,FaceNet獲得了最高99.63%的平均分類精度,是目前最先進的人臉識別算法。基于此,本文提出融合KNN分類的FaceNet人臉識別方法。

表2 幾種經典人臉識別模型在LFW數據集上的測試結果[12]Tab.2 The test results of several classic face recognition models on the LFW dataset[12]
FaceNet是一種用于人臉識別和聚類的統一嵌入技術,其本質是通過深度卷積神經網絡學習從人臉圖像到歐幾里得空間的映射,將人臉圖像映射為128維的特征向量,使用特征向量之間的距離表征人臉圖像之間的相似度。兩個人臉圖像越相似,其特征向量之間的距離就越小,反之亦然。需要指出的是,FaceNet人臉識別算法不是直接進行分類,而是計算出待測人臉和目標人臉特征向量間的歐式距離后,再與預先設定的一個閾值進行比較,它的問題是算法模型訓練好后,閾值是人為設定的一個單一的數值,人臉識別在具體應用時是固定的,因此可能會出現一直把某兩個人誤識別的情況。理論上,可以把更多的人臉圖片放到訓練集中重新訓練,以學習到更多的特征,從而泛化到訓練集中未曾出現過的主體;也可以通過調整閾值提高或降低敏感度和特異性,但頻繁重新訓練這么大而深的網絡不現實,調整閾值也可能會造成其他的問題,所以賦予后期模型調整的能力很重要[13]。融合了KNN分類的FaceNet人臉識別方法,利用FaceNet進行人臉表征,基于KNN實現人臉分類。在實際使用過程中,當類內差異更多時,可以增加相關類別訓練樣本,只需訓練KNN分類模型即可,而不需要調整FaceNet網絡參數,從而賦予模型后期調整優化的能力。
KNN分類器的訓練通過Scikit-learn庫實現。選取本文第二作者的人臉樣本(10張以上)以及從LFW人臉數據集中隨機選取的10個人的人臉樣本(每個人的樣本數在10張以上)作為訓練與測試數據集,每個人為1類,總共11個類別。每個類中70%的人臉圖片用于訓練,其余用于測試。實際應用時,FaceNet對MTCNN檢測到的人臉進行數據表征,提取出128維的特征向量,再通過已經訓練好的KNN分類器對特征向量分類后實現身份識別。
分別在正常環境和復雜干擾環境下對本文設計的人臉識別系統進行測試,測試說明如下。
(1)使用MacBook Pro 筆記本的攝像頭作為圖像采集設備,對人臉圖像進行實時采集,攝像頭像素為 130萬,主屏分辨率為 2 560×1 600。操作系統為macOS系統,版本為10.14.1。
(2)筆記本的攝像頭距離人臉大約30 cm,保證整個人臉圖像能出現在人臉識別系統的驗證區域。
(3)測試之前,通過自建的人臉數據集選取每個人的3張照片作為已知人臉進行人臉特征訓練,并將其錄入人臉數據庫。
在正常環境下,通過錄入4個人的人臉圖片進行人臉特征提取,并在錄入后進行每人100次,共400次的在線測試,測試結果如表3所示。

表3 識別率測試結果Tab.3 Results of recognition rate test
為了測試系統的性能,采用離線測試和在線測試兩種測試方法對系統的響應時間進行測試。
離線測試:主要測試在離線環境下正確輸入和錯誤輸入的系統響應時間。對不同的3人分別離線采集100張人臉圖像,其中兩人提取人臉特征錄入該系統作為正確輸入,剩余1人不錄入系統作為錯誤輸入。將采集的300張圖像隨機輸入該系統進行人臉識別,統計每張圖像的系統響應時間。測試結果如表4所示。

表4 離線測試結果Tab.4 Results of offline test
在線測試:直接在線使用人臉識別系統進行實時人臉識別。將已錄入人臉信息的測試人員保持人臉無遮擋,并置于人臉識別系統的驗證區域持續2 min,并在此過程中進行小幅度的轉動,統計人臉識別的次數,從而得出人臉識別過程中的系統平均響應時間,測試結果如表5所示。

表5 在線測試結果Tab.5 Results of online test
系統測試分別在不同的光照、背景、遮擋等干擾環境下進行,測試結果如表6所示。

表6 不同光照和背景環境下測試結果Tab.6 Test results under environments of different light and background
對人臉各部位進行不同比例的遮擋,測試結果如表7所示。

表7 遮擋干擾測試結果Tab.7 Results of occlusion interference test
分析上述測試結果,本文設計的人臉識別系統在正常環境中達到98%左右的識別率,對于表情不夸張、臉部傾斜角度不大或有一些俯視角度,也能達到93%左右的識別率。在性能測試方面,離線測試和在線測試的單次識別平均響應時間比較快,最快正確輸入為0.63 s,最慢正確輸入為0.69 s,在線測試平均響應時間為0.67 s,響應時間均在1 s以內,在用戶體驗感良好的時間范圍內,系統具備較好的性能,達到了實時性要求。在復雜環境干擾測試中,針對不同的光照、背景,依然有不錯的識別成功率,即使在人臉部位遮擋比例達到50%的環境下,平均識別率約為72%,實現了60%以上的識別率,證明算法具有較好的魯棒性。
本文介紹了基于深度學習的人臉識別系統。首先,分析系統完成人臉識別任務的基本流程,闡述視頻流在線識別模塊、人臉檢測模塊、人臉識別模塊的設計,尤其是人臉檢測和人臉識別算法的選型。由于人臉檢測具有較高的檢測率及實時性要求,因此選用MTCNN作為檢測模型的算法,均衡了精度和性能。其次,以提升后期模型調整優化能力為出發點,提出融合KNN分類的FaceNet人臉識別方法,利用FaceNet進行人臉表征、KNN進行人臉特征分類。最后,對系統進行了測試,結果證明人臉識別系統具備較高的準確率,響應時間比較快,在一些復雜環境場景下也有不錯的表現。因此,本文所設計的基于深度學習的人臉識別系統具有推廣的意義。