謝志明
(1.汕尾職業(yè)技術(shù)學(xué)院信息工程系 汕尾 516600)
(2.汕尾市創(chuàng)新工業(yè)設(shè)計研究院云計算與數(shù)據(jù)中心工程設(shè)計研究所 汕尾 516600)
人臉識別特指利用計算機(jī)對人臉視覺特征信息自動進(jìn)行身份鑒別與分析的一種生物特征識別技術(shù),其屬于計算機(jī)視覺類范疇[1],是近年來深度學(xué)習(xí)與模式識別等人工智能領(lǐng)域的研究熱點之一。尤其是近些年來隨著深度卷積神經(jīng)網(wǎng)絡(luò)的引入,人臉識別的準(zhǔn)確率得以跨越式提升,并被廣泛應(yīng)用于門禁安全、考勤、考生身份驗證、字符識別、刷臉支付等領(lǐng)域[2]。
目前,常用的人臉識別方法[3~4]主要有基于模板匹配的[5]、基于幾何特征的[6]、基于代數(shù)特征的[3](其典型代表主要有HMM,PCA,LDA)、基于人工神經(jīng)網(wǎng)絡(luò)的[7](其具有代表性的是BP 算法)等方法。然而隨著深度學(xué)習(xí)逐漸成為機(jī)器學(xué)習(xí)的研究熱點,尤其是卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)的發(fā)展使得人臉識別的精度得到了進(jìn)一步提升。CNN 是一個受生物視覺啟發(fā)以最簡化預(yù)處理操作為目的MLP 的變形,屬于前向反饋神經(jīng)網(wǎng)絡(luò),其特征提前的方法是通過逐層卷積降維進(jìn)行特征提取,然后經(jīng)過多層非線性映射使網(wǎng)絡(luò)可以從未經(jīng)特殊預(yù)處理的訓(xùn)練樣本中,自動學(xué)習(xí)形成適合該識別任務(wù)的特征提取器和分類器。該方法降低了對訓(xùn)練樣本的要求,而且網(wǎng)絡(luò)層數(shù)越多學(xué)習(xí)到的特征更具有全局性[8]。
LeNet-5[9]模型結(jié)構(gòu)是由計算機(jī)科學(xué)家Yann LeCun教授于1998年所提出的,該模型是用于識別手寫數(shù)字的卷積神經(jīng)網(wǎng)絡(luò),是當(dāng)年美國大多數(shù)銀行用它來識別支票上面的手寫數(shù)字,達(dá)到了商用地步,說明該算法具有很高的識別率。本文實驗將依據(jù)該模型結(jié)構(gòu)設(shè)計6 層CNN 網(wǎng)絡(luò)用于olivettifaces人臉數(shù)據(jù)庫進(jìn)行人臉識別,網(wǎng)絡(luò)前4層由卷積層和池化層交替級聯(lián)進(jìn)行圖像特征提取,其中卷積層激活函數(shù)使用的是非線性映射函數(shù)ReLU,池化層無需激活函數(shù),之后緊接的網(wǎng)絡(luò)層為全連接層,最后一層采用非線性分類能力強的Softmax 分類器,輸出分類結(jié)果的概率OUTPUT。
CNN 結(jié)構(gòu)模型如圖1 所示,包含了輸入層、卷積層1、池化層1、卷積層2、池化層2、全連接層和Softmax 回歸分類層。根據(jù)圖1 我們發(fā)現(xiàn)CNN 與其他傳統(tǒng)神經(jīng)網(wǎng)絡(luò)相比主要的差異是增加了卷積層和池化層的處理來提取圖像特征,在此本文特對這兩層進(jìn)行介紹。
圖1 CNN結(jié)構(gòu)模型
卷積層又稱為特征提取層,表示對輸入圖像進(jìn)行濾波后得到的所有組成的層。每個神經(jīng)元的輸入與前一層的局部感受野(local receptive field)相連,并提取該局部的特征[10]。該層存在的意義是將原本一個圖像經(jīng)過卷積運算后產(chǎn)生多個圖像,其卷積運算方式如圖2 所示,首先以隨機(jī)的方式確定好卷積核數(shù)值,其次將要轉(zhuǎn)換的圖像從左到右、自上而下,按序選取圖像矩陣,最后將選取的圖像矩陣與卷積核進(jìn)行乘積和。每個卷積都是一種特征提取方式,就像一個篩子,將圖像中符合條件的部分篩選出來,一般來說激活值越大越符合篩選條件。卷積運算并不會改變圖像大小,所以處理后的圖像大小仍然保持不變,類似濾鏡效果,可以幫助我們提取輸入的不同特征,如邊緣、線條和角等[11]。
圖2 卷積運算過程
卷積過程的數(shù)學(xué)表達(dá)式[12]為
其中,n_in為輸入矩陣的個數(shù)或者是張量的最后一維的維數(shù),b是卷積層特征圖上神經(jīng)元的偏置,Xk代表第k 個輸入矩陣,Wk代表卷積核的第k 個子卷積核矩陣,s(i,j)即卷積核W 對應(yīng)的輸出矩陣的對應(yīng)位置元素的值。
池化層又稱為特征映射層,表示對輸入圖像進(jìn)行下采樣得到的層。網(wǎng)絡(luò)的每個計算層由多個特征映射組成,每個特征映射為一個平面,平面上所有神經(jīng)元的權(quán)值相等。特征映射結(jié)構(gòu)采用影響函數(shù)核小的sigmoid 函數(shù)作為卷積網(wǎng)絡(luò)的激活函數(shù),使得特征映射結(jié)構(gòu)具有位移不變性[10]。經(jīng)過池化層處理過的圖像通常會帶如下好處,首先會減少需處理的數(shù)據(jù)點,減少了后續(xù)運算所需的時間;其次由于是縮減采樣,使得圖像位置差異變??;最后由于參數(shù)的數(shù)量和計算量下降,對過擬合也起到了一定程度上的控制。本實驗采用的是最大池化法采樣,大小為2×2,即把輸入的特征圖分割成不重疊的2×2 大小的矩形,對每個矩形取最大值,其實現(xiàn)過程如圖3所示。
圖3 最大池化法取值過程
本實驗數(shù)據(jù)采用的是紐約大學(xué)的olivettifaces人臉庫,由40 個人的400 張圖片構(gòu)成,即每個人的人臉圖片為10張。每張圖片的灰度級為8位,每個像素的灰度大小介于0~255 之間,總圖大小是1190×942,一共有20×20 張人臉,故每張人臉大小是(1190/20)×(942/20)即57×47=2679。我們將原始數(shù)據(jù)分成三部分,訓(xùn)練數(shù)據(jù)320 個樣本,驗證數(shù)據(jù)和測試數(shù)據(jù)均為40個樣本,部分人臉樣例如圖4所示。
圖4 olivettifaces人臉庫樣例
本實驗的實驗環(huán)境為Windows7+Python3.6+Keras,CPU 為3.40GHz 的Inter i7-6700,內(nèi) 存 為DDR4 16G,顯卡為NVIDIA GT-720 2G。首先通過加載PIL 模塊讀取圖片;其次運用numpy.asarray 進(jìn)行數(shù)據(jù)歸一化處理,即把每張圖片拉成一維向量2679 并添加label;最后加載pickle模塊保存這些具有歸一化數(shù)值和帶標(biāo)簽的向量。
構(gòu)建本實驗?zāi)P偷牟僮鬟^程如下所列:
1)建立一個keras 的Sequential 線性堆疊模型,以方便后續(xù)的各個神經(jīng)網(wǎng)絡(luò)層的加入。
2)建立卷積層1,每張人臉圖像大小為57×47,構(gòu)建濾鏡數(shù)為16,每個濾鏡大小為3×3,并通過添加same 參數(shù)來保證讓卷積運算后產(chǎn)生的卷積圖像大小保持不變,同時選擇ReLu[13~14]作為該層的激活函數(shù),因此經(jīng)過第1 次卷積運算后產(chǎn)生16 個圖像,圖像大小仍為57×47。
3)建立池化層1,執(zhí)行第1 次縮減采樣,將16個57×47的圖像縮小為一半,數(shù)量保持不變。
4)建立卷積層2,構(gòu)建濾鏡數(shù)為36,即將原本16個圖像轉(zhuǎn)換為36個圖像。
5)建立池化層2,執(zhí)行第2次縮減采樣,將池化層1 的圖像再次縮小一半,同時在此層加入Drop?out,這樣的好處是在每次進(jìn)行迭代訓(xùn)練時會隨機(jī)在神經(jīng)網(wǎng)絡(luò)中放棄部分神經(jīng)元,以免過度擬合[15]。
6)建立平坦層,將池化層2 的圖像轉(zhuǎn)換為一維向量。
7)建立隱藏層,選擇ReLu 作為該層的激活函數(shù),并再次把Dropout層加入模型中。
8)建立輸出層,使用softmax 激活函數(shù)進(jìn)行轉(zhuǎn)換,預(yù)測概率。
CNN模型摘要信息如表1所列。
表1 CNN模型16-36-128信息摘要
根據(jù)表1 的模型摘要信息我們發(fā)現(xiàn)隱藏層神經(jīng)元數(shù)量和2 個卷積層特征圖數(shù)量的變化對網(wǎng)絡(luò)準(zhǔn)確率有較大影響,在此設(shè)計模型C1-C2-H[16]分別討論,其中C1代表卷積層1特征圖的數(shù)量,C2代表卷積層2 特征圖的數(shù)量,H 則代表隱藏層神經(jīng)元的數(shù)量。
1)通過改變隱藏層神經(jīng)元數(shù)量查看對網(wǎng)絡(luò)的影響
選擇用于測試的6 層CNN 模型為16-36-128,16-36-256,16-36-512,16-36-1024。本實驗的2個卷積層參數(shù)保持不變,只對全連接層的隱層神經(jīng)元數(shù)量進(jìn)行調(diào)整,運行后的結(jié)果如圖5、圖6 和表2所示。
圖5 隱藏層神經(jīng)元數(shù)量對測試結(jié)果的影響
圖6 隱藏層神經(jīng)元數(shù)量對交叉熵的影響
表2 隱藏層神經(jīng)元數(shù)量影響人臉識別的正確率(%)
通過觀察實驗結(jié)果我們發(fā)現(xiàn)隨著神經(jīng)元數(shù)量的遞增,交叉熵不斷下降,即誤差越來越低準(zhǔn)確率越來越高,尤其是對訓(xùn)練集的影響較大,識別率由87.19%提高到99.69%,而驗證集和測試集的識別率已趨于穩(wěn)定為97.50%,因此可以暫時確定本實驗的最佳CNN模型為16-36-1024。
圖7 卷積層的圖像特征數(shù)量對測試結(jié)果的影響
2)通過改變卷積層1和卷積層2特征圖數(shù)量查看對網(wǎng)絡(luò)的影響
根據(jù)上面試驗確定的最佳神元數(shù)量1024 來設(shè)計 的CNN 模 型 為16-36-1024,26-56-1024,36-76-1024,76-156-1024。本實驗保持隱層神經(jīng)元數(shù)量不變,通過改變2 個卷積層的圖像特征數(shù),找到本實驗的最佳CNN 人臉識別模型。運行后的結(jié)果如圖7、圖8和表3所示。
圖8 卷積層圖像特征數(shù)量對交叉熵的影響
表3 卷積層圖像特征數(shù)量影響人臉識別的正確率(%)
通過觀察實驗結(jié)果我們發(fā)現(xiàn)隨著加入卷積層圖像的特征數(shù)越多運行時間也越長,且無論是對訓(xùn)練集識別率還是驗證集和測試集的識別率都已影響不大,基本保持穩(wěn)定,從圖8 中看到交叉熵雖有變化但同樣也影響不大。當(dāng)CNN 模型為36-76-1024時,人臉識別率達(dá)到了100%,因此可以確定它為本實驗最佳的CNN模型。
由于人臉識別過程比手寫數(shù)字識別更加復(fù)雜,實驗在借鑒LeNet-5 手寫數(shù)字識別算法的基礎(chǔ)上進(jìn)行調(diào)整以獲得更高的準(zhǔn)確率。通過改變實驗參數(shù)即隱藏層神經(jīng)元數(shù)量和兩個卷積層特征圖數(shù)量得到了目前最佳的CNN 模型,并取得了很高的識別率,但該CNN 模型也存在一些不足的地方,如網(wǎng)絡(luò)結(jié)構(gòu)易受圖像數(shù)據(jù)庫影響,同時該網(wǎng)絡(luò)模型能否勝任對自然圖像分類和識別亟待進(jìn)一步實驗和研究。