謝志明
(1.汕尾職業技術學院信息工程系 汕尾 516600)
(2.汕尾市創新工業設計研究院云計算與數據中心工程設計研究所 汕尾 516600)
人臉識別特指利用計算機對人臉視覺特征信息自動進行身份鑒別與分析的一種生物特征識別技術,其屬于計算機視覺類范疇[1],是近年來深度學習與模式識別等人工智能領域的研究熱點之一。尤其是近些年來隨著深度卷積神經網絡的引入,人臉識別的準確率得以跨越式提升,并被廣泛應用于門禁安全、考勤、考生身份驗證、字符識別、刷臉支付等領域[2]。
目前,常用的人臉識別方法[3~4]主要有基于模板匹配的[5]、基于幾何特征的[6]、基于代數特征的[3](其典型代表主要有HMM,PCA,LDA)、基于人工神經網絡的[7](其具有代表性的是BP 算法)等方法。然而隨著深度學習逐漸成為機器學習的研究熱點,尤其是卷積神經網絡(Convolutional Neural Network,CNN)的發展使得人臉識別的精度得到了進一步提升。CNN 是一個受生物視覺啟發以最簡化預處理操作為目的MLP 的變形,屬于前向反饋神經網絡,其特征提前的方法是通過逐層卷積降維進行特征提取,然后經過多層非線性映射使網絡可以從未經特殊預處理的訓練樣本中,自動學習形成適合該識別任務的特征提取器和分類器。該方法降低了對訓練樣本的要求,而且網絡層數越多學習到的特征更具有全局性[8]。
LeNet-5[9]模型結構是由計算機科學家Yann LeCun教授于1998年所提出的,該模型是用于識別手寫數字的卷積神經網絡,是當年美國大多數銀行用它來識別支票上面的手寫數字,達到了商用地步,說明該算法具有很高的識別率。本文實驗將依據該模型結構設計6 層CNN 網絡用于olivettifaces人臉數據庫進行人臉識別,網絡前4層由卷積層和池化層交替級聯進行圖像特征提取,其中卷積層激活函數使用的是非線性映射函數ReLU,池化層無需激活函數,之后緊接的網絡層為全連接層,最后一層采用非線性分類能力強的Softmax 分類器,輸出分類結果的概率OUTPUT。
CNN 結構模型如圖1 所示,包含了輸入層、卷積層1、池化層1、卷積層2、池化層2、全連接層和Softmax 回歸分類層。根據圖1 我們發現CNN 與其他傳統神經網絡相比主要的差異是增加了卷積層和池化層的處理來提取圖像特征,在此本文特對這兩層進行介紹。

圖1 CNN結構模型
卷積層又稱為特征提取層,表示對輸入圖像進行濾波后得到的所有組成的層。每個神經元的輸入與前一層的局部感受野(local receptive field)相連,并提取該局部的特征[10]。該層存在的意義是將原本一個圖像經過卷積運算后產生多個圖像,其卷積運算方式如圖2 所示,首先以隨機的方式確定好卷積核數值,其次將要轉換的圖像從左到右、自上而下,按序選取圖像矩陣,最后將選取的圖像矩陣與卷積核進行乘積和。每個卷積都是一種特征提取方式,就像一個篩子,將圖像中符合條件的部分篩選出來,一般來說激活值越大越符合篩選條件。卷積運算并不會改變圖像大小,所以處理后的圖像大小仍然保持不變,類似濾鏡效果,可以幫助我們提取輸入的不同特征,如邊緣、線條和角等[11]。

圖2 卷積運算過程
卷積過程的數學表達式[12]為

其中,n_in為輸入矩陣的個數或者是張量的最后一維的維數,b是卷積層特征圖上神經元的偏置,Xk代表第k 個輸入矩陣,Wk代表卷積核的第k 個子卷積核矩陣,s(i,j)即卷積核W 對應的輸出矩陣的對應位置元素的值。
池化層又稱為特征映射層,表示對輸入圖像進行下采樣得到的層。網絡的每個計算層由多個特征映射組成,每個特征映射為一個平面,平面上所有神經元的權值相等。特征映射結構采用影響函數核小的sigmoid 函數作為卷積網絡的激活函數,使得特征映射結構具有位移不變性[10]。經過池化層處理過的圖像通常會帶如下好處,首先會減少需處理的數據點,減少了后續運算所需的時間;其次由于是縮減采樣,使得圖像位置差異變小;最后由于參數的數量和計算量下降,對過擬合也起到了一定程度上的控制。本實驗采用的是最大池化法采樣,大小為2×2,即把輸入的特征圖分割成不重疊的2×2 大小的矩形,對每個矩形取最大值,其實現過程如圖3所示。

圖3 最大池化法取值過程
本實驗數據采用的是紐約大學的olivettifaces人臉庫,由40 個人的400 張圖片構成,即每個人的人臉圖片為10張。每張圖片的灰度級為8位,每個像素的灰度大小介于0~255 之間,總圖大小是1190×942,一共有20×20 張人臉,故每張人臉大小是(1190/20)×(942/20)即57×47=2679。我們將原始數據分成三部分,訓練數據320 個樣本,驗證數據和測試數據均為40個樣本,部分人臉樣例如圖4所示。

圖4 olivettifaces人臉庫樣例
本實驗的實驗環境為Windows7+Python3.6+Keras,CPU 為3.40GHz 的Inter i7-6700,內 存 為DDR4 16G,顯卡為NVIDIA GT-720 2G。首先通過加載PIL 模塊讀取圖片;其次運用numpy.asarray 進行數據歸一化處理,即把每張圖片拉成一維向量2679 并添加label;最后加載pickle模塊保存這些具有歸一化數值和帶標簽的向量。
構建本實驗模型的操作過程如下所列:
1)建立一個keras 的Sequential 線性堆疊模型,以方便后續的各個神經網絡層的加入。
2)建立卷積層1,每張人臉圖像大小為57×47,構建濾鏡數為16,每個濾鏡大小為3×3,并通過添加same 參數來保證讓卷積運算后產生的卷積圖像大小保持不變,同時選擇ReLu[13~14]作為該層的激活函數,因此經過第1 次卷積運算后產生16 個圖像,圖像大小仍為57×47。
3)建立池化層1,執行第1 次縮減采樣,將16個57×47的圖像縮小為一半,數量保持不變。
4)建立卷積層2,構建濾鏡數為36,即將原本16個圖像轉換為36個圖像。
5)建立池化層2,執行第2次縮減采樣,將池化層1 的圖像再次縮小一半,同時在此層加入Drop?out,這樣的好處是在每次進行迭代訓練時會隨機在神經網絡中放棄部分神經元,以免過度擬合[15]。
6)建立平坦層,將池化層2 的圖像轉換為一維向量。
7)建立隱藏層,選擇ReLu 作為該層的激活函數,并再次把Dropout層加入模型中。
8)建立輸出層,使用softmax 激活函數進行轉換,預測概率。
CNN模型摘要信息如表1所列。

表1 CNN模型16-36-128信息摘要
根據表1 的模型摘要信息我們發現隱藏層神經元數量和2 個卷積層特征圖數量的變化對網絡準確率有較大影響,在此設計模型C1-C2-H[16]分別討論,其中C1代表卷積層1特征圖的數量,C2代表卷積層2 特征圖的數量,H 則代表隱藏層神經元的數量。
1)通過改變隱藏層神經元數量查看對網絡的影響
選擇用于測試的6 層CNN 模型為16-36-128,16-36-256,16-36-512,16-36-1024。本實驗的2個卷積層參數保持不變,只對全連接層的隱層神經元數量進行調整,運行后的結果如圖5、圖6 和表2所示。

圖5 隱藏層神經元數量對測試結果的影響

圖6 隱藏層神經元數量對交叉熵的影響

表2 隱藏層神經元數量影響人臉識別的正確率(%)
通過觀察實驗結果我們發現隨著神經元數量的遞增,交叉熵不斷下降,即誤差越來越低準確率越來越高,尤其是對訓練集的影響較大,識別率由87.19%提高到99.69%,而驗證集和測試集的識別率已趨于穩定為97.50%,因此可以暫時確定本實驗的最佳CNN模型為16-36-1024。

圖7 卷積層的圖像特征數量對測試結果的影響
2)通過改變卷積層1和卷積層2特征圖數量查看對網絡的影響
根據上面試驗確定的最佳神元數量1024 來設計 的CNN 模 型 為16-36-1024,26-56-1024,36-76-1024,76-156-1024。本實驗保持隱層神經元數量不變,通過改變2 個卷積層的圖像特征數,找到本實驗的最佳CNN 人臉識別模型。運行后的結果如圖7、圖8和表3所示。

圖8 卷積層圖像特征數量對交叉熵的影響

表3 卷積層圖像特征數量影響人臉識別的正確率(%)
通過觀察實驗結果我們發現隨著加入卷積層圖像的特征數越多運行時間也越長,且無論是對訓練集識別率還是驗證集和測試集的識別率都已影響不大,基本保持穩定,從圖8 中看到交叉熵雖有變化但同樣也影響不大。當CNN 模型為36-76-1024時,人臉識別率達到了100%,因此可以確定它為本實驗最佳的CNN模型。
由于人臉識別過程比手寫數字識別更加復雜,實驗在借鑒LeNet-5 手寫數字識別算法的基礎上進行調整以獲得更高的準確率。通過改變實驗參數即隱藏層神經元數量和兩個卷積層特征圖數量得到了目前最佳的CNN 模型,并取得了很高的識別率,但該CNN 模型也存在一些不足的地方,如網絡結構易受圖像數據庫影響,同時該網絡模型能否勝任對自然圖像分類和識別亟待進一步實驗和研究。