謝銀成,黎 曦,李 天,李聰聰
(武漢工程大學 電氣信息學院,武漢 430205)
得益于計算機圖像識別技術在各個領域的應用和發展,人臉表情識別技術也得到較大的進步。近年來,人臉表情識別技術在智能駕駛、遠程教育、智能安防、機器人制造、謊言檢測和健康管理等領域得到了大量關注,其用途日益廣泛。傳統識別方法需要人工設計特征提取器,可以提取的特征有LBP[1]、PCA[2]等,但傳統識別方法的魯棒性和泛化能力較差,尤其是在復雜多變的真實環境中,其識別效果極不穩定。深度學習方法不需要人工提取特征,并且在大數據集訓練過程中能夠提取到更深層次、更抽象的表情特征信息。由于深度學習方法的優越性,近年來在表情識別研究中常應用深度學習的方法[3]。
文獻[4]提出VGGNet 模型,運用多個小尺寸的卷積核來代替大卷積核,可以有效降低參數量,加深網絡深度,提升識別精度。文獻[5]提出ResNet 模型,通過加入殘差單元的跳躍連接有效解決了由于網絡加深造成的梯度消失或爆炸問題。在經典網絡的基礎上,文獻[6]提出結合注意力機制和遷移學習的人臉表情識別方法,嵌入空間增強注意力,并在遷移學習中加入距離損失函數,縮小目標域和源域的差異。文獻[7]提出改進VGGNet 和損失函數,提升網絡的特征提取能力,并減弱了誤標注樣本對分類性能的影響。文獻[8]融合金字塔卷積模塊、注意力模塊,更好地提取圖像的細節特征,適用于精細的人臉表情識別。以上網絡雖然考慮了網絡的特征提取能力,但未考慮數據集樣本類別的不均衡問題,會導致模型在少樣本類別上分類效果較差。
注意力機制是為學習到的圖像特征設置權重分布,根據圖像特征對任務的不同貢獻,將學習的權重分布作用在原圖像特征上,增強關鍵特征的權重,減少無效特征的權重。CBAM 注意力機制包括通道注意力機制和空間注意力機制,由它們串聯而成[9]。
通道注意力的具體操作為輸入大小為W×H×C的特征圖F(W 為特征圖的長、H 為特征圖的高、C為通道數),經過并行的全局平均池化和全局最大池化將特征圖變化為1×1×C 的大小,然后經過共享權值的多層感知機(Shared MLP)。為降低網絡參數,隱藏層設置為C/r 個神經元,其中r 為縮放因子,將多層感知機處理之后的特征相加并采用Sigmoid 激活函數映射,得到通道權重Mc與輸入特征F 相乘,完成通道注意力的操作處理,如圖1所示,通道注意力的公式為

圖1 通道注意力模塊Fig.1 Channel attention module

式中:σ 為Sigmoid 激活函數;MLP 為共享參數的感知器;GAP 為全局平均池化;GMP 為全局最大池化;?為逐元素相乘。
空間注意力的具體操作為輸入為通過通道注意力得到的特征F′,分別經過全局平均池化和全局最大池化得到H×W×1 的特征,將它們拼接在一起形成H×W×2 的特征,經過7×7 的卷積操作將通道數變為1,再經過Sigmoid 激活函數得到空間權重系數Ms,得到的空間權重Ms與輸入特征F′相乘,完成空間注意力的操作處理,如圖2所示,空間注意力的公式為

圖2 空間注意力模塊Fig.2 Spatial attention module

式中:σ 為Sigmoid 激活函數;conv 為卷積核為7×7的卷積操作;GAP 為全局平均池化;GMP 為全局最大池化;?為逐元素相乘。
ResNet 網絡中提出了殘差模塊,可以有效避免CNN 網絡加深帶來的網絡梯度消失和梯度爆炸問題[5]。因此本文選擇ResNet50 作為基礎網絡,針對特征提取中包含較多的無效信息,在基礎網絡中加入CBAM 注意力機制,使模型更加關注有效的關鍵特征,減少或忽略一些無效的特征信息,從而提高模型的識別率和魯棒性。CBAM 注意力是一種輕量化的注意力模型,可以集成到現有的網絡架構中,本文將注意力模塊嵌入到ResNet50 模型的殘差塊中,命名為CBAM-Bottleneck,結構如圖3所示。
海西州委常委、格爾木市委書記王勇說,格爾木依托柴達木盆地得天獨厚的生態優勢,積極發展有機枸杞產業,建成全省首個國家級生態原產地產品保護示范區,獲頒我國首張有機枸杞認證證書,出口和創匯位居全省農產品之首,枸杞產業成為拉動農牧業經濟持續增長的引擎。

圖3 加入CBAM 的殘差模塊Fig.3 Residual module added to CBAM
加入CBAM 注意力機制的ResNet50 網絡結構:首先輸入特征通過7×7 卷積操作,其后加BN 層和Relu 激活函數,最大池化層,然后加嵌入CBAM的殘差塊,殘差塊主要有4 種類型(區別在于卷積核的數量),殘差塊的數量分別為3,4,6,3,最后加平均池化層和全連接層,用softmax 分類7 種表情概率,詳細的結構如圖4所示。

圖4 嵌入CBAM 的ResNet50 網絡Fig.4 ResNet50 network embedded in CBAM
運用深度學習方法的圖像識別,需要數據集各類別之間均衡分布,這樣有助于提升網絡的識別精度,避免模型專注于數量較多的樣本,而使得少樣本淹沒在多樣本中,以至于少樣本類別的識別精度較低,從而影響總的識別精度,導致模型的性能較差。本文使用的數據集也存在類別不均衡的問題,尤其是Fer2013 數據集,樣本數量最多的類別(高興)比樣本數量最少的類別(厭惡)多大約16 倍,圖5為Fer2013 數據集的各類別數量。

圖5 原數據集各類別數量Fig.5 Number of categories in the original dataset
針對數據集的類別不均衡問題,本文通過數據增強和應用加權損失函數2 個方法進行優化,數據增強將在實驗部分講述。傳統交叉熵損失(cross entropy,CE)函數公式如下:

式中:N 表示總的樣本數量;Pn,i表示第n 個樣本為類別i 的概率。
交叉熵損失函數在分類問題上有較好的效果,尤其在數據集類別均衡的條件下,但在類別不均衡的時候,傳統的交叉熵損失函數的效果就不太理想。因此,改進傳統交叉熵損失函數,在其基礎上加入權重系數Wn,使其更加適用于類別不均衡的數據集。在表情分類中,設最多樣本類別(高興)數量為S,其他類別樣本數量為Mk(k 為其他類別樣本),則權重系數為Wn=S/Mk,最多樣本類別的權重為1,其他類別的權重大于1,使得網絡模型在訓練過程中更加關注小樣本類別的學習[10]。加入權重的交叉熵損失函數公式為

本文實驗軟件采用Pytorch 和Keras 的深度學習框架搭建,編程語言使用Python,版本為Python3.6.4。硬件平臺為CPU 內存16 GB 的Intel(R)Core(TM)i7-10750H,GPU 內存6 GB 的NVIDIA GeForce RTX 3060 Laptop。
為了對本文所提出的方法進行驗證,本文實驗采用了CK+和Fer2013 數據集進行網絡模型的訓練和測試。
CK+數據集是表情識別研究中常用的數據集,適合用于驗證模型的效果。CK+數據集是通過采集123 名參與者的不同面部表情得到593 例表情圖像序列,其中327 例有表情標簽。數據集共分為7 個表情標簽,標簽標注較準確,如圖6所示。

圖6 CK+數據集的7 類表情標簽示例Fig.6 Example of 7 categories of emoticon labels in CK+ dataset
Fer2013 數據集也是人臉表情識別實驗中經常用到的公開數據集,該數據集共有35886 張表情照片,包括28708 張訓練樣本,3589 張公開測試樣本,3589 張私有測試樣本,圖像為灰度圖,大小為統一的48×48,共有7 類表情標簽。該數據集的各類樣本之間較不均衡,且照片存在水印和遮擋,分類難度較大,如圖7所示。

圖7 Fer2013 數據集的7 類表情標簽示例Fig.7 Examples of 7 categories of emoticon labels in Fer2013 dataset
在表情識別實驗中,數據集照片的尺寸和角度不一致會影響識別效果,針對CK+數據集中原始表情圖像存在多余信息,使用openCV 進行人臉識別,然后對人臉部中心區域進行剪裁。對處理之后的人臉表情圖像進行直方圖均衡化,增加數據集圖像的整體對比度,最后將數據集圖像縮放為48×48 的像素大小。
使用Keras 框架,利用其封裝的ImageDataGenerator 對Fer2013 數據集進行數據增強,采用縮放、旋轉、水平或垂直平移、透視變換等方法,擴充數據集的樣本數量,并著重增加少樣本類別數量,使各類樣本盡量趨于平衡,如圖8為數據增強后數據集各類別數量。

圖8 數據增強后數據集各類別數量Fig.8 Number of types of dataset after data enhancement
在深度學習的分類問題中,經常用到的分類評價標準包括Accuracy(準確率)、Confusion matrix(混淆矩陣)、F1-score(F1 值)等,針對本文,由于要了解各個類別的識別精度,所以本文采用準確率和混淆矩陣來作為評價標準。
準確率為全部分類正確的樣本數除以總的樣本數量,公式為

式中:TP 表示正例分類正確的數量;TN 表示負例分類正確的數量;P 和N 分別為所有正例和所有負例。
為了便于分析,本文的混淆矩陣中的數值由百分比來表示,對角線為該類別預測準確的概率,其余為分類成其他類別的概率?;煜仃嚾绫?所示。

表1 混淆矩陣Tab.1 Confusion matrix
表中TP 為正例分類正確的數量,FP 為正例分類錯誤的數量,TN 為負例分類正確的數量,FN 為負例分類錯誤的數量。
本文在Fer2013 數據集的實驗,模型參數的設置如下:網絡共迭代200 輪,選用自適應估計(Adam)優化器,初始學習率為0.001,迭代60 輪后,網絡每迭代10 輪,學習率衰減為現學習率的0.8 倍,批次大小設為128。在CK+數據集的實驗設置為網絡共迭代150 輪,選用自適應估計(Adam)優化器,初始學習率為0.001,迭代50 輪后,網絡每迭代10輪,學習率衰減為現學習率的0.8 倍,批次大小設為32。
為了驗證文中方法的效果,將原始網絡和加入不同方法的網絡效果做對比,主要針對Fer2013 數據集,效果對比如表2所示。

表2 不同方法在Fer2013 數據集的實驗對比Tab.2 Experimental comparison of different methods in Fer2013 dataset
Fer2013 數據集上的實驗,分為原始數據集和數據增強版的數據集,分別在不同方法上進行實驗,在基礎網絡下,原始數據集識別準確率為70.05%,數據增強后識別準確率為70.49%,有小幅度的提升。在基礎網絡中加入CBAM 注意力機制后,兩種數據集下的識別精度都有提升,表明加入注意力機制后,模型的特征提取能力得到提升,網絡更多的關注有效特征。損失函數改為加權的交叉熵損失后,原數據集和增強后的數據集均有提升,但原數據集的提升幅度較大,原因是原數據集的類別不平衡較明顯,所以改為加權重的交叉熵損失后,對識別精度的提升較大。在加入注意力機制和使用加權損失函數的模型中,識別的最終精度達到了72.38%,表明本文的方法在人臉表情識別中具有一定的有效性。
圖9為Fer2013 的混淆矩陣,可以較清晰地看到各類表情的識別準確率和誤分類情況,由混淆矩陣可知,高興類別的表情識別率最高,原因為其較易分辨且樣本數量較多,生氣、厭惡和恐懼等表情的識別精度不高,原因是這些類型有相似性且樣本較少,不易分辨。但從混淆矩陣也可以看出,各類別的識別效果趨于均衡,說明重加權的交叉熵損失函數有一定的效果。

圖9 Fer2013 的混淆矩陣Fig.9 Confusion matrix for Fer2013
為了證明本文方法針對人臉表情的識別效果,在CK+和Fer2013 數據集上與國內外的優秀論文進行對比,如表3、表4所示。

表3 不同方法在Fer2013 數據集的效果對比Tab.3 Effect comparison of different methods in Fer2013 dataset

表4 不同方法在CK+數據集的效果對比Tab.4 Effect comparison of different methods in CK+ dataset
表3中文獻[11]的方法為增加Fer2013 數據集的數量結合CNN 網絡進行識別;文獻[12]分割出輸入照片的人臉表情關鍵特征區域以提升網絡的準確率;文獻[13]使用特征圖聚類的方法,去除特征冗余以獲取更有效的特征。本文方法高于以上文獻的識別精度,表明本文方法在Fer2013 數據集上有一定的提升效果。表4中文獻[14]使用深度網絡結構,引入殘差模塊解決精度下降問題;文獻[15]使用小尺度卷積代替大卷積,并使用softmax 分類器進行分類;文獻[8]融合金字塔卷積模塊、注意力模塊,更好地提取圖像的細節特征。本文方法在CK+數據集上的識別精度高于以上文獻方法,表明本文方法在CK+數據集上有一定的提升效果。
本文提出一種基于改進ResNet 網絡和損失函數的人臉表情識別方法。首先,對ResNet50 基礎網絡進行改進,在網絡中嵌入CBAM 注意力機制模塊,提升模型的關鍵特征提取能力;然后,針對數據集類別數量不均衡影響模型識別性能的問題,采用數據集增強和加權交叉熵損失函數的方法對模型進行優化。本文在CK+和Fer2013 數據集進行實驗,相較于基礎網絡,本文方法提升了網絡的識別精度,另外對數據集中少樣本類別的識別提升效果更明顯,表明本文方法對數據集類別不均衡問題有一定效果。本文方法雖然在識別精度上有提升,但也相應地增加了網絡計算量,未來研究可以減少模型的計算量,搭建高效輕量化的網絡結構。