張棟昱,趙 磊
(武漢大學(xué) 國家網(wǎng)絡(luò)安全學(xué)院,湖北 武漢 430072)
人臉表情是人們用來表達情緒的一種基本手段,更是非語言交流中的一種有效方式,人們可以通過表情準(zhǔn)確而微妙地表達自己的思想感情,也可以通過表情辨認(rèn)對方的態(tài)度和內(nèi)心世界[1]。心理學(xué)家Mehrabian[2]研究表明,人類的感情表露55%來自于面部表情,可見人臉表情在感情表露中的重要地位。近些年來,人臉表情識別在眾多領(lǐng)域得到了廣泛的關(guān)注,并已然成為學(xué)術(shù)界和工業(yè)界的重要研究熱點之一[3]。傳統(tǒng)的人臉表情識別算法,在對各種特征進行抽取時,通常做法是事先通過人工設(shè)計特征提取器[4],較為常見的方法有梯度方向直方圖[5](histogram of oriented gradient,HOG)、局部二值模式[6](local binary patterns,LBP)和主成分分析法[7](principal component analysis,PCA)等。但非常遺憾的是,在提取人臉表情特征時,現(xiàn)有傳統(tǒng)方法的共性是很容易漏掉對分類識別有較大影響的關(guān)鍵特征,結(jié)果使得它們對人臉表情識別準(zhǔn)確率長期以來不太理想[4]。
受益于近幾年來計算機深度學(xué)習(xí)研究工作在圖像識別等相關(guān)領(lǐng)域取得的巨大突破,逐步使得人臉表情識別由傳統(tǒng)方法轉(zhuǎn)為基于計算機深度學(xué)習(xí)的方法。作為深度學(xué)習(xí)領(lǐng)域最為經(jīng)典的網(wǎng)絡(luò)模型之一的卷積神經(jīng)網(wǎng)絡(luò)[8](convolutional neural networks,CNN),其主要優(yōu)點是能夠共享卷積核,對多維數(shù)據(jù)計算速度快,且具備較好的特征抽取與分類識別效果,使得該類型的網(wǎng)絡(luò)模型在圖像識別與語音處理等領(lǐng)域得到了較為廣泛的應(yīng)用[9]。進而,在傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)之上,人們將一些引入某些特殊改進措施的模型,比如來源于Alex Krizhevsky的AlexNet[10]、來源于牛津大學(xué)計算機視覺組(visual geometry group)的VGGNet[11],還有來源于谷歌的GoogleNet[12]等網(wǎng)絡(luò)模型,嘗試用于人臉面部表情識別任務(wù)之中。但是,隨著網(wǎng)絡(luò)深度的不斷加大,學(xué)習(xí)能力的不斷加強,網(wǎng)絡(luò)模型反而出現(xiàn)了所謂的“退化”,即造成了梯度爆炸與消失,優(yōu)化效果也越來越差等不可控問題。在此背景之下,2016年華人學(xué)者何愷明博士等人提出了深度殘差網(wǎng)絡(luò)模型[13](deep residual networks,ResNet),它與當(dāng)時其他卷積神經(jīng)網(wǎng)絡(luò)模型最大的不同在于,引入了殘差的思想,解決了網(wǎng)絡(luò)變深之后梯度消失的尷尬難題。
為更加準(zhǔn)確且高效地區(qū)分人臉面部表情各個不同的類型,該文提出了一種基于改進的殘差網(wǎng)絡(luò)ResNet的網(wǎng)絡(luò)模型,即首先引入了卷積注意力機制,對網(wǎng)絡(luò)中間的特征圖進行重構(gòu)。同時,使用激活函數(shù)PReLU取代ResNet中原有的激活函數(shù)ReLU,避免了對于小于0的值梯度永遠(yuǎn)都會是0,造成網(wǎng)絡(luò)中較多的神經(jīng)元都“死”掉的問題。然后,在輸出層的avgpool與fc之間加入Dropout,進一步抑制過擬合,并增加模型魯棒性。實驗結(jié)果表明,通過采用上述改進措施,很大程度上提升了人臉表情識別的準(zhǔn)確率,驗證了該方法的有效性與優(yōu)異性。
一般認(rèn)為,加大網(wǎng)絡(luò)模型的深度,相對來講比加大寬度更能提升其數(shù)據(jù)擬合能力,即使得應(yīng)用于圖像分類任務(wù)時的準(zhǔn)確率更高,但在實踐過程中,僅單純地通過不斷增加卷積神經(jīng)網(wǎng)絡(luò)CNN的層數(shù),網(wǎng)絡(luò)模型卻出現(xiàn)性能不增反減即“退化”的尷尬情形。該文采用殘差網(wǎng)絡(luò)ResNet作為人臉面部表情的特征提取網(wǎng)絡(luò),其增加網(wǎng)絡(luò)層數(shù)的具體操作方法,是將恒等映射層疊加在淺層網(wǎng)絡(luò)上,以構(gòu)建殘差學(xué)習(xí)單元。殘差單元Bottleneck結(jié)構(gòu)如圖1所示,通過學(xué)習(xí)殘差,將部分原始輸入的特征信息,經(jīng)過恒等映射層直接輸出到下一層,在一定程度上減少了卷積層在進行信息傳遞時的特征丟失問題,可以在輸入特征的基礎(chǔ)上學(xué)習(xí)到其他新的特征,以便擁有更好的性能[14]。實踐表明,殘差網(wǎng)絡(luò)ResNet的主要特點是非常容易優(yōu)化,并且能夠通過增加相當(dāng)?shù)纳疃葋硖岣邷?zhǔn)確率,得益于其內(nèi)部的殘差塊使用了跳躍連接,很大程度上緩解了在深度神經(jīng)網(wǎng)絡(luò)中僅簡單地通過增加網(wǎng)絡(luò)層數(shù)而帶來的梯度消失問題。
圖1 Bottleneck殘差單元
設(shè)輸入為x時所學(xué)特征為H(x),F(x)=H(x)-x為網(wǎng)絡(luò)學(xué)習(xí)殘差,則殘差單元可以表示為:
yl=xl+F(xl,{Wl})
(1)
xl+1=f(yl)
(2)
其中,xl與yl分別表示第l層的輸入和輸出,Wl為權(quán)重矩陣,f(·)表示Relu激活函數(shù)。對于L層殘差單元,從淺層到深層的學(xué)習(xí)特征公式為:
(3)
由于殘差網(wǎng)絡(luò)ResNet[15],不僅錯誤率較低,參數(shù)數(shù)量和計算量也較小,進而加速了模型訓(xùn)練的速度,使得訓(xùn)練模型的效果非常突出。ResNet系列網(wǎng)絡(luò)模型有兩種類型的殘差塊,分別為Buildingblock與Bottleneck,相對前者,后者既減少了參數(shù)量,保持了原有的精度,又優(yōu)化了計算。文中的人臉表情識別網(wǎng)絡(luò)模型選用ResNet101,其網(wǎng)絡(luò)結(jié)構(gòu)如表1所示。殘差塊Bottleneck相當(dāng)于積木,不算初始的7×7卷積層和3×3 max pooling層,整個網(wǎng)絡(luò)模型由4個layer組成,而每個layer由若干殘差塊Bottleneck疊加而成。其中,conv2_x、conv3_x、conv4_x與conv5_x分別對應(yīng)layer1、layer2、layer3與layer4層。在網(wǎng)絡(luò)輸出層,通過Average Pool得到最終的特征,而不是通過全連接層,最后僅通過一層Linear層即完成了從特征到具體類別的映射過程。
表1 ResNet101網(wǎng)絡(luò)結(jié)構(gòu)
神經(jīng)網(wǎng)絡(luò)中的卷積注意力機制(convolutional attention mechanism,CAM)已經(jīng)廣泛應(yīng)用于多種場景,尤其是在基于深度學(xué)習(xí)的計算機視覺領(lǐng)域,比如圖像分類(image classification)、目標(biāo)檢測(object detection)、目標(biāo)跟蹤(target tracking)、語義分割(semantic segmentation)、實例分割(instance segmentation)與全景分割(panoptic segmentation)等實際場合,其有效性與實用性已經(jīng)得到了廣泛與充分的驗證。卷積注意力主要由空間注意力和通道注意力兩個方面組成,在卷積神經(jīng)網(wǎng)絡(luò)CNN中,注意力機制作用于特征圖(feature map)上,用于獲取特征圖中可用的注意力信息[16]。如圖2所示,卷積注意力模塊[17](convolutional block attention module,CBAM)由通道注意力模塊(channel attention module,CAM)和空間注意力模塊(spatial attention module,SAM)組成。這兩個子模塊分別關(guān)注了通道信息和空間信息,對網(wǎng)絡(luò)中間的一系列的特征圖進行再次構(gòu)建,它突出一些重要特征,抑制其他一般特征,可以達到增強圖像識別效果的最終目的。
圖2 CBAM結(jié)構(gòu)
注意力重構(gòu)具體過程如公式(4)所示,其中F表示網(wǎng)絡(luò)模型中某一網(wǎng)絡(luò)層的特征圖,Mc(F)表示使用CAM對F進行一維通道注意力重構(gòu),F'則表示經(jīng)過通道注意力重構(gòu)的特征圖,Ms(F')表示使用SAM對F'進行二維空間注意力重構(gòu),F''則表示同時結(jié)合了通道與空間兩個方面注意力的輸出特征圖,而?表示逐元素乘法。針對卷積神經(jīng)網(wǎng)絡(luò)CNN中某一網(wǎng)絡(luò)層的三維特征圖F∈RC×H×W,先后依次從F推理出一維通道注意力特征圖Mc和二維空間注意力特征圖Ms,并分別進行逐元素相乘,最終得出與F同等維度的輸出特征圖F''。
(4)
卷積注意力機制最為重要的功能,是重構(gòu)網(wǎng)絡(luò)模型中間層的特征圖,即抽取特征圖中的重要信息,并抑制其他的一般信息。對于殘差網(wǎng)絡(luò)ResNet,提取特征的最關(guān)鍵位置應(yīng)該是在各個Bottleneck。綜合考慮,該文將CBAM融合在各個layer之間,這么做的主要原因是殘差網(wǎng)絡(luò)模型ResNet在各個Bottleneck中已經(jīng)完成了特征提取,CBAM在此處再進行注意力重構(gòu),可以起到承上啟下的作用,融入了CBAM模塊的ResNet 101結(jié)構(gòu)如圖3所示。
激活函數(shù)對于神經(jīng)網(wǎng)絡(luò)去學(xué)習(xí)與理解復(fù)雜的非線性的業(yè)務(wù)邏輯來說具有非常重要的作用,它們將非線性特性引入到特定的網(wǎng)絡(luò)模型中,使得神經(jīng)網(wǎng)絡(luò)具有擬合非線性情形的能力,即使得網(wǎng)絡(luò)模型學(xué)習(xí)數(shù)據(jù)之間更為復(fù)雜的關(guān)系成為可能。殘差網(wǎng)絡(luò)ResNet的隱藏層激活函數(shù)默認(rèn)采用線性修正單元函數(shù)[18](rectified linear unit,ReLU),其數(shù)學(xué)表達式如公式(5)所示,即當(dāng)x大于0時函數(shù)值等于x本身,而當(dāng)x小于或等于0時其值均為0。對應(yīng)的函數(shù)曲線如圖4所示。
圖3 ResNet融合CBAM
(5)
圖4 ReLU函數(shù)曲線
從圖4函數(shù)曲線可以看出,ReLU函數(shù)非常簡單且有效,其優(yōu)點是計算效率高與收斂速度快,但最大缺點是存在神經(jīng)元壞死問題,即當(dāng)輸入處于區(qū)間[0,-∞)內(nèi),函數(shù)的梯度變?yōu)?,模型無法執(zhí)行反向傳播,進而導(dǎo)致相應(yīng)權(quán)重參數(shù)weight與偏移bias永遠(yuǎn)得不到更新,無法進行深度學(xué)習(xí),也即這部分神經(jīng)元徹底“死”掉了。
為了解決以上問題,該文采用帶參數(shù)的線性修正單元函數(shù)[19](parametric rectified linear unit,PReLU)替代殘差網(wǎng)絡(luò)ResNet中原有的ReLU激活函數(shù),如公式(6)所示。通常參數(shù)ai相對較小,一般位于0到1之間,它是通過在訓(xùn)練中自學(xué)習(xí)的,其對應(yīng)的函數(shù)曲線如圖5所示。
圖5 PReLU函數(shù)曲線
(6)
從圖5中可以看出,在負(fù)值區(qū)間[0,-∞)內(nèi),PReLU也存在一個較小的可學(xué)習(xí)的斜率,這樣既保留了在原有正值區(qū)間[0,∞)內(nèi)ReLU函數(shù)的優(yōu)點,強化了模型的表達能力,同時又能避免上述的“Dead ReLU”問題。
通常在訓(xùn)練網(wǎng)絡(luò)模型時,如果該網(wǎng)絡(luò)模型越深,也即卷積層與線性變換層越多,每層的神經(jīng)元數(shù)就越多,而訓(xùn)練時提供的訓(xùn)練數(shù)據(jù)集與測試數(shù)據(jù)集的樣本量又太少,那么訓(xùn)練出來的模型就非常容易發(fā)生過擬合問題,較為明顯的矛盾在于,模型在訓(xùn)練數(shù)據(jù)上盡管損失較小且推理準(zhǔn)確率較高,但是在全新的測試數(shù)據(jù)上推理的準(zhǔn)確率卻比較低,損失也比較大。當(dāng)把一個小樣本的數(shù)據(jù)集提交給一個較為復(fù)雜的神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練時,非常容易發(fā)生過擬合,基于此背景,Hinton[20]于2012年在論文《Improving neural networks by preventing co-adaptation of feature detectors》中首次提出了Dropout,其示意圖如圖6所示。
圖6 Dropout示意圖
Dropout的具體做法是在訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)模型過程中,按照一定的概率,隨機地將一部分神經(jīng)元從網(wǎng)絡(luò)中暫時進行邏輯隔離。對于隨機梯度下降來說,由于采用的是隨機與暫時的隔離策略,因此每一個小批次都在訓(xùn)練不同的網(wǎng)絡(luò),但是在模型訓(xùn)練完成之后,每個神經(jīng)元都不會缺席,都會參與到實際的推理工作中。實踐表明,Dropout可以減少神經(jīng)元相互之間的依賴性,較為有效地緩解網(wǎng)絡(luò)模型過擬合現(xiàn)象的發(fā)生,在一定程度上可以達到降低結(jié)構(gòu)風(fēng)險、提高模型泛化能力的效果。
原本殘差網(wǎng)絡(luò)ResNet中并沒有使用Dropout,但受Google提出的GoogleNet[12]網(wǎng)絡(luò)模型的啟發(fā),它雖然不是通過全連接層(fully connected layer),而是通過Average Pooling得到最終的特征,網(wǎng)絡(luò)中依然使用了Dropout,即在全連接層前面加入Dropout層,較為容易提升網(wǎng)絡(luò)模型的泛化能力?;谏鲜隹紤],為進一步防止模型過擬合,提高網(wǎng)絡(luò)的魯棒性,該文嘗試在ResNet輸出層的avgpool與fc之間使用Dropout策略,融入完Dropout層之后三者之間的關(guān)系如圖7所示。
圖7 ResNet融合Dropout
采用改進的ResNet101網(wǎng)絡(luò)模型進行訓(xùn)練與推理過程的整體流程如圖8所示。
圖8 訓(xùn)練與推理流程
從圖中可知,依次進行數(shù)據(jù)集選取,數(shù)據(jù)增強,載入改進的模型,超參數(shù)調(diào)整,然后加載數(shù)據(jù)集進行訓(xùn)練與驗證,在此過程中保存最優(yōu)權(quán)重,最后利用最優(yōu)的權(quán)重文件進行人臉表情推理識別。
關(guān)于實驗環(huán)境的硬件方面,CPU為Intel酷睿i7-12700H,內(nèi)存為32 GB,硬盤為512 GB SSD,GPU為GeForce RTX 3060(8 GB GDDR6顯存)。軟件方面,操作系統(tǒng)為Windows11旗艦版,開發(fā)環(huán)境為PyCharm 2022,基于Python 3.8與當(dāng)前學(xué)術(shù)界最熱門的深度學(xué)習(xí)框架之一的Pytorch 1.11設(shè)計、開發(fā)、訓(xùn)練與測試。另外,為了提升網(wǎng)絡(luò)模型訓(xùn)練與測試的速度,模型與數(shù)據(jù)均加載到GPU,并通過英偉達的統(tǒng)一計算設(shè)備架構(gòu)(compute unified device architecture,CUDA)技術(shù)完成運算加速。
優(yōu)化器(optimizer)[21]就是在深度學(xué)習(xí)反向傳播過程中,指引損失函數(shù)的各個參數(shù)往正確的方向更新合適的大小,使得更新后的各個參數(shù)讓損失函數(shù)值不斷逼近全局最小。該文在訓(xùn)練中選用算法Adam優(yōu)化網(wǎng)絡(luò)模型,它可以看作是Adaptive與Momentum的結(jié)合體,是一種可以替代隨機梯度下降算法的優(yōu)化算法。它能基于訓(xùn)練數(shù)據(jù)不斷迭代并更新神經(jīng)網(wǎng)絡(luò)的模型參數(shù),并且其通常被認(rèn)為對超參數(shù)選擇的健壯性相當(dāng)好。模型訓(xùn)練的超參數(shù)配置如表2所示。
表2 模型訓(xùn)練的超參數(shù)配置
該文選用CK+人臉表情數(shù)據(jù)集,它是數(shù)據(jù)集Cohn-Kanade[22]的擴展版本,該數(shù)據(jù)集是在實驗室條件下獲取的,相對較為嚴(yán)謹(jǐn)可靠,是人臉表情識別中比較常用且標(biāo)準(zhǔn)的一個公開數(shù)據(jù)集。它包含123個對象的327個被標(biāo)記的表情圖片,共分為憤怒、蔑視、厭惡、害怕、高興、悲傷和驚訝共七種表情,這七種表情的示例圖片依次如圖9所示。
圖9 CK+七種表情示例
另外,該數(shù)據(jù)集7種表情的標(biāo)簽與英文、中文的對應(yīng)關(guān)系如表3所示。
表3 CK+數(shù)據(jù)集標(biāo)簽對應(yīng)關(guān)系
實際上,由于CK+數(shù)據(jù)集樣本的數(shù)量并不大,在網(wǎng)絡(luò)模型的訓(xùn)練學(xué)習(xí)過程中,就較為容易發(fā)生過擬合現(xiàn)象,相應(yīng)的模型泛化能力與魯棒性也會較差。為了應(yīng)對此問題,該文對樣本數(shù)據(jù)進行數(shù)據(jù)增強處理。首先,將數(shù)據(jù)集所有原始圖片樣本統(tǒng)一Resize成224×224大小,然后進行隨機飽和度、對比度以及明暗度等調(diào)整,同時也進行隨機的縮放、旋轉(zhuǎn)、偏移與反轉(zhuǎn)等操作。通過此過程,使數(shù)據(jù)集的數(shù)據(jù)量增加了幾十倍以上。另外,為了使實驗結(jié)果避免偶然性,首先將數(shù)據(jù)集中的圖片隨機排序,接下來對整個數(shù)據(jù)集依照留出法分割為沒有交集的兩個集合,并按照2∶8的比例隨機劃分為測試集與訓(xùn)練集。
為了驗證該方法的有效性與優(yōu)異性,下面與現(xiàn)有多種經(jīng)典算法在CK+數(shù)據(jù)集上的識別準(zhǔn)確率進行比較。
文獻[23]將模型所提取的低、高兩種層次特征相結(jié)合構(gòu)造分類器,并基于跨連接網(wǎng)絡(luò)進行人臉表情識別。
文獻[24]首先采用加博爾濾波器提取特征,然后用主成分分析法降低特征圖維數(shù),最后用卷積神經(jīng)網(wǎng)絡(luò)進行人臉表情識別。
文獻[25]首先在常規(guī)卷積池化操作基礎(chǔ)上引入四層Inception結(jié)構(gòu),然后用跨數(shù)據(jù)庫的方式來評估網(wǎng)絡(luò)模型。
文獻[26]提出了一個具有兩個并行卷積池化單元的卷積神經(jīng)網(wǎng)絡(luò)分別提取不同的人臉特征,并將這些特征進行融合。
文獻[27]提出了融合尺度不變特征變換(scale-invariant feature transform,SIFT)和卷積神經(jīng)網(wǎng)絡(luò)所提取的特征,并用支持向量機(support vector machine,SVM)進行分類。
文獻[28]首先對密集的人臉標(biāo)志點進行精確定位,然后將以標(biāo)志點為中心的斑點中提取所有描述子串聯(lián)起來,形成高維特征,最后基于深度稀疏自編碼器對高維特征進行有效提取。
將文中網(wǎng)絡(luò)模型與上述算法在CK+數(shù)據(jù)集上的表現(xiàn)進行對比,詳細(xì)結(jié)果如表4所示。相比上述其他方法,文中模型對人臉表情識別更有針對性,它強化了重要特征,抑制了一般特征,取得了更好的實驗效果。
表4 多種經(jīng)典算法在CK+數(shù)據(jù)集上的識別率比較
按照Batch_size大小,按批依次讀入數(shù)據(jù),在經(jīng)過2 000個epoch迭代之后,模型在訓(xùn)練集與測試集上的loss均接近于0,在訓(xùn)練集上的正確率接近于99.81%,而在測試集上的正確率也接近于96.32%,各方法在CK+人臉數(shù)據(jù)集上的識別結(jié)果如表5所示。
表5 文中模型與baseline的對比
把ResNet101作為baseline,依次單獨分別融入Dropout,PReLU與CBAM時,相對原始baseline,識別率都分別有所提升,尤其是融入了卷積注意力CBAM模塊后,提高的百分比更為明顯。最后,將這三個措施同時作用于改進ResNet101時,識別率直接提升到了96.12%,改善效果較為明顯??梢?所設(shè)計的基于改進ResNet的方法對人臉表情識別任務(wù)較為有效。
接下來,利用混淆矩陣評估文中模型對人臉面部表情各個類型在識別過程中的混淆程度。通常一般認(rèn)為,如果混淆矩陣的對角線上的數(shù)值越高,說明模型的識別混淆程度越低;相反,如果混淆矩陣反對角線上的數(shù)值越高,則說明模型的識別混淆程度越高。對文中模型的表情識別情況,表6是經(jīng)過周密試驗后進行整理的混淆矩陣的詳細(xì)結(jié)果數(shù)據(jù)。
表6 CK+數(shù)據(jù)集混淆矩陣 %
從表6統(tǒng)計結(jié)果可以得出,文中網(wǎng)絡(luò)模型對恐懼fear和悲傷sadness兩種表情的識別效果相對較差,因為恐懼和悲傷均具備拉開嘴唇和緊張前額的特征,這兩者之間具有較大的相似性,相對來講更容易發(fā)生錯誤分類,而對于憤怒anger、驚訝surprise與高興happiness這三種面部表情的識別準(zhǔn)確率最高,分別達到了97.51%、99.53%與99.82%,這是因為這三種表情的面部特征均較為夸張,相對來講面部特征更加容易被提取。但是,從整體上來講,文中網(wǎng)絡(luò)模型對上述七種人臉面部表情類型的識別分類具有較低的混淆效果。
針對人臉表情識別問題,提出了一種改進殘差網(wǎng)絡(luò)ResNet101的人臉表情識別方法。首先,為了精確提取面部表情特征,融合了卷積注意力機制CBAM,以重構(gòu)網(wǎng)絡(luò)中間的特征圖,目的是突出重要特征,抑制其他一般特征,進而提升模型對有用特征的抽取能力。其次,使用帶參數(shù)的線性修正單元激活函數(shù)PReLU替代原有的ReLU函數(shù),在提高網(wǎng)絡(luò)模型表達能力的同時避免出現(xiàn)在負(fù)值區(qū)域的函數(shù)的梯度變?yōu)?,進而使模型無法執(zhí)行反向傳播的問題。最后,在網(wǎng)絡(luò)輸出層的average pool層與fc層之間加入Dropout,以增加模型的魯棒性與泛化性。實驗結(jié)果表明,與現(xiàn)有多種經(jīng)典算法,以及baseline算法即ResNet101相比,改進的網(wǎng)絡(luò)模型具備更好的識別效果,證明了該方法的有效性與優(yōu)異性。后續(xù),將進一步研究復(fù)雜環(huán)境下的人臉表情識別,以不斷增強網(wǎng)絡(luò)模型的特征表達與學(xué)習(xí)能力。