馮友兵 陸軼秋 仲偉波
(江蘇科技大學電子信息學院 鎮江 212003)
人臉識別[1]作為一種生物特征識別技術,是近年來模式識別、圖像處理、機器視覺、神經網絡以及認知科學等領域研究的熱點課題之一。同時人臉識別作為一種穩定性高、精度高、難以復制、易于被人接受的生物特征識別技術,在身份認證、安防監控、人機交互等領域具有廣泛的應用前景。隨著信息技術的日益革新,人臉識別技術對圖像的處理也越來越復雜,在樣本充足、背景單一、環境光照穩定的情況下,大部分算法都能取得較高的識別率。
在實際應用中,如何解決環境因素和人臉表情,姿態變換的影響,成為目前檢驗各類算法的難題。基于特征臉的人臉識別算法通過降維的方式提取人臉特征,雖然降低了計算復雜度,但在降維的同時也會丟失某些有效特征[1]。基于3D 模型的人臉識別算法[2]將采集的人臉還原成三維模型,再與數據庫中已知身份人臉的三維數據進行匹配識別,但該算法對圖像要求較高、應用性較低。基于稀疏的人臉識別方法[3]通過將所有訓練人臉圖像映射到一個子空間,然后在子空間中找到測試人臉圖像的稀疏表示,該算法在噪聲干擾的情況下仍具有較好的性能,但在人臉樣本不充足的情況下效果較差。近年來卷積神經網絡[4~7]已成為語音分析和圖像識別領域的研究熱點,尤其在人臉識別領域取得了不俗的成果。卷積神經網絡通過結合人臉圖像的局部感知區域、共享權重、在空間上來充分利用數據本身包含的局部性等特征,該特征對光照變化、姿態、遮擋具有一定魯棒性。
本文采用了卷積神經網絡構建人臉識別系統,首先使用基于卷積神經網絡的facenet 模型[8]提取人臉特征,然后使用SVM 分類器[9]進行分類,并在實際環境中進行測試。
CNN 是一個處理輸入為二維數據的多層非全連接的神經網絡,網絡每層有多個二維平面,每個二維平面有多個獨立的神經元。神經元之間的連接只存在于相鄰層。該網絡的底層主要提取圖像的紋理、邊緣等。底層提取的信息通過神經元連接傳遞到下一層,逐漸傳遞到高層進而提取到圖像最本質的結構信息。通常情況下網絡層數越多網絡性能越好。卷積神經網絡與一般神經網絡區別在于局部連接和權值共享,減少了需要訓練的權值數目,從而大大降低了網絡模型的學習復雜度。卷積神經網絡的基本結構有卷積層,池化層,全連接層。如圖1所示。

圖1 卷積神經網絡結構
1)卷積層
圖1 中的C1、C2 為卷積層,卷積層通過一個可以學習的卷積核(圖1中conv1,conv2),首先從上一層的特征矩陣中提取出與卷積核相同大小的區域,再將區域中特征值按照順序與卷積核對應位置的權值相乘之后加上偏置為該片區域的卷積結果,最后按照卷積核的移動步長依次計算其他區域的卷積結果。當卷積完成時,這些結果產生一個新的特征矩陣。

其中*為離散卷積運算符,f(?)為激活函數,通常是Sigmoid,如式(2)所示:

其中x 為輸入,f(x)為輸出。
2)池化層
圖1 中S1、S2 為池化層,池化層通過采樣將初級視覺特征篩選并結合成抽象、高級視覺特征。本文池化層采用最大值采樣方法,采樣大小為2×2,首先將前一層提取的特征矩陣平均分為2×2 大小的矩陣塊,再對每個矩陣塊取最大值,最后輸出一個大小為原來的特征矩陣。采樣后有減小計算量和圖像移位的影響,整個過程如式(3)所示:

3)全連接層
圖1中F1為全連接層,全連接層可增強網絡非線性的映射能力,將前一層網絡的所有神經元與當前網絡的所有神經元互相連接,同層之間的神經元不連接。如式(4)所示:

其中l 表示當前網絡層數,n 表示為第l-1 層網絡的神經元個數,表示為第l-1 層網絡第i 個神經元輸入值,表示第l 層網絡神經元j 與第l-1層網絡神經元i 之間的連接權值,表示為第l 層網絡神經元j 的偏置,f(?)表示為激活函數。
近年來基于深學習的人臉識別方法普遍使用Softmax[10]損失函數訓練網絡,從網絡中抽取某一層作為輸出特征,再使用輸出特征向量訓練分類器。這種方法的缺點是低效和不直接,輸出特征的維度非常大。facenet 是由Google 公司提出的一種新的基于卷積神經網絡的人臉識別模型,facenet直接學習到一個從圖像到歐式空間的映射,歐式空間的距離關聯著人臉相似度。

圖2 facenet模型圖
facenet 模型圖如圖2 所示,其中deep architec?ture 為卷積神經網絡結構,經L2 歸一化后,得到特征表示。
SVM 由Cortes 和Vpanik 于1995 年首先提 出,它建立在統計學習理論和結構風險最小原理的基礎上,根據有限的樣本信息在模型的復雜性和學習能力之間尋求最佳折衷,來獲得最好的泛化能力。
SVM最初是用來對二分類問題進行分類的,在線性可分的情況下,對于訓練集(xi,yi),其中xi∈RN,yi∈{-1,1},i=1,2,3,…,n ,目標是找到一個超平面能夠將兩類樣本完全分開且兩類間的間隔最大。不妨設超平面的方程為w ?x+b=0 ,將w ?x+b >0 的歸于1 類,而w ?x+b <0 的則歸于-1類。兩類間隔的最大化等價于最小化如式(5)所示:

約束條件:

引入Lagrange乘子a,得到式(7)中的Wolfe對偶形式為

求解得到a 之后,平面參數w 和b 便可以由對偶問題的解a 來確定。由此可以得到SVM 的最優分類函數:

對于非線性問題,SVM分類器則通過非線性變換將低維空間中的非線性分類的樣本映射成高維空間中的線性可分樣本,然后在映射后的高維空間線性樣本中構建最優的分類超平面。其非線性變換是由選擇適當的內積函數得到,內積函數稱為SVM核函數,即

其中φ:Rn→Rd,表示通過非線性變換從n 維的低維線性空間到d 維的高維線性空間,這樣將低維空間的非線性樣本轉化為高維空間的線性樣本,并且把高維空間中的內積運算簡化為通過核函數K(xi,xj)來計算。通常使用的核函數有以下幾種:
1)線性核函數

2)多項式核函數

3)高斯(RBF)核函數

對于多類樣本的分類,采用的分類策略是一對一的投票方式,構建SVM 多類分類器。假設訓練樣本的類別數為n,則在SVM 多類分類器訓練階段創建n(n-1)/2 個分類器。這樣把每個類別與其他類別進行對比,求取最優分類平面,然后保存每個SVM二分類器的訓練參數即為訓練結果。
本文設計的人臉識別系統主要由以下部分組成:人臉識別服務器、客戶端、圖像采集設備。如圖3所示。

圖3 人臉識別系統結構圖
人臉識別服務器包含人臉檢測模塊、人臉識別模塊、預訓練facenet 模型、數據庫等模塊。人臉檢測模塊使用的是opencv[12]圖像處理庫中人臉檢測api 通過提取haar[13]特征檢測人臉。人臉識別模塊則使用的是開源深度學習框架tensorflow[11]該框架使用圖來表示計算任務,這種形式可以高效地構建深層神經網絡,且可以在cpu 和gpu 上運行。預訓練的facenet 模型則是davidsandberg 基于CA?SIA-WebFace[14]數據庫訓練的,該數據集有9982張圖片,預訓練的facenet 模型具有很好的泛化性能,在LFW 數據集的準確率為0.98。數據庫模塊使用mysql 負責存儲訓練好的SVM 分類器參數以及人臉標簽。由于服務器環境搭建需要一定時間,所以本系統在人臉識別服務器開啟狀態下便加載ten?sorflow 框架,gpu 配置以及預訓練的facenet 模型到環境中。人臉識別服務器的作用是通過接收圖像采集設備發送過來的圖片然后根據客戶端的請求調用相應模塊計算結果返回給客戶端。其中核心模塊是基于CNN 和SVM 的人臉識別算法,算法描述如下:
步驟1:加載基于CASIA-WebFace數據庫訓練的facenet 模型,將訓練集中所有圖片裁剪成160*160的圖像塊x,并初始化標簽向量y。
步驟2:按式(1)、(2)、(3)將圖像塊x 作為輸入到網絡中,結合facenet 模型中提取的卷積核、權值、偏置,經過計算得到特征向量為x(1),此時特征提取過程結束。
步驟3:將x(1)輸入到SVM 分類器中,SVM 分類器使用線性核函數結合式(7)SVM分類器優化函數如式(13)所示:

其中N 為樣本數,ai,aj為引入的Lagrange乘子。
步驟4:使用SMO[15]算法先固定ai,aj求解剩余參數,然后再通過剩余參數求解ai,aj,迭代更新直到函數收斂,所得結果記為平面參數w 和b 便可以由對偶問題的解a*來確定。最后保存SVM 分類器訓練結果參數w和b。
步驟5:輸入測試圖像裁剪成160*160 的圖像塊,同樣通過步驟2提取特征向量。
步驟6:加載步驟4 中保存的SVM 分類器參數w 和b,按式(9)計算最優分類結果。
算法流程如圖4所示。

圖4 人臉識別系統算法流程圖
在實際應用中,人臉識別系統最大的挑戰是存在姿態變化和遮擋時,識別效果不理想。因此本文采集了多類實際應用中的人臉圖像作為實驗樣本。正常人臉樣本是在面部基本對齊或小角度傾斜、無遮擋、表情單一,如圖5(a)所示。姿態變化的人臉樣本有多種表情和側臉如圖5(b)所示。有遮擋人臉樣本如圖5(c)所示。系統測試中采集4 個人每人40張人臉圖片,其中正常人臉樣本20張、存在姿態變化人臉10 張、有遮擋人臉10 張。樣本尺寸為160×160 像素。系統測試分為以下三種情況:T1 為正常人臉樣本訓練和測試,T2 為正常人臉樣本訓練和姿態變化人臉樣本測試,T3 為正常人臉樣本訓練和有遮擋的人臉樣本測試。每種情況取不同的訓練樣本數,測試結果取10次平均值如表1所示。

圖5 各種情況的人臉樣本
由表1 數據可知,當訓練樣本只有兩張時,各類識別率普遍較低,隨著訓練樣本數量增多,各類識別率都有顯著提高。其中識別率上升速度依次是T1、T2、T3,說明遮擋對特征提取影響較大,其次是姿態變化。當訓練樣本數取到10 時,各類識別率均達到100%,達到預期效果。

表1 不同訓練數目在各類情況下的識別率(%)
圖6 為系統在實際場景中錄取一個下午13:00到14:00 視頻的一幀截圖,對所有進入圖像采集設備區域的人臉進行識別。其中人臉出現次數為125次,所有人臉均能正確識別,識別率為100%,每個人臉的測試平均時間為217ms,完全可以滿足一般情況下的人臉識別要求。

圖6 視頻人臉識別測試圖
研究并采用了基于facenet 卷積神經網絡的特征提取算法以及svm 分類算法,在此基礎上設計并實現了人臉識別系統。系統首先在視頻流中截取每幀圖像進行人臉檢測,然后便將檢測到的人臉進行識別。實際測試結果表明,系統在訓練樣本充分的情況下對于人臉姿態、表情、遮擋變化都具有較高的識別率。在人數較少的場所如小型辦公室、家庭等,本文所設計的人臉識別系統能滿足需求。