長沙理工大學 白 創 段楊楊 王 坤 鄭立陽 彭 港 張雪冰
人臉識別技術作為生物特征識別技術的一種,與指紋識別、視網膜識別、虹膜識別等技術相比,具有特有的穩定性、唯一性和方便性,所以它被廣泛地被應用在身份識別領域[2]。人臉識別技術分為四類:基于幾何特征的方法、基于代數特征的方法、基于模板的方法、基于深度學習的方法。基于幾何的特征提取方法對于質量較好的人臉圖像有良好的分類和識別效果,對某些或是質量較差的圖像,人臉輪廓線的提取效果不太理想[3];基于代數特征的方法因有著相對較低的計算復雜度而引起廣泛關注,但不足之處在于受表情變化、光照角度強度變化和視角變化等影響嚴重,而且魯棒性較差[4];基于模板匹配的方法優點是容易實現,缺點是很難有效處理姿勢和尺度變化問題[5];基于深度學習的人臉識別算法對光照、姿勢和復雜背景有更好的魯棒性,能較大幅度地提高識別準確率;但深度學習同樣面臨著一些挑戰,如大數據訓練問題,現今的深度學習算法的訓練數據量已經達到了數百萬和數千萬,甚至是更大的規模量,現有的一些技術對大數據的處理已經不太適用[6]。
本文主要從深度學習對大數據的處理效率出發,采用卷積神經網絡解決了深度學習對大數據處理效率不高的問題,并基于此點設計了卷積神經網絡人臉識別系統,經測試該系統有較好的魯棒性,且識別率較高。
本文設計的人臉識別系統的核心算法主要由兩部分組成,分別是基于Adaboost人臉檢測算法和基于卷積神經網絡的人臉特征提取算法。
人臉檢測采用的是基于一種Adaboost算法的Viola人臉檢測方法[7],Adaboost 算法是一種用來分類的方法,它把一些比較弱的分類方法合在一起,組合成新的很強的分類方法。訓練過程就是挑選最優弱分類器,并賦予權重過程。具體訓練過程如圖1所示。
(1)使用 Harr-like 特征表示人臉,計算出 Haar 特征位置參數,并根據特征位置參數求出各弱分類器的閾值參數;
(2)使用 Adaboost 算法挑選出一些最能代表人臉的矩形特征(弱分類器),按照加權投票的方式將弱分類器構造為一個強分類器;
(3)將訓練得到的若干強分類器串聯組成一個級聯結構的層疊分類器,級聯結構能有效地提高分類器的檢測速度,然后經過大量的人臉訓練,從而達到檢測人臉的效果[8]。

圖1 Adaboost算法的訓練過程
我們采用的是基于卷積神經網絡的特征提取方法(Convolutional Neural Networks-簡稱CNN)。20世紀60年代,Hubel和Wiesel在研究貓腦皮層中用于局部敏感和方向選擇的神經元時發現其獨特的網絡結構可以有效地降低反饋神經網絡的復雜性,由于卷積神經網絡具有強大的特征抽取能力,能夠逐層對復雜數據進行特征抽取,最終形成適合模式分類的較理想特征[9]。
2.2.1 本文卷積神經網絡的具體結構
卷積神經網絡的輸入層為:68×68大小的圖片,單通道。
第一層卷積:2×2大小的卷積核32個。
第一層max-pooling:2×2的核。
第二層卷積:2×2卷積核64個。
第二層max-pooling:2×2的核。
第三層卷積:與上一層是全連接,2×2的卷積核96個。
全連接輸入層:輸入是將第三層max-pooling的輸出連接成為一個7776(9×9×96)維的一維向量,作為該層的輸入,輸出為1024維。
全連接 Softmax 輸出層:輸入1024維,輸出為67,輸出的每一維都是圖片屬于該類別的概率,Softmax輸出層的主要結構見文獻[10]。
2.2.2 卷積神經網絡的訓練及訓練結果
使用谷歌第二代機器學習系統—TensorFlow訓練卷積神經網絡。TensorFlow有高度的靈活性,真正的可移植性(Portability),自動求微分,多語言支持等特點。
訓練中使用的人臉庫是CMU_PIE人臉庫,它包括來自68個人的40000張照片,其中包括了每個人的13種姿態條件,43種光照條件和4種表情下的照片,我們選取一個訓練效果較好的模型,將卷積神經網絡中實現提取人臉特征的結構以及其參數保存下來,用來設計特征提取模塊。
訓練過程中的損失函數是交叉熵損失函數,優化器是tensorflow中的AdamOptimizer, 學習速度為0.0001,訓練方法是批量梯度下降法,訓練次數為4000次,每次輸入訓練數據中的隨機2000張圖片,訓練每隔50次打印當前誤差;我們使用tensorflow中的tensoboard工具對網絡進行可視化,得出識別準確率隨訓練次數增加而不斷增加,訓練次數在4K左右逐漸趨于穩定,而誤差隨訓練次數增加也逐漸降低,訓練次數在4K左右也逐漸趨于穩定,最終訓練準確率為99.06%。
人臉識別系統實現主要包括軟件實現和硬件實現兩部分,下面分別介紹。
系統軟件實現可以分兩個部分闡述。第一部分是人臉檢測,人臉檢測開發環境采用的是由 Willow Garage 提供支持的開源計算機視覺庫OpenCV(Open Source Computer Vision Library)。在Open CV中,對于人臉檢測的模型已經建立為一個XML文件,其中包含了Harr特征的分類器的訓練結果,我們通過加載這個文件而省略掉自己建立級聯表的過程。有了級聯表,我們只需要將待檢測圖片和級聯表一同傳遞給Open CV的目標檢測算法即可得到一個檢測到的人臉的集合,從而達到檢測人臉的目的。第二部分是人臉特征提取及識別,首先基于tensorflow利用CMU_PIE人臉庫對卷積神經網絡進行訓練,選取最優訓練模型并通過編寫python構建特征提取器,接著輸入標準人臉形成人臉特征庫;當待測人臉圖像進入系統,通過特征提取器提取待測人臉特征,接著通過對比待測人臉特征和標準人臉特征的歐式距離完成識別。最后在c++程序中調用python腳本,在Qt界面顯示識別結果,從而完成整個人臉識別過程。
我們主要是使用Altera DE1_SOC開發板;開發板內ARM核的主頻:1G;運行內存:1G的DDR3 SDRAM;存儲空間:8G的MicroSD卡。
系統的硬件實現框圖如圖2所示。

圖2 系統硬件設計
從圖像中可以看出,首先由USB攝像頭通過UVC驅動和V4L2接口采集圖像。圖像在ARM核中,輸入給嵌入到ARM核中的人臉識別程序。通過VGA接口連接的顯示屏在顯示屏顯示人機交互界面以及相關的功能按鍵,通過點擊按鍵實現人臉識別系統的相關功能。
測試結果如圖3所示。
如圖3所示的人臉識別操作界面,首先點擊錄入按鈕,系統顯示拍照錄入的人臉圖像,并提示要求輸入姓名完成整個錄入過程;接著點擊開始識別,系統采集當前攝像頭圖像并與錄入的人臉圖像進行識別,最后把識別結果在顯示界面顯示出來。
以實驗室現有人員為測試對象,經過一個初步測試發現:本系統完全實現了人臉識別功能,有一個比較好的識別準確率。對人臉的姿態和光照等,表現出了較好的魯棒性。可以加入新的人員進入系統而無需進行訓練。另外,人機交互界面也比較完備。

圖3 測試結果
本文采用了人臉定位與檢測算法,可以從復雜場景中提取人臉圖像,通過使用深度學習中的卷積神經網絡算法,提高了人臉識別系統在人臉姿態、光照等發生變化時的識別率。然后采用高性能機器訓練卷積特征提取層,低性能機器加載卷積特征提取層的方式,避免了新加入人臉的重新訓練的過程。最后使用嵌入式的技術將整個人臉識別系統載入到SOC片上系統中,提高了系統的實用性。當然系統也存在一些問題,比如說我們的卷積神經網絡需要進行大量的卷積運算,運算時間較久,導致系統在硬件性能不夠的情況下識別速率較慢,在以后的工作中還需要不斷改進神經網絡算法,從而提高識別速率。
[1]劉歡喜.人體生物特征的綜合分析與應用[D].上海交通大學,2010.
[2]李武軍,王崇駿,張煒,陳世福.人臉識別研究綜述[J].模式識別與人工智能,2006,19(01):58-66.
[3]夏海英.基于紋理和幾何特征的表情分類研究[D].華中科技大學,2011.
[4]江興斌.基于代數特征的人臉識別算法研究[D].蘭州理工大學,2014.
[5]謝毓湘,王衛威,欒悉道,吳玲達,老松楊.基于膚色與模板匹配的人臉識別[J].計算機工程與科學,2008(06):54-56+59.
[6]嚴嚴,陳日偉,王菡子.基于深度學習的人臉分析研究進展[J].廈門大學學報(自然科學版),2017,56(01):13-24.
[7]S.Yin,P.Ouyang,X.Dai,L.Liu and S.Wei,”An AdaBoost-Based Face Detection System Using Parallel Configurable Architecture With Optimized Computation,”in IEEE Systems Journal,vol.11,no.1,pp.260-271,March 2017.
[8]劉遠志,潘宏俠,趙潤鵬.基于OpenCV和Adaboost算法的人臉檢測[J].機械管理開發,2012(01):185-186+188.
[9]于達嶺,黃洪瓊.一種基于卷積神經網絡的人臉識別方法[J].微型機與應用,2017,36(14):49-51+56.
[10]李倩玉,蔣建國,齊美彬.基于改進深層網絡的人臉識別算法[J].電子學報,2017,45(03):619-625.