長沙理工大學 白 創(chuàng) 段楊楊 王 坤 鄭立陽 彭 港 張雪冰
人臉識別技術(shù)作為生物特征識別技術(shù)的一種,與指紋識別、視網(wǎng)膜識別、虹膜識別等技術(shù)相比,具有特有的穩(wěn)定性、唯一性和方便性,所以它被廣泛地被應(yīng)用在身份識別領(lǐng)域[2]。人臉識別技術(shù)分為四類:基于幾何特征的方法、基于代數(shù)特征的方法、基于模板的方法、基于深度學習的方法?;趲缀蔚奶卣魈崛》椒▽τ谫|(zhì)量較好的人臉圖像有良好的分類和識別效果,對某些或是質(zhì)量較差的圖像,人臉輪廓線的提取效果不太理想[3];基于代數(shù)特征的方法因有著相對較低的計算復雜度而引起廣泛關(guān)注,但不足之處在于受表情變化、光照角度強度變化和視角變化等影響嚴重,而且魯棒性較差[4];基于模板匹配的方法優(yōu)點是容易實現(xiàn),缺點是很難有效處理姿勢和尺度變化問題[5];基于深度學習的人臉識別算法對光照、姿勢和復雜背景有更好的魯棒性,能較大幅度地提高識別準確率;但深度學習同樣面臨著一些挑戰(zhàn),如大數(shù)據(jù)訓練問題,現(xiàn)今的深度學習算法的訓練數(shù)據(jù)量已經(jīng)達到了數(shù)百萬和數(shù)千萬,甚至是更大的規(guī)模量,現(xiàn)有的一些技術(shù)對大數(shù)據(jù)的處理已經(jīng)不太適用[6]。
本文主要從深度學習對大數(shù)據(jù)的處理效率出發(fā),采用卷積神經(jīng)網(wǎng)絡(luò)解決了深度學習對大數(shù)據(jù)處理效率不高的問題,并基于此點設(shè)計了卷積神經(jīng)網(wǎng)絡(luò)人臉識別系統(tǒng),經(jīng)測試該系統(tǒng)有較好的魯棒性,且識別率較高。
本文設(shè)計的人臉識別系統(tǒng)的核心算法主要由兩部分組成,分別是基于Adaboost人臉檢測算法和基于卷積神經(jīng)網(wǎng)絡(luò)的人臉特征提取算法。
人臉檢測采用的是基于一種Adaboost算法的Viola人臉檢測方法[7],Adaboost 算法是一種用來分類的方法,它把一些比較弱的分類方法合在一起,組合成新的很強的分類方法。訓練過程就是挑選最優(yōu)弱分類器,并賦予權(quán)重過程。具體訓練過程如圖1所示。
(1)使用 Harr-like 特征表示人臉,計算出 Haar 特征位置參數(shù),并根據(jù)特征位置參數(shù)求出各弱分類器的閾值參數(shù);
(2)使用 Adaboost 算法挑選出一些最能代表人臉的矩形特征(弱分類器),按照加權(quán)投票的方式將弱分類器構(gòu)造為一個強分類器;
(3)將訓練得到的若干強分類器串聯(lián)組成一個級聯(lián)結(jié)構(gòu)的層疊分類器,級聯(lián)結(jié)構(gòu)能有效地提高分類器的檢測速度,然后經(jīng)過大量的人臉訓練,從而達到檢測人臉的效果[8]。
圖1 Adaboost算法的訓練過程
我們采用的是基于卷積神經(jīng)網(wǎng)絡(luò)的特征提取方法(Convolutional Neural Networks-簡稱CNN)。20世紀60年代,Hubel和Wiesel在研究貓腦皮層中用于局部敏感和方向選擇的神經(jīng)元時發(fā)現(xiàn)其獨特的網(wǎng)絡(luò)結(jié)構(gòu)可以有效地降低反饋神經(jīng)網(wǎng)絡(luò)的復雜性,由于卷積神經(jīng)網(wǎng)絡(luò)具有強大的特征抽取能力,能夠逐層對復雜數(shù)據(jù)進行特征抽取,最終形成適合模式分類的較理想特征[9]。
2.2.1 本文卷積神經(jīng)網(wǎng)絡(luò)的具體結(jié)構(gòu)
卷積神經(jīng)網(wǎng)絡(luò)的輸入層為: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輸出層的主要結(jié)構(gòu)見文獻[10]。
2.2.2 卷積神經(jīng)網(wǎng)絡(luò)的訓練及訓練結(jié)果
使用谷歌第二代機器學習系統(tǒng)—TensorFlow訓練卷積神經(jīng)網(wǎng)絡(luò)。TensorFlow有高度的靈活性,真正的可移植性(Portability),自動求微分,多語言支持等特點。
訓練中使用的人臉庫是CMU_PIE人臉庫,它包括來自68個人的40000張照片,其中包括了每個人的13種姿態(tài)條件,43種光照條件和4種表情下的照片,我們選取一個訓練效果較好的模型,將卷積神經(jīng)網(wǎng)絡(luò)中實現(xiàn)提取人臉特征的結(jié)構(gòu)以及其參數(shù)保存下來,用來設(shè)計特征提取模塊。
訓練過程中的損失函數(shù)是交叉熵損失函數(shù),優(yōu)化器是tensorflow中的AdamOptimizer, 學習速度為0.0001,訓練方法是批量梯度下降法,訓練次數(shù)為4000次,每次輸入訓練數(shù)據(jù)中的隨機2000張圖片,訓練每隔50次打印當前誤差;我們使用tensorflow中的tensoboard工具對網(wǎng)絡(luò)進行可視化,得出識別準確率隨訓練次數(shù)增加而不斷增加,訓練次數(shù)在4K左右逐漸趨于穩(wěn)定,而誤差隨訓練次數(shù)增加也逐漸降低,訓練次數(shù)在4K左右也逐漸趨于穩(wěn)定,最終訓練準確率為99.06%。
人臉識別系統(tǒng)實現(xiàn)主要包括軟件實現(xiàn)和硬件實現(xiàn)兩部分,下面分別介紹。
系統(tǒng)軟件實現(xiàn)可以分兩個部分闡述。第一部分是人臉檢測,人臉檢測開發(fā)環(huán)境采用的是由 Willow Garage 提供支持的開源計算機視覺庫OpenCV(Open Source Computer Vision Library)。在Open CV中,對于人臉檢測的模型已經(jīng)建立為一個XML文件,其中包含了Harr特征的分類器的訓練結(jié)果,我們通過加載這個文件而省略掉自己建立級聯(lián)表的過程。有了級聯(lián)表,我們只需要將待檢測圖片和級聯(lián)表一同傳遞給Open CV的目標檢測算法即可得到一個檢測到的人臉的集合,從而達到檢測人臉的目的。第二部分是人臉特征提取及識別,首先基于tensorflow利用CMU_PIE人臉庫對卷積神經(jīng)網(wǎng)絡(luò)進行訓練,選取最優(yōu)訓練模型并通過編寫python構(gòu)建特征提取器,接著輸入標準人臉形成人臉特征庫;當待測人臉圖像進入系統(tǒng),通過特征提取器提取待測人臉特征,接著通過對比待測人臉特征和標準人臉特征的歐式距離完成識別。最后在c++程序中調(diào)用python腳本,在Qt界面顯示識別結(jié)果,從而完成整個人臉識別過程。
我們主要是使用Altera DE1_SOC開發(fā)板;開發(fā)板內(nèi)ARM核的主頻:1G;運行內(nèi)存:1G的DDR3 SDRAM;存儲空間:8G的MicroSD卡。
系統(tǒng)的硬件實現(xiàn)框圖如圖2所示。
圖2 系統(tǒng)硬件設(shè)計
從圖像中可以看出,首先由USB攝像頭通過UVC驅(qū)動和V4L2接口采集圖像。圖像在ARM核中,輸入給嵌入到ARM核中的人臉識別程序。通過VGA接口連接的顯示屏在顯示屏顯示人機交互界面以及相關(guān)的功能按鍵,通過點擊按鍵實現(xiàn)人臉識別系統(tǒng)的相關(guān)功能。
測試結(jié)果如圖3所示。
如圖3所示的人臉識別操作界面,首先點擊錄入按鈕,系統(tǒng)顯示拍照錄入的人臉圖像,并提示要求輸入姓名完成整個錄入過程;接著點擊開始識別,系統(tǒng)采集當前攝像頭圖像并與錄入的人臉圖像進行識別,最后把識別結(jié)果在顯示界面顯示出來。
以實驗室現(xiàn)有人員為測試對象,經(jīng)過一個初步測試發(fā)現(xiàn):本系統(tǒng)完全實現(xiàn)了人臉識別功能,有一個比較好的識別準確率。對人臉的姿態(tài)和光照等,表現(xiàn)出了較好的魯棒性??梢约尤胄碌娜藛T進入系統(tǒng)而無需進行訓練。另外,人機交互界面也比較完備。
圖3 測試結(jié)果
本文采用了人臉定位與檢測算法,可以從復雜場景中提取人臉圖像,通過使用深度學習中的卷積神經(jīng)網(wǎng)絡(luò)算法,提高了人臉識別系統(tǒng)在人臉姿態(tài)、光照等發(fā)生變化時的識別率。然后采用高性能機器訓練卷積特征提取層,低性能機器加載卷積特征提取層的方式,避免了新加入人臉的重新訓練的過程。最后使用嵌入式的技術(shù)將整個人臉識別系統(tǒng)載入到SOC片上系統(tǒng)中,提高了系統(tǒng)的實用性。當然系統(tǒng)也存在一些問題,比如說我們的卷積神經(jīng)網(wǎng)絡(luò)需要進行大量的卷積運算,運算時間較久,導致系統(tǒng)在硬件性能不夠的情況下識別速率較慢,在以后的工作中還需要不斷改進神經(jīng)網(wǎng)絡(luò)算法,從而提高識別速率。
[1]劉歡喜.人體生物特征的綜合分析與應(yīng)用[D].上海交通大學,2010.
[2]李武軍,王崇駿,張煒,陳世福.人臉識別研究綜述[J].模式識別與人工智能,2006,19(01):58-66.
[3]夏海英.基于紋理和幾何特征的表情分類研究[D].華中科技大學,2011.
[4]江興斌.基于代數(shù)特征的人臉識別算法研究[D].蘭州理工大學,2014.
[5]謝毓湘,王衛(wèi)威,欒悉道,吳玲達,老松楊.基于膚色與模板匹配的人臉識別[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].機械管理開發(fā),2012(01):185-186+188.
[9]于達嶺,黃洪瓊.一種基于卷積神經(jīng)網(wǎng)絡(luò)的人臉識別方法[J].微型機與應(yīng)用,2017,36(14):49-51+56.
[10]李倩玉,蔣建國,齊美彬.基于改進深層網(wǎng)絡(luò)的人臉識別算法[J].電子學報,2017,45(03):619-625.