(1.聊城大學 物理科學與信息工程學院,山東 聊城 252059;2.聊城大學 機械與汽車工程學院,山東 聊城 252059)
人臉表情在人與人交流過程中扮演著重要的角色,是進行情感信息交流的主要方式。隨著大數據與人工智能時代的來臨,如何在人機交互中實現計算機對人臉表情的識別,成為了當下的一個熱門研究領域。
現如今人臉表情識別大多分為兩個方向,先提取人臉表情特征再使用分類算法進行識別的傳統方法和深度學習下的人臉表情識別方法。在提取特征方面,眾多學者提出了LBP特征[1]、尺度不變特征變換(scale-invariant feature transform,SIFT)[2]、灰度共生矩陣(gray-level co-occurrence matrix,GLCM)[3]和Gabor小波變換[4]等特征提取方式,在分類算法上則有支持向量機(support vector machine,SVM)[5]、K最近鄰分類[6](k-NearestNeighbor,KNN)、隨機森林[7](random forest,RF)等分類方式。但這些方法所提取特征受人為干擾因素過大,會造成人臉表情信息的丟失,導致最終分類準確率不高,除此以外,這些方法對其他數據的泛化能力也較低。在2012年,Krizhevsky使用卷積神經網絡(convolutional neural networks, CNN)模型在ImageNet競賽中取得冠軍,其Top-5錯誤率為17%,遠超過傳統方法下的圖像分類正確率,這一現象引發了研究人員的廣泛關注,從此深度學習被廣泛應用于圖像分類問題中。例如Tang[8]將CNN與SVM相結合,在FER2013數據集上達到了71.2%的識別率。Jeon[9]等結合方向梯度直方圖(histogram of oriented gradient, HOG)和CNN來進行人臉表情識別,取得了較好的識別效果。本文也將使用CNN的方式來識別人臉表情,首先提取數據庫圖片LBP特征,將其尺寸歸一化之后輸入到改進的LeNet-5神經網絡中進行識別,實驗結果表明,所提方法在CK+和JAFFE數據庫中可獲得非常好的識別效果。
文中系統流程如圖1所示,主要過程包括:1)圖像預處理。采用基于Haar-like特征的AdaBoost算法來提取人臉區域,然后提取人臉區域LBP特征并將其尺寸歸一化,以作為神經網絡的輸入;2)改進神經網絡。原始的LeNet-5網絡是用來識別手寫體數字圖片,該種圖片背景單一且較為簡單,因此原始網絡不適合直接對復雜的人臉表情進行識別,需要對網絡的各種參數和結構進行調整;3)實驗與評估。使用調整好的神經網絡對輸入圖片進行訓練和識別,統計準確率來判斷文中方法性能。

圖1 系統流程圖
CK+與JAFFE數據集中的原始圖像包含了人臉區域和背景,需要經過預處理去除冗余信息,才適合作為神經網絡的輸入圖像,本文中的預處理為:人臉檢測、LBP特征提取和尺寸歸一化。
本文采用基于Haar-like特征的Adaboost算法檢測人臉區域,該算法運算速度和正確率都很高,可滿足實時檢測的要求。該方法基本思想是使用Adaboost算法將基于圖像特征的弱分類器訓練為強分類器,再將強分類器組合成級聯強分類器來檢測人臉區域,所檢測出的人臉圖像如圖2所示。

圖2 人臉檢測示意圖
LBP是一種描述紋理的算法,具有旋轉和灰度不變性[10]等特點,被廣泛地應用于紋理分析、圖像匹配等領域。常用的LBP有兩種:基本LBP算法和圓形LBP算法。基本LBP算法是將中心點像素值和中心點8鄰域像素值作比較,如果8鄰域像素值小于中心像素值,則標記為0,否則標記為1,然后從左上角開始順時針將二值化后的8鄰域像素值組合成一串8位二進制數字,然后將其轉換為10進制數字,由該數字來代替中心像素值。圓形LBP算法則是將基本LBP算法的3×3鄰域擴展到任意圓形鄰域,該鄰域可由參數(P,R)表示,P為鄰域像素個數,R為該鄰域半徑,該算法改善了基本LBP算法無法識別大尺寸紋理特征的缺點。本文中所提取到的人臉表情LBP特征圖如圖3所示。

圖3 LBP算法示意圖
圖3中可以看出處理后的圖像可明顯突出表情特征。
通過雙線性插值算法將已經檢測出來的人臉LBP特征圖尺寸進行調整,使得所有的神經網絡輸入圖片尺寸相同,避免了輸入到神經網絡后出現的尺寸不匹配問題。尺寸歸一化算法為雙線性插值算法,其基本思想是將待求像素點周圍4個點的像素值進行加權平均,最后計算出待求點的像素值。該方法可一定程度上避免失真,保持圖像的清晰度。尺寸歸一化之后的圖像如圖4所示。

圖4 尺寸歸一化示意圖
卷積神經網絡是前饋式的神經網絡,可從輸入數據中自動提取特征,具有很強的學習和表達能力,非常適合圖像分類問題。該網絡通常包含以下部分:卷積層、池化層、全連接層[11]。
一般來說,卷積層和輸入圖像直接相連,通過使用不同的卷積核將輸入圖像轉變為抽象程度更高的圖像特征并傳給下一層,卷積層的計算過程如式(1)所示:
(1)
通常在卷積層之后會再加入池化層,池化層不但可以對特征降維,而且可以較好地保持特征的尺度不變性,同時也能降低神經網絡的運算量。池化層計算公式如式(2)所示:
(2)


表1 改進后的LeNet-5網絡結構
全連接層的作用是將圖像的二維特征組合為一維特征,通常放在卷積層和池化層之后。該層輸出公式如式(3)所示。
Il=f(wlIl-1+bl)
(3)
其中:Il和Il-1分別為輸出和輸入,wl為全連接層的權重值,bl為全連接層的相應的偏置項。
LeNet-5模型最初是用來識別手寫體數字,其準確率達到98%以上,是一種經典的神經網絡模型,具體結構如圖5所示。

圖5 Lenet-5網絡結構圖
使用LeNet-5模型對人臉表情進行識別,發現損失值收斂速度過慢,準確率較低。經分析之后對網絡結構進行改進,具體如下:
1)原始LeNet-5是用來進行手寫體數字識別,其圖片相對簡單,尺寸也較低,為32×32;而本文所進行的人臉表情識別圖像復雜,且不同表情之間差異較小,使用低尺寸圖片會使得圖像損失特征信息,所以本文將輸入圖像尺寸調整為128×128。
2)調整卷積核的個數。卷積核的個數影響到之后輸出的特征圖個數,考慮到人臉表情過于復雜,本文將增加卷積核的個數以提高網絡分辨表情的能力,將前6層的卷積核個數分別設置為16、16、32、32、64和64,同時將后3層全連接層的輸出節點個數分別設置為128,64和7。
3)調整卷積核的尺寸大小。卷積核的尺寸與提取到的特征質量有關,原始的LeNet-5采用5×5的卷積核,用來提取人臉圖像特征效果不好,本文將調整卷積核大小,具體為表1所示。
4)將sigmoid激活函數替換為Leaky ReLU激活函數。原有sigmoid函數計算量過大,并且在輸入過大或者過小時,輸出會接近+1和-1,斜率很低,在使用梯度下降法時梯度下降過慢,會嚴重降低訓練速度,不適合當前網絡結構。所采用的Leaky ReLU函數與當前卷積神經網絡常用的ReLU激活函數相比,其優點在于可以避免當輸入為負值時導致權重無法更新的問題。
5)在原有的前4層網絡之后,新加入第5層卷積層和第6層池化層。本文網絡結構輸入圖像尺寸為128×128,經過前4層網絡之后特征圖尺寸為11×11,需要繼續降低尺寸,減少計算的復雜度。
6)在第一層全連接層之后加入Dropout函數,Dropout可用來解決網絡模型中數據過擬合的問題,也可以增強網絡模型的泛化能力。
7)使用學習率指數衰減法對網絡結構進行優化。使用該方法可提高神經網絡訓練速度,使訓練過程中損失曲線更加穩定的下降,減少曲線的震蕩次數。
改進之后的網絡模型結構如表1所示。表1結構包含卷積層、池化層和全連接層,輸入層和softmax層未列于此表中。
本文將分別在CK+與JAFFE公開數據集上進行測試,由于JAFFE數據集不包含輕蔑類型的表情,因此本文將去除CK+數據集中的輕蔑類型,最終將表情分類為生氣、厭惡、恐懼、悲傷、快樂、驚訝、中性7種人臉表情。由于CK+和JAFFE數據集原始表情數量較少,本文將原始人臉表情圖像以仿射變換方式對樣本數量進行擴充。擴充后的CK+數據集圖像為6476張,JAFFE數據集圖像為4689張。人臉表情圖像樣例如圖6所示。

圖6 CK+與JAFFE數據集人臉表情樣例
本文方法使用硬件信息如下:GPU為NVIDAGeForceGTX1660 6G,CPU為InterCorei3 8100 3.6 GHz,內存為8 G;軟件信息如下:操作系統為Window 10,安裝Python3.6.5和TensorFlow深度學習框架。神經網絡中所設置超參數如下:初始化學習率為0.0005,學習率衰減指數為0.96,動量為0.9,正則化系數為0.001,dropout設置為0.5,Epoch為20。
為證明本文方法的有效性,并探索何種方式才能得出最高的正確率,本文將使用10次10折交叉驗證方法,對不同的輸入圖像輸入到不同的網絡中得到的準確率做出了統計,具體如表2所示。

表2 CK+與JAFFE數據集實驗準確率
表2中第1列為不同的輸入圖像類型,第2列和第3列為使用原始LeNet-5網絡和改進之后的LeNet-5網絡對CK+數據集上的輸入圖像進行識別的準確率,第4列和第5列為使用原始LeNet-5網絡和改進之后的LeNet-5網絡對JAFFE數據集上的輸入圖像進行識別的準確率。
從表2可以看出,使用原始LeNet-5網絡來進行人臉表情識別準確率較低,即使輸入圖像為LBP特征圖像,也只提升了2%~3%左右的準確率,其原因在于原始的網絡結構并不適合人臉表情識別,需要做出針對性的調整才能使準確率得到提高。由實驗數據可知將數據集圖像所提取的圓形LBP(8,5)特征圖輸入到改進的LeNet-5網絡中,其識別率可達到最高,在CK+和JAFFE數據集可以分別達到98.19%和96.35%的準確率。
為進一步查看本文中方法性能,使用上述方法統計不同表情的準確率,如表3所示。

表3 不同表情識別準確率
由表3可知,本文方法對CK+數據集不同表情識別率均達到了95%以上,其中高興和驚訝的識別率為100%;在JAFFE數據集準確率稍低,但也有5種表情識別率在95%以上,足以證明本文方法的有效性。
為了更加直觀地觀察神經網絡的性能,本文繪制了JAFFE和CK+數據集的損失值和準確率曲線,如圖7所示。

圖7 不同數據集損失和準確率曲線圖
從圖7中可以看出,隨著迭代次數的增加,JAFFE和CK+數據集的損失值和準確率均趨于平緩,且損失值可以迅速下降,說明本文所設計的網絡模型較為合理。
表4和表5展示了使用其他方法在JAFFE和CK+表情數據集的識別率對比。

表4 JAFFE數據集實驗準確率

表5 CK+數據集實驗準確率
由表4可知,使用深度學習對人臉表情進行識別要比傳統方法的準確率高。這是因為傳統方法所提取特征難以完全描述人臉表情特點,進而在分類算法中準確率難以得到提高。
由表5可知,雖然同樣采用了深度學習的方法來進行人臉識別,但本文方法的準確率是最高的。文獻[15]和文獻[16]所使用卷積神經網絡結構較為基礎,沒有針對人臉表情識別問題對網絡結構做出針對性的調整,且訓練樣本較少,最終準確率較低;文獻[17]雖然對網絡結構做出了改進,但其特征提取能力不如本文方法,使得準確率不高。文獻[18]使用HOG提取特征,再使用主成分分析法降維,最終將特征向量送入深度稀疏編碼網絡中進行識別。其總體準確率尚可,但單一表情識別率如恐懼和悲傷不如本文方法準確率高。
本文結合LBP特征提取與改進后的Lenet-5網絡對人臉表情進行識別,其結果要優于主流方法。為更好地提取到圖像特征,將原始圖像的LBP特征輸入到網絡模型中去,并對比了輸入哪一種LBP特征圖準確率更高;將Lenet-5網絡進行以適用于人臉表情識別,包括輸入圖像尺寸的調整、卷積核的調整、層數的調整和加入神經網絡優化算法等。
文章下一步計劃是將本方法應用于不同的數據集中以查看方法性能,此外還需要加強神經網絡泛化能力。