雷雨婷,丁學(xué)文,,孫 彥,陳 靜,董國軍,李 莉
(1.天津職業(yè)技術(shù)師范大學(xué)電子工程學(xué)院,天津 300222;2.天津市高速鐵路無線通信企業(yè)重點(diǎn)實(shí)驗(yàn)室,天津 300350;3.天津天大求實(shí)電力新技術(shù)股份有限公司,天津 300392)
作為計(jì)算機(jī)視覺范疇的重要方向,圖像特征的提取與分類備受關(guān)注[1]。通俗來講,人臉識別是識別這個(gè)人是誰,先通過人臉檢測,將檢測結(jié)果通過算法提取特征,進(jìn)而識別的技術(shù)。近年來,人正臉識別技術(shù)越發(fā)成熟,已從學(xué)術(shù)界應(yīng)用到工業(yè)界,但由于光照、姿態(tài)、場景、人群等條件的影響,人臉識別(不僅限于正面)仍需要更深入的研究。在傳統(tǒng)人臉識別算法中存在很多缺陷,如同一個(gè)人在姿勢、光照等發(fā)生變化時(shí),會使識別率大幅降低,這是由于傳統(tǒng)算法需要人工進(jìn)行特征提取。卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)模擬生物神經(jīng)元可以將圖像作為源數(shù)據(jù),在卷積層中不同大小的卷積核運(yùn)算下自動提取圖像特征,在池化層中降維,通過激活函數(shù)實(shí)現(xiàn)非線性,全連接層綜合所有數(shù)據(jù),在大量樣本數(shù)據(jù)的訓(xùn)練下不斷學(xué)習(xí),從而不需要人工特征提取。
尋找更高效運(yùn)行的CNN 也成為研究的重點(diǎn)。通過增加CNN 的深度或者優(yōu)化CNN 的結(jié)構(gòu),網(wǎng)絡(luò)性能得到了明顯改善。神經(jīng)網(wǎng)絡(luò)模型也隨之出現(xiàn)很多,如LeNet-5[2]、AlexNet[3]、VGG[4]、Inception-v3[5]等。由于LeNet-5 對新樣本的適應(yīng)能力弱[2],在此基礎(chǔ)上Krizhevsky 等[3]提出了AlexNet,通過relu 代替LeNet-5中的tanh 和sigmoid,利用GPU 進(jìn)行加速,AlexNet 約有6 000 萬個(gè)可訓(xùn)練參數(shù)。在此之后,Simonyan 等[4]將AlexNet 網(wǎng)絡(luò)中5×5 卷積核用2 個(gè)3×3 代替,并通過多組卷積層、池化層交替相連,雖然證明深層網(wǎng)絡(luò)可以提取到更多高階特征,有助于提高圖像分類的準(zhǔn)確度,但是深度增加過多會引起網(wǎng)絡(luò)退化。除網(wǎng)絡(luò)深度研究外,Szegedy 等[5]通過優(yōu)化網(wǎng)絡(luò)結(jié)構(gòu)提出Inception模塊,由Inception 模塊組成了Inception-v3 的訓(xùn)練參數(shù),數(shù)量只有AlexNet 的1/12,但是在ImageNet 數(shù)據(jù)集上準(zhǔn)確度比AlexNet 高10%[6-16]。本文參考Inceptionv3 卷積神經(jīng)網(wǎng)絡(luò),通過修改pool_3 以上的結(jié)構(gòu)以改變網(wǎng)絡(luò)深度,從而期望修改后的卷積神經(jīng)網(wǎng)絡(luò)模型能自動提取自建數(shù)據(jù)庫人臉特征并進(jìn)行分類。
Inception-v3 屬于卷積神經(jīng)網(wǎng)絡(luò)的一種。該模型參考AlexNet,將AlexNet 中的全連接層替換為平均池化層,極大地降低了模型參數(shù)數(shù)量,同時(shí)使用非對稱卷積核提高多樣性。該模型深度達(dá)到46 層,由11 個(gè)Inception 模塊組成,Inception-v3 模型架構(gòu)如圖1 所示。
圖1 Inception-v3 模型架構(gòu)
1998 年Lecun 等[2]提出卷積核通過串聯(lián)的方式連接在一起的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)——LeNet-5,這也是第1 個(gè)成功應(yīng)用于識別領(lǐng)域的卷積神經(jīng)網(wǎng)絡(luò)。Inception是和LeNet-5 完全不同的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),Inception模塊示意圖如圖2 所示。圖2 中,可以將Inception 結(jié)構(gòu)理解為不同大小卷積核1×1、3×3、5×5 按照并聯(lián)的方式連在一起,共同作用于輸入,利用不同大小的卷積核提取不同的特征,然后組合在一起,共同輸出。
圖2 Inception 模塊示意圖
在泛函分析中,卷積主要計(jì)算函數(shù)f 經(jīng)過翻轉(zhuǎn),平移經(jīng)過函數(shù)g,與g 之間重疊面積,公式為:
卷積層主要模擬生物感受器官中的刺激區(qū)域——感受野,利用不同大小的卷積核(常見有1×1,3×3,5 × 5)與前一層輸入數(shù)據(jù)卷積來提取特征,卷積核是當(dāng)前層神經(jīng)網(wǎng)絡(luò)上的1 個(gè)子節(jié)點(diǎn)矩陣轉(zhuǎn)化為下一層神經(jīng)網(wǎng)絡(luò)上的一個(gè)長和寬都為1 且深度不限的矩陣的工具。
在CNN 中,卷積層與池化層總是交替出現(xiàn),主要原因是池化層可以對卷積層提取到的特征進(jìn)行降維,一方面有助于降低模型參數(shù),另一方面可以減小過擬合。與卷積層卷積核相同,池化層卷積核也需要指定,通常大小為2×2,不同的是,卷積層卷積核深度都與當(dāng)前層深度一致,只需要在長、寬兩維度移動,池化層卷積核還需要在深度上移動。
全連接主要用于綜合特征,經(jīng)過卷積池化后,對于輸入數(shù)據(jù)來說已經(jīng)提取到更高層的特征,全連接層將這些特征綜合起來,將結(jié)果傳輸給下一層,從而做分類。
在訓(xùn)練過程中,需要對權(quán)值偏置進(jìn)一步調(diào)整,調(diào)整參考值就會參考交叉熵代價(jià)函數(shù),公式為:
式中:C 為代價(jià)函數(shù);x 為樣本;y 為實(shí)際值;n 為輸出值;n 為樣本的總數(shù)。
之所以選擇使用交叉熵,是因?yàn)楫?dāng)誤差越大時(shí),權(quán)值和偏置調(diào)整的幅度就越大,當(dāng)誤差變小時(shí),權(quán)值和偏置調(diào)整的幅度也會變小??傮w來說,交叉熵值越小,模型效果越好。
過擬合的存在,會影響模型對新數(shù)據(jù)的判斷,通常表現(xiàn)為模型太復(fù)雜,數(shù)據(jù)量小,對已存在數(shù)據(jù)有接近100%的準(zhǔn)確率,而對于新數(shù)據(jù)判斷能力不足,這是因?yàn)榫W(wǎng)絡(luò)在訓(xùn)練過程中已經(jīng)“記住”存在的數(shù)據(jù),為了避免過擬合,可以采用Dropout 的方法,即通過暫時(shí)摘除部分節(jié)點(diǎn),減小模型復(fù)雜度,Dropout 示意圖如圖3所示。
圖3 Dropout 示意圖
未經(jīng)處理之前的數(shù)據(jù)來源均為手機(jī)照相,采集lei,yu,sun,zhao,zhang 各100 張圖像,數(shù)據(jù)集的格式采用.jpg。未處理前數(shù)據(jù)庫圖片如圖4 所示。
為得到最后只含有人臉部信息的圖片,降低其他因素干擾,需對所有圖片進(jìn)行人臉檢測。人臉檢測主要是返回源圖像人臉位置坐標(biāo),這也是人臉識別第一步工作。
圖4 未處理前數(shù)據(jù)庫圖片
利用OpenCV 中的haarcascade_frontalface_alt 分類器進(jìn)行人臉檢測是一種可行的方法。在檢測時(shí),由于某些圖片背景中包含不相關(guān)的人臉(這些人臉占用像素較?。梢酝ㄟ^設(shè)置人臉寬度大于某定值像素(可根據(jù)實(shí)際情況進(jìn)行調(diào)整,本文選擇16 像素)來去除較小的人臉。
在獲得OpenCV 處理過的人臉圖片后,還需進(jìn)行人工篩查,將錯誤識別或不符合需求的圖片刪除。處理完所有圖片后,隨機(jī)抽取庫中95%的圖片做為訓(xùn)練集,其余5%圖片做為測試集。
經(jīng)過處理后即為本文的自建數(shù)據(jù)庫,由5 人,共計(jì)507 張圖片組成,人均100+圖片組成,人臉部位有表情、方位、光照等變化,自建數(shù)據(jù)庫的人臉樣例如圖5 所示。
圖5 自建數(shù)據(jù)庫的人臉樣例
對于一般CNN 數(shù)據(jù)庫來說,數(shù)據(jù)庫內(nèi)分類與分類之間的相似性并不大,但是對于人臉識別,各類別之間的相似性較大,所以對于自建人臉數(shù)據(jù)庫,在樣本的數(shù)量和質(zhì)量上要做到高標(biāo)準(zhǔn)、嚴(yán)要求,需做大量的工作。
對Inception-v3 保留pool_3 及以下的所有參數(shù)(矩陣權(quán)重、偏置項(xiàng)、正則項(xiàng)系數(shù)等),去掉原先進(jìn)行分類的softmax 層,更改后部分模型結(jié)構(gòu)如圖6 所示。
pool_3 以下為原模型的特征提取部分。原模型利用ImageNet 的大量數(shù)據(jù)訓(xùn)練已經(jīng)取得了很好的特征提取能力,考慮到圖像底層細(xì)節(jié)通用的特點(diǎn),保留原模型的特征提取能力,將該能力用于自建數(shù)據(jù)庫中的數(shù)據(jù),可以取得很好的效果。
圖6 更改后部分模型結(jié)構(gòu)
Input 與pool_3 之間的連接部分稱為瓶頸,數(shù)據(jù)庫中的圖片在經(jīng)過一系列的特征提取后在瓶頸處轉(zhuǎn)化為存儲著抽象特征的.txt 文件。特征文件如圖7 所示,Input 輸入的正是這些.txt 文件。
圖7 特征文件
本文采用在事件中收斂速度較快的批量梯度下降法,梯度下降法主要目的是使網(wǎng)絡(luò)學(xué)習(xí)到恰當(dāng)?shù)臋?quán)重與偏置,使得交叉熵代價(jià)函數(shù)C 盡可能小,便于網(wǎng)絡(luò)工作。為了最小化C,雖然可以使用微積分來求極值,但由于CNN 變量過多,微積分的方Δ法實(shí)現(xiàn)困難,故使用梯度求偏導(dǎo)的方法達(dá)到目的。用C 來表示梯度向量,即:
式(3)可以簡化為:
對于自建數(shù)據(jù)庫的卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,批處理塊大小設(shè)置為100,學(xué)習(xí)速率恒定設(shè)為0.01,權(quán)值更新公式簡單表述為:
式中:ωi為當(dāng)前參數(shù);ωi+1為更新后的參數(shù);η 為學(xué)習(xí)率。按照方程的規(guī)則去改變ω,那么C 會一直減小。把式(5)的更新規(guī)則定義為梯度下降法,工作的方式就是重復(fù)計(jì)算ΔC,然后沿著相反的方向移動,從而不斷減少代價(jià)函數(shù),使網(wǎng)絡(luò)的實(shí)際輸出盡可能多的擬合期望輸出。
本文采用Windows 10 下的Anaconda+Pycharm+OpenCV 做為實(shí)驗(yàn)環(huán)境,計(jì)算機(jī)CPU 為3.3 GHz 的Inter(R)CoreTMi5-3550,內(nèi)存為4 GB,對lei、yu、sun、zhao、zhang 5 人樣本進(jìn)行測試,正確率達(dá)到98%,訓(xùn)練1 000 步后得到的部分訓(xùn)練結(jié)果如圖8 所示,微干擾對比如圖9 所示,正臉、側(cè)臉對比如圖10 所示,光照強(qiáng)度對比如圖11 所示。
圖8 訓(xùn)練1 000 步后得到的部分訓(xùn)練結(jié)果
圖9 微干擾對比
圖10 正臉、側(cè)臉對比
圖11 光照強(qiáng)度對比
圖9—圖11 預(yù)測結(jié)果表明:該模型對于微干擾、正側(cè)臉以及光照強(qiáng)度等因素具有較好的魯棒性。
圖片第1 行均為圖片路徑,因其較長,故略去。第2 行顯示圖片,第3 行為一組映射,0 對應(yīng)lei,1 對應(yīng)sun,2 對應(yīng)yu,3 對應(yīng)zhang,4 對應(yīng)zhao。映射排序方式按照可能性排列,可能性最大放在首位,第4—第8 行為相應(yīng)的概率。
用Pname表示相應(yīng)name 的概率,以第1 張lei 的圖片為例:
此時(shí)這張圖片就被認(rèn)為是lei。
由圖9 可知,對于微干擾變化,雖然個(gè)人識別率有所下降,但整體上不影響識別結(jié)果,說明本文的方法對于微干擾具有較強(qiáng)的魯棒性。
由圖10 可知,模型對于zhao 正側(cè)臉識別效果較好,具有較好的魯棒性,雖然個(gè)人識別率不是很高,這也反向證明數(shù)據(jù)庫中樣本數(shù)據(jù)量小,樣本多樣性低,可以通過增加樣本數(shù)量和多樣性的方法改善。
本文還對光照變化的影響進(jìn)行了測試,從圖11可知,光照輕度變化不影響預(yù)測結(jié)果。
總體準(zhǔn)確率計(jì)算公式為:
總體準(zhǔn)確率計(jì)算結(jié)果如圖12 所示。
圖12 總體準(zhǔn)確率
交叉熵值變化情況如圖13 所示,準(zhǔn)確率值變化情況如圖14 所示。從圖中可以看出,在訓(xùn)練達(dá)到400步時(shí),準(zhǔn)確率基本趨于穩(wěn)定,但此時(shí)的交叉熵值還有收斂的空間,故增大訓(xùn)練步數(shù)至1 000。
圖13 交叉熵值變化情況
圖14 準(zhǔn)確率值變化情況
本文采用Anaconda+Pycharm+OpenCV 作為實(shí)驗(yàn)環(huán)境,在CPU 為3.3 GHz 的Inter(R)CoreTMi5-3550,內(nèi)存為4GB 的計(jì)算機(jī)上進(jìn)行測試,提出基于Inception-v3 卷積神經(jīng)網(wǎng)絡(luò)模型的人臉識別,利用haarcascade_frontalface_alt 分類器進(jìn)行人臉檢測,Inception-v3 中pool_3 以下層進(jìn)行自動特征提取,比傳統(tǒng)的人工高維特征提取更為便捷,修改后的Inception-v3 的pool_3 以上層實(shí)現(xiàn)人臉識別,對測試樣本的識別率達(dá)到98%,對于光照強(qiáng)度、面部表情變化等干擾性具有魯棒性,這也為人臉識別提供了一種新思路。本研究的下一步工作是繼續(xù)提高模型的精確性和高效性,切實(shí)發(fā)揮模型的實(shí)用價(jià)值。