雷雨婷,丁學文,,孫 彥,陳 靜,董國軍,李 莉
(1.天津職業技術師范大學電子工程學院,天津 300222;2.天津市高速鐵路無線通信企業重點實驗室,天津 300350;3.天津天大求實電力新技術股份有限公司,天津 300392)
作為計算機視覺范疇的重要方向,圖像特征的提取與分類備受關注[1]。通俗來講,人臉識別是識別這個人是誰,先通過人臉檢測,將檢測結果通過算法提取特征,進而識別的技術。近年來,人正臉識別技術越發成熟,已從學術界應用到工業界,但由于光照、姿態、場景、人群等條件的影響,人臉識別(不僅限于正面)仍需要更深入的研究。在傳統人臉識別算法中存在很多缺陷,如同一個人在姿勢、光照等發生變化時,會使識別率大幅降低,這是由于傳統算法需要人工進行特征提取。卷積神經網絡(convolutional neural network,CNN)模擬生物神經元可以將圖像作為源數據,在卷積層中不同大小的卷積核運算下自動提取圖像特征,在池化層中降維,通過激活函數實現非線性,全連接層綜合所有數據,在大量樣本數據的訓練下不斷學習,從而不需要人工特征提取。
尋找更高效運行的CNN 也成為研究的重點。通過增加CNN 的深度或者優化CNN 的結構,網絡性能得到了明顯改善。神經網絡模型也隨之出現很多,如LeNet-5[2]、AlexNet[3]、VGG[4]、Inception-v3[5]等。由于LeNet-5 對新樣本的適應能力弱[2],在此基礎上Krizhevsky 等[3]提出了AlexNet,通過relu 代替LeNet-5中的tanh 和sigmoid,利用GPU 進行加速,AlexNet 約有6 000 萬個可訓練參數。在此之后,Simonyan 等[4]將AlexNet 網絡中5×5 卷積核用2 個3×3 代替,并通過多組卷積層、池化層交替相連,雖然證明深層網絡可以提取到更多高階特征,有助于提高圖像分類的準確度,但是深度增加過多會引起網絡退化。除網絡深度研究外,Szegedy 等[5]通過優化網絡結構提出Inception模塊,由Inception 模塊組成了Inception-v3 的訓練參數,數量只有AlexNet 的1/12,但是在ImageNet 數據集上準確度比AlexNet 高10%[6-16]。本文參考Inceptionv3 卷積神經網絡,通過修改pool_3 以上的結構以改變網絡深度,從而期望修改后的卷積神經網絡模型能自動提取自建數據庫人臉特征并進行分類。
Inception-v3 屬于卷積神經網絡的一種。該模型參考AlexNet,將AlexNet 中的全連接層替換為平均池化層,極大地降低了模型參數數量,同時使用非對稱卷積核提高多樣性。該模型深度達到46 層,由11 個Inception 模塊組成,Inception-v3 模型架構如圖1 所示。

圖1 Inception-v3 模型架構
1998 年Lecun 等[2]提出卷積核通過串聯的方式連接在一起的卷積神經網絡結構——LeNet-5,這也是第1 個成功應用于識別領域的卷積神經網絡。Inception是和LeNet-5 完全不同的卷積神經網絡結構,Inception模塊示意圖如圖2 所示。圖2 中,可以將Inception 結構理解為不同大小卷積核1×1、3×3、5×5 按照并聯的方式連在一起,共同作用于輸入,利用不同大小的卷積核提取不同的特征,然后組合在一起,共同輸出。

圖2 Inception 模塊示意圖
在泛函分析中,卷積主要計算函數f 經過翻轉,平移經過函數g,與g 之間重疊面積,公式為:

卷積層主要模擬生物感受器官中的刺激區域——感受野,利用不同大小的卷積核(常見有1×1,3×3,5 × 5)與前一層輸入數據卷積來提取特征,卷積核是當前層神經網絡上的1 個子節點矩陣轉化為下一層神經網絡上的一個長和寬都為1 且深度不限的矩陣的工具。
在CNN 中,卷積層與池化層總是交替出現,主要原因是池化層可以對卷積層提取到的特征進行降維,一方面有助于降低模型參數,另一方面可以減小過擬合。與卷積層卷積核相同,池化層卷積核也需要指定,通常大小為2×2,不同的是,卷積層卷積核深度都與當前層深度一致,只需要在長、寬兩維度移動,池化層卷積核還需要在深度上移動。
全連接主要用于綜合特征,經過卷積池化后,對于輸入數據來說已經提取到更高層的特征,全連接層將這些特征綜合起來,將結果傳輸給下一層,從而做分類。
在訓練過程中,需要對權值偏置進一步調整,調整參考值就會參考交叉熵代價函數,公式為:

式中:C 為代價函數;x 為樣本;y 為實際值;n 為輸出值;n 為樣本的總數。
之所以選擇使用交叉熵,是因為當誤差越大時,權值和偏置調整的幅度就越大,當誤差變小時,權值和偏置調整的幅度也會變小。總體來說,交叉熵值越小,模型效果越好。
過擬合的存在,會影響模型對新數據的判斷,通常表現為模型太復雜,數據量小,對已存在數據有接近100%的準確率,而對于新數據判斷能力不足,這是因為網絡在訓練過程中已經“記住”存在的數據,為了避免過擬合,可以采用Dropout 的方法,即通過暫時摘除部分節點,減小模型復雜度,Dropout 示意圖如圖3所示。

圖3 Dropout 示意圖
未經處理之前的數據來源均為手機照相,采集lei,yu,sun,zhao,zhang 各100 張圖像,數據集的格式采用.jpg。未處理前數據庫圖片如圖4 所示。
為得到最后只含有人臉部信息的圖片,降低其他因素干擾,需對所有圖片進行人臉檢測。人臉檢測主要是返回源圖像人臉位置坐標,這也是人臉識別第一步工作。

圖4 未處理前數據庫圖片
利用OpenCV 中的haarcascade_frontalface_alt 分類器進行人臉檢測是一種可行的方法。在檢測時,由于某些圖片背景中包含不相關的人臉(這些人臉占用像素較小),可以通過設置人臉寬度大于某定值像素(可根據實際情況進行調整,本文選擇16 像素)來去除較小的人臉。
在獲得OpenCV 處理過的人臉圖片后,還需進行人工篩查,將錯誤識別或不符合需求的圖片刪除。處理完所有圖片后,隨機抽取庫中95%的圖片做為訓練集,其余5%圖片做為測試集。
經過處理后即為本文的自建數據庫,由5 人,共計507 張圖片組成,人均100+圖片組成,人臉部位有表情、方位、光照等變化,自建數據庫的人臉樣例如圖5 所示。

圖5 自建數據庫的人臉樣例
對于一般CNN 數據庫來說,數據庫內分類與分類之間的相似性并不大,但是對于人臉識別,各類別之間的相似性較大,所以對于自建人臉數據庫,在樣本的數量和質量上要做到高標準、嚴要求,需做大量的工作。
對Inception-v3 保留pool_3 及以下的所有參數(矩陣權重、偏置項、正則項系數等),去掉原先進行分類的softmax 層,更改后部分模型結構如圖6 所示。
pool_3 以下為原模型的特征提取部分。原模型利用ImageNet 的大量數據訓練已經取得了很好的特征提取能力,考慮到圖像底層細節通用的特點,保留原模型的特征提取能力,將該能力用于自建數據庫中的數據,可以取得很好的效果。

圖6 更改后部分模型結構
Input 與pool_3 之間的連接部分稱為瓶頸,數據庫中的圖片在經過一系列的特征提取后在瓶頸處轉化為存儲著抽象特征的.txt 文件。特征文件如圖7 所示,Input 輸入的正是這些.txt 文件。

圖7 特征文件
本文采用在事件中收斂速度較快的批量梯度下降法,梯度下降法主要目的是使網絡學習到恰當的權重與偏置,使得交叉熵代價函數C 盡可能小,便于網絡工作。為了最小化C,雖然可以使用微積分來求極值,但由于CNN 變量過多,微積分的方Δ法實現困難,故使用梯度求偏導的方法達到目的。用C 來表示梯度向量,即:

式(3)可以簡化為:

對于自建數據庫的卷積神經網絡的訓練,批處理塊大小設置為100,學習速率恒定設為0.01,權值更新公式簡單表述為:

式中:ωi為當前參數;ωi+1為更新后的參數;η 為學習率。按照方程的規則去改變ω,那么C 會一直減小。把式(5)的更新規則定義為梯度下降法,工作的方式就是重復計算ΔC,然后沿著相反的方向移動,從而不斷減少代價函數,使網絡的實際輸出盡可能多的擬合期望輸出。
本文采用Windows 10 下的Anaconda+Pycharm+OpenCV 做為實驗環境,計算機CPU 為3.3 GHz 的Inter(R)CoreTMi5-3550,內存為4 GB,對lei、yu、sun、zhao、zhang 5 人樣本進行測試,正確率達到98%,訓練1 000 步后得到的部分訓練結果如圖8 所示,微干擾對比如圖9 所示,正臉、側臉對比如圖10 所示,光照強度對比如圖11 所示。

圖8 訓練1 000 步后得到的部分訓練結果

圖9 微干擾對比

圖10 正臉、側臉對比

圖11 光照強度對比
圖9—圖11 預測結果表明:該模型對于微干擾、正側臉以及光照強度等因素具有較好的魯棒性。
圖片第1 行均為圖片路徑,因其較長,故略去。第2 行顯示圖片,第3 行為一組映射,0 對應lei,1 對應sun,2 對應yu,3 對應zhang,4 對應zhao。映射排序方式按照可能性排列,可能性最大放在首位,第4—第8 行為相應的概率。
用Pname表示相應name 的概率,以第1 張lei 的圖片為例:

此時這張圖片就被認為是lei。
由圖9 可知,對于微干擾變化,雖然個人識別率有所下降,但整體上不影響識別結果,說明本文的方法對于微干擾具有較強的魯棒性。
由圖10 可知,模型對于zhao 正側臉識別效果較好,具有較好的魯棒性,雖然個人識別率不是很高,這也反向證明數據庫中樣本數據量小,樣本多樣性低,可以通過增加樣本數量和多樣性的方法改善。
本文還對光照變化的影響進行了測試,從圖11可知,光照輕度變化不影響預測結果。
總體準確率計算公式為:

總體準確率計算結果如圖12 所示。

圖12 總體準確率
交叉熵值變化情況如圖13 所示,準確率值變化情況如圖14 所示。從圖中可以看出,在訓練達到400步時,準確率基本趨于穩定,但此時的交叉熵值還有收斂的空間,故增大訓練步數至1 000。

圖13 交叉熵值變化情況

圖14 準確率值變化情況
本文采用Anaconda+Pycharm+OpenCV 作為實驗環境,在CPU 為3.3 GHz 的Inter(R)CoreTMi5-3550,內存為4GB 的計算機上進行測試,提出基于Inception-v3 卷積神經網絡模型的人臉識別,利用haarcascade_frontalface_alt 分類器進行人臉檢測,Inception-v3 中pool_3 以下層進行自動特征提取,比傳統的人工高維特征提取更為便捷,修改后的Inception-v3 的pool_3 以上層實現人臉識別,對測試樣本的識別率達到98%,對于光照強度、面部表情變化等干擾性具有魯棒性,這也為人臉識別提供了一種新思路。本研究的下一步工作是繼續提高模型的精確性和高效性,切實發揮模型的實用價值。