張棟昱,趙 磊
(武漢大學 國家網絡安全學院,湖北 武漢 430072)
人臉表情是人們用來表達情緒的一種基本手段,更是非語言交流中的一種有效方式,人們可以通過表情準確而微妙地表達自己的思想感情,也可以通過表情辨認對方的態度和內心世界[1]。心理學家Mehrabian[2]研究表明,人類的感情表露55%來自于面部表情,可見人臉表情在感情表露中的重要地位。近些年來,人臉表情識別在眾多領域得到了廣泛的關注,并已然成為學術界和工業界的重要研究熱點之一[3]。傳統的人臉表情識別算法,在對各種特征進行抽取時,通常做法是事先通過人工設計特征提取器[4],較為常見的方法有梯度方向直方圖[5](histogram of oriented gradient,HOG)、局部二值模式[6](local binary patterns,LBP)和主成分分析法[7](principal component analysis,PCA)等。但非常遺憾的是,在提取人臉表情特征時,現有傳統方法的共性是很容易漏掉對分類識別有較大影響的關鍵特征,結果使得它們對人臉表情識別準確率長期以來不太理想[4]。
受益于近幾年來計算機深度學習研究工作在圖像識別等相關領域取得的巨大突破,逐步使得人臉表情識別由傳統方法轉為基于計算機深度學習的方法。作為深度學習領域最為經典的網絡模型之一的卷積神經網絡[8](convolutional neural networks,CNN),其主要優點是能夠共享卷積核,對多維數據計算速度快,且具備較好的特征抽取與分類識別效果,使得該類型的網絡模型在圖像識別與語音處理等領域得到了較為廣泛的應用[9]。進而,在傳統的卷積神經網絡基礎之上,人們將一些引入某些特殊改進措施的模型,比如來源于Alex Krizhevsky的AlexNet[10]、來源于牛津大學計算機視覺組(visual geometry group)的VGGNet[11],還有來源于谷歌的GoogleNet[12]等網絡模型,嘗試用于人臉面部表情識別任務之中。但是,隨著網絡深度的不斷加大,學習能力的不斷加強,網絡模型反而出現了所謂的“退化”,即造成了梯度爆炸與消失,優化效果也越來越差等不可控問題。在此背景之下,2016年華人學者何愷明博士等人提出了深度殘差網絡模型[13](deep residual networks,ResNet),它與當時其他卷積神經網絡模型最大的不同在于,引入了殘差的思想,解決了網絡變深之后梯度消失的尷尬難題。
為更加準確且高效地區分人臉面部表情各個不同的類型,該文提出了一種基于改進的殘差網絡ResNet的網絡模型,即首先引入了卷積注意力機制,對網絡中間的特征圖進行重構。同時,使用激活函數PReLU取代ResNet中原有的激活函數ReLU,避免了對于小于0的值梯度永遠都會是0,造成網絡中較多的神經元都“死”掉的問題。然后,在輸出層的avgpool與fc之間加入Dropout,進一步抑制過擬合,并增加模型魯棒性。實驗結果表明,通過采用上述改進措施,很大程度上提升了人臉表情識別的準確率,驗證了該方法的有效性與優異性。
一般認為,加大網絡模型的深度,相對來講比加大寬度更能提升其數據擬合能力,即使得應用于圖像分類任務時的準確率更高,但在實踐過程中,僅單純地通過不斷增加卷積神經網絡CNN的層數,網絡模型卻出現性能不增反減即“退化”的尷尬情形。該文采用殘差網絡ResNet作為人臉面部表情的特征提取網絡,其增加網絡層數的具體操作方法,是將恒等映射層疊加在淺層網絡上,以構建殘差學習單元。殘差單元Bottleneck結構如圖1所示,通過學習殘差,將部分原始輸入的特征信息,經過恒等映射層直接輸出到下一層,在一定程度上減少了卷積層在進行信息傳遞時的特征丟失問題,可以在輸入特征的基礎上學習到其他新的特征,以便擁有更好的性能[14]。實踐表明,殘差網絡ResNet的主要特點是非常容易優化,并且能夠通過增加相當的深度來提高準確率,得益于其內部的殘差塊使用了跳躍連接,很大程度上緩解了在深度神經網絡中僅簡單地通過增加網絡層數而帶來的梯度消失問題。

圖1 Bottleneck殘差單元
設輸入為x時所學特征為H(x),F(x)=H(x)-x為網絡學習殘差,則殘差單元可以表示為:
yl=xl+F(xl,{Wl})
(1)
xl+1=f(yl)
(2)
其中,xl與yl分別表示第l層的輸入和輸出,Wl為權重矩陣,f(·)表示Relu激活函數。對于L層殘差單元,從淺層到深層的學習特征公式為:
(3)
由于殘差網絡ResNet[15],不僅錯誤率較低,參數數量和計算量也較小,進而加速了模型訓練的速度,使得訓練模型的效果非常突出。ResNet系列網絡模型有兩種類型的殘差塊,分別為Buildingblock與Bottleneck,相對前者,后者既減少了參數量,保持了原有的精度,又優化了計算。文中的人臉表情識別網絡模型選用ResNet101,其網絡結構如表1所示。殘差塊Bottleneck相當于積木,不算初始的7×7卷積層和3×3 max pooling層,整個網絡模型由4個layer組成,而每個layer由若干殘差塊Bottleneck疊加而成。其中,conv2_x、conv3_x、conv4_x與conv5_x分別對應layer1、layer2、layer3與layer4層。在網絡輸出層,通過Average Pool得到最終的特征,而不是通過全連接層,最后僅通過一層Linear層即完成了從特征到具體類別的映射過程。

表1 ResNet101網絡結構
神經網絡中的卷積注意力機制(convolutional attention mechanism,CAM)已經廣泛應用于多種場景,尤其是在基于深度學習的計算機視覺領域,比如圖像分類(image classification)、目標檢測(object detection)、目標跟蹤(target tracking)、語義分割(semantic segmentation)、實例分割(instance segmentation)與全景分割(panoptic segmentation)等實際場合,其有效性與實用性已經得到了廣泛與充分的驗證。卷積注意力主要由空間注意力和通道注意力兩個方面組成,在卷積神經網絡CNN中,注意力機制作用于特征圖(feature map)上,用于獲取特征圖中可用的注意力信息[16]。如圖2所示,卷積注意力模塊[17](convolutional block attention module,CBAM)由通道注意力模塊(channel attention module,CAM)和空間注意力模塊(spatial attention module,SAM)組成。這兩個子模塊分別關注了通道信息和空間信息,對網絡中間的一系列的特征圖進行再次構建,它突出一些重要特征,抑制其他一般特征,可以達到增強圖像識別效果的最終目的。

圖2 CBAM結構
注意力重構具體過程如公式(4)所示,其中F表示網絡模型中某一網絡層的特征圖,Mc(F)表示使用CAM對F進行一維通道注意力重構,F'則表示經過通道注意力重構的特征圖,Ms(F')表示使用SAM對F'進行二維空間注意力重構,F''則表示同時結合了通道與空間兩個方面注意力的輸出特征圖,而?表示逐元素乘法。針對卷積神經網絡CNN中某一網絡層的三維特征圖F∈RC×H×W,先后依次從F推理出一維通道注意力特征圖Mc和二維空間注意力特征圖Ms,并分別進行逐元素相乘,最終得出與F同等維度的輸出特征圖F''。
(4)
卷積注意力機制最為重要的功能,是重構網絡模型中間層的特征圖,即抽取特征圖中的重要信息,并抑制其他的一般信息。對于殘差網絡ResNet,提取特征的最關鍵位置應該是在各個Bottleneck。綜合考慮,該文將CBAM融合在各個layer之間,這么做的主要原因是殘差網絡模型ResNet在各個Bottleneck中已經完成了特征提取,CBAM在此處再進行注意力重構,可以起到承上啟下的作用,融入了CBAM模塊的ResNet 101結構如圖3所示。
激活函數對于神經網絡去學習與理解復雜的非線性的業務邏輯來說具有非常重要的作用,它們將非線性特性引入到特定的網絡模型中,使得神經網絡具有擬合非線性情形的能力,即使得網絡模型學習數據之間更為復雜的關系成為可能。殘差網絡ResNet的隱藏層激活函數默認采用線性修正單元函數[18](rectified linear unit,ReLU),其數學表達式如公式(5)所示,即當x大于0時函數值等于x本身,而當x小于或等于0時其值均為0。對應的函數曲線如圖4所示。

圖3 ResNet融合CBAM

(5)

圖4 ReLU函數曲線
從圖4函數曲線可以看出,ReLU函數非常簡單且有效,其優點是計算效率高與收斂速度快,但最大缺點是存在神經元壞死問題,即當輸入處于區間[0,-∞)內,函數的梯度變為0,模型無法執行反向傳播,進而導致相應權重參數weight與偏移bias永遠得不到更新,無法進行深度學習,也即這部分神經元徹底“死”掉了。
為了解決以上問題,該文采用帶參數的線性修正單元函數[19](parametric rectified linear unit,PReLU)替代殘差網絡ResNet中原有的ReLU激活函數,如公式(6)所示。通常參數ai相對較小,一般位于0到1之間,它是通過在訓練中自學習的,其對應的函數曲線如圖5所示。

圖5 PReLU函數曲線
(6)
從圖5中可以看出,在負值區間[0,-∞)內,PReLU也存在一個較小的可學習的斜率,這樣既保留了在原有正值區間[0,∞)內ReLU函數的優點,強化了模型的表達能力,同時又能避免上述的“Dead ReLU”問題。
通常在訓練網絡模型時,如果該網絡模型越深,也即卷積層與線性變換層越多,每層的神經元數就越多,而訓練時提供的訓練數據集與測試數據集的樣本量又太少,那么訓練出來的模型就非常容易發生過擬合問題,較為明顯的矛盾在于,模型在訓練數據上盡管損失較小且推理準確率較高,但是在全新的測試數據上推理的準確率卻比較低,損失也比較大。當把一個小樣本的數據集提交給一個較為復雜的神經網絡進行訓練時,非常容易發生過擬合,基于此背景,Hinton[20]于2012年在論文《Improving neural networks by preventing co-adaptation of feature detectors》中首次提出了Dropout,其示意圖如圖6所示。

圖6 Dropout示意圖
Dropout的具體做法是在訓練深度神經網絡模型過程中,按照一定的概率,隨機地將一部分神經元從網絡中暫時進行邏輯隔離。對于隨機梯度下降來說,由于采用的是隨機與暫時的隔離策略,因此每一個小批次都在訓練不同的網絡,但是在模型訓練完成之后,每個神經元都不會缺席,都會參與到實際的推理工作中。實踐表明,Dropout可以減少神經元相互之間的依賴性,較為有效地緩解網絡模型過擬合現象的發生,在一定程度上可以達到降低結構風險、提高模型泛化能力的效果。
原本殘差網絡ResNet中并沒有使用Dropout,但受Google提出的GoogleNet[12]網絡模型的啟發,它雖然不是通過全連接層(fully connected layer),而是通過Average Pooling得到最終的特征,網絡中依然使用了Dropout,即在全連接層前面加入Dropout層,較為容易提升網絡模型的泛化能力。基于上述考慮,為進一步防止模型過擬合,提高網絡的魯棒性,該文嘗試在ResNet輸出層的avgpool與fc之間使用Dropout策略,融入完Dropout層之后三者之間的關系如圖7所示。

圖7 ResNet融合Dropout
采用改進的ResNet101網絡模型進行訓練與推理過程的整體流程如圖8所示。

圖8 訓練與推理流程
從圖中可知,依次進行數據集選取,數據增強,載入改進的模型,超參數調整,然后加載數據集進行訓練與驗證,在此過程中保存最優權重,最后利用最優的權重文件進行人臉表情推理識別。
關于實驗環境的硬件方面,CPU為Intel酷睿i7-12700H,內存為32 GB,硬盤為512 GB SSD,GPU為GeForce RTX 3060(8 GB GDDR6顯存)。軟件方面,操作系統為Windows11旗艦版,開發環境為PyCharm 2022,基于Python 3.8與當前學術界最熱門的深度學習框架之一的Pytorch 1.11設計、開發、訓練與測試。另外,為了提升網絡模型訓練與測試的速度,模型與數據均加載到GPU,并通過英偉達的統一計算設備架構(compute unified device architecture,CUDA)技術完成運算加速。
優化器(optimizer)[21]就是在深度學習反向傳播過程中,指引損失函數的各個參數往正確的方向更新合適的大小,使得更新后的各個參數讓損失函數值不斷逼近全局最小。該文在訓練中選用算法Adam優化網絡模型,它可以看作是Adaptive與Momentum的結合體,是一種可以替代隨機梯度下降算法的優化算法。它能基于訓練數據不斷迭代并更新神經網絡的模型參數,并且其通常被認為對超參數選擇的健壯性相當好。模型訓練的超參數配置如表2所示。

表2 模型訓練的超參數配置
該文選用CK+人臉表情數據集,它是數據集Cohn-Kanade[22]的擴展版本,該數據集是在實驗室條件下獲取的,相對較為嚴謹可靠,是人臉表情識別中比較常用且標準的一個公開數據集。它包含123個對象的327個被標記的表情圖片,共分為憤怒、蔑視、厭惡、害怕、高興、悲傷和驚訝共七種表情,這七種表情的示例圖片依次如圖9所示。

圖9 CK+七種表情示例
另外,該數據集7種表情的標簽與英文、中文的對應關系如表3所示。

表3 CK+數據集標簽對應關系
實際上,由于CK+數據集樣本的數量并不大,在網絡模型的訓練學習過程中,就較為容易發生過擬合現象,相應的模型泛化能力與魯棒性也會較差。為了應對此問題,該文對樣本數據進行數據增強處理。首先,將數據集所有原始圖片樣本統一Resize成224×224大小,然后進行隨機飽和度、對比度以及明暗度等調整,同時也進行隨機的縮放、旋轉、偏移與反轉等操作。通過此過程,使數據集的數據量增加了幾十倍以上。另外,為了使實驗結果避免偶然性,首先將數據集中的圖片隨機排序,接下來對整個數據集依照留出法分割為沒有交集的兩個集合,并按照2∶8的比例隨機劃分為測試集與訓練集。
為了驗證該方法的有效性與優異性,下面與現有多種經典算法在CK+數據集上的識別準確率進行比較。
文獻[23]將模型所提取的低、高兩種層次特征相結合構造分類器,并基于跨連接網絡進行人臉表情識別。
文獻[24]首先采用加博爾濾波器提取特征,然后用主成分分析法降低特征圖維數,最后用卷積神經網絡進行人臉表情識別。
文獻[25]首先在常規卷積池化操作基礎上引入四層Inception結構,然后用跨數據庫的方式來評估網絡模型。
文獻[26]提出了一個具有兩個并行卷積池化單元的卷積神經網絡分別提取不同的人臉特征,并將這些特征進行融合。
文獻[27]提出了融合尺度不變特征變換(scale-invariant feature transform,SIFT)和卷積神經網絡所提取的特征,并用支持向量機(support vector machine,SVM)進行分類。
文獻[28]首先對密集的人臉標志點進行精確定位,然后將以標志點為中心的斑點中提取所有描述子串聯起來,形成高維特征,最后基于深度稀疏自編碼器對高維特征進行有效提取。
將文中網絡模型與上述算法在CK+數據集上的表現進行對比,詳細結果如表4所示。相比上述其他方法,文中模型對人臉表情識別更有針對性,它強化了重要特征,抑制了一般特征,取得了更好的實驗效果。

表4 多種經典算法在CK+數據集上的識別率比較
按照Batch_size大小,按批依次讀入數據,在經過2 000個epoch迭代之后,模型在訓練集與測試集上的loss均接近于0,在訓練集上的正確率接近于99.81%,而在測試集上的正確率也接近于96.32%,各方法在CK+人臉數據集上的識別結果如表5所示。

表5 文中模型與baseline的對比
把ResNet101作為baseline,依次單獨分別融入Dropout,PReLU與CBAM時,相對原始baseline,識別率都分別有所提升,尤其是融入了卷積注意力CBAM模塊后,提高的百分比更為明顯。最后,將這三個措施同時作用于改進ResNet101時,識別率直接提升到了96.12%,改善效果較為明顯。可見,所設計的基于改進ResNet的方法對人臉表情識別任務較為有效。
接下來,利用混淆矩陣評估文中模型對人臉面部表情各個類型在識別過程中的混淆程度。通常一般認為,如果混淆矩陣的對角線上的數值越高,說明模型的識別混淆程度越低;相反,如果混淆矩陣反對角線上的數值越高,則說明模型的識別混淆程度越高。對文中模型的表情識別情況,表6是經過周密試驗后進行整理的混淆矩陣的詳細結果數據。

表6 CK+數據集混淆矩陣 %
從表6統計結果可以得出,文中網絡模型對恐懼fear和悲傷sadness兩種表情的識別效果相對較差,因為恐懼和悲傷均具備拉開嘴唇和緊張前額的特征,這兩者之間具有較大的相似性,相對來講更容易發生錯誤分類,而對于憤怒anger、驚訝surprise與高興happiness這三種面部表情的識別準確率最高,分別達到了97.51%、99.53%與99.82%,這是因為這三種表情的面部特征均較為夸張,相對來講面部特征更加容易被提取。但是,從整體上來講,文中網絡模型對上述七種人臉面部表情類型的識別分類具有較低的混淆效果。
針對人臉表情識別問題,提出了一種改進殘差網絡ResNet101的人臉表情識別方法。首先,為了精確提取面部表情特征,融合了卷積注意力機制CBAM,以重構網絡中間的特征圖,目的是突出重要特征,抑制其他一般特征,進而提升模型對有用特征的抽取能力。其次,使用帶參數的線性修正單元激活函數PReLU替代原有的ReLU函數,在提高網絡模型表達能力的同時避免出現在負值區域的函數的梯度變為0,進而使模型無法執行反向傳播的問題。最后,在網絡輸出層的average pool層與fc層之間加入Dropout,以增加模型的魯棒性與泛化性。實驗結果表明,與現有多種經典算法,以及baseline算法即ResNet101相比,改進的網絡模型具備更好的識別效果,證明了該方法的有效性與優異性。后續,將進一步研究復雜環境下的人臉表情識別,以不斷增強網絡模型的特征表達與學習能力。