林克正,白婧軒,李昊天,李 驁
哈爾濱理工大學 計算機科學與技術學院,哈爾濱150080
人臉表情識別一直是富有挑戰性的研究課題,在檢測精神障礙、人機交互等方面有著廣泛的應用。它有助于創造出更多具有識別人類情緒能力的智能機器人。許多現實生活中的應用程序,如疲勞駕駛檢測和互動游戲開發,也得益于這種技術。目前表情識別領域運用多種特征提取和機器學習算法。
早期的人臉表情識別研究大多基于手工制作的特征[1]。在ImageNet 大型視覺識別競賽(ImageNet large scale visual recognition challenge,ILSVRC)[2],AlexNet[3]深度卷積神經網絡模型取得成功后,深度學習在計算機視覺領域中開始得到廣泛的應用。人臉表情識別(facial expression recognition,FER)挑戰[4]或許是最早提出表情識別運用深度學習方法的作品之一。之后在2013年FER 挑戰賽中得分最高的系統是深度卷積神經網絡[5],而手工特征的最佳模型僅排在第四位[6]。除了少數例外[7-8],最近關于人臉表情識別的研究大多基于深度學習[9-14]。最近的研究[15]提出訓練卷積神經網絡級聯從而提高性能。在大多數情況下,CNN(convolutional neural network)的訓練依賴大量的數據,然而在模型訓練中,樣本的大小會直接影響模型和網絡,故當樣本有限時,模型很容易發生過擬合現象,因此在樣本有限時,希望防止過擬合并且不影響性能甚至提高性能。目前通常采用的方法是,樣本的旋轉、對比度分析、光亮度變化來進行樣本擴充。雖然這樣可以在一定程度上增加樣本數量,但更容易產生過擬合現象。Kaya 等人[16]則將深層特征與HOG(histogram of oriented gradient)、局部Gabor 二元模式的手工制作的特征結合起來使用,從而提高性能。黃凱奇等人[17]利用遷移學習得到很好的泛化模型,但是識別準確率不是特別理想。Zhang等人[18]的生成對抗網絡與遷移學習的集合模型在小樣本中達到較高的識別準確率。
因此本文提出了深度學習下融合不同模型的小樣本表情識別方法。首先對單個CNN 模型進行比較,篩選相對合適的CNN,然后SIFT(scale-invariant feature transformation)提取局部特征,最后將所有模型進行匯總,得到CNN-SIFT-AVG(convolutional neural network and scale-invariant feature transformation average)模型。雖然尺度不變特征變換[19]和其他傳統局部特征提取方法的結果不如CNN 準確,但它們不需要大量的數據集就可以得出結果。模型分別在FER2013、CK+和JAFFE 三個數據集上進行實驗。
本文的主要貢獻:(1)研究了SIFT 特征與CNN結合對小數據性能的影響。(2)設計了一種新的基于CNN 和SIFT 模型的人臉表情識別分類器,在FER2013、CK+和JAFFE 三個數據集上都得到了更好的識別效果。(3)可以降低在人臉表情識別過程中訓練樣本的成本。
(1)卷積層
對輸入數據進行特征提取,其內部包含多個卷積核,組成卷積核的每個元素都對應一個權重系數和一個偏置項。卷積層內每個神經元都與前一層中位置接近的區域的多個神經元相連,區域的大小取決于卷積核的大小。卷積核在工作時,會有規律地掃過輸入特征,在感受野內對輸入特征做矩陣元素乘法求和并疊加偏差量,計算方式如式(1)所示:

式中的求和部分等價于求解一次交叉相關。b為偏差量,Zl和Zl+1表示第l+1 層的卷積輸入和輸出,也被稱為特征圖,Ll+1為Zl+1的尺寸,這里假設特征圖長寬相同。Z(i,j)對應特征圖的像素,k為特征圖的通道數,f、s0和p是卷積層參數,對應卷積核大小、卷積步長(stride)和填充(padding)層數。
(2)dropout正則化方法
dropout 層是通過遍歷神經網絡每一層的節點,然后通過對該層的神經網絡設置一個節點保留概率p,即該層的節點有p的概率被保留,p的取值范圍在0 到1 之間。通過設置該層神經網絡的節點保留概率,使得神經網絡不會偏向于某一個節點(因為該節點有可能被刪除),從而使得每一個節點的權重不會過大,來減輕神經網絡的過擬合。標準網絡如圖1所示,帶有dropout網絡的如圖2 所示。

Fig.1 Standard neural network圖1 標準的神經網絡

Fig.2 Part of temporarily deleted neurons圖2 部分臨時被刪除的神經元
在訓練模型階段,訓練網絡的每個單元都要添加一道概率流程。沒有采用dropout 方法的如式(2)。預測的時候,每一個單元的參數要預乘以p。

采用dropout網絡的如式(3)。

(3)激活函數
ReLU 函數如式(4),當x<0 時,隨著訓練的推進,部分輸入會落入硬飽和區,導致對應權重無法更新。故針對x<0 的硬飽和問題,采用Leaky ReLU 函數,函數如式(5)。

使用Leaky ReLU 優于ReLU 的優點是:ReLU 是將所有的負值都設為零,相反Leaky ReLU 中,a是一個很小的常數,這樣保留了一些負軸的值,使得負軸的信息不會全部丟失。這就解決了ReLU 函數進入負值區間后,導致神經元不學習的問題。
SIFT 特征在旋轉、尺度縮放、亮度等情況下可以保持不變性,因此對于每個圖像,采用尺度不變特征變換(SIFT)從人臉圖像中提取關鍵點。定位關鍵點后,利用關鍵點相鄰的像素點計算網格的方向和大小。為了識別主方向,建立梯度直方圖。最后,SIFT描述符通過將圖像分割成4×4個正方形來確定。對于每一個正方形中的16個方塊,采用一個長度為8的向量來表示。通過合并所有的向量,得到每個關鍵點的大小為4×4×8=128 的特征向量,最后進行歸一化處理。如式(6)所示。

本文的網絡模型結構的輸入層是像素為48×48的灰度圖像,即為1 的單通道圖像,故輸入的圖像維度用48×48×1 來表示。卷積層是一個3×3 的過濾器(filter),為了保持輸入輸出規格的空間大小不變,在邊框周圍添加了零填充padding。過濾器處理的矩陣深度和當前神經網絡節點矩陣的深度是一致的,故為1。通過一個filter 與輸入圖像的卷積可以得到一個48×48×1 的特征圖,連續用32個filter 得到了32個特征圖。卷積過后輸入圖像的像素位置再進行滑動,滑動步長stride等于1。
然后采用最大池對卷積結果進行了整合,它是一種非線性下采樣。此處采用2×2 過濾器,對每一個2×2 的區域進行一次最大池化操作。同時每添加一次最大池化層,下一層卷積核的數量就會翻倍。因此卷積濾波器的數目分別為64、128 和256。
卷積層輸出之后,完成flatten,再輸入給全連接層,全連接層由2 048個神經元組成。在每個最大池化層之后引入一個dropout 層,來降低網絡過擬合的風險。最后,在網絡的最后一個階段放置一個softmax 層,該層有7個輸出。
為了給CNN 引入非線性,使用了Leaky ReLU 作為激活函數,函數圖像如圖3。具體參數如式(7)。最后,損失函數用分類交叉熵的方法,采用自適應梯度優化方法Adam 進行優化。

Fig.3 Leaky ReLU functional image圖3 Leaky ReLU 函數圖像

為了獲得更好的分類性能,使用了多個CNN 模型。算法中采用dropout正則化方式,很好地解決了由于訓練樣本較少,學習到的特征不足而產生的過擬合問題。其中dropout的概率p會影響模型的效果。通常情況下概率p∈[0,0.5]之間,因為如果比例p太小則起不到效果,太大則會導致模型欠擬合。故在{0,0.05,0.10,…,0.45,0.50}范圍內確定相對合適的p值。

Fig.4 Effect of different dropout values in different layers on training accuracy圖4 不同層中不同的dropout值對訓練準確率的影響
由圖4中可以看出,CNN模型的結果會因為概率p的變化而隨之變化,由圖4(a)~圖4(c)可知:FER2013數據集中第1 層的p=0.25,第2 層的p=0,第3 層的p=0.5 時效果最好;CK+數據集中第1 層的p=0.1,第2 層的p=0.1,第3 層的p=0.4 時效果最好;JAFFE數據集中第1 層的p=0.1,第2 層的p=0.1,第3 層的p=0.3 時效果最好。因此建立了3種不同的dropout概率的模型,即C1、C2和C3。改變dropout概率是為了增加模型的多樣性。在C1時,dropout1=0.25,dropout2=0,dropout3=0.5。C2時,dropout1=0.1,dropout2=0.1,dropout3=0.4。C3時,dropout1=0.1,dropout2=0.1,dropout3=0.3,dropout4恒為0.5。整體CNN 模型如圖5 所示。

Fig.5 Adopted CNN model圖5 采用的CNN 模型
為了在分類中使用SIFT 中的關鍵點描述符,需要一個固定大小的向量。為此,K-means 用于將描述符分組到一些集群中。然后通過計算每個集群中包含的描述符的數量形成一袋關鍵點,得到的特征向量的大小為K。
K向量通過4 096 全連接層,以及dropout 層。全連通層的權值采用L2 范數正則化,取值為0.01。3 種不同的模式S1、S2、S3都已經做過實驗,每個模型的K值分別為K1=256、K2=512 和K3=1 024。最后與C2模式合并,如圖6 所示。
為了提高模型的準確性,使用簡單平均的方法對CNN-ONLY、CNN-SIFT 和CNN-SIFT-AVG 輸出進行模型融合。如圖7 所示。其中CNN-ONLY 僅為C1、C2、C3的普通平均值,如式(8)。CNN-SIFT為S1、S2、S3的普通平均,如式(9)。最后,將6個模型普通平均到CNN-SIFT-AVG 模型中,如式(10)。

Fig.6 Fusion of CNN and SIFT model圖6 CNN 與SIFT 模型融合

Fig.7 Aggregating all models into CNN-ONLY,CNN-SIFT and CNN-SIFT-AVG圖7 將所有模型融合為CNN-ONLY、CNN-SIFT和CNN-SIFT-AVG

xCi表示在Ci模型下的輸入,C(e|xCi)表示在Ci模型下判定為某一表情的概率。xSi表示輸入在Si模式下,由上文可知,S1時K=256,S2時K=512,S3時K=1 024,S(e|xSi)表示在Si模式下判定為某一表情的概率。P1(e|x)表示CNN-ONLY 模型下判定為某一表情的概率;P2(e|x)表示CNN-SIFT 模型下判定為某一表情的概率;P3(e|x)表示CNN-SIFT-AVG 模型下判定為某一表情的概率。由于每個模型都有一個softmax層作為最后一層,因此輸出限制在0 到1 之間。
根據前面的推倒和分析,以本文模型為例,闡述該方法的具體操作步驟。
步驟1將訓練樣本和測試樣本里的人臉表情圖像大小統一為48×48,并將所有圖像歸一化為零均值和單位方差的向量。
步驟2構造CNN 網絡模型,輸入數據{xi},利用公式ai=f(e)=f(w*xi+h)計算卷積層的特征向量,w表示卷積層的權重矩陣;h為偏置量;f(?)表示激活函數。再根據式b=max(b1,b2,…,bt),bi為卷積特征向量,t表示有t個卷積核,得到池化層的輸出B=(b1′,b2′,…,bt′)。之后分別以C1、C2、C3為dropout概率值p,利用式(3),隱藏層節點個數為y1,y2,…,yi,經過dropout 后,i個節點中有隨機p×i個被置0。得到輸出的特征值后,多個特征值組成一維特征向量D。
步驟3對數據庫中的樣本進行SIFT 特征提取,根據式(6),得到每個關鍵點描述符,大小為128 的向量S=(s1,s2,…,s128)。再采用K-means 算法針對聚類得簇劃分C={C1,C2,…,Cj},通過計算每個簇中包含的描述符的數量形成一袋關鍵點,得到的特征向量的大小為K(S1時K=256,S2時K=512,S3時K=1 024)。
步驟4將步驟3 得到特征向量K與CNN 網絡的dropout=C2模型提取的特征向量D,利用式F=K°D合并為F,其中°表示以串聯形式合并兩個特征向量,送入全連接層,將輸出映射到(0,1)的區間上,利用式q=f(y)=f(WF+B),q表示輸出;W和B表示softmax層的參數。選出概率最大的類別,作為預測的類別。
步驟5利用式(8)~式(10),將步驟1 中得到的3個dropout模型與步驟4 得到的模型結果普通平均。
為了驗證本文提出方法的有效性,實驗采用3個數據集FER-2013、CK+和JAFFE 來評估本文方法的性能。表1 為FER2013、CK+和JAFFE 數據集中每種表情的數量分布。在實驗之前,將圖像的大小統一為48×48,并將所有圖像歸一化為零均值和單位方差的向量。
本文以Tensorflow 深度學習框架為實驗基礎,使用Python3.6 的編程語言,在Windows 10 的操作系統上進行相關實驗。硬件平臺為:第七代Intel 酷睿i5,Nvidia Geforce GTX 1070Ti GPU,顯存8 GB。

Table 1 Expression quantity distribution of FER2013,CK+and JAFFE dataset表1 FER2013、CK+和JAFFE 數據集的表情數量
圖像大小為48×48 像素,共有7種表情分別用0~6數字進行標注處理,分別為angry、disgust、fear、happy、sad、surprise、neutral。包含訓練集和測試集,其中訓練集共含有28 709 張圖像,測試集含有3 589 張圖像。圖8展示了FER2013數據庫中7種表情的示例圖像。

Fig.8 Sample images of 7 expressions in FER2013 database圖8 FER2013 數據庫中7 種表情的示例圖像
CK+數據集包含327個表情。屬于小樣本數據集(憤怒Angry、輕蔑Contempt、厭惡Disgust、恐懼Fear、快樂Happy、悲傷Sad 和驚訝Surprise)。
為了使實驗與其他實驗和FER2013 的數據兼容,刪除了蔑視的表情。用剩下的6個表情中的309張圖片來訓練模型。圖9 展示了CK+數據庫中的樣本。
JAFFE 數據集是日本ATR(Advanced Telecommunication Research Institute International)的專門用于表情識別研究的基本表情數據庫,該數據庫中包含了213 幅日本女性的臉。表情庫中共有10個人,每位女性的每種表情有3、4 張,每個人有7 種表情(包含憤怒Angry、中性臉Normal、厭惡Disgust、恐懼Fear、快樂Happy、悲傷Sad 和驚訝Surprise)。圖10展示了JAFFE 數據庫中的樣本。

Fig.9 Sample images of 6 expressions in CK+database圖9 CK+數據庫中6 種表情的示例圖像

Fig.10 Sample image of 7 expressions in JAFFE database圖10 JAFFE 數據庫中7 種表情的示例圖像
對于FER2013 數據集,所有的模型都經過了28 709個樣本的訓練。其中28 709 張作為訓練集,而3 589 張用作測試集。每個網絡訓練300個epoch,批處理大小為128。CK+數據集中使用所有的309 張圖像進行訓練,每項實驗均按照十折交叉驗證的方法重復10 次。為了防止過擬合,所有網絡只訓練了20個epoch。JAFFE 數據集也采用交叉驗證法,將數據集中的表情圖片分成5 份,每次用其中的4 份作為訓練集,剩余的1 份作為測試集。
在訓練過程中均采用隨機初始化權重和偏置,初始學習率為0.01,最小學習率設定為0.000 1,記錄訓練的網絡參數和每個epoch 的損失。如果驗證損失增加了10%以上,則學習率降低了1/10,并且重新加載之前具有最佳驗證損失的網絡。將驗證損失最低的模型作為最終的訓練模型。
在本文中,共提出3個模型CNN-ONLY、CNNSIFT和CNN-SIFT-AVG。每一種模型在每一個數據集下都進行實驗。表2、表3 和表4 分別為CNN-ONLY模型、CNN-SIFT 模型和CNN-SIFT-AVG 模型下的不同數據集于不同表情的識別準確率。

Table 2 Facial expression recognition accuracy of CNN-ONLY model in different data sets表2 CNN-ONLY 模型在不同數據集下表情識別準確率 %

Table 3 Facial expression recognition accuracy of CNN-SIFT model in different data sets表3 CNN-SIFT 模型在不同數據集下表情識別準確率 %
在FER2013 數據庫中,本文的3個模型中識別率最高的一直是Happy(高興),由以上數據集分析可知,Happy(高興)的特征比其他表情特征更加明顯。由實驗結果可知,集成模型對個體有顯著的改進效果,CNN-SIFT 和CNN-SIFT-AVG 模型均優于CNNONLY 模型,特別是CNN-SIFT-AVG 模型比其他兩個模型提高了1%左右的精確率,且兩種方法的使用都極大地提高了性能。

Table 4 Facial expression recognition accuracy of CNN-SIFT-AVG model in different data sets表4 CNN-SIFT-AVG 模型不同數據集下表情識別準確率 %
本文模型與其他先進模型進行了人臉表情識別的準確率對比,如圖11 所示。可以看出,本文模型較穩定,雖然某些表情的識別率略低,但整體識別的準確率略高于其他模型。如表5 所示,對比實驗的Multi-scale CNNs[20]參數設置:學習率0.001 并且采用了訓練自動停止策略,當出現過擬合現象時,訓練經過100個epoch 后,自動停止并保存模型。Subnet3[21]參數設置:batch 為100,動量為0.9,網絡的權重采用正態分布中的隨機數字初始化,學習率設置為0.01,逐漸減少到0.001 為止,epoch 的數量在20 到100 之間。DNNRL[22](deep neural networks with relativity learning)參數設置:初始學習率設定為0.01,最小學習率設定為0.000 1,每個epoch 都有100個batch,從訓練集中隨機選擇訓練樣本,如果驗證損失增加了10%以上,則學習率降低10%。

Fig.11 Recognition accuracy of models in FER2013 data set圖11 FER2013 數據集下幾種模型識別的準確率

Table 5 Comparison of overall accuracy in FER2013 data set with other methods表5 FER2013 數據集上與其他方法整體準確率的對比 %
在CK+數據集的實驗中發現,隨著表情樣本數量的減少,CNN-SIFT 和CNN-SIFT-AVG 的性能比CNN-ONLY 模型的準確率和性能有所提高,且CNNSIFT-AVG 模型的性能相對更優。圖12 為CK+數據集在CNN-SIFT-AVG 模型上實驗的混淆矩陣。由圖可看出,Angry、Fear、Sad 會被輕微混淆,在識別中會導致錯誤,相比其他表情,Happy 表情比其他表情更容易識別。但隨著數據集的減少,SIFT 的優勢體現出明顯的效果,相比FER2013 數據庫,在CK+數據庫中,識別的準確率大幅度提高了。圖13 為CK+數據集下不同模型識別的準確率比較。表6 為CK+數據集上與其他方法整體準確率的對比。

Fig.12 Confusion matrix of CK+data set on CNN-SIFT-AVG model圖12 CK+數據集在CNN-SIFT-AVG模型上的混淆矩陣
對比實驗Xu 等[23]的參數設置:學習率0.000 01,迭代次數200,權值衰減0.000 5,batch 為20。傳統卷積神經網絡的參數設置:學習率0.001,最大迭代次數1 001,batch 為128。Zhang 等[24]的參數設置:學習率0.001,迭代次數100,batch 為30。由實驗結果可知,本文的模型均優于另外幾種模型,不論是每種表情的識別準確率還是整體的識別率,本文識別的準確率相比其他方法至少提高3個百分點,且CNN-SIFTAVG 模型相對更優。

Fig.13 Recognition accuracy of models in CK+data set圖13 CK+數據集下幾種模型識別的準確率

Table 6 Comparison of overall accuracy with other methods in CK+data set表6 CK+數據集上與其他方法整體準確率對比 %
在JAFFE 數據集上,本文模型達到了較好的準確率,其中Happy 與Sad 兩種表情識別達到了無差錯的結果。圖14 為JAFFE 數據集在CNN-SIFT-AVG 模型上的混淆矩陣。其中每一行都表示真實的類別,每一列對應的則是預測的類別的概率。圖15 為JAFFE 數據集下不同模型識別的準確率比較。表7為JAFFE 數據集上與其他方法整體準確率的對比。其中對比實驗中Zhang等[24]的參數設置:學習率0.001,迭代次數100,batch 為30。Yao 等[25]的參數設置:最大迭代次數為2 000,識別率閾值為95%。Lajevardi等[26]則是結合不同特征如Gabor、LBP(local binary patterns)和HLAC(higher-order local auto correlation)的表情識別。
結果表明,CNN-SIFT 模型和CNN-SIFT-AVG 模型均優于現有模型。特別是CNN-SIFT-AVG 模型在JAFFE 數據庫中的識別率達到了98.96%的準確率,與其他方法相比,準確率提高了2 到6個百分點。

Fig.14 Confusion matrix of JAFFE data set on CNN-SIFT-AVG model圖14 JAFFE 數據集在CNN-SIFT-AVG模型上的混淆矩陣

Fig.15 Comparison of recognition accuracy of models in JAFFE dataset圖15 JAFFE 數據集下幾種模型識別準確率比較圖

Table 7 Comparison of overall accuracy with other methods in JAFFE data set表7 JAFFE 數據集上不同方法整體準確率對比 %
由以上實驗結果可以看出,3個模型的識別率略有不同。對于模型,由式(8)可知,僅僅將C1、C2、C3不同dropout值的卷積神經網絡模型進行簡單平均融合,對于表情的特征提取可能存在一定局限,當訓練數據減少時,可能會產生過擬合現象,導致訓練的模型不是特別理想。對于CNN-SIFT 模型,由式(9)可知,將dropout 為C2的網絡與S1、S2、S3模型得到的結果進行平均,進而得到結果。根據實驗結果可知,不僅在大數據集中的識別率相對較高,當數據集減小時,識別率沒有因為訓練數據的減少而降低,反而有了更好的效果。這是因為加入了SIFT 提取特征,提高了小數據的性能,將SIFT 特征與卷積特征結合,更增加了輸入特征的多樣性。對于CNN-SIFT-AVG模型,由式(10)可知,是將6個模型采用普通平均模型融合的方法。由于個體學習器準確性越高,多樣性越大,則融合效果越好。因此,CNN-SIFT-AVG 模型對于大數據集和小數據集的識別率相比其他方法更優,數據集較大時,訓練數據足夠,CNN 網絡模型更加準確,加上SIFT 特征,識別率更高;當數據集較小時,SIFT 能夠很好地在小數據集上提取特征,將CNN 特征與SIFT 特征融合進行訓練分類,彌補了CNN 網絡由于訓練數據不夠而過擬合的問題,因此在提高了小樣本性能的同時,獲得了較高的識別率。
本文針對提高小樣本數據集下表情識別率等問題,提出了一種深度學習下融合不同模型的小樣本表情識別方法。文中已經展示了SIFT 特征和卷積神經網絡是如何協同工作的,這種混合方法綜合了這兩種方法的優點。一方面,充分利用了SIFT 不需要大量數據提取特征,提高小數據的性能的優勢;另一方面,不同模型的融合,不僅在大數據中表情的識別率有一定提高,同時也解決了CNN 需要大量數據訓練的問題,提高了小樣本下表情識別的準確率。由實驗結果可知,本文的CNN-SIFT-AVG 模型有明顯優勢,在很大程度上發揮了小樣本中SIFT 的作用,數據越小,改善效果越明顯。