余久方,李中科,陳 濤
(1.南京工業(yè)職業(yè)技術大學 計算機與軟件學院,南京 210023;2.南京理工大學紫金學院 計算機學院,南京 210023)
人臉表情是人類情緒和狀態(tài)的最直接表現(xiàn),自動識別人臉表情在智能醫(yī)療、智能交通、公共安全、智能學習及娛樂等領域具有重要意義[1]。如何識別人臉表情進而感知人類情緒,近年來大量的學者對此開展研究并取得了一定的進展。
卷積神經(jīng)網(wǎng)絡在圖像識別領域取得了巨大成功,逐漸被用于人臉表情識別[2-4]。表情只和人臉面部相關,因此從原始圖像中識別出面部區(qū)域對于后續(xù)表情識別至關重要。2014年湯曉鷗[5]團隊提出了深度學習人臉識別算法DeepID,在LFW數(shù)據(jù)庫上取得較高識別率。2016年Zhang等[6]提出了一種多任務卷積神經(jīng)網(wǎng)絡(Multi-task Convolutional Neural Networks,MTCNN)的人臉識別方法,目前在人臉識別中應用較多。該算法能適應不同大小的人臉圖像輸入,因此本文選用該算法進行面部識別。
本文設計了一個混合注意力網(wǎng)絡,分離原注意力機制中的通道注意力和空間注意力,在注意力后引入軟閾值抑制噪聲,形成新的軟閾值通道注意力(Channel Attention Soft Thresholding,CA-ST)和軟閾值空間注意力(Spatial Attention Soft Thresholding,SA-ST)。通道注意力嵌入深度可分離卷積中,形成深度可分離卷積軟閾值通道注意力(Channel Attention Soft Thresholding Depthwise Separable Convolution,CA-ST-DSC),增強網(wǎng)絡的通道特征學習能力;空間注意力放在普通卷積后,增強網(wǎng)絡的跨通道相關性學習能力。相比上述提及的研究成果,本文設計的網(wǎng)絡用于人臉表情識別準確率更高,收斂性更好,所用參數(shù)相對較少。
為了讓圖像中的面部細節(jié)特征突出,考慮使用直方圖均衡化對人臉圖像進行處理,讓圖像中具有不同灰度的部分對比度增強,增強網(wǎng)絡的泛化能力。自適應直方圖均衡化[7]僅考慮局部區(qū)域數(shù)據(jù),忽略了其他區(qū)域數(shù)據(jù),并且有可能放大局部噪聲,限制對比度自適應直方圖均衡化(Contrast Limited Adaptive Histogram Equalization,CLAHE)統(tǒng)一考慮了局部區(qū)域內(nèi)和區(qū)域外的數(shù)據(jù)并且能抑制噪聲放大的情況。本文使用該算法對圖像進行處理,簡化原算法中的參數(shù)設置,優(yōu)化剩余像素的處理。算法步驟如下:
Step1 原始圖片按照固定大小切分為若干塊,計算每塊的直方圖H(N),N表示該塊內(nèi)的灰度級數(shù)。
Step2 計算截取限制值β,塊內(nèi)超出該值的像素將在后續(xù)處理中被截去,其在原算法中計算公式為
(1)
式中:α為截斷系數(shù),取值范圍[0,100];lmax為最大允許斜率,建議最大為4;S為塊內(nèi)的像素數(shù)。本文在實現(xiàn)中簡化截取限制值的計算,只需設置一個參數(shù)為
(2)
Step3 對塊內(nèi)超出限制值β的像素進行剪切,截取到的像素總數(shù)為
(3)
截取后的像素根據(jù)N個灰度取平均值為
(4)
Step4 把截取的像素分配到直方圖中:
(5)
Step5 每個塊內(nèi)進行直方圖均衡化和雙線性插值。
原算法執(zhí)行Step 4后可能有部分像素剩余,本文實現(xiàn)中對剩余像素按照公式(4)計算后再次執(zhí)行Step 4,直到分配完成。
為增強網(wǎng)絡泛化能力,還在訓練過程中隨機對訓練樣本進行變換以使網(wǎng)絡適應不同的輸入。根據(jù)人臉數(shù)據(jù)集特點,考慮針對姿態(tài)和面部大小進行變換,因此對樣本進行角度變換及比例縮放處理,在處理中進行隨機的水平鏡像。角度變換矩陣為
(6)
式中:θ為變換角度??s放變換矩陣為
(7)
式中:Cx、Cy分別為水平和垂直方向的縮放比例。變換角度在(-20°,20°)之間隨機選取,縮放比例在原圖的20%范圍內(nèi),效果如圖1所示。其中,第一行為原始圖片,第二行為角度變換效果,第三行為縮放變換效果,變換中增加了隨機的水平鏡像。
圖1 圖像變換效果
現(xiàn)有的注意力機制多是聚焦機制內(nèi)部實現(xiàn),沒有結合主干網(wǎng)絡全局考慮,準確率提升并不明顯,因此本文重新設計了主干網(wǎng)絡和注意力網(wǎng)絡。
本文的網(wǎng)絡設計中將原混合注意力機制中的通道和空間注意力分離,把通道注意力機制置于通道特征提取后,空間注意力機制置于跨通道特征提取后。受文獻[8]啟發(fā),在注意力機制中引入軟閾值化處理,以抑制注意力學習中的噪聲信息,增強高層特征的判別性。借鑒文獻[9]的研究,在注意力機制處理后迭加輸入以避免網(wǎng)絡加深時性能下降。
本文設計的通道注意力機制CA-ST結構如圖2所示。在通道注意力特征學習后進行軟閾值處理,以去除通道注意力中的噪聲。
圖2 CA-ST結構
首先輸入特征圖通過高、寬方向的最大池化和平均池化提取對應的通道特征,再經(jīng)過共享的全連接層學習通道注意力后進行相加,得到的通道注意力特征為
EC(I)=f(AvgPoolH,W(I))⊕f(MaxPoolH,W(I)) 。
(8)
式中:f為全連接層操作,I為輸入特征圖(下同),H、W、C分別代表高、寬、通道(下同)。和原通道注意力不同的是全連接層中不再對通道進行壓縮,以保留足夠的通道信息,然后通過激活函數(shù)sigmoid把學習的通道注意力特征轉化到(0,1)之間,得到通道注意力系數(shù)
(9)
式中:Ei(I)為第i個通道注意力特征。通道注意力系數(shù)反映通道對最終識別結果貢獻的大小,通道注意力軟閾值由通道平均池化特征乘以通道注意力系數(shù)得到:
τ=σ·AvgPoolH,W(|I|) 。
(10)
最終得到的通道注意力由輸入根據(jù)軟閾值機制處理后得到,消除其中的噪聲數(shù)據(jù),處理方法如下:
(11)
式中:Xc為輸入特征經(jīng)過1×1深度卷積后的輸出。
深度可分離卷積在每個通道后進行卷積操作提取通道特征,這是深度可分離卷積的深度卷積操作。本文網(wǎng)絡把通道注意力機制CA-ST嵌入深度可分離卷積的深度卷積之后,可以更有效地提取通道特征,再利用其后的點卷積學習跨通道相關性。本文的通道注意力融合深度可分離卷積的結構CA-ST-DSC如圖3所示。
圖3 CA-ST-DSC結構
本文設計的空間注意力機制SA-ST模型如圖4所示,輸入特征圖基于通道維度分別進行最大池化和平均池化得到兩組空間特征,通過concat操作后進行兩次3×3的卷積得到空間注意力特征為
圖4 SA-ST結構
EH,W(I)=Conv3(Conv3(AvgPoolC(I);MaxPoolC(I))) 。
(12)
然后經(jīng)過sigmoid激活函數(shù)處理,把空間注意力特征變換到(0,1)之間,得到空間注意力系數(shù)
(13)
式中:Ei,j(I)代表位置(i,j)處的空間注意力特征??臻g注意力系數(shù)反映特征圖每個位置對識別結果貢獻的大小,空間注意力軟閾值由空間平均池化特征乘以空間注意力系數(shù)得到:
τ=σ·AvgPoolC(|I|) 。
(14)
最終得到的空間注意力由輸入經(jīng)過軟閾值機制處理后得到,消除其中的噪聲,處理方法如下:
(15)
式中:XH,W為輸入特征經(jīng)過1×1卷積后的輸出。
結合本文設計的注意力機制的人臉表情識別網(wǎng)絡結構如表1所示。其中,Entry flow和Exit flow使用普通卷積和深度可分離卷積進行特征抽??;classification flow中使用全連接層進行分類處理;Attention flow中使用帶有軟閾值空間注意力機制SA-ST和軟閾值通道注意力機制CA-ST進行重點特征學習并去除噪聲,把兩個注意力機制分別置于普通卷積后和深度可分離卷積中,提高網(wǎng)絡的跨通道相關性和通道特征學習能力。在注意力機制排列上,文獻[10]實驗表明先通道后空間更優(yōu),作者認為通道注意力關注全局信息而空間注意力關注局部信息。本文問題場景較為特殊,人臉面部每種表情之間差異小,需要先定位到需要關注的面部部位,然后再全局判斷各通道特征對表情識別貢獻大小,因此在本文網(wǎng)絡中采用先空間后通道的方式,在實驗過程中也發(fā)現(xiàn)該種方式對表情識別效果更優(yōu)。在卷積操作后增加批正則化(Batch Normalization,BN)[11]和激活函數(shù)ReLU處理來增強網(wǎng)絡的穩(wěn)定性。
表1 本文網(wǎng)絡結構
表1中Layer name為操作名稱,其中Conv為卷積操作,SepConv為深度可分離卷積操作,Pool為池化操作,BN為批正則化操作;Parameters為卷積核大小和通道數(shù);Repeat times為對應的操作重復執(zhí)行次數(shù),未標出的操作重復次數(shù)為1。
輸入特征圖經(jīng)過網(wǎng)絡處理輸出后,通常使用softmax處理并計算交叉熵損失:
(16)
式中:xi為第i個樣本最后的全連接層之前的輸出,其所屬的類別為yi;wj為第j個全連接層權重參數(shù);wyi為第yi個全連接層權重參數(shù);m為一次訓練中的batch大小;n為類別數(shù)目。
為了讓同一類表情在特征空間中盡可能靠近,參考文獻[12-13],把樣本到類中心的距離作為損失函數(shù)的一部分,該距離即為中心損失,其計算方法為
(17)
式中:cyi為第i個樣本所在的類別中心。類別中心在迭代訓練中進行更新,類別中心的更新要使中心損失最小化。另外,為防止新的中心抖動過大,在更新值中增加一個系數(shù)。第i個樣本類別中心的更新值公式為
β(xi-cyi) 。
(18)
式中:β為類別中心更新系數(shù)。總的損失計算函數(shù)為交叉熵損失迭加類中心損失,即
L=Lcross+λLc。
(19)
式中:λ為中心損失系數(shù),表示中心損失在總損失中的權重。
本文使用CK+和fer2013兩個數(shù)據(jù)集進行實驗。
CK+數(shù)據(jù)集是在 Cohn-Kanade 數(shù)據(jù)集的基礎上擴展而來,該數(shù)據(jù)集包含了123個參與者的593個圖片序列,其中327個圖片序列有標簽,每個圖片序列包含了一個參與者從情緒平靜到情緒峰值的過程,每張圖片的分辨率為640 pixel×490 pixel。實驗中選取了每個人物帶有標簽的圖片序列中的兩張圖片:一張是情緒峰值圖片,一張是情緒相對較次峰值圖片。一共654張圖片,包含7種情緒,分別是1(憤怒)、2(蔑視)、3(厭惡)、4(害怕)、5(高興)、6(傷心)、7(驚訝)。各類表情數(shù)量分布見表2。
表2 CK+數(shù)據(jù)集中各表情數(shù)量
fer2013數(shù)據(jù)集一共有35 887張圖片,其中用于訓練集的圖片有28 709張,用于驗證集和測試集的圖片各有3 589張。該數(shù)據(jù)集每張圖片大小為48×48,包含了7種人臉表情,分別為0(生氣)、1(厭惡)、2(害怕)、3(高興)、4(傷心)、5(驚訝)、6(中性)。各類表情數(shù)量分布見表3。該數(shù)據(jù)集含有較多非正面人臉圖片,人工識別該數(shù)據(jù)集只有65%左右的準確率。
表3 fer2013數(shù)據(jù)集中各表情數(shù)量
本文實驗所用的環(huán)境:硬件為CPU Intel Xeon E5 V3 2600@2.3 GB,內(nèi)存16 GB,顯卡為NVIDIA GTX1080Ti,顯存11 GB;操作系統(tǒng)為Ubuntu16.04,軟件框架為tensorflow1.14。
在實驗中CK+數(shù)據(jù)集和fer2013數(shù)據(jù)集訓練的batch大小分別設置為50和128。在CK+數(shù)據(jù)集上采用K折交叉方式進行驗證:數(shù)據(jù)集分為K份,其中1份作為測試集,其余K-1份作為訓練集,實驗K次,本文實驗中K取10。為方便比較,兩個數(shù)據(jù)集均展示測試集的實驗結果。fer2013上使用的是數(shù)據(jù)集自身的測試集,CK+數(shù)據(jù)集使用的是K折交叉方式提取的測試集。
在網(wǎng)絡訓練中初始學習率設置為0.01,采用指數(shù)衰減方式來逐步減小學習率,衰減率為0.5。優(yōu)化器使用標準動量優(yōu)化方法,動量設置為0.9。損失函數(shù)中β取0.6(公式(18)),λ取0.001(公式(19))。
3.3.1 預處理結果分析
本文選用的CK+和fer2013數(shù)據(jù)集通過MTCNN網(wǎng)絡進行人臉檢測,對于能完全識別出人臉5個特征點的圖片進行裁剪,其余圖片不做處理。對于CK+數(shù)據(jù)集,識別率為100%。根據(jù)特征點進行人臉裁剪后,使用雙線性插值統(tǒng)一縮放到64×64大?。粚τ趂er2013數(shù)據(jù)集,識別率為82%,進行人臉裁剪后統(tǒng)一縮放到48×48大小。
兩個數(shù)據(jù)集進行人臉識別、裁剪、直方圖均衡化后處理效果如圖5所示,圖中第1行為人臉識別、裁剪后的輸出,可見人臉識別精確;第2~5行分別為限制系數(shù)M(公式(2))取1、2、5、10時直方圖均衡化后的輸出,可見M越大處理后的圖片對比度越強,細節(jié)部分越突出,但面部細節(jié)太突出影響網(wǎng)絡對表情的識別效果,經(jīng)過實驗對比本文M取2,塊大小取(6,6)。
圖5 人臉識別、裁剪,直方圖均衡化結果
3.3.2 表情識別結果分析
使用本文方法在CK+數(shù)據(jù)集上進行了150 epoch的訓練,結果如表4所示,在測試集上得到了98.6%的準確率,相比其他方法準確率較高。本文方法在fer2013數(shù)據(jù)集上進行了140 epoch的訓練,在測試集上準確率達到了72.1%,相比其他方法準確率較高,準確率對比如表5所示。
表4 不同方法在CK+數(shù)據(jù)集上識別結果
表5 不同方法在fer2013數(shù)據(jù)集上識別結果
CK+數(shù)據(jù)集每種表情識別準確率如圖6所示,其中,高興、厭惡、憤怒三類表情識別率相對較高,蔑視、害怕的表情數(shù)量較少,識別率相對也較低。在7類表情中,蔑視、憤怒、害怕這幾類表情容易混淆。
圖6 CK+數(shù)據(jù)集混淆矩陣
fer2013數(shù)據(jù)集每種表情識別準確率如圖7所示,其中高興、驚訝兩類表情的識別準確率較高,害怕、傷心、中性三類表情識別率較低。這三類表情的數(shù)據(jù)集數(shù)量并非最少,識別率低主要是由于誤識別為其他表情,害怕和傷心、傷心和中性、厭惡和生氣這幾組表情容易混淆。
圖7 fer2013數(shù)據(jù)集混淆矩陣
在參數(shù)量上本文網(wǎng)絡在CK+數(shù)據(jù)集上為3.4×103,在fer2013上為2.5×103,網(wǎng)絡在最后的卷積操作后沒有對特征圖進行全局池化,因此不同的輸入在全連接層參數(shù)量有差異。由表4和5可以看出本文網(wǎng)絡需要的參數(shù)量相對較少,兩個表中的resnet18、resnet18+CBAM、xception網(wǎng)絡直接使用原文獻中的網(wǎng)絡結構,xception+CBAM結構為在xception網(wǎng)絡中的入口流程中每個可分離卷積塊以及中間流程之后迭加CBAM機制。以上四個網(wǎng)絡在實驗時的超參數(shù)及損失函數(shù)和本文網(wǎng)絡相同。
為了從數(shù)據(jù)上對比本文注意力機制和原注意力機制,圖8和圖9給出了不同方法在兩個數(shù)據(jù)集上的準確率隨著epoch變化的曲線,可以看出本文方法收斂性較好并且最終的準確率較高。
圖8 不同方法在CK+數(shù)據(jù)集上準確率曲線
圖9 不同方法在fer2013數(shù)據(jù)集上準確率曲線
為直觀對比本文混合注意力機制和原注意力機制,輸出淺層網(wǎng)絡的特征圖以便于觀察。在本文網(wǎng)絡的entry flow后分別迭加本文的SA-ST、CA-ST-DSC以及CBAM,分別經(jīng)過50 epoch的訓練后,提取網(wǎng)絡部分輸出如圖10所示,其中第1行為網(wǎng)絡輸入,第2行為迭加CBAM機制輸出,第3行為迭加本文注意力機制輸出,可以看出本文的注意力機制能夠保留對表情識別貢獻較大的面部區(qū)域,同時對表情識別貢獻小的區(qū)域進行抑制。
圖10 網(wǎng)絡中間輸出
本文預處理中的直方圖均衡化和角度變換、縮放以及鏡像,可以有效增強網(wǎng)絡的泛化能力,兩個數(shù)據(jù)集增加預處理前后的準確率對比如表6所示。預處理前訓練集準確率明顯高于預處理后,而測試集上準確率變化相反,由此可知預處理前網(wǎng)絡泛化性較差,而預處理能夠緩解該問題,提升測試集的識別準確率。
表6 預處理前后準確率對比
人臉表情自動識別作為人工智能重要的研究領域之一,由于不同的人臉表情之間差異較小,同時由于人臉圖像受光照、姿態(tài)等方面的影響,識別準確率一直有待提高。本文設計了一個分離混合注意力網(wǎng)絡,把空間注意力和通道注意力分開,分別置于普通卷積和深度卷積之后,同時使用軟閾值抑制噪聲,在人臉表情數(shù)據(jù)集CK+和fer2013上取得了98.6%和72.1%的識別率,相比其他方法明顯提高了識別準確率,所用參數(shù)相對較少,并且收斂性更好。下一步將重點研究如何提高容易混淆表情的識別準確率。