閆新寶,蔣正鋒
(廣西民族師范學(xué)院數(shù)理與電子信息工程學(xué)院,廣西 崇左 532200)
人臉識(shí)別是一種依據(jù)人臉圖像進(jìn)行身份識(shí)別的生物特征識(shí)別技術(shù)。近年來(lái)人臉識(shí)別的研究有了很大進(jìn)展,已在安全驗(yàn)證系統(tǒng)、信用卡驗(yàn)證、檔案管理、公安系統(tǒng)的罪犯身份識(shí)別、銀行和海關(guān)的監(jiān)控、人機(jī)交互等領(lǐng)域廣泛應(yīng)用。通常,其難點(diǎn)在于人臉結(jié)構(gòu)相似性導(dǎo)致不同個(gè)體之間差異不顯著,而同一個(gè)體在不同表情、姿態(tài)、年齡、光照、遮擋、妝飾等干擾因素下變化顯著[1]。傳統(tǒng)的人臉識(shí)別方法在理想條件下的識(shí)別準(zhǔn)確率較高,但在非限制條件下,因受到表情、姿態(tài)、年齡、光照、遮擋、妝飾等因素的影響,人臉識(shí)別準(zhǔn)確率會(huì)急劇下降。本文分析了基于VGGNet深度卷積神經(jīng)網(wǎng)絡(luò)的人臉識(shí)別方法,驗(yàn)證了基于VGGNet 深度卷積神經(jīng)網(wǎng)絡(luò)的人臉識(shí)別方法在非限制條件下的人臉識(shí)別中的有效性。
深度學(xué)習(xí)是一類(lèi)使用深度神經(jīng)網(wǎng)絡(luò)將底層特征組合成更抽象的高層特征表示的機(jī)器學(xué)習(xí)算法。近年來(lái),深度學(xué)習(xí)極大地推動(dòng)了人臉識(shí)別技術(shù)的發(fā)展。和傳統(tǒng)人臉識(shí)別方法不同,深度學(xué)習(xí)無(wú)須人工設(shè)計(jì)人臉特征,而是通過(guò)深度神經(jīng)網(wǎng)絡(luò)從訓(xùn)練數(shù)據(jù)中自動(dòng)學(xué)習(xí)更抽象、更本質(zhì)的人臉特征。深度神經(jīng)網(wǎng)絡(luò)中的深度卷積神經(jīng)網(wǎng)絡(luò)是目前主流的深度學(xué)習(xí)網(wǎng)絡(luò),AlexNet、VGGNet、GoogleNet 和ResNet 是幾個(gè)典型的深度卷積神經(jīng)網(wǎng)絡(luò)。本節(jié)分析了VGGNet深度卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和特點(diǎn)。
深度卷積神經(jīng)網(wǎng)絡(luò)由卷積層、池化層和全連接層組成。
卷積層是對(duì)輸入數(shù)據(jù)矩陣進(jìn)行特征的采集,卷積層參數(shù)包括卷積核、輸入數(shù)據(jù)矩陣的填充(padding)和卷積核的滑動(dòng)步長(zhǎng)(stride)。
如圖1 所示,卷積層的輸入是一個(gè)單通道4×4 的特征圖,采用單通道的3×2 的卷積核進(jìn)行卷積,最終得到一個(gè)2×3的特征圖,這個(gè)特征圖就是卷積層的輸出特征圖。圖1中,輸入特征圖填充為0,卷積核從左到右、從上到下,以步長(zhǎng)1在輸入特征圖上不斷滑動(dòng)遍歷計(jì)算可得到特征圖。輸出特征圖的尺寸和輸入特征圖尺寸、輸入特征圖的填充、卷積核尺寸、滑動(dòng)步長(zhǎng)都有關(guān)系。假設(shè)輸入特征圖的大小是w×h,輸入特征圖的填充為p,卷積核的尺寸是f×f,滑動(dòng)步長(zhǎng)為s,輸出特征圖的尺寸為w*×h*,則:
圖1 單通道單卷積核卷積過(guò)程示意
卷積核的通道數(shù)和輸入特征圖的通道數(shù)相同,圖1中,卷積層輸入特征圖是單通道的,則卷積核也必須是單通道的,如圖2所示,卷積層的輸入是一個(gè)3通道的3×3特征圖,則卷積核的通道數(shù)必須是3。
圖2 3通道雙卷積核卷積過(guò)程示意
如果只運(yùn)用了單個(gè)卷積核,提取到的特征圖特征性不強(qiáng),因此一般會(huì)采用多個(gè)卷積核進(jìn)行卷積操作,輸入特征圖與每個(gè)卷積核運(yùn)算都得到一個(gè)輸出特征圖,輸入特征圖的各通道和卷積核的對(duì)應(yīng)通道分別進(jìn)行卷積,各個(gè)通道的卷積結(jié)果相加的結(jié)果就是輸入特征圖與該卷積核的輸出特征圖。圖2中的輸入特征圖與2個(gè)3通道的2×2卷積核進(jìn)行運(yùn)算,最終得到2個(gè)輸出特征圖。
激活函數(shù)對(duì)卷積層的輸出結(jié)果做非線性映射,常見(jiàn)的激活函數(shù)有Sigmoid、Tanh[2]和ReLU[3]。
池化層又稱(chēng)采樣層,主要功能是降低數(shù)據(jù)維度,通過(guò)對(duì)特征圖進(jìn)行選擇和信息過(guò)濾來(lái)降維。池化過(guò)程不僅降低了數(shù)據(jù)維度,還有效地避免過(guò)度擬合以及減輕網(wǎng)絡(luò)的計(jì)算負(fù)擔(dān)。常用的池化方法[4]有最大池化和平均池化。池化層參數(shù)包括池化窗口和步長(zhǎng)。最大池化如圖3所示,以2×2的池化窗口,步長(zhǎng)為2,在特征圖中滑動(dòng),輸出值為局部區(qū)域的最大值。
圖3 最大池化
假設(shè)輸入特征圖的大小是w×h,池化窗口的尺寸是f×f,步長(zhǎng)為s,輸出特征圖的尺寸為w*×h*,則:
全連接層的每一個(gè)結(jié)點(diǎn)都與上一層的所有結(jié)點(diǎn)相連,全連接層在卷積層和池化層之后,在整個(gè)網(wǎng)絡(luò)模型中起到一個(gè)分類(lèi)器的作用。當(dāng)卷積層、池化層將原來(lái)的數(shù)據(jù)映射到隱含層的特征空間時(shí),全連接層就會(huì)把特征映射到樣本的標(biāo)記。
VGGNet 是牛津大學(xué)視覺(jué)幾何研究組(Visual Geometry Group)在2014 年提出的系列深度卷積神經(jīng)網(wǎng)絡(luò),在當(dāng)年的ImageNet競(jìng)賽中獲得分類(lèi)任務(wù)組的亞軍和檢測(cè)任務(wù)組的冠軍。VGGNet系列深度卷積神經(jīng)網(wǎng)絡(luò)包括6 種網(wǎng)絡(luò)結(jié)構(gòu),層數(shù)在11~16 層,最常用的是VGG16,它包括13個(gè)卷積層和3個(gè)全連接層。與在它之前提出的AlexNet 相比,它通過(guò)堆疊多個(gè)3×3 卷積核替代7×7 卷積核,這一方面減少了網(wǎng)絡(luò)參數(shù),另一方面提升了網(wǎng)絡(luò)的擬合能力。VGG16 的經(jīng)典網(wǎng)絡(luò)結(jié)構(gòu)如表1所示。
表1 VGG16的經(jīng)典網(wǎng)絡(luò)結(jié)構(gòu)
每個(gè)卷積層的特征圖填充都為1、滑動(dòng)步長(zhǎng)都為1。每個(gè)卷積層之后連接一個(gè)ReLU 激活函數(shù)。在分類(lèi)任務(wù)中應(yīng)用VGG16網(wǎng)絡(luò)時(shí),最后一個(gè)全連接層的神經(jīng)元數(shù)設(shè)置為分類(lèi)的類(lèi)別數(shù)。
VGG16 網(wǎng)絡(luò)中,每個(gè)卷積層的卷積核尺寸都為3×3,每個(gè)卷積層的特征圖填充和滑動(dòng)步長(zhǎng)都為1,所以卷積層不會(huì)改變特征圖的尺寸。VGG16 網(wǎng)絡(luò)的每個(gè)池化層中,池化窗口尺寸都是2×2,步長(zhǎng)都是2,所以經(jīng)過(guò)一個(gè)池化層池化后,特征圖尺寸縮小為原來(lái)的1/2,VGG16 網(wǎng)絡(luò)中共有5 個(gè)池化層,經(jīng)過(guò)5 個(gè)池化層池化后,特征圖尺寸變?yōu)樵瓉?lái)的1/32。所以輸入VGG16網(wǎng)絡(luò)中的圖像尺寸一般為32的整數(shù)倍。
用W×H×C 表示深度卷積神經(jīng)網(wǎng)絡(luò)中的特征圖,其中,W 表示寬度,H 表示高度,C 表示通道數(shù)。VGG16 網(wǎng)絡(luò)的默認(rèn)輸入樣本圖像是224×224 的RGB彩色圖像,可表示為224×224×3。VGG16 網(wǎng)絡(luò)對(duì)輸入圖像的處理過(guò)程如下:
Step1:輸入224×224×3的圖像;
Step2:卷積層1進(jìn)行卷積運(yùn)算和ReLU激活操作,輸出224×224×64的特征圖。
Step3:卷積層2進(jìn)行卷積運(yùn)算和ReLU激活操作,輸出224×224×64的特征圖。
Step4:池化層1 進(jìn)行最大池化操作,輸出112×112×64的特征圖。
Step5:卷積層3進(jìn)行卷積運(yùn)算和ReLU激活操作,輸出112×112×128的特征圖。
Step6:卷積層4進(jìn)行卷積運(yùn)算和ReLU激活操作,輸出112×112×128的特征圖。
Step7:池化層2 進(jìn)行最大池化操作,輸出56×56×128的特征圖。
Step8:卷積層5進(jìn)行卷積運(yùn)算和ReLU激活操作,輸出56×56×256的特征圖。
Step9:卷積層6進(jìn)行卷積運(yùn)算和ReLU激活操作,輸出56×56×256的特征圖。
Step10:卷積層7 進(jìn)行卷積運(yùn)算和ReLU 激活操作,輸出56×56×256的特征圖。
Step11:池化層3進(jìn)行最大池化操作,輸出28×28×128的特征圖。
Step12:卷積層8 進(jìn)行卷積運(yùn)算和ReLU 激活操作,輸出28×28×512的特征圖。
Step13:卷積層9 進(jìn)行卷積運(yùn)算和ReLU 激活操作,輸出28×28×512的特征圖。
Step14:卷積層10 進(jìn)行卷積運(yùn)算和ReLU 激活操作,輸出28×28×512的特征圖。
Step15:池化層4進(jìn)行最大池化操作,輸出14×14×512的特征圖。
Step16:卷積層11 進(jìn)行卷積運(yùn)算和ReLU 激活操作,輸出14×14×512的特征圖。
Step17:卷積層12 進(jìn)行卷積運(yùn)算和ReLU 激活操作,輸出14×14×512的特征圖。
Step18:卷積層13 進(jìn)行卷積運(yùn)算和ReLU 激活操作,輸出14×14×512的特征圖。
Step19:池化層5 進(jìn)行最大池化操作,輸出7×7×512的特征圖。
Step20:池化層5 進(jìn)行最大池化操作,輸出7×7×512的特征圖。
Step21:7×7×512 的特征圖展平為一個(gè)25 088 維(7×7×512=25 088)向量,該向量輸入第1個(gè)全連接層,第3 個(gè)全連接層輸出一個(gè)1 000 維的向量,使用softmax 函數(shù)對(duì)該向量進(jìn)行處理得到另一個(gè)1 000 維的向量,該向量所有元素之和為1,第k個(gè)元素表示樣本預(yù)測(cè)為第k類(lèi)的概率。
操作系統(tǒng):Windows10 64 位,CPU:4 核,內(nèi)存:32GB,硬盤(pán):2T,開(kāi)發(fā)語(yǔ)言:Python3.6,開(kāi)發(fā)工具:PyCharm,深度學(xué)習(xí)框架:PyTorch,GPU:使用英偉達(dá)的顯卡并且安裝cuda。
為了驗(yàn)證VGGNet在非限制條件下的人臉識(shí)別中的有效性,本文選取FaceScrub 人臉庫(kù)作為實(shí)驗(yàn)數(shù)據(jù)集,F(xiàn)aceScrub人臉庫(kù)[5]包含530人的共107 818張人臉照片,平均每人有大約200張人臉照片,所有人臉照片均在非限制場(chǎng)景下拍攝,且都帶有標(biāo)簽。實(shí)驗(yàn)時(shí),從每個(gè)人的人臉照片中隨機(jī)選取80%的樣本作為訓(xùn)練集,另外20%的樣本作為測(cè)試集。
實(shí)驗(yàn)采用VGG16 的經(jīng)典網(wǎng)絡(luò)結(jié)構(gòu),由于FaceScrub 人臉庫(kù)有530 個(gè)類(lèi)別,所以最后一個(gè)全連接層的神經(jīng)元個(gè)數(shù)設(shè)置為530,softmax 分類(lèi)器的類(lèi)別數(shù)也設(shè)置為530。
為了訓(xùn)練出更好的網(wǎng)絡(luò)模型,需要對(duì)人臉圖像進(jìn)行預(yù)處理,預(yù)處理主要包括以下幾個(gè)方面:
1)人臉對(duì)齊。
2)為了對(duì)網(wǎng)絡(luò)模型進(jìn)行更充分的訓(xùn)練,需要擴(kuò)充人臉圖像樣本,本實(shí)驗(yàn)采用圖像鏡像變換[6]、隨機(jī)水平翻轉(zhuǎn)和隨機(jī)裁剪這三種方法擴(kuò)充人臉圖像樣本。
3) 因?yàn)閂GG16 的默認(rèn)輸入圖像是224×224 的RGB 圖像,所以把FaceScrub 人臉庫(kù)的人臉圖像尺寸縮放為224×224,然后輸入VGG16進(jìn)行訓(xùn)練和預(yù)測(cè)。
采用高斯分布隨機(jī)初始化網(wǎng)絡(luò)參數(shù),然后用訓(xùn)練集中的樣本對(duì)網(wǎng)絡(luò)進(jìn)行有監(jiān)督訓(xùn)練,采用加動(dòng)量的批量梯度下降算法更新網(wǎng)絡(luò)參數(shù),損失函數(shù)采用Softmax loss[7],具體的訓(xùn)練參數(shù)如表2所示。
表2 訓(xùn)練參數(shù)
訓(xùn)練需要經(jīng)過(guò)多次迭代,在訓(xùn)練前期,網(wǎng)絡(luò)的損失函數(shù)的輸出值(loss 值)比較高,隨著迭代次數(shù)的增加,loss值會(huì)逐漸下降,當(dāng)?shù)欢ù螖?shù)后,loss值趨于穩(wěn)定,不再有明顯的變化,此時(shí)網(wǎng)絡(luò)收斂,可以結(jié)束訓(xùn)練。
在訓(xùn)練過(guò)程中,每完成一次迭代,對(duì)測(cè)試集中的所有樣本進(jìn)行一次預(yù)測(cè),計(jì)算出網(wǎng)絡(luò)的預(yù)測(cè)準(zhǔn)確率,在訓(xùn)練前期網(wǎng)絡(luò)的預(yù)測(cè)準(zhǔn)確率隨著迭代次數(shù)的增加逐漸提高,當(dāng)網(wǎng)絡(luò)loss值趨于穩(wěn)定時(shí),預(yù)測(cè)準(zhǔn)確率也趨于穩(wěn)定,不再有明顯提高。實(shí)驗(yàn)中測(cè)得的最高人臉預(yù)測(cè)準(zhǔn)確率為92.4%。
綜上所述,本文研究基于VGGNet 深度卷積神經(jīng)網(wǎng)絡(luò)的人臉識(shí)別方法。分析了VGGNet深度卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和特點(diǎn)。選用FaceScrub人臉數(shù)據(jù)庫(kù)作為實(shí)驗(yàn)數(shù)據(jù)集。使用PyTorch 框架進(jìn)行實(shí)驗(yàn),首先定義VGG16 網(wǎng)絡(luò)結(jié)構(gòu),然后對(duì)人臉圖片進(jìn)行預(yù)處理,最后對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練和測(cè)試,訓(xùn)練時(shí)采用SDG+Momentum的批量梯度下降算法更新網(wǎng)絡(luò)參數(shù),實(shí)驗(yàn)取得了較好的人臉識(shí)別準(zhǔn)確率,驗(yàn)證了基于VGGNet 深度卷積神經(jīng)網(wǎng)絡(luò)的人臉識(shí)別方法在非限制條件下的人臉識(shí)別中的有效性。