閆新寶,蔣正鋒
(廣西民族師范學院數理與電子信息工程學院,廣西 崇左 532200)
人臉識別是一種依據人臉圖像進行身份識別的生物特征識別技術。近年來人臉識別的研究有了很大進展,已在安全驗證系統、信用卡驗證、檔案管理、公安系統的罪犯身份識別、銀行和海關的監控、人機交互等領域廣泛應用。通常,其難點在于人臉結構相似性導致不同個體之間差異不顯著,而同一個體在不同表情、姿態、年齡、光照、遮擋、妝飾等干擾因素下變化顯著[1]。傳統的人臉識別方法在理想條件下的識別準確率較高,但在非限制條件下,因受到表情、姿態、年齡、光照、遮擋、妝飾等因素的影響,人臉識別準確率會急劇下降。本文分析了基于VGGNet深度卷積神經網絡的人臉識別方法,驗證了基于VGGNet 深度卷積神經網絡的人臉識別方法在非限制條件下的人臉識別中的有效性。
深度學習是一類使用深度神經網絡將底層特征組合成更抽象的高層特征表示的機器學習算法。近年來,深度學習極大地推動了人臉識別技術的發展。和傳統人臉識別方法不同,深度學習無須人工設計人臉特征,而是通過深度神經網絡從訓練數據中自動學習更抽象、更本質的人臉特征。深度神經網絡中的深度卷積神經網絡是目前主流的深度學習網絡,AlexNet、VGGNet、GoogleNet 和ResNet 是幾個典型的深度卷積神經網絡。本節分析了VGGNet深度卷積神經網絡的結構和特點。
深度卷積神經網絡由卷積層、池化層和全連接層組成。
卷積層是對輸入數據矩陣進行特征的采集,卷積層參數包括卷積核、輸入數據矩陣的填充(padding)和卷積核的滑動步長(stride)。
如圖1 所示,卷積層的輸入是一個單通道4×4 的特征圖,采用單通道的3×2 的卷積核進行卷積,最終得到一個2×3的特征圖,這個特征圖就是卷積層的輸出特征圖。圖1中,輸入特征圖填充為0,卷積核從左到右、從上到下,以步長1在輸入特征圖上不斷滑動遍歷計算可得到特征圖。輸出特征圖的尺寸和輸入特征圖尺寸、輸入特征圖的填充、卷積核尺寸、滑動步長都有關系。假設輸入特征圖的大小是w×h,輸入特征圖的填充為p,卷積核的尺寸是f×f,滑動步長為s,輸出特征圖的尺寸為w*×h*,則:

圖1 單通道單卷積核卷積過程示意
卷積核的通道數和輸入特征圖的通道數相同,圖1中,卷積層輸入特征圖是單通道的,則卷積核也必須是單通道的,如圖2所示,卷積層的輸入是一個3通道的3×3特征圖,則卷積核的通道數必須是3。

圖2 3通道雙卷積核卷積過程示意
如果只運用了單個卷積核,提取到的特征圖特征性不強,因此一般會采用多個卷積核進行卷積操作,輸入特征圖與每個卷積核運算都得到一個輸出特征圖,輸入特征圖的各通道和卷積核的對應通道分別進行卷積,各個通道的卷積結果相加的結果就是輸入特征圖與該卷積核的輸出特征圖。圖2中的輸入特征圖與2個3通道的2×2卷積核進行運算,最終得到2個輸出特征圖。
激活函數對卷積層的輸出結果做非線性映射,常見的激活函數有Sigmoid、Tanh[2]和ReLU[3]。
池化層又稱采樣層,主要功能是降低數據維度,通過對特征圖進行選擇和信息過濾來降維。池化過程不僅降低了數據維度,還有效地避免過度擬合以及減輕網絡的計算負擔。常用的池化方法[4]有最大池化和平均池化。池化層參數包括池化窗口和步長。最大池化如圖3所示,以2×2的池化窗口,步長為2,在特征圖中滑動,輸出值為局部區域的最大值。

圖3 最大池化
假設輸入特征圖的大小是w×h,池化窗口的尺寸是f×f,步長為s,輸出特征圖的尺寸為w*×h*,則:
全連接層的每一個結點都與上一層的所有結點相連,全連接層在卷積層和池化層之后,在整個網絡模型中起到一個分類器的作用。當卷積層、池化層將原來的數據映射到隱含層的特征空間時,全連接層就會把特征映射到樣本的標記。
VGGNet 是牛津大學視覺幾何研究組(Visual Geometry Group)在2014 年提出的系列深度卷積神經網絡,在當年的ImageNet競賽中獲得分類任務組的亞軍和檢測任務組的冠軍。VGGNet系列深度卷積神經網絡包括6 種網絡結構,層數在11~16 層,最常用的是VGG16,它包括13個卷積層和3個全連接層。與在它之前提出的AlexNet 相比,它通過堆疊多個3×3 卷積核替代7×7 卷積核,這一方面減少了網絡參數,另一方面提升了網絡的擬合能力。VGG16 的經典網絡結構如表1所示。

表1 VGG16的經典網絡結構
每個卷積層的特征圖填充都為1、滑動步長都為1。每個卷積層之后連接一個ReLU 激活函數。在分類任務中應用VGG16網絡時,最后一個全連接層的神經元數設置為分類的類別數。
VGG16 網絡中,每個卷積層的卷積核尺寸都為3×3,每個卷積層的特征圖填充和滑動步長都為1,所以卷積層不會改變特征圖的尺寸。VGG16 網絡的每個池化層中,池化窗口尺寸都是2×2,步長都是2,所以經過一個池化層池化后,特征圖尺寸縮小為原來的1/2,VGG16 網絡中共有5 個池化層,經過5 個池化層池化后,特征圖尺寸變為原來的1/32。所以輸入VGG16網絡中的圖像尺寸一般為32的整數倍。
用W×H×C 表示深度卷積神經網絡中的特征圖,其中,W 表示寬度,H 表示高度,C 表示通道數。VGG16 網絡的默認輸入樣本圖像是224×224 的RGB彩色圖像,可表示為224×224×3。VGG16 網絡對輸入圖像的處理過程如下:
Step1:輸入224×224×3的圖像;
Step2:卷積層1進行卷積運算和ReLU激活操作,輸出224×224×64的特征圖。
Step3:卷積層2進行卷積運算和ReLU激活操作,輸出224×224×64的特征圖。
Step4:池化層1 進行最大池化操作,輸出112×112×64的特征圖。
Step5:卷積層3進行卷積運算和ReLU激活操作,輸出112×112×128的特征圖。
Step6:卷積層4進行卷積運算和ReLU激活操作,輸出112×112×128的特征圖。
Step7:池化層2 進行最大池化操作,輸出56×56×128的特征圖。
Step8:卷積層5進行卷積運算和ReLU激活操作,輸出56×56×256的特征圖。
Step9:卷積層6進行卷積運算和ReLU激活操作,輸出56×56×256的特征圖。
Step10:卷積層7 進行卷積運算和ReLU 激活操作,輸出56×56×256的特征圖。
Step11:池化層3進行最大池化操作,輸出28×28×128的特征圖。
Step12:卷積層8 進行卷積運算和ReLU 激活操作,輸出28×28×512的特征圖。
Step13:卷積層9 進行卷積運算和ReLU 激活操作,輸出28×28×512的特征圖。
Step14:卷積層10 進行卷積運算和ReLU 激活操作,輸出28×28×512的特征圖。
Step15:池化層4進行最大池化操作,輸出14×14×512的特征圖。
Step16:卷積層11 進行卷積運算和ReLU 激活操作,輸出14×14×512的特征圖。
Step17:卷積層12 進行卷積運算和ReLU 激活操作,輸出14×14×512的特征圖。
Step18:卷積層13 進行卷積運算和ReLU 激活操作,輸出14×14×512的特征圖。
Step19:池化層5 進行最大池化操作,輸出7×7×512的特征圖。
Step20:池化層5 進行最大池化操作,輸出7×7×512的特征圖。
Step21:7×7×512 的特征圖展平為一個25 088 維(7×7×512=25 088)向量,該向量輸入第1個全連接層,第3 個全連接層輸出一個1 000 維的向量,使用softmax 函數對該向量進行處理得到另一個1 000 維的向量,該向量所有元素之和為1,第k個元素表示樣本預測為第k類的概率。
操作系統:Windows10 64 位,CPU:4 核,內存:32GB,硬盤:2T,開發語言:Python3.6,開發工具:PyCharm,深度學習框架:PyTorch,GPU:使用英偉達的顯卡并且安裝cuda。
為了驗證VGGNet在非限制條件下的人臉識別中的有效性,本文選取FaceScrub 人臉庫作為實驗數據集,FaceScrub人臉庫[5]包含530人的共107 818張人臉照片,平均每人有大約200張人臉照片,所有人臉照片均在非限制場景下拍攝,且都帶有標簽。實驗時,從每個人的人臉照片中隨機選取80%的樣本作為訓練集,另外20%的樣本作為測試集。
實驗采用VGG16 的經典網絡結構,由于FaceScrub 人臉庫有530 個類別,所以最后一個全連接層的神經元個數設置為530,softmax 分類器的類別數也設置為530。
為了訓練出更好的網絡模型,需要對人臉圖像進行預處理,預處理主要包括以下幾個方面:
1)人臉對齊。
2)為了對網絡模型進行更充分的訓練,需要擴充人臉圖像樣本,本實驗采用圖像鏡像變換[6]、隨機水平翻轉和隨機裁剪這三種方法擴充人臉圖像樣本。
3) 因為VGG16 的默認輸入圖像是224×224 的RGB 圖像,所以把FaceScrub 人臉庫的人臉圖像尺寸縮放為224×224,然后輸入VGG16進行訓練和預測。
采用高斯分布隨機初始化網絡參數,然后用訓練集中的樣本對網絡進行有監督訓練,采用加動量的批量梯度下降算法更新網絡參數,損失函數采用Softmax loss[7],具體的訓練參數如表2所示。

表2 訓練參數
訓練需要經過多次迭代,在訓練前期,網絡的損失函數的輸出值(loss 值)比較高,隨著迭代次數的增加,loss值會逐漸下降,當迭代一定次數后,loss值趨于穩定,不再有明顯的變化,此時網絡收斂,可以結束訓練。
在訓練過程中,每完成一次迭代,對測試集中的所有樣本進行一次預測,計算出網絡的預測準確率,在訓練前期網絡的預測準確率隨著迭代次數的增加逐漸提高,當網絡loss值趨于穩定時,預測準確率也趨于穩定,不再有明顯提高。實驗中測得的最高人臉預測準確率為92.4%。
綜上所述,本文研究基于VGGNet 深度卷積神經網絡的人臉識別方法。分析了VGGNet深度卷積神經網絡的結構和特點。選用FaceScrub人臉數據庫作為實驗數據集。使用PyTorch 框架進行實驗,首先定義VGG16 網絡結構,然后對人臉圖片進行預處理,最后對網絡進行訓練和測試,訓練時采用SDG+Momentum的批量梯度下降算法更新網絡參數,實驗取得了較好的人臉識別準確率,驗證了基于VGGNet 深度卷積神經網絡的人臉識別方法在非限制條件下的人臉識別中的有效性。