喬桂芳,侯守明*,劉彥彥
(1.河南理工大學計算機科學與技術學院,河南焦作 454003;2.杭州師范大學阿里巴巴商學院,杭州 311121)
面部表情作為人臉識別和情感信息傳遞的重要門戶,在人機交互領域正經歷著空前未有的發展。面部表情識別主要利用計算機提取給定的靜態人臉圖像或動態人臉序列的表情特征,使其以人的思維對檢測到的表情進行理解和分類,滿足人們在不同應用場景下的需求,進而建立良好的人機智能交互環境。面部表情識別技術在疲勞駕駛、互聯網教學、刑事案件偵測、醫學診斷、安防監控、心理咨詢等領域有著非常廣泛的應用。
面部表情識別的五個過程包括表情圖像獲取、輸入數據預處理、提取層次特征、表情分類和所屬類別,其核心是提取層次特征,高效快速地抽取表情圖像中的有利信息是提升表情識別準確率的重要前提。傳統的表情識別方法主要通過人工提取特征,如Gabor 小波變換、方向梯度直方圖(Histograms of Oriented Gradients,HOG)、主成分分析(Principal Components Analysis,PCA)等,再結合支持向量機(Support Vector Machine,SVM)進行分類。傳統方法設計特征需要借助一定的專家知識,人為干擾因素較大,且易丟失原有樣本的特征信息,進而影響表情識別準確率。然而卷積神經網絡(Convolutional Neural Network,CNN)可將原始數據直接傳送至模型,依據端到端的圖形拓撲結構自動提取輸入數據的抽象特征,有效縮短人工預處理的過程。1989年,LeCun 等發明CNN,并于1998 年采用LeNet-5 模型成功提高手寫字符識別率。Krizhevsky 等在2012 年創造了深層CNN AlexNet,首次實現Top 5 最低誤差率,是CNN 崛起的轉折點。Simonyan 等于2014 年提出VGGNet,通過疊加小尺寸卷積核不斷加深網絡層次,取得不錯的分類精度。為了更有效地改善表情識別的準確性,眾多研究者開始改進CNN與其他特征方法結合使用,Li 等提出改進CNN 與注意力機制相融合的方法,將全局圖像特征與多個無遮擋的面部感興趣區域特征集合起來,從而提高無遮擋區域特征的表現能力;Xie 等采用空間注意力+多路連接的方法對CNN 進行針對性的改進,先微調預訓練的模型得到特征圖,加入空間注意力機制,突顯表情區域,再對具有明顯區分性的特征向量進行全連接和分類;Xia 等設計多個損失函數加權組合,通過網格搜索方法提升含遮擋人臉表情的識別效果;王忠民等借助改進的CNN 模型作為特征提取器,抽取更深層次的復雜特征,融合SVM 進行表情識別,最終識別精度高于傳統方法。上述研究表明,CNN 的確能夠進一步提升表情識別準確率,但隨著各種網絡模型及其變體的提出,導致網絡結構越來越復雜,參數量增多且識別效果不夠理想。
為此,本文提出一種基于改進卷積神經網絡與非線性支持向量機相結合的面部表情識別算法。首先,在感受野大小不變的前提下,多個結構簡單的小尺寸卷積核以串并聯融合的方式代替大尺寸卷積核,在增強模型特征學習能力的同時擁有更少的網絡參數,且獲得的特征分類性更強;其次,采用全局平均池化(Global Average Pooling,GAP)層取代全連接層,簡化卷積結構,同時省略大量訓練調優的參數;最后,送入SVM 分類器進行表情分類,以提升模型的泛化能力。
典型的CNN由卷積層、池化層、全連接層和Softmax 分類函數組成,圖1 為其基本結構。CNN 具有強大的表征學習能力,其隱含層內引入的參數共享和層間連接稀疏性機制,能極大地減少模型參數量,具備辨識面部表情微小變化的潛力。

圖1 CNN基本結構Fig.1 Basic structure of CNN
圖1 中的卷積層用于提取圖像細節和抽象信息,實現參數共享;池化層能縮減特征圖尺寸,起到降維效果;全連接層執行最終分類任務。經大量研究發現,傳統CNN 算法用于表情識別需關注以下三個問題:
1)面部表情識別的關鍵在于快速覺察人臉五官微妙變化的特征,傳統CNN 直接應用于面部表情識別領域,識別效果不佳;
2)傳統CNN 模型中2~3 層的全連接層產生的參數量過大,占據CNN 總參數的80%以上,參數過多導致計算量增加,還易引起過擬合,不利于面部表情的快速分類;
3)傳統CNN 模型中的Softmax 分類函數只是使輸出結果符合概率分布,并未對識別性能產生幫助,在小樣本和多分類任務中,性能不優越,難以進一步提升最終識別精度。
w
×h
×d
,將平均池化的窗口大小動態設置成特征圖大小w
×h
,經GAP 變換后,每一層w
×h
會被平均化成一個值進行展平和全連接操作,即輸出值為1×1×d
,特征圖結構可表示為N
×1×1×d
,N
表示特征圖的數量,最后將得到的二維數據N
×d
送入SVM 分類器。m
類,先構造m
-1 個SVM 子分類器,轉換為處理二分類問題,第i
個分類器將類別為T
的樣本標記為+1,剩余類別全標記為-1,SVM 多分類算法過程如圖2 所示。
圖2 SVM多分類算法過程Fig.2 SVM multi-classification algorithm process
圖3 為所提優化算法的基本識別流程。

圖3 基于改進CNN+SVM的面部表情識別算法流程Fig.3 Flow of facial expression recognition algorithm based on improved CNN+SVM
本文算法的步驟如下:
1)輸入層對原始表情數據進行預處理;
2)特征提取層對預處理后的表情灰度圖進行深度提取:


3)計算修正線性單元(Rectified Linear Unit,ReLU)激活函數值:

4)用最大值池化方式進行降維減參:

MP
表示最大池化后的輸出特征圖;X
(K
)表示輸出特征圖的第K
個像素值。5)對最后卷積層輸出的特征圖進行GAP 變換:


W
和偏置b
:
η
表示學習率;E
表示誤差函數。7)將GAP 層的稀疏特征數據送入SVM 分類器,計算高維特征空間最大分離超平面:

x
表示任意一個樣本點;x
表示中心坐標值;σ
表示函數的寬度參數,σ
<0。圖4 為算法總體改進策略。根據深度模型VGG16連續卷積的思想設計網絡模型,本文構建的基于改進CNN+SVM 算法的面部表情識別模型如圖5 所示。圖5 中標注了每層的命名、卷積核大小和通道數,“@”符號后面的數字為卷積層通道數。此模型由一個輸入層、三個卷積模塊層、一個GAP 層和一個SVM 分類器構成。三個卷積模塊層結構相同,由含兩個3×3 卷積核的卷積層串聯,隨后緊跟池化層及隨機丟棄層(Dropout)組成,另外,模型中加入ReLU 激活函數防止梯度彌散。改進模型先通過卷積模塊中的卷積層提取表情圖像特征,之后將提取到的深層次特征通過下采樣層進行降維處理,并融入Dropout 機制預防過擬合,GAP 層將最后得到的特征圖送入SVM 分類器,執行分類任務。

圖4 本文算法總體改進策略Fig.4 Overall improvement strategy of proposed algorithm

圖5 基于改進CNN+SVM算法的面部表情識別模型結構Fig.5 Structure of facial expression recognition model based on improved CNN+SVM algorithm
圖5 中的卷積模塊1(ConvBlock_1)、卷積模塊2(ConvBlock_2)、卷積模塊3(ConvBlock_3)是改進CNN+SVM模型中的卷積提取層。其中:ConvBlock_1 用兩個通道數為32 的3×3 卷積核提取面部表情特征,選用小尺寸卷積核代替較大卷積核,能有效減少網絡模型參數量,同時提升網絡性能;ConvBlock_2 中用兩個通道數為32 的3×3 卷積核并聯取代一個通道數為64 的3×3 卷積核,通過拓展網絡寬度保持表情圖像的性質,確保參數量一致的前提下,前者能提取的特征分類性更強、非線性激活更多;同樣原理,將ConvBlock_3中通道數為128 的較大卷積核進行串并聯融合操作。
輸入48×48 像素的表情灰度圖,經過ConvBlock_1 操作和Same 填充后,進行了平卷積,輸出與輸入大小一致,經最大值下采樣,得到的特征圖大小減半,為24×24 像素。通過ConvBlock_2 和ConvBlock_3 中“卷積+最大池化”計算后,得到6×6×128 的特征圖,經GAP 變換,得到一個1×1×128 的張量,送入SVM 進行分類。模型中各網絡層的參數量計算方法如式(8):

CNN
表示卷積層的參數量;FCN
表示全連接層的參數量;K
表示卷積核個數;H
和W
分別表示卷積核的高和寬;I
表示卷積層輸入數據的通道數;B
表示偏置量;FC
表示全連接層輸入數據的維度;FC
表示輸出神經元的節點數。基于改進CNN+SVM 算法的面部表情識別模型的各網絡層參數情況如表1 所示,該模型的總參數量遠小于傳統CNN 模型。
表1 基于改進CNN+SVM算法的面部表情識別模型的各層參數描述Tab 1 Parameter description of each layer of facial expression recognition model based on improved CNN+SVM algorithm
本文模型訓練采用Fer2013和CK+兩個數據集,按8∶2 的比例隨機劃分為訓練集和測試集。表2~3 給出了各數據集的標簽對照及訓練集和測試集中各表情類別數量分布情況。實驗中先將全部圖像預處理并歸一化成48×48 大小的灰度圖,如圖6 所示。

表2 Fer2013數據集中英標簽對照及各類別數Tab 2 Chinese and English labels and numbers of different categories in Fer2013 dataset

圖6 Fer2013、CK+數據集中7類表情樣例圖Fig.6 Sample diagrams of 7 categories of facial expression in Fer2013 and CK+datasets
由于CK+數據集樣本總數偏少,送入神經網絡訓練容易造成泛化能力弱及過擬合問題,實驗過程中對CK+訓練集圖像做隨機旋轉、隨機縮放、水平/垂直平移、隨機水平翻轉、亮度及對比度變化等幾何變換以擴增數據集,如圖7 所示。

圖7 CK+數據集中人臉圖像數據增強前后對比Fig.7 Comparison before and after facial image data augmentation in CK+dataset

表3 CK+數據集中各表情類別數Tab 3 Number of each expression category in CK+dataset
采用深度學習框架Tensorflow 來驗證本文改進模型的可行性,實驗環境及硬件配置如下:CPU 為Intel Core i5-7200U,內存8 GB,GPU4 GB,TITANX(Pascal),軟件環境為Python 3.6.12,Tensorflow 2.0.0,Windows10 專業版64 位。
本實驗主要通過識別準確率、損失函數變化曲線、模型參數量三個指標來評估算法性能。基于本文算法的改進模型確保訓練時間相差不大,損失函數有所下降,準確率有所提高,模型參數量比改進前有所減少。網絡訓練時的批次大小設置恰當的范圍能使梯度下降方向準確且振蕩小,過大會出現局部最優,過小會難以收斂,通過多次實驗,最終將批次大小設置為24,并加入隨機梯度下降策略優化網絡模型。實驗參數設置如表4 所示。

表4 模型訓練參數描述Tab 4 Model training parameter description
利用基于改進CNN+SVM 算法的模型在Fer2013、CK+數據集上訓練,得到的識別精度曲線和損失值變化曲線如圖8所示。由圖8 可看出:在CK+數據集上,當迭代次數達到150時,模型趨于穩定,識別準確率為98.06%;在Fer2013 數據集上,識別準確率達到73.4%,性能明顯提升。圖8(b)中,損失誤差值在特定的迭代次數內逐漸降低,結合了GAP 和SVM 分類器的優點,其收斂速度更快。因此,基于改進CNN+SVM 算法設計的網絡模型能夠很好地學習表情特征,具有更好的分類效果。

圖8 Fer2013及CK+數據集上的訓練過程曲線Fig.8 Training process curves on Fer2013 and CK+datasets
基于改進CNN+SVM 算法的網絡模型在Fer2013、CK+數據集上對各類表情的識別結果如圖9 所示。圖9 中共7 種表情類別,混淆矩陣圖主對角線上數字為該優化算法對各類表情的識別準確率。由圖9 可以得出,本文算法對一些表情變化不明顯和不容易區分的類別誤判率較高。圖9(a)中,類間準確率較低的是恐懼(0.62)和悲傷(0.62),因悲傷和恐懼表情有著相似的嘴角和眉毛變化,導致二者的核心特征難以被充分學習。圖9(b)中,蔑視的準確率最低(0.955),因蔑視表情表現為微抬嘴唇,嘴角微微上揚,面部肌肉運動幅度小,導致在SVM 分類中不易被判斷和識別。

圖9 各數據集生成的表情類別混淆矩陣圖Fig.9 Confusion matrix of expression category generated by each dataset
圖10 描述了傳統LeNet-5 算法與本文算法在Fer2013 數據集和CK+數據集上的識別準確率對比曲線。由圖10 可見,傳統LeNet-5 算法在Fer2013 數據集上的識別率為61.2%,而改進模型識別率達到73.4%,提升了2.2 個百分點;且改進模型在CK+數據集上識別率維持在98.06%。本文算法在兩個表情數據庫上效果比傳統LeNet-5 算法更好的原因:1)改進的CNN 結合了GAP 的優點,GAP 層在特征圖與最終分類間轉換更簡單且省略大量訓練參數的特點;2)Softmax 函數分配一個高值給某個節點,其余節點分配低值,結果兩極分化。SVM 是計算每一類樣本的估計概率值,分類性能更可靠。

圖10 傳統模型和改進模型在Fer2013、CK+數據集上的識別準確率比較Fig.10 Comparison of recognition accuracy between traditional model and the improved model on Fer2013 and CK+datasets
為進一步驗證本文提出的改進CNN+SVM 算法的優越性,將本文算法與其他算法進行綜合對比分析。輕量級卷積+注意力機制(Lightweight Convolution Model based on Attention,LCMA)算法,通過分解多路通道卷積減少模型參數,得到69.6% 的識別率。改進CNN+自編碼器(AutoEncoder,AE)引入含注意力機制的CNN 通道和卷積自編碼器預訓練通道相結合的雙通道模型,利用殘差思想提取表情特征,取得72.7%的識別率。結合單發多盒檢測器(MobileNet Single Shot multibox Detector,MSSD)及核濾波(Kernel Correlation Filter,KCF)模型MSSD+KCF對輕量級CNN 改進,跟蹤檢測人臉坐標信息,以多尺度特征融合的方式快速精確地識別表情特征。CNN+改進Softmax先在中心損失函數的基礎上增加注意力機制,再融合Softmax 損失函數共同監督表情訓練,得到良好的識別性能。淺層CNN是在LeNet-5 基礎之上調整并移除兩個全連接層,利用簡單網格搜索方法對圖像隨機旋轉的角度進行最優搜索,取得不錯的分類效果。
由圖11(a)可見,本文算法識別準確率較優,這是因為CNN 在逐層提取表情特征時,小尺寸卷積核提取的特征屬性不同,能充分提取圖像更細節和局部的信息,改善了識別效果;GAP 層改進傳統CNN 中的全連接層,將卷積層輸出特征圖的展平向量過程和分類操作合二為一,直接在特征圖通道上做變換,進行降維減參處理,提高了識別準確率。
在CK+數據集的對比實驗中,淺層神經網絡利用數據增強及人臉裁剪的手段得到97.38%的識別率;CNN+SVM通過在LeNet-5 算法的基礎上增加一層卷積層和池化層,再融合SVM 分類器的方法提升表情識別效果;改進AlexNet通過減少AlexNet 網絡上卷積層的方法,得到97.46%的識別結果;多尺度卷積方法在AlexNet 中引入多尺度卷積,提取不同尺度的特征信息,并把低層次特征信息在向下傳遞的同時與高層次特征信息進行跨連接特征融合,取得較高的識別準確率;CNN+LBP利用LBP 提取表情特征,然后用均值聚類方法得到樣本模板,結合CNN 進行表情的識別,方法有效。由圖11(b)可知,所提出的改進CNN+SVM 算法識別準確率相較于傳統機器學習方法和改進CNN 都有進一步的提升,這是因為通過小尺寸卷積核串并聯融合的技術避免了表情圖像有利信息的遺漏,減少了計算量,再融合SVM 分類器在小樣本數據集上的分類優勢,使得分類效果更優。

圖11 Fer2013、CK+數據集上不同方法的識別效果比較Fig.11 Comparison of recognition effects of different methods on Fer2013 and CK+datasets
由于人們在情感交流時表現出多種混合表情,導致面部表情的識別特殊且復雜。為解決各種網絡模型及其變體識別面部表情時存在的結構復雜、識別不夠理想等問題,本文提出了改進CNN 與SVM 相結合的算法,用于準確且快速地對表情狀態分類。通過網絡串并聯融合的方式提取到更為全局且代表性更強的表情特征,并設計維度自適應GAP 層融合SVM 分類器,有效減少CNN 模型總參數量。由對比實驗得出,該改進算法在Fer2013 數據集上的識別準確率相較于傳統LeNet-5 算法提升了2.2 個百分點,具有一定的識別效果和穩健性。但本文未考慮面部表情信息缺失及非正面人臉圖像在復雜環境下的識別率情況,如何將本文算法應用于復雜環境下的表情識別系統中將是下一步的研究工作。