祝永志,蘇曉云
(曲阜師范大學 信息科學與工程學院,山東 日照 276826)
隨著信息技術的發展,深度學習成為當前的計算機視覺領域一個研究熱點[1],其中人臉識別技術作為其中的一個應用,近年來受到了人們的廣泛關注。
人臉識別(Face Recognition,FR)技術利用核心算法對獲取的人臉的五官位置、臉型和角度等進行計算分析,從而與自身數據庫里已有的模板比對,識別用戶身份的真實性[2]。人臉識別技術主要包括人臉檢測、特征提取以及特征匹配人臉識別3 個步驟[3]。
目前,人臉識別的常見方法有:子空間法,如主成分分析法[4](Principal Component Analysis,PCA)、獨立成分分析(Independent Component Analysis,ICA)等;基于特征的方法;深度學習[5](Deep Learning)的方法,其中卷積神經網絡(Convolutional Neural Networks,CNN)和深度信念網絡(Deep Belief Network,DBN)是重要的兩種方式。
早期的人臉識別主要根據目標用戶的面部特征進行識別,主要采用主成分分析(Principal Component Analysis,PCA)等算法,但其自身對于外界環境依賴較高,當圖片采集中出現較大變化時,算法識別效果往往不盡人意。在人機交互識別時期,支持向量機(Support Vector Machine,SVM)等方法的提出,使得人臉識別效果得到了一定改善。但使,這些方法只是對于人臉面部淺層特征的提取,對于復雜的非線性面部表情缺乏良好的魯棒性,不能在無約束環境下臉部變化時提取穩定的人臉特征。機器學習時代,深度學習概念的提出和廣泛應用,使得卷積神經網絡方法成為當前人臉識別的主流算法。
文獻[6]提出了基于小波和支持向量機的方法進行人臉識別;文獻[7]提出了一種基于特征融合的人臉識別算法,對于人臉的姿勢和灰度圖像處理具有較好的魯棒性;文獻[8]通過引進遷移學習概念,使得對不同圖像質量的分類更加準確,提高了人臉識別模型的準確性。
本文采用多任務卷積神經網絡(Multi-task Cascaded Convolutional Networks,MTCNN)進行人臉檢測,利用灰度處理方法對圖像集進行降道處理得到圖像數據集,同時采用ReLU 激勵函數進行非線性映射,最后采用Softmax 函數進行分類處理,進而采用深度學習框架TensorFlow 來完成人臉識別的建模和實現。
卷積神經網絡作為一種前饋神經網絡,主要由輸入層、卷積層、池化層、全連接層和輸出層構成,可用于大型圖像處理研究。目前,人臉識別技術也多采用卷積神經網絡模型[9]。
2.1.1 卷積層
卷積層(Convolutional Layer)主要是對輸入數據進行特征提取,包含多個卷積單元,由權重系數和偏差量組成。它通過反向傳播算法優化得到,相當于神經元。
2.1.2 池化層
池化層(Pooling Layer)主要是對經卷積層特征提取后的特征圖進行特征選擇和信息過濾。池化又稱為子采樣,可分為均值子采樣(mean-pooling)和最大值采樣(max-pooling)。
2.1.3 全連接層
全連接層(Fully-connected Layer)[10]通常在卷積神經網絡隱含層的最后部分。在全連接層中,特征圖會徹底失去其三維結構成為向量,并通過激勵函數向輸出層傳遞。但是,傳統卷積神經網絡在人臉識別中,模型復雜程度高、處理數據較慢、網絡無法在硬件性能受限時快速實現或根本無法實現其預設功能的問題,因此本文采用多任務卷積神經網絡方法來實現人臉識別。
多任務卷積神經網絡[11]主要由P-Net、R-Net和O-Net 三個網絡部分組成。
P-Net(Proposal Network)主要是獲取人臉部區域的候選框和邊界框的回歸向量。對于有重疊的候選框,通過非極大值抑制(Non-maximum suppression,NMS)來篩選。
R-Net(Refine Network)是一個優化網絡結構,主要是通過增加一個全連接層對邊界框做回歸計算和NMS 來對人臉區域進一步檢測,優化P-Net。
NET(Output Network)相對于R-Net 又增加了一個卷積層,主要作用與R-Net 相同,但其網絡層數和通道數的增多使其處理效果較之更加精準。
這三個網絡結構主要完成訓練過程的3 個部分[12]。
(1)人臉識別采用交叉熵損失函數:

其中,pi是人臉識別的概率,表示圖像數據的標簽。
(2)邊界框回歸采用基于歐氏距離的回歸函數:

(3)人臉特征定位的本質也是一個回歸問題,目的是實現特征點與標注數據的平方和損失:

本文主要利用多任務卷積神經網絡將人臉區域檢測與人臉關鍵點檢測相結合來進行人臉識別,主要可以分為數據處理模塊、多任務卷積神經網絡建模模塊和人臉識別模塊3 個模塊,如圖1 所示。

圖1 多任務卷積神經網絡人臉識別流程
其中,數據處理模塊通過人工采集的圖像圖片樣本進行數據增強和圖像標記處理得到適當的數據集;卷積神經網絡建模過程進行圖像樣本的灰度處理、特征提取等過程,最終通過人臉識別模塊進行匹配識別,判斷人臉的身份信息。
3.2.1 數據處理
本文的數據處理包括圖像數據標定和圖像灰度處理。通過數據標定建立數據樣本與標簽之間的關聯,從而得到實驗所需數據集。
傳統的圖片在計算機中的存儲方式一般由3 維m×n矩陣組成,一個維度代表一個RGB 顏色通道,m、n分別表示圖片的高度和寬度。但是,本文采用卷積神經網絡算法主要針對人臉輪廓進行識別,對顏色的要求較低,因此在數據處理階段進行灰度處理將其轉變為灰度圖,能夠提高算法效率。本文采用加權求和的方式進行灰度處理,即:

其中,R、G、B分別表示3 種顏色通道,i、j表示像素點的位置,且滿足α+β+γ=1。
3.2.2 MTCNN 建模
多任務卷積神經網絡MTCNN 主要包括輸入層、多個卷積層、對應的非線性映射層和池化層,并最終通過全連接層將二維特征圖連接成一個向量輸出到最終的分類器中,從而得到最終的概率輸出。
MTCNN 人臉識別算法的主要流程[13]如下:
(1)MTCNN 卷積層先選擇一個局部區域(即一個卷積核),再用這個局部區域掃描整張圖片,則局部區域所圈起來的所有節點會被連接到下一層的一個節點上。
(2)MTCNN 非線性映射層采用ReLU 激活函數[14]:

采用ReLU激活函數加入了非線性因素,加強了網絡的學習能力,提高了網絡的運算效率。此外,由于常數梯度值,人臉識別模型的收斂速度較sigmod 和tanh 函數更快且趨于穩定。
(3)MTCNN 池化層的主要作用是降維,采用最大值采樣,降維過程如圖2 所示。
(4)Dropout 層。為了模型防止過擬合,同時降低網絡的復雜性,添加Dropout 層,原理是減少訓練過程中神經元的數量。
(5)全連接層也稱為前饋層,主要是將最終輸出映射到線性可分的空間中進行分類。
本文采用Pycharm3.6+Anaconda3+TensorFlow 實驗平臺架構,實驗數據為人工采集并進行標注的數據face_data。其中,TensorFlow[15]是一個采用數據流圖進行數值計算的開源軟件庫,主要用于機器學習和深度神經網絡方面的研究。

圖2 池化層降維
MTCNN 人臉識別算法具體實現步驟如下。
步驟1:輸入變量。將MTCNN 檢測出的人臉圖像經過灰度處理轉換為單通道圖像數據,并將其圖像維度設置為64×64×1,則輸入層的維度為N×64×64×1。
步驟2:數據劃分。將圖像數據劃分為訓練集和測試集,利用訓練集訓練MTCNN 參數,測試集驗證參數的準確性。
步驟3:卷積過程。第一個卷積層用32 個3×3×1 的卷積核對輸入層(64×64×1)做卷積,然后采用ReLU 激活函數進行非線性映射來增強模型的擬合能力,再對每個區域做最大池化。第二個卷積層利用64 個3×3×32 的卷積核對第一卷積層產生的feature map 進行卷積。第三個卷積層用64個3×3×64 的卷積核對第二卷積層的feature map卷積。
產生的卷積結果以第一卷積層為例,如圖3所示。

圖3 第一層卷積結果
全連接層的輸出通過Softmax 損失函數[16]來實現。它將卷積過程產生的特征映射到概率分布中,是神經網絡學習中較常用的多分類損失函數,可定義為:

具體可以表示為:

N表示訓練樣本的數量,Pi表示全連接層輸出的第i個樣本的特征被正確分類的后驗概率,Wj表示全連接層權重參數W的第j列,b表示偏置項,C表示類別數。
步驟4:人臉識別的訓練過程。每次隨機從訓練集中抽取N個樣本進行訓練,直到預測的準確率達到一定閾值收斂。
按照上述算法進行卷積神經網絡訓練,設定不同迭代次數,得到的精確度如圖4 所示。

圖4 不同迭代次數訓練精確度
由圖4 可以看出,不同迭代次數有不同的訓練精確度。當迭代次數達到一定范圍時,趨于一定的穩定值。
此外,計算了一定迭代次數下的平均精確度,如圖5 所示。

圖5 不同迭代次數下,MTCNN 模型準確度對比
由圖5 可知,該模型在迭代次數為2 000 次時,平均精確度最好。
本文在深度學習框架TensorFlow 上,采用多任務卷積神經網絡的方法構建了人臉識別算法,采用灰度圖像處理方式降低了模型的復雜性,同時采用ReLU 激勵函數提高了模型的收斂性,并多次實驗,在不同的迭代次數下最終得出了一個較高的準確性。