區(qū) 健 馮開平 羅立宏
1(廣東工業(yè)大學(xué)計算機學(xué)院 廣東 廣州 510006)2(廣東工業(yè)大學(xué)藝術(shù)與設(shè)計學(xué)院 廣東 廣州 510090)
今天,由于技術(shù)的進步和無處不在的傳播,我們大部分時間都花在了與計算機和手機的交互上。它們在我們的生活中起著至關(guān)重要的作用,并且現(xiàn)有的大量軟件接口都是非語言的、原始的和簡潔的。通過人臉表情識別期望用戶的感受和情感狀態(tài)可以大大改善人機交互(HCI)體驗[1-2]。
在面部表情識別中,表情一般分為7類[3],包括生氣、厭惡、害怕、高興、悲傷、驚訝和中性?,F(xiàn)在的表情識別任務(wù)集中在圖像預(yù)處理、特征提取和分類三大塊,從原始數(shù)據(jù)中抽離特征用于分類這一步驟有著至關(guān)重要的作用,它直接影響了表情識別的性能。傳統(tǒng)的特征提取方法主要有局部特征二值模式(Local Binary Patterns)、主成分分析(Principal Component Analysis)、尺度不變特征變換(Scale-invarialt Feature Transform)等。Ma等[4]提出了一種基于塊LGBP,以接收過完備字典。通過稀疏表示,從每個最小子塊中的殘差值中獲取類別殘差向量。通過殘差向量類別中的大量最小殘值來測試表情類別。蔡則蘇等[5]提出了一種基于PCA的特征提取算法,通過PCA提取人臉特征并將特征加入哈希表中進行分類,對復(fù)雜數(shù)據(jù)集進行降維并揭示了數(shù)據(jù)集中某些潛在的隱含信息。傳統(tǒng)方法大多采用手工提取,雖然具有較高的準確率,但是過程中會包含對分類沒有作用的特征,或者忽略了對分類具有重大作用的特征。隨著近些年來深度學(xué)習(xí)的不斷發(fā)展,將卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用到表情識別分類的問題引發(fā)了眾多學(xué)者的研究和探討。深度學(xué)習(xí)方法與傳統(tǒng)方法最大的不同就是深度學(xué)習(xí)將特征提取和分類兩大塊結(jié)合在了一起,這極大地減少了因人工干預(yù)而導(dǎo)致的誤差,并且通過局部感知的方法提取特征可以細化提取出人工提取難以提取到的關(guān)鍵點和特征。Szegedy等[6]提出了GoogLeNet架構(gòu),卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)深度高達27層,是ILSVRC2014分類挑戰(zhàn)賽冠軍,將Top5的錯誤率降低至6.67%。He等[7]提出了ResNet架構(gòu),在ILSVRC2015中獲得優(yōu)勝,ResNet在其內(nèi)部殘差塊使用了內(nèi)部跳躍連接,緩解了在深度網(wǎng)絡(luò)中增加深度帶來的梯度消失問題。深度學(xué)習(xí)的方法取得了比傳統(tǒng)方法更高的識別率,但也帶來了一些無法忽視的問題:圖像預(yù)處理過于耗時、網(wǎng)絡(luò)深度和寬度過高導(dǎo)致計算復(fù)雜度過大、梯度彌散(梯度越到后面越容易消失),難以優(yōu)化模型、訓(xùn)練數(shù)據(jù)集有限容易產(chǎn)生過擬合。
針對以上問題,本文提出了一種以主成分分析特征圖作為輸入的改進的輕量卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。首先通過主成分分析方法對圖像進行降維重構(gòu),摒棄了自然采集圖像下出現(xiàn)的許多與面部表情無關(guān)的冗余信息,降低預(yù)處理成本;然后本文設(shè)計了一種輕量卷積網(wǎng)絡(luò)結(jié)構(gòu),降低由于網(wǎng)絡(luò)深度寬度導(dǎo)致的高計算成本和梯度彌散問題;最后與現(xiàn)有的人臉表情識別方法進行對比,在與現(xiàn)實環(huán)境相符合的FER2013公開數(shù)據(jù)集上進行實驗。結(jié)果表明,本文方法有效地提高了人臉表情的識別率。
PCA通過線性變換將訓(xùn)練圖像變?yōu)橐唤M各維度都線性無關(guān)的數(shù)據(jù),使得這一組數(shù)據(jù)盡可能多地反映訓(xùn)練圖像的信息[8-9]。PCA的目標是找到數(shù)據(jù)中最主要的信息,去除噪聲和冗余,并將復(fù)雜的數(shù)據(jù)降維,發(fā)掘出隱藏在復(fù)雜數(shù)據(jù)背后的簡易結(jié)構(gòu)。訓(xùn)練圖像可看作一個復(fù)雜的高維數(shù)據(jù)矩陣,可用PCA對該圖像進行降維重構(gòu),得出降維后的樣本圖像。
PCA的處理步驟如下:
1) 把每幅圖像看作一個矩陣X,表達式如下:
2) 求取圖像樣本矩陣的協(xié)方差矩陣S,如下:
3) 求協(xié)方差矩陣的特征值和特征向量:解特征方程|λ-Sr|=0或采用SVD方法(本文采用SVD),求特征值λ1≥λ2≥…≥λl以及對應(yīng)的特征向量a1,a2,…,al,其中l(wèi)表示特征向量的個數(shù),協(xié)方差矩陣的特征向量表示為A=(a1,a2,…,an)。
4) 將協(xié)方差矩陣的特征向量按特征值的大小進行排列組合,并取前k個向量作為投影到k維空間的投影矩陣。
5) 投影矩陣與圖像樣本矩陣的點積生成最終的主成分矩陣,訓(xùn)練圖像的主成分矩陣為ATX。
前饋式網(wǎng)絡(luò)(Feedforward Neural Work,FNN)是一種簡單的神經(jīng)網(wǎng)絡(luò),神經(jīng)元按照各層分布排列,各層神經(jīng)元只和前一層的神經(jīng)元相連。單通道且各層間沒有反饋,是目前發(fā)展最快、應(yīng)用最廣的神經(jīng)網(wǎng)絡(luò)之一。卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是一種特殊的前饋式網(wǎng)絡(luò),它具有深度結(jié)構(gòu)并包含卷積計算,是深度學(xué)習(xí)的代表算法之一,它包含了卷積層、池化層、全連接層、輸出層等多個結(jié)構(gòu)。卷積神經(jīng)網(wǎng)絡(luò)通過端對端的方式,對圖像進行特征提取和分類,極大減少了人工干預(yù),適用于大規(guī)模的數(shù)據(jù)訓(xùn)練。以下是卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)詳解。
1.2.1卷積層
卷積層由若干個卷積單元組成,卷積單元通過反向傳播算法得到最佳化參數(shù),用于提取特征圖。將用可訓(xùn)練的卷積核應(yīng)用到上一層的表情特征圖的所有點上,通過將卷積核在輸入特征圖上滑動,生成經(jīng)過濾波處理的特征圖,并經(jīng)過激活函數(shù)激活后輸出給下一層。表情特征圖的處理公式為:
Ci=f(Ci-1*Ki+bi)
(3)
式中:Ci為第i層輸出的特征圖;f為激活函數(shù);Ki為第i層與第i-1層對應(yīng)的卷積核;bi為偏置向量。
1.2.2池化層
池化層主要是對參數(shù)進行壓縮,是圖像的下采樣層[10]。池化層一方面能對特征圖進行降維,減少網(wǎng)絡(luò)計算量,另一方面可以提取主要特征,放棄次要特征,防止網(wǎng)絡(luò)過擬合,提高模型泛化能力。本文采用最大池化與平均池化兩種方式,最大池化是選擇池化區(qū)域中最大的數(shù)作為該池化區(qū)域的輸出,平均池化則是對池化區(qū)域的所有數(shù)求和取平均值。池化公式為:
Ci=f(down(p(Ci-1)+bi))
(4)
式中:Ci為第i層輸出的特征圖;f為激活函數(shù);p為池化方式;down為下采樣函數(shù);bi為偏置向量。
1.2.3全連接層
全連接層將自身的每一個神經(jīng)元與上一層的神經(jīng)元進行連接,將所有特征排列成一個向量,作為神經(jīng)網(wǎng)絡(luò)的“分類器”。基于這個特性,全連接層的參數(shù)是整個卷積神經(jīng)網(wǎng)絡(luò)最多的一層,占比高達80%以上。其計算公式為:
xout=f(xin*K+b)
(5)
式中:xin為輸入的元素,xout為輸出元素;f為激活函數(shù);K為全連接層的卷積核;b為偏置向量。
1.2.4輸出層
本文采用SoftMax函數(shù)進行輸出層的表情分類,SoftMax函數(shù),又稱歸一化函數(shù)。它是邏輯二分類器sigmoid函數(shù)的擴展,適用于多分類問題。SoftMax函數(shù)接收全連接層輸出的向量作為輸入,把每一維的數(shù)轉(zhuǎn)換為(0,1)區(qū)間的某一實數(shù),進行分類。對于輸入圖像x,其是類別i的概率公式為:
式中:p表示x是類別i的概率;w表示權(quán)重值;k表示總的類別數(shù),k∈{0,1,2,3,4,5,6}。
人臉表情圖像在采集的過程中,會存在采光過高、背景復(fù)雜、無用冗余信息過多等問題。因為在用卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練之前,需要對圖像進行補光、人臉定位等預(yù)處理。
2.1.1 FER2013數(shù)據(jù)集
FER2013人臉表情數(shù)據(jù)集由35 886幅人臉表情圖片組成,其中,測試圖包含了28 708幅圖片,驗證圖和測試圖各為3 589幅。每幅圖的尺寸固定為48×48像素,且均為灰度圖像。共有7種表情,分別對應(yīng)0-6的數(shù)字標簽,具體表情對應(yīng)的標簽如下:0,生氣;1,厭惡;2,害怕;3,高興;4,悲傷;5,驚訝;6,中性。該數(shù)據(jù)集的圖像具有不同的角度、光照、姿勢、遮擋物,并且分辨率較低,使得FER2013對比其他公開數(shù)據(jù)集數(shù)據(jù)更加齊全,同時也更加符合生活場景。圖1為FER2013數(shù)據(jù)集中的7種表情圖像例子。
圖1 FER2013數(shù)據(jù)集的7種表情類別圖例
2.1.2 JAFEE數(shù)據(jù)集
JAFEE數(shù)據(jù)集包含213幅圖像,是十位日本女性的7種面部表情(與FER20213數(shù)據(jù)集中的表情標簽相同),每個人每種表情大約有3到4幅圖像[10]。圖像源自于實驗室采集,是像素為256×256的靜態(tài)灰度圖。圖2為JAFEE數(shù)據(jù)集中的7種表情圖像樣例。
圖2 JAFEE數(shù)據(jù)集的7種表情類別圖例
在數(shù)據(jù)集中的預(yù)處理如下:
1) 將數(shù)據(jù)集的原始圖像進行PCA降維重構(gòu),獲取表情識別的關(guān)鍵部分:鼻子、眼睛、嘴巴。忽略掉與表情識別無關(guān)的面部區(qū)域,去除多余信息,降低模型訓(xùn)練成本。效果如圖3所示。
圖3 PCA降維重構(gòu)圖像
2) 數(shù)據(jù)增強。為了保證訓(xùn)練模型的精度,防止神經(jīng)網(wǎng)絡(luò)過擬合,加強神經(jīng)網(wǎng)絡(luò)的泛化能力,需要對數(shù)據(jù)進行數(shù)據(jù)增強處理。本文采用的數(shù)據(jù)增強方式是旋轉(zhuǎn)變換、上下左右移動、隨機水平翻轉(zhuǎn)、傾斜、縮放的方式,將數(shù)據(jù)集圖片擴充到近十倍,具體參數(shù)如表1所示。
表1 數(shù)據(jù)增強參數(shù)
盧官明等[11]設(shè)計的7層CNN模型在用于人臉表情識別上要優(yōu)于一般的傳統(tǒng)方法,但識別率與其他深層的卷積模型相比依然達不到一個理想的效果,而在GoogLeNet與VGG16等分別具有27層與16層,在數(shù)據(jù)量小的數(shù)據(jù)集中會導(dǎo)致特征圖分辨率降低,出現(xiàn)梯度彌散、學(xué)習(xí)特征不夠魯棒等問題,而且深度過高導(dǎo)致計算成本過大,實時性不足。
為此,本文提出了一種改進的輕量卷積神經(jīng)模型:
1) 在輸入層加一層步長為1的1×1卷積。
2) Conv2-1層和Conv2-2層的卷積核為64個,Conv2-1和Conv2-2層的卷積核尺寸為5×5;Conv3-1層和Conv3-2層的卷積核為64個,Conv3-1層和Conv3-2層層的卷積核尺寸為5×5。
3) 池化層不包含學(xué)習(xí)參數(shù),P4層采用最大值池化(MaxPooling2D),P7層采用平均池化(AveragePooling2D),池化核大小均為(2,2),池化步長為2。
4) 在每個卷積層的后邊均加入PReLU激活函數(shù)[12]。全連接層Fc1和Fc2后均添加Dropout函數(shù),參數(shù)設(shè)置為0.5。
輕量神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。
圖4 輕量神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)示意圖
該網(wǎng)絡(luò)結(jié)構(gòu)一共含有9層,包括5層卷積層、2層池化層和2層全連接層,受文獻[13]的啟發(fā),網(wǎng)絡(luò)在輸入層中加入一層1×1的卷積層增加非線性表示,增加網(wǎng)絡(luò)深度,提高模型特征表達能力;該模型在初始層較大的堆疊卷積層使用5×5卷積核,在后兩層堆疊卷積層使用3×3卷積核,可有效降低參數(shù)量并保證模型空間特征信息的提取能力;在堆疊卷積層中加入PReLU函數(shù),在ReLU激活函數(shù)的基礎(chǔ)上加入?yún)?shù),參數(shù)由模型訓(xùn)練得出,可提高網(wǎng)絡(luò)的非線性表征,解決梯度彌散問題,加快模型收斂速度。對最后一層卷積得出的深度卷積采用平均全局池化操作(Golbal Average Pooling),最大程度保留局部信息,替代一層1×4 096的全連接層,減少參數(shù)量,降低計算成本;剩余兩層連接層神經(jīng)元個數(shù)分別為2 048、1 024。全連接層中加入一層參數(shù)為0.5的Dropout層[13]。全連接層神經(jīng)元經(jīng)過dropout之后,一半的神經(jīng)元個數(shù)置0,可有效防止過擬合現(xiàn)象,加快訓(xùn)練速度,增強神經(jīng)網(wǎng)絡(luò)模型的泛化能力,最后輸入到輸出層,實現(xiàn)人臉表情的分類。
該網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)設(shè)置如表2所示。
表2 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)
本文方法使用硬件信息如下:GPU是NVIDA GeForce GTX960,CPU為Intel(R)Core(TM) i5-2300@2.80Hz,內(nèi)存為8 GB;實驗基于Python3.6.5下的TensorFlow2.0深度學(xué)習(xí)框架來進行,操作系統(tǒng)為Windows 10。為了保證實驗的嚴謹性,實驗采用的是十折交叉驗證法,將經(jīng)過擴充的公開數(shù)據(jù)集分為10份,9組作為訓(xùn)練集,1組作為測試集,進行10次實驗,將10次實驗結(jié)果取平均值。這樣既保證了實驗結(jié)果的有效性,也可以讓每份樣本都可以作為測試集和訓(xùn)練集,避免某些數(shù)據(jù)噪聲過大而影響最終的識別效果。作為CNN中的超參數(shù)設(shè)置如表3所示。
表3 CNN超參數(shù)
經(jīng)過200個epoch的訓(xùn)練后,計算十折交叉驗證后,FER2013數(shù)據(jù)集上的準確率為69.07%,得到的識別率曲線圖5所示,JAFFE數(shù)據(jù)集上的準確率為98.23%,得到的識別率曲線如圖6所示。
圖5 FER2013數(shù)據(jù)集的準確率曲線圖
圖6 JAFFE數(shù)據(jù)集的準確率曲線圖
由圖5、圖6可以看出,經(jīng)過大概40個epoch之后,模型就達到了一個比較好的識別效果。經(jīng)過200個epoch之后,識別率保持一個穩(wěn)定的狀態(tài),不再發(fā)生太大的波動,說明此時模型得到了充分的收斂。由圖中改進CNN與輕量CNN的曲線對比可知,經(jīng)過結(jié)構(gòu)改進的CNN識別率上優(yōu)于輕量CNN。而經(jīng)過PCA和數(shù)據(jù)增強的預(yù)處理之后,本文方法識別率要高于改進的純輕量CNN方法。
為了比較本文所提出的方法性能,與其他現(xiàn)有的主流模型和方法進行了對比實驗。FER2013數(shù)據(jù)集的對比結(jié)果如表4所示。
表4 不同算法在FER2013數(shù)據(jù)集的識別率結(jié)果對比
在FER2013數(shù)據(jù)集中,文獻[14]采用的是類VGG結(jié)構(gòu)網(wǎng)絡(luò),通過不斷堆疊卷積層和池化層構(gòu)建深度網(wǎng)絡(luò),但因其結(jié)構(gòu)只有10層,未達到VGG-16的深度和寬度,導(dǎo)致難以精確地提取人臉表情特征,識別率較低。文獻[15]是采用了8×8的卷積核的深度網(wǎng)絡(luò)結(jié)構(gòu),達到了肉眼識別65±5%[20]的效果,但選用的卷積核過大導(dǎo)致提取空間特征信息能力下降,識別率不夠理想。文獻[16-18]采用的均是多網(wǎng)絡(luò)融合的深度網(wǎng)絡(luò)框架,與單網(wǎng)絡(luò)相比,性能并沒有提升。說明針對FER2013數(shù)據(jù)集,多網(wǎng)絡(luò)融合并不是一個很好的選擇,使用單網(wǎng)絡(luò)反而能取得較好的識別率。文獻[19]提出了一種緊湊型的深度學(xué)習(xí)框架,使用了更少的參數(shù)情況下達到了較好的識別效果,達到66.51%。
為了進一步驗證模型的有效性和泛化能力,本文給出了JAFEE數(shù)據(jù)集中與其他現(xiàn)有模型的對比,如表5所示。
表5 不同算法在JAFFE數(shù)據(jù)集的識別率結(jié)果對比
在JAFFE數(shù)據(jù)集中,主流方法文獻中大多采用的是特征融合的深度網(wǎng)絡(luò)結(jié)構(gòu),文獻[22]采用的是多分辨率特征融合的方法,文獻[23]采用的是局部特征融合的方法,文獻[24]采用的是LBP特征與CNN卷積層融合的方法,文獻[23]和文獻[24]的方法原理上相似,均為通過擯棄與表情特征無關(guān)的一些特征向量以達到提高表情識別率的目的,而通過調(diào)整分辨率的方法則無法去除這些冗余的信息,因此文獻[23]和文獻[24]的識別率提升明顯,達到了97%。從表4、表5的識別率對比可以看出,本文提出的通過PCA降維重構(gòu)獲得主成分特征圖像作為輸入,并通過輕量CNN訓(xùn)練實現(xiàn)特征提取與分類的表情識別算法,具有更好的表情識別能力,一定程度上提高了表情識別率,在FER2013數(shù)據(jù)集和JAFFE數(shù)據(jù)集上達到了69.07%和98.23%的識別率。表6、表7分別為本文方法在FER2013數(shù)據(jù)集和JAFFE數(shù)據(jù)集上的混淆矩陣。
表6 FER2013數(shù)據(jù)集混淆矩陣
表7 JAFFE數(shù)據(jù)集混淆矩陣
表6、表7的混淆矩陣顯示了害怕、生氣、悲傷這三類表情的識別率明顯比其他四類表情低。輕微的生氣臉部會有輕微變動,無表情易于中性混淆;過分的生氣則會伴隨嘴巴張大、眉毛緊鎖和鼻子皺起等現(xiàn)象,與害怕和悲傷產(chǎn)生混淆。而害怕與悲傷最容易混淆,亦是兩表情中具有相同的眉毛特性、嘴角向兩邊拉伸以及眼睛緊緊閉起等特征。高興和驚訝最具識別率是因為它們各自具有獨特的標識:高興表情大部分嘴角翹起,眼瞼收縮;驚訝表情則會眼睛睜大,嘴巴張開。由于JAFFE數(shù)據(jù)集是在實驗室的環(huán)境中進行,所以高興、驚訝這兩類非常具有辨識度的表情達到了最高識別率,而FER2013數(shù)據(jù)集是競賽數(shù)據(jù)集,數(shù)據(jù)來源復(fù)雜,并不能達到實驗數(shù)據(jù)集的精度,而且數(shù)據(jù)集中一些復(fù)雜的表情圖像亦帶來了一些混淆,如驚訝般的高興、害怕般的厭惡等,增大了表情識別的難度。
本文方法在圖像預(yù)處理上采用了PCA降維重構(gòu)法,去除與表情無關(guān)的冗余特征,降低了深度模型在特征提取上的預(yù)處理時間成本,并用數(shù)據(jù)增強的方法擴充了數(shù)據(jù)集,加強了模型的泛化能力并防止過擬合。設(shè)計了改進的輕量級神經(jīng)網(wǎng)絡(luò),降低深度模型的深度和寬度,在FER2013、JAFEE公開數(shù)據(jù)集上進行了實驗,分別取得了69.07%和98.23%的識別率,一定程度上提高了表情識別率,并與其他主流方法進行對比,證明了其有效性。后續(xù)將用本方法在不同數(shù)據(jù)集中應(yīng)用,并進一步調(diào)整網(wǎng)絡(luò)的內(nèi)部框架和參數(shù),提高神經(jīng)網(wǎng)絡(luò)的泛化能力。