李嘉乾,張 雷
(江蘇理工學院 機械工程學院,江蘇 常州 213001)
表情識別是人工智能的一個重要研究方向。表情識別主要有兩類方法:基于傳統特征提取方法和基于深度學習的方法。傳統特征提取的幾種方法有:PCA[1]、LBP[2]和HOG[3],這些算法主要通過先對面部進行建模,再進行特征的提取與匹配。姚麗莎等[4]通過使用LBP進行特征的提取,并使用支持向量機進行表情分類,用以檢測固定場景中表情的變化,提高了識別率,但在其它場景表現不佳。楊恢先等[5]通過結合梯度信息改進局部二值化特征提取,改善了單一局部二值化特征對于中心噪聲的敏感性,但無法克服相似表情識別精度低的問題。
歐中亞等[6]結合隨機森林與PCA特征提取方法,通過融合歐氏距離和明氏距離兩種距離計算方法求取樣本均值,以尋找局部最優的樣本中心,取得了一定的效果,但過度優化了類內差異,而導致丟失了一部分的類間差異,導致沒有取得理想的識別精度。
深度學習算法是通過建立神經網絡模型,并使用大量的數據集對網絡進行訓練,使得深度模型可以獲得圖像更深層次的特征。目前深度學習模型由于其泛化性能好,在表情識別中逐漸取代傳統算法,但對于一些小數據集,模型難以訓練擬合所以精度較低。目前的主流改進方法是將傳統算法與深度模型結合。丁名都等[7]使用HOG和卷積神經網絡搭建雙通道網絡進行特征提取,并通過構建特征融合網絡取得了不錯的識別精度,但其沒有針對分類器進行優化,導致對于具有相似特征的樣本分類效果不佳。薛建明等[8]通過先提取關鍵區域特征再融合,將融合的特征輸入卷積神經網絡中進行特征提取與分類,由于其算法著重提取關鍵區域,因此相似表情的識別率上有了較大的提高,但是對于光照的魯棒性有所欠缺。
本文為了在提升光照的魯棒性時兼顧提高相似表情的識別精度,基于殘差結構[9]提出一種雙通道殘差網絡模型。在通道一改進光照魯棒性;在通道二改進全局的特征提取能力。在特征融合網絡中通過交叉驗證確定魯棒的特征融合網絡的系數;最后引入中心損失[10]聯合Softmax函數設計聯合算法,在公開數據集CK+[11]、Oulu-CASIA[12]和JAFEE[13]數據集上進行實驗。并與主流算法進行了比較,驗證了本文算法的優越性。
改進的雙通道網絡模型結構如圖1所示,主要分為雙通道圖像處理模塊和特征融合與分類模塊,前者由圖像預處理與雙通道網絡組成,后者由特征融合網絡和分類器組成。

圖1 改進的殘差網絡模型結構
為讓使后續網絡減少計算量,需要對輸入圖像進行預處理,預處理結果將直接影響最終的識別結果,本文采用的預處理方法主要有以下兩個步驟:
步驟1 輸入圖像旋轉矯正:由于實際場景中,采集的表情圖像可能存在角度差異的問題,為了避免此類問題對特征提取的影響,需要對輸入圖像進行旋轉矯正,定義旋轉矩陣如公式(1)所示
(f′x,f′y)=[fx,fy][cosθsinθ-sinθcosθ]
(1)
其中,θ表示圖像需要進行矯正的旋轉角度,通過兩個眼睛中心連線與水平方向的夾角確定;fx、fy代表輸入圖像初始的定位的雙眼坐標;f′x、f′y代表進行旋轉矯正后的雙眼坐標。
步驟2 圖像降維:經分析表情模型的訓練與識別主要是依靠提取圖像的紋理信息和面部的五官等信息,色彩對于檢測的準確度幾乎沒有影響,通過灰度化操作將輸入的3個通道RGB圖像轉換為一個通道灰度圖以降低通道數;通過降低通道數,不僅保存了圖像的絕大部分信息,也降低了后續網絡的計算復雜度。
目前開源的LBP算子的定義是:在輸入的待檢測圖像上任選一個邊長像素值為3的正方形塊,將比較的閾值預先設定成中心區域的像素值,并將其與周圍的8個像素值相比較,如果此時被比較的像素值小于中心像素值,就把當前位置像素點編號設為0,而其它情況則設置為1,通過將中心點的灰度值與當前區域所有點的灰度值進行對比,產生8位二進制數,即該區域中心點的LBP值,并用這個值來反映該區域的紋理信息。LBP值計算如式(2)所示
ULBP(xc,yc)=∑p-1p=02Ps(ip-ic)
(2)
式中:(xc,yc) 為中心像素點C的坐標,ic表示中心點的灰度值,ip表示中心點鄰域的灰度值。
由定義可知LBP算子在灰度范圍內具有單調不變性,即對于光照的變化非常的魯棒。一個完整的LBP算子編碼的過程如圖2所示。

圖2 LBP算子編碼過程
LBP算子作為圖像紋理表示的一種極其有效的方法,這使得LBP特征具有很強的分類能力。但是,在提取中心像素值時,對噪聲比較敏感,且在表征圖像整體特征方面較為欠缺。具體改進方法如下:按照順時針次序將LBP算子中心點像素值的平方與它周圍各鄰域點像素值的平方相減,再按照上下排列比較的方式,定義若上值大于等于下值,則生成值1,反之則生成值0。具體過程如圖3所示。

圖3 改進的LBP算子編碼過程
圖3為改進的LBP算子編碼過程,由此生成了8位二進制的局部特征描述序列。通過此種方法生成的局部特征描述序列,其優勢在于不僅僅比較了相鄰點與中心點的像素值,也比較了各個相鄰點之間的像素值。這樣的好處是既保證了相鄰點與中心點像素值之間的聯系,又兼顧到了各個相鄰點像素值之間的關系。在保留其對微小特征的敏感性的基礎上,進一步提高提取面部紋理特征的能力。在不同光照情況下,傳統的LBP特征提取與改進后的LBP特征提取對比效果如圖4所示。

圖4 傳統LBP與改進的LBP特征提取在不同光照下的效果對比
為了更直觀體現此改進方法的有效性,分別將傳統LBP與改進的LBP后接結構相同的殘差網絡結構在公開數據集CK+上進行實驗,實驗結果如圖5所示。

圖5 傳統LBP特征提取與改進的LBP特征提取在CK+的精度曲線
通過實驗發現,改進的LBP算子和傳統的LBP算子在同一數據集上的精度都在12個epoch后收斂,并且總體識別精度有了比較大的提高,分析并對比實驗結果發現,此改進在應對不同的光照和對細小紋理的特征提取方面都獲得了提高。該實驗說明了此方法是針對傳統LBP算子的有效改進。
注意力機制作為一種模擬人腦注意力的理論,通過對模型中不同關注部分賦予不同的權重,從中抽取出更關鍵的信息。目前已有關注網絡中通道信息的通道注意力模塊[14]和關注圖像空間位置信息的空間注意力模塊[15]。
但由于通道注意力模塊和空間注意力模塊各自關注的特征不同,存在一定的缺陷;而如果簡單的疊加這兩個模塊,達不到預想的結果,為此提出了一種改進的注意力模塊,其改進過程是:首先將前卷積層輸出的尺度為C維、水平長度為W,垂直長度為H的特征,作為注意力模塊的輸入,并從垂直和水平兩個方向進行平均池化,而后將池化后的兩種特征進行相加合并并進行卷積操作;合并卷積后的特征通過批量歸一化和非線性處理后再度從垂直和水平兩個方向進行卷積操作,得到兩個方向的分量卷積特征,之后通過sigmoid函數計算并合并為新的特征。這樣處理后的特征不僅兼顧了通道域和空間域上的注意力特征,并且通過對垂直和水平方向的卷積操作得到更深層次的特征。其計算原理如圖6所示。

圖6 改進的注意力模塊計算過程
增加卷積層可以提取到更深的圖像特征信息,但同時會大量增加模型的參數與運算復雜度,為了能提取到更深層次的特征,且不增加過多模型參數,引入ResNet結構,殘差結構與改進的注意力模塊方式結合如圖7所示。

圖7 CA模塊在殘差網絡中的位置
同時為了更直觀體現此改進方法的有效性,分別將ResNet-10和ResNet-10+改進注意力模塊在公開數據集CK+上進行實驗驗證,由于受原生的ResNet-10層數的限制,實驗效果截取了前20個迭代循環的準確率—模型損失曲線,其實驗結果如圖8所示。

圖8 ResNet-10與ResNet-10+改進的注意力模塊在CK+上的準確率—模型損失曲線
分析準確率—模型損失曲線,發現兩者曲線波動都較大,這是因為兩者只迭代了20次。但通過對比不難發現,在ResNet-10中增加改進注意力模塊后,其準確率曲線精度上升的更快且精度更高,即此方法可以加快模型的收斂,并且通過對比兩者的模型損失曲線,發現添加改進注意力模塊后模型損失曲線波動更小,即模型的魯棒性能更棒。該實驗說明了此方法是針對模型的有效改進。
目前主流的特征提取網絡都是基于卷積神經網絡而衍生,本文借鑒了DeepID3[16]與ResNet-10結構,并重新設計了特征提取網絡,通道一使用改進的LBP特征提取而后連接ResNet進一步獲取特征圖;通道二同樣使用ResNet,在每個卷積層和批量歸一化層后添加改進的注意力模塊。之后連接特征融合網絡和改進的損失函數輸出分類結果。雙通道殘差網絡設計結構如圖9所示。

圖9 改進的雙通道殘差網絡
其中,卷積層用于提取輸入的不同特征,使用ReLU激活函數增加稀疏性,緩和過擬合;在卷積層和池化層之間加入批量歸一化層,用于提高訓練速度,降低過擬合風險;并且在通道二的每個批量歸一化層后面加入CA模塊,進一步提取重要特征;池化層降低模型參數量,優化模型的后續計算量;特征融合網絡通過實驗確定融合系數,進行特征的融合;全連接層連接所有特征,將輸出值送入分類器進行分類。
搭建特征融合網絡的主要作用是為了使前置網絡提取到的特征經過融合后,輸出更能表征圖像的特征并提升其魯棒性。
本文采取了加權融合方式構造特征融合網絡,通過設置加權系數β對通道一網絡和通道二網絡加權求和得到雙通道輸出特征
Qw=β·Qx+(1-β)·Qy
(3)
式中:Qw為融合后得到的特征,Qx為通道1輸出的特征,Qy為通道2輸出的特征,β的最優值通過在Oulu-CASIA、CK+、JAFEE這3個公共的表情數據集上進行交叉實驗獲得。將融合后的特征輸入全連接層,并連接分類器輸出分類結果。
2.3.1 Softmax損失函數
Softmax損失是一種用來應對多分類問題的監督學習算法,其對于訓練集中每個樣本的k個估計概率如式(4)所示
Ls=-1m(∑mi=1logewTy(i)x(i)∑kl=1ewTlx(i))
(4)
其中,m為最小批次中訓練樣本的數量,k為分類的個數,x(i)、y(i) 表示第i個訓練樣本及其標簽,wTlx(i) 表示當前第l個樣本經過網絡訓練后的輸出,分母的作用是正則化,用以確保每個向量的輸出值都在[0,1]之間。
但對于表情識別問題,Softmax損失雖然可以保證類間差異最大化,但不能保證類內差異最小化。對于圖像的相似特征,Softmax損失并不能很好區分。例如,單一的神經網絡后接Softmax損失作為分類器并不能很好區別貓和狗,有時甚至會誤判,因為其有較多相似的特征。為此,需要提升分類器在相似特征間的區分度以提高分類準確度。
2.3.2 改進方法
在Softmax損失函數引入中心損失以改進,中心損失的作用是可以針對類內間距做優化,使得類內間距減小。在保留了原來的分類模型的基礎上,又為每一個類指定一個類別中心,即同一類的圖像對應的特征都盡量地靠近和自己相同的類別中心,對于不同的類別中心則盡量遠離。中心損失函數如式(5)所示
Lc=12∑mi=1xi-cy(i)22
(5)
其中,m為最小批次中訓練樣本的數量,xi表示第i個訓練樣本,cy(i)為y(i) 類的樣本中心。改進后的Softmax損失函數如式(6)所示
L=LS+λLC=-1m(∑mi=1logewTy(i)x(i)∑kl=1ewTlx(i))+λ2∑mi=1xi-cy(i)22
(6)
式中:λ添加在中心損失函數之前用于平衡兩者;當λ越小,則中心損失趨于零,此時類內差異占整個目標函數的比重就越小;當λ越大,則中心損失占比越大,此時類內差異占整個目標函數的比重就越大。通過改進參數λ, 使得輸出的面部表情特征類間分散、類間聚合化,以提高表情分類精度。
在訓練開始時,首先初始化池化層和loss層的參數:其中,W為初始權重,θC為初始卷積層參數,{cy(i)|y(i)=1,2,3,…,n} 為第n個樣本的樣本中心,同時輸入參數:λ、α和學習率μt, 其中迭代的次數t初始化為0,總迭代次數為T。 則反向傳播的計算公式為
?Lt?xti=?LtS?xti+λ·?LtC?xti
(7)
W的更新公式為
Wt+1=Wt-μt?L?Wt
(8)
樣本中心的更新公式為
ct+1y(i)=cty(i)-α·Δcty(i)
(9)
θC的更新公式為
θt+1C=θtC-μt∑mi=1?Lt?xti·?xti?θtC
(10)
根據以上分析,Softmax損失函數與中心損失函數聯合計算方法步驟如算法1所示。
算法1:Softmax損失函數與中心損失函數聯合計算方法
初始化:總迭代次數T, 收斂精度ε, 迭代次數t=0
步驟1 計算聯合損失去L(t):L(t)=L(t)s+L(t)c;
步驟2 計算反向傳播誤差;通過式(7)對每一張圖片求解;
步驟3 計算參數W,通過式(8)對每時刻的W求解;
步驟4 對每個不同的類別,通過式(9)更新樣本中心;
步驟5 更新參數θC, 通過式(10)計算最新參數;
步驟6t←t+1, 若t=T或 |θt+1C-θtC|≤ε, 則結束;否則,返回步驟1。
本文所使用環境及計算機配置為Intel Core i7 8700、32 G內存、NVIDIA 3080顯卡10 G顯存,軟件平臺為Python3.6、TensorFlow-gpu 1.3.1、NVIDIA CUDA 10.0、cuDNN 7.4.1庫。
為了更好和其它主流算法比較,本文在對參數調優后,選用Oulu-CASIA、CK+、JAFEE這3個公共的表情數據集進行實驗,各數據集及各表情數量見表1。

表1 各數據集表情種類及數量
由于各數據集樣本數量相差巨大,故需要針對性的對數據集進行數據增廣。其目的是,使得各樣本數據量較為平均,并使得訓練的模型具有更好的魯棒性。
首先分析數據集:以Oulu-CASIA數據集為例,其中中性的表情占其總數的近74%,而其它6種表情數量差別不大。對于訓練網絡而言,若同一批次訓練樣本數較小,有可能會導致這一批次訓練的圖片幾乎全為此種單一種類的圖片,不利于網絡學習其它表情特征且會導致模型損失曲線波動幅度較大;為此,需要針對性的對Oulu-CASIA數據集中其它表情進行數據增廣。而對于JAFEE數據集,其表情分布較為均勻,但其主要的問題是由于數據集數量不夠使得模型不能收斂,故對全部表情進行數據增廣。CK+數據集中性表情較其它表情數量在兩倍至3倍,故也需要對其進行針對性的數據增廣。具體處理方式如下:
(1)Oulu-CASIA表情數據集包含7種表情,分別包含厭惡、憤怒、懼怕、愉快、悲傷和驚詫以及中性表情。其中一共包括10 880個樣本。選取其它6種表情樣本共2864張,進行數據增廣,一共生成了14 320張數據集,增廣后的數據集樣本量為22 336張。其中訓練集20 886張,驗證集1450張。
(2)CK+表情數據集同樣包含7種表情,同樣包含厭惡、憤怒、懼怕、愉快、悲傷和驚詫以及中性表情。其中一共包括800個樣本。進行數據增廣,一共生成了12 000個樣本,其中訓練集10 800張,驗證集1200張。
(3)JAFEE表情數據集是由日本人和白種人面部情緒圖像構成的數據集,包含厭惡、憤怒、懼怕、愉快、悲傷和驚詫以及中性表情。其中一共包括213個樣本。進行數據增廣,一共生成了10 650個樣本,其中訓練集9585張,驗證集1065張。
針對以上分析,對于以上3個數據集使用的數據增強方式及參數見表2。

表2 雙通道卷積神經網絡參數設置
以數據集中某表情圖片為例,其數據增強過程及數據增強后的結果如圖10所示。

圖10 部分數據集原圖與數據增強的效果
雙通道網絡的訓練基本參數包含每一批次訓練量(Batch-size)、基礎學習率(Base-learning rate)、學習率動量(Momentum)、隨機失活(Dropout)。網絡采用帶動量的學習率,將初始學習率設置為0.01,并采用自適應學習率不斷進行修正。考慮到顯卡性能及顯存,將Batch-size設置為32。Momentum設為0.9。為使得模型在訓練中減少過擬合現象,并使輸出結果具有一定的稀疏性,將Dropout設置為0.5。雙通道殘差網絡參數設置見表3。

表3 雙通道殘差網絡參數設置
對于特征融合網絡加權系數β的確定,方法是通過對數據集進行分塊后交叉驗證來獲得最優解。為了使實驗結果盡可能準確,本文采用20組交叉驗證方法在原始公開數據集Oulu-CASIA、CK+和JAFEE數據集上進行驗證,將數據集分為20份,取其中19組作輪流訓練的訓練集,1份作為驗證集,20次結果的均值作為加權系數β的平均結果。分別在以上數據集上迭代10個循環后的實驗結果如圖10所示。
由圖11綜合分析可知,對于CK+和JAFEE數據集,加權系數β取0.5時識別精度最高;對于Oulu-CASIA數據集,加權系數β取0.7時識別精度最高;經過將3個數據集一起訓練并對比最優值發現,當加權系數β取0.5時,對3個數據集都能取得較高的識別精度。

圖11 加權系數β與識別準確率關系曲線
分析不同數據集的加權系數β曲線的波動幅度與最優值不同的原因:
(1)加權系數β曲線波動幅度不同的原因:對于CK+與JAFEE數據集,對比兩者曲線,JAFEE數據集的曲線比CK+數據集的曲線波動更小,這是因為其數據內各樣本數量平均,在網絡設置的每一批次訓練量的情況下,不會出現某一種標簽過多的情況從而影響模型的收斂;而對于Oulu-CASIA數據集,其中性表情樣本數量和其它表情樣本數量有十倍以上的差距,在某一訓練批次中甚至會出現全是中性表情的極端情況,而下次訓練批次又出現了上一批次中未出現過的其它標簽的表情,這也導致了其加權系數曲線波動最大;
(2)加權系數β最優值不同的原因:分析CK+與JAFEE在加權系數β取0.5時取得最優值,而對于Oulu-CASIA數據集卻是在0.7時取最優值,經過反復實驗論證,發現其中中性表情的數量較其它數量過多,并且這些中性表情雖是是同一個表情標簽,但同標簽的中性表情之間存在比較大的差異,即同一標簽的類內間距較大。結合通道一在提取特征中更注重的紋理和微小特征的提取,這就需要給通道一輸出的特征更高的加權系數,以保證特征融合后的準確度;
(3)綜上分析,若以某一實際使用場景為例:例如如果對于智能駕駛中的駕駛員面部檢測場景,考慮到駕駛員在更長時間還是處于中性的表情,這個時候Oulu-CASIA數據集的數據結構更合理。但為了兼顧其它兩個數據集的數據結構,且為了更大程度上增加對相似表情的區分精度,為此選擇了對于3個數據集都能取較高精度的加權系數β。
3.3.1 實驗結果
在數據增廣后的CK+、JAFEE和Oulu-CASIA數據集上用驗證集進行實驗,經過30個epochs,得到對應的損失(loss)和識別率(accuracy),分別如圖12(a)、圖12(b)和圖12(c)所示。

圖12 3個數據集的識別率和損失率
其中,CK+數據集經過26個epochs后收斂;JAFEE這3個數據集經過21個epochs后收斂;Oulu-CASIA數據集經過28個epochs后收斂。迭代完30個epochs后準確率見表4。

表4 本文方法識別準確率
分析表4,本文方法的檢測幀率在3個數據集上的平均幀率為41.9 FPS,達到實際使用場景最低30 FPS的要求。但是考慮到在實際的使用場景中,可能會出現掉幀的情況,所以在實時性上還有很大的優化空間。
3.3.2 與局部二值與支持向量機方法比較
在公開數據集CK+數據集上使用單通道局部二值與支持向量機方法[16]進行測試,并與本文方法的模型進行比較。兩種不同方法在CK+數據集上的混淆矩陣如圖13所示。

圖13 兩種方法在CK+上的混淆矩陣
通過分析混淆矩陣數據,本文方法對比局部二值與支持向量機方法在憤怒表情上識別率提高了14.64%,在懼怕表情上識別率提高了12.96%,悲傷表情上識別率提高了15.52%;在厭惡、開心和驚訝表情的識別準確率方面也有了一些提升;結合數據集中部分易混淆樣本如圖14所示,分析原因:對于數據集中容易混淆的憤怒、悲傷和懼怕這3種表情,其表情變化部分多集中在眉頭、眼睛和嘴角且具有較多的相似特征。具體表現為:對于憤怒和驚訝表情,其雙眼圓睜,嘴巴張大;對于憤怒和悲傷表情,其眉頭緊縮,嘴角下拉。故對于此類表情,傳統算法很難從中找出決定隸屬于不同表情的決定性特征。

圖14 數據集中部分易混淆樣本
從整體的實驗結果分析,對于以上3個數據集中的6種表情識別率在基本都在90%以上,尤其憤怒、懼怕和悲傷這3個表情識別率提升顯著,結果表明,本文的方案具有較大的提升。
3.3.3 與其它深度學習方法比較
為了比較本文方法與其它深度學習方法在面部表情識別上的性能,設計了另一組實驗,同樣在公開CK+數據集上進行實驗,與其它基于深度學習方法進行對比,見表5。

表5 在CK+數據集上識別率比較
通過復現并分析已有的方法,其中,文獻[16]采取局部二值化方法與支持向量機的方式進行表情識別,其識別精度低于基于深度學習的其它算法,并且由于依賴手工提取特征,使得其泛化能力較差,但其由于設計簡單,不依賴GPU對算力要求不高,且運行速度最快,適用于一些即時性高且要求精度不高的場景;文獻[17]采用局部二值化方法后連接CNN進行表情識別,精度相比SVM方法有所提高,但并未對其全卷積結構進行優化導致運行速度較慢;文獻[18]使用全局與局部圖像作為輸入,在CNN中添加空間注意力機制模塊,并利用多尺度的方法取得了較高的精度,但其只關注了空間域上的信息,而將通道進行池化壓縮,導致其損失了通道上的信息;文獻[19]使用LBP和HOG兩種特征提取算子構建雙通道特征網絡,兼顧了輪廓和紋理的特征并取得了較高的精度,但分析其識別錯誤的圖像,發現其對于不同光照的表情的魯棒性不夠好。
為解決傳統表情識別算法光照魯棒性差和相似表情區分度低的問題,本文提出了一種改進的雙通道殘差網絡,首先在通道一改進LBP算子,在保留其對于紋理特征、微小特征的敏感性的基礎上提高其光照魯棒性;接著在通道二嵌入改進的注意力模塊,提升其全局特征提取能力。之后通過建立特征融合網絡將兩個通道的特征進行融合,設置加權系數平衡兩個通道提取的特征,使得提取的結果可以更為全面地表征面部表情,通過多次交叉驗證實驗取平均值的方式確定了對于不同數據集最為魯棒的加權系數,并結合數據集和網絡模型深入分析了不同數據集的加權系數取值。由于標準數據集中存在相當多具有相似特征的表情,但它們的表情標簽是不同的,這對于分類任務來說是十分不利的。本文引入中心損失并設計聯合算法,進一步提高了相似表情之間的區分度,進而提高了總體表情識別精度。在3個數據集(CK+、JAFEE和Oulu-CASIA)上分別到達98.53%,96.42%和94.24%的識別準確率,實驗結果表明本文提出的改進方案對比傳統特征提取算法和其它深度學習方法在面部表情識別方面不僅提升了光照魯棒性,并且提升了對于相似表情的區分度。