許學斌,劉晨光,路龍賓,曹淑欣,徐宗瑜
1.西安郵電大學 計算機學院,西安710121
2.西安郵電大學 陜西省網絡數據分析與智能處理重點實驗室,西安710121
人類通過表情傳遞大量的情感信息,隨著人工智能以及計算機技術的發展[1],采用表情識別技術可以從人類的表情中分析出識別對象的情感活動,因此面部表情識別是計算機視覺領域一個很有意義的研究方向[2]。面部表情識別(facial expression recognition,FER)技術是將生理學、心理學、圖像處理、機器視覺與模式識別等研究領域進行交叉與融合[3],面部表情識別在生物特征識別、醫療研究以及自動駕駛等領域都有著廣闊的應用前景。
1971 年Ekman 和Friesen 定義了厭惡、憤怒、恐懼、快樂、悲傷和驚訝六種基本情緒[4]。隨后,藐視也被作為基本的情緒之一[5]。
面部表情識別主要經歷三個過程,如圖1所示。首先是對輸入的面部圖像進行預處理,進行灰度化或者二值化處理,采用計算機技術將圖片信息數字化,再去除圖片噪聲,使某些特征更加敏感;然后提取一種面部表情照片的嘴巴、鼻子以及眼睛等顯著特征;最后根據已經提取好的圖像特征進行人類表情的分類。

圖1 圖像識別過程Fig.1 Image recognition process
傳統的面部表情識別主要是通過人工提取圖像類特征的方法進行分類,如尺度不變特征變換(scaleinvariant feature transform,SIFT)[6]、加速魯棒特征(speeded up robust features,SURT)[7]、方向梯度直方圖(histogram of oriented gradients,HOG)[8]、局部二值模式(local binary patterns,LBP)[9]等方法,但由于其一系列繁瑣的過程,無法滿足實際的應用需求。恰逢此時深度學習進入快速發展階段,而相較于傳統的特征提取方法,卷積神經網絡(convolutional neural network,CNN)模擬人類大腦神經元的傳輸信號方式顯著提升了特征提取能力,因此迅速被應用到圖像分類領域。卷積神經網絡在面部表情識別[10]過程中也有著非常優秀的表現。許多新網絡模型的出現更有利于提取特征,常見的網絡模型有AlexNet[11]、VGGNet[12]、ResNet[13]等。一般的神經網絡方法首先對目標圖像進行特征提取,之后再采用全連接方法進行特征分類。Mollahosseini等人[14]提出了一種深層神經網絡架構,通過多標準人臉數據集來解決面部表情識別問題。Chen 等人[15]提出了一個基于差分卷積神經網絡的兩階段框架,來解決面部表情圖片不平穩特征問題。Zhang等人[16]提出基于靜態圖像的雙通道加權混合深度卷積神經網絡(WMDCNN)和基于圖像序列的雙通道加權混合深度卷積長短期記憶網絡(WMCNN-LSTM),分別用于靜態圖片以及動態序列。Chang等人[17]根據測試樣本的復雜性,將每個測試樣本分配給相應的分類器來解決面部表情數據不平衡問題。Krithika等人[18]基于圖的特征提取和混合分類方法(GFE-HCA)來有效地識別人類的情緒。Pham等人[19]將無處不在的深度殘差網絡和類似Unet的架構相結合,產生了一個殘差掩蔽網絡,使其能夠專注于相關面部表情信息以做出正確的決策。然而,上述的大多數方法對面部表情識別的關鍵特征關系以及空間位置聯系少有關注,顯現不出模型的魯棒性。
區分表情的因素多為人臉中細微的變化,如何更有效地捕捉空間特征信息,對提高表情識別的精度具有至關重要的作用,因此提出稀疏多層感知機的空間特征感知機制,這是一種無注意力網絡結構,對于空間姿態的關注度尤為明顯。除此之外,常規的卷積神經網絡在面對面部表情圖像中復雜的空間關系和特征信息時,不能建立有效特征提取和映射模型,相比之下,膠囊網絡[20]彌補了CNN 無法處理圖片位置方向等缺點,更符合人類認知過程。膠囊網絡以位置向量代替標量輸出的網絡架構,使用獨特的非線性激活以及動態路由更新算法代替原本的全聯接方法進行特征分類,保留各顯著特征之間的位置關系,增強模型的魯棒性。因此,本文對膠囊網絡進行一定程度的優化,設計出一種sMLP-CapsNet網絡模型,sMLP(spare multilayer perceptron)以及膠囊網絡均對空間信息較為敏感,而且采用sMLP相較于原本的MLP只需要很少的網絡參數量便能關注表情識別各個特征之間的位置映射,提升表情識別的分類精度。實驗證明本文方法可以得到更好的結果。
膠囊網絡中的Capsule類似于人類大腦中的Capsule,對目標的位置、尺寸等信息的處理極其有效,更加適應于不同場景下的檢測環境,可以得到更加高效的辨識效率。膠囊網絡結構相較于一般的卷積神經網絡,采用了向量的輸入輸出方式代替原本的標量輸入輸出,這樣做可以更好地保留各顯著特征之間的位置關系。參數的更新方式是Routing-by-Agreement 原則,而不是卷積神經網絡的反向傳播更新參數。因此膠囊網絡能更多地“理解”圖像,通過膠囊可以建立圖像三維關系,輸出的向量還能反映圖像的狀態等,相比于卷積神經網絡,即使學習的數據量很少也能達到很好的效果。
CapsNet 如圖2 所示,由編碼器和解碼器兩部分組成。編碼器由卷積層、主膠囊層以及數字膠囊層構成,后三層由三個全連接層構成解碼器。編碼器結構的卷積層是整個CapsNet結構的第一層,就是常規的卷積操作,其作用是進行圖片的高層次特征提取,訓練網絡的過程就是改變卷積核的權值,使得卷積核可以提取分類所需要的特征信息;主膠囊層是在膠囊內進行卷積操作,提取輸入的多維實體特征后進行拼接;數字膠囊層使用動態路由算法進行權值更新,映射到最終的輸出空間上。解碼器相當于重構圖像,就是把訓練出的類別重新構建出實際圖像,其實現方式是將Capsule 的輸出向量用作重構網絡的輸入,經過三個全連接層重構解碼出完整的圖像。

圖2 膠囊網絡結構Fig.2 Capsule network structure
CapsNet 的訓練過程分為三個步驟,圖3 是膠囊網絡的算法結構。

圖3 動態路由算法Fig.3 Dynamic routing algorithm
參數ωij通過反向傳播算法進行更新,對輸入向量利用矩陣ωij相乘,得到淺層膠囊,這一步是通過矩陣ωij來映射低層特征與高層特征的相對關系,即通過這些低層次的特征可以組成一個什么樣的圖,后續來判斷其屬于哪一類;
通過對進行加權相加得到sj,耦合函數cij通過softmax()函數計算,這里是用來衡量低層膠囊的特征對高層膠囊特征的重要程度,比如說一張圖像的嘴巴更能反映這張圖所屬的類別,那么權重cij就會大一些。這里的參數bij初始為0,然后通過利用淺層輸入向量和實際輸出向量νj的一致性進行更新,當兩個向量同向時即代表二者相似度較高,當前的低層特征更能反映圖像特征,此時乘積為正,bij權重增加,表示當前低層膠囊更被高層膠囊所接受;相反乘積為負時,表示底層膠囊更容易被高層膠囊所排斥。通過這樣的權重更新方式建立起了低層特征與高層特征的關聯,使模型能更好地理解圖像。
最后利用squash函數非線性變化,得到深層膠囊向量νj。圖片分類的概率用輸出向量的模長表示,模長越大代表圖片屬于這個類的概率越大。
Tang 等人[21]基于MLP 的視覺模型,構建了一個稱為sMLPNet的無注意網絡,使用稀疏連接和權重共享設計sMLP模塊。如圖4所示,相較于原始的MLP(a)深色令牌與其他所有令牌交互的方式,sMLP(b)中的令牌只需要與其同行同列位置的令牌交互,當sMLP執行兩次時就可以實現與所有其他藍色令牌的交互。對于一張2D 圖像,sMLP 沿高度或者寬度應用1D MLP,并且參數在行或列之間共享。

圖4 兩種令牌交互方式Fig.4 Two tokens interaction mode
sMLP 處理相較于MLP 大大減少了模型訓練參數以及計算復雜度,改善了MLP 常見的因參數量過大產生的過擬合問題。除此之外sMLP 無注意力網絡對面部表情空間姿態信息表現尤為突出,提升了模型對面部表情的分類能力。
通過稀疏連接,sMLP 大大減少了模型參數以及計算復雜性,首先避免了常見的MLP過擬合的問題,其次sLMP 注意到空間信息對表情識別的幫助尤為明顯。sMLP網絡結構如圖5所示,由三個分支組成,第一個分支對水平方向的信息進行混合,中間分支為輸入的自我映射,第三個分支對垂直方向的信息進行混合,在分支末端將分支信息拼接混合,再進行卷積處理后獲得最終輸出。

圖5 sMLP塊結構Fig.5 sMLP block structure
本文使用H×W×C表示token 的輸入,在水平混合路徑將輸入重塑為(HC)×W,多層感知器集中于對W的處理,然后被應用到HC進行信息混合;在水平混合路徑將輸入重塑為(WC)×H,多層感知器集中于對H的處理,然后被應用到WC進行信息混合;最后與輸入的自我映射進行拼接。此過程可表示為:
本文在膠囊網絡的基礎上提出了一種面部表情識別模型sMLP-CapsNet。該模型可以精準地獲取面部圖片的整體特征和局部特征,然后使用膠囊考慮對象的空間位置信息,進而實現分類預測的目標。sMLP-CapsNet模型的網絡結構如圖6 所示。sMLP-CapsNet 模型前半部分特征提取部分,相比于原始的膠囊網絡結構多出的卷積層結構更加容易提取目標的主要特征信息,有助于面部表情識別。sMLP-CapsNet 模型后半部分,通過三個全連接層使用面部膠囊層的輸出作為輸入,提取的有用特征用來重構圖像。

圖6 sMLP-CapsNet網絡結構Fig.6 sMLP-CapsNet network structure
sMLP-CapsNet 使用標準的224×224 像素圖片作為網絡結構的輸入。首先第一部分類似于ResNet的前幾層,用于提取目標特征,通過一系列的卷積池化來提取面部的輪廓等整體特征以及局部特征,包括面部的鼻子、眼睛、嘴巴等局部特征以及面部表情的細微特征,每層卷積之后使用ReLU 激活函數把激活的神經元特征保留。sMLP-CapsNet 模型的第二部分是sMLP 的主要模塊,通過第二層對第一層輸出的寬和高分別采用多層感知機有效地關注表情特征的空間關系。最后經過第三層的1×1 卷積進行跨通道聚合減少參數量。sMLPCapsNet 模型的第三部分屬于主膠囊層和數字膠囊層,其使用卷積后的操作作為本層的輸入,使用9×9卷積獲得32通道維度為16的膠囊特征向量。網絡的第五層屬于面部表情膠囊層(FERCaps),其使用特征膠囊的輸入輸出7個膠囊,每個膠囊大小均為1×7,代表7種基本面部表情。
sMLP-CapsNet使用向量輸入輸出保留各顯著特征之間的位置關系。通過輸入輸出之間的關聯性,使用動態路由算法更新權值更新,最終輸出模值的大小代表每一個分類的類別。此外,sMLP-CapsNet 模型網絡使用3 個全連接層分別輸出512、1 024 和150 528 個神經元,通過重構把訓練出的類別重新構建出實際圖像,150 528神經元等于3×224×224的重構圖像。
神經網絡的訓練運算最多的就是關于矩陣的運算,而GPU 本來在圖形處理方面就具有優越的性能,其并行處理矩陣運算的高效性就自然而然地運用到了深度學習過程中。實驗使用的機器配置為:64 位的Win10操作系統,CPU 為Intel Core i5-12400F,內存64 GB,GPU 使用11 GB 顯存的NVIDIA GeForce RTX 2080 Ti訓練,在python3.9中使用Pytorch模塊搭建訓練網絡。
人臉表情公開的數據集已經有很多滿足實驗與研究的需要,本文使用CK+公開實驗數據集和RAF-DB真實世界數據集,下面對這兩個數據集進行介紹。
3.2.1 Extended Cohn-Kanade Dataset(CK+)
CK+面部表情數據庫是由12~30歲年齡段的123個參與者的593 張圖片序列組成,其中包括歐美人、非裔美國人以及其他人種,包括自發表情和擺拍的7種基本表情,圖片的像素大小分別為640×480 以及640×490。實驗中提取有標簽的327個視頻序列的后3幀共981張圖片作為實驗數據集,各類表情部分圖片如圖7 所示。本文剔除了背景對實驗的影響,只保留其面部的數據,處理之后圖片大小為48×48,訓練集和測試集兩者比例設置為8∶2。

圖7 CK+面部表情數據集部分圖例Fig.7 Partial legend of CK+facial expressions dataset
3.2.2 Real-World Affective Faces Database(RAF-DB)
RAF-DB 是一個大規模的面部表情數據庫,包括3萬張真實世界的圖片,本文使用具有7類基本情緒的圖像用于實驗。實驗數據包括12 271 張訓練圖像數據以及3 068 張測試圖像數據,各類表情部分圖片如圖8 所示。本文分別在隨機旋轉圖片角度、圖片隨機豎直偏移、剪切強度、圖片隨機水平偏移、隨機縮放、亮度調節等方面對訓練數據進行擴增,即每張圖片擴增為原來的6倍。

圖8 RAF-DB面部表情數據集部分圖例Fig.8 Partial legend of RAF-DB facial expressions dataset
本文提出的網絡模型從初始化階段到訓練階段參數如表1所示。初始階段偏置設置為0,使用Adam進行權值更新,將其平滑參數β1和β2分別設置為0.9和0.999,ε為1.0×10-8,避免除數為0,epoch 設置為50,batch_size設置為128,即每次讀入128張圖片進行批處理。
為了進一步驗證本文方法的有效性,將本文方法與未改進的網絡進行消融實驗。將ResNet34的前16層與CapsNet相級聯的網絡模型,以及在ResNet34與CapsNet中間加入sMLP的sMLP-CapsNet,在CK+數據集和RAFDB 數據集上分別訓練50 epoch 后,在測試集上得到的消融實驗結果如表2所示。

表2 模型在CK+和RAF-DB數據集上的消融實驗Table 2 Ablation experiments of models on CK+and RAF-DB datasets
從表2中可以看出,將ResNet34的前16層與CapsNet相級聯的網絡模型,在數據集CK+和RAF-DB上分別得到了97.41%以及84.48%的精度。通過上述消融實驗可以看出,本文提出的改進方法,在CK+數據集上提升2.07 個百分點,在RAF-DB 數據集上提升1.21 個百分點,表明本文提出的方法存在一定的合理性。
本文使用模型計算力(FLOPs)和參數(Parameters)對網絡模型的復雜度進行評判。FLOPs 是浮點運算次數,用來衡量模型的計算復雜度。計算FLOPs實際上是計算模型中乘法運算和加法運算的次數,即時間復雜度。Parameters 是指網絡模型中需要訓練的參數總數,即空間復雜度。與經典深度學習方法復雜度對比如表3所示,即使與基礎的神經網絡模型相比,本文方法除了DenseNet的FLOPs以及Parameters相差不大外,相比于其他方法,模型計算量以及參數量均大幅度地縮小。與深度學習方法復雜度對比如表3所示,即使與基礎的神經網絡模型相比,本文方法只和DenseNet 的模型計算量和參數量相差不大,與近兩年的方法相比,RUL[22]使用ResNet18為基礎網絡,因此模型計算力相對較小,但參數量依舊大于本文方法;與EAC[23]相比模型計算量以及參數量均大幅度地縮小。總體來說本文方法的FLOPs以及Parameters均控制在極低的范圍。

表3 支撐實驗Table 3 Support experiment
算法性能精度影響因素有sMLP塊的插入位置、插入數量(插入單組sMLP、連續插入兩組sMLP),以及膠囊網絡動態路由循環次數。表4 是插入位置以及數量的結果顯示,可以看出,在循環3 次以及在Conv3_x 后面插入一個sMLP塊可以達到最優的表現。

表4 影響算法因素Table 4 Factors affecting algorithms
為了對比CapsNet 與sMLP-CapsNet 對各個表情的識別情況,本文繪制了RAF-DB測試集以及CK+測試集的混淆矩陣。混淆矩陣橫軸代表每一類的真實標簽,縱軸代表預測標簽。為了更直觀地預測不同表情的準確率,對混淆矩陣進行了歸一化處理。
從圖9 以及圖10 的RAF-DB 測試集的混淆矩陣可知,改進后的網絡模型在驚訝、快樂、悲傷和中性表情上的識別精度都有顯著的提高,但在其他表情類別上效果表現不佳。改進后的網絡模型相較于改進前在RAF-DB數據集上精度提升了1.21個百分點,證明了本文方法的有效性。

圖9 RAF-DB數據集上CapsNet的混淆矩陣Fig.9 Confusion matrix of CapsNet on RAF-DB dataset

圖10 RAF-DB數據集上sMLP-CapsNet的混淆矩陣Fig.10 Confusion matrix of sMLP-CapsNet on RAF-DB dataset
從圖11 以及圖12 的CK+測試集的混淆矩陣可知,改進后的網絡模型在憤怒、藐視、悲傷等表情上的識別精度也有所提高,證明了本文方法也擁有一定的泛化性能。

圖11 CK+數據集上CapsNet的混淆矩陣Fig.11 Confusion matrix of CapsNet on CK+dataset

圖12 CK+數據集上sMLP-CapsNet的混淆矩陣Fig.12 Confusion matrix of sMLP-CapsNet on CK+dataset
通過實驗結果可以明確本文模型在面部表情識別任務中能夠獲得最優的識別效果。為了驗證模型訓練結果的有效性,在模型進行訓練的過程中保存訓練日志,訓練結束后對日志數據進行可視化,訓練情況如圖13所示。

圖13 模型的損失函數以及精確率Fig.13 Loss function and accuracy of model
將本文方法與幾種典型的表情識別算法在CK+和RAF-DB 數據集上的識別率進行比較,得到的結果如表5 所示。與典型的表情識別算法相比,本文提出的sMLP-CapsNet 網絡模型識別精度為99.48%和85.69%,均得到了較好的結果。從實驗分類結果以及對比其他經典方法可以看出,本文方法可以通過更好的方法保留圖像特征的位置信息來提升圖像分類準確率,使得最終的準確率提升明顯。

表5 本文模型與其他方法在CK+和RAF-DB數據集上識別率對比Table 5 Comparison of recognition rates of this paper model and other methods on CK+and RAF-DB datasets
本文在膠囊神經網絡基礎上進行改進和優化,提出了基于優化膠囊網絡的面部識別模型sMLP-CapsNet。通過優化膠囊神經網絡關注面部表情的空間信息,從輪廓到細節來提取面部表情圖片特征,在CK+數據集和RAF-DB數據集上實驗結果的精度提升效果明顯,展現了本文方法的先進性。未來通過使用視覺形式以及非視覺形式融合的方式,如關注語義特征等更深層次的特征來提升模型的泛化能力,是值得關注的問題。除此之外,如今很多模型在光照、遮擋、背景信息以及面部姿態等復雜環境下的表情識別效果不盡如人意,復雜場景下表情識別也是未來的研究重點。