馮宇平 逄騰飛 管玉宇 劉 寧 趙德釗
(青島科技大學(xué)自動化與電子工程學(xué)院 山東 青島 266061)
豐富的表情變化是人類社會交流中不可或缺的一部分,表情能夠傳達(dá)出很多平時(shí)無法用語言代替的信息,如何使機(jī)器高效地“理解”人類表達(dá)的表情信息在如今人工智能大潮中具有重要的研究意義。早在20世紀(jì)70年代,Ekman等[1]研究學(xué)者就已經(jīng)將人類表情進(jìn)行了細(xì)微的劃分,并將人類表情具體地劃分了六種不同的表達(dá),即生氣、憎惡、恐懼、開心、悲傷和驚訝,這為表情研究開辟了劃時(shí)代的意義,表情識別研究也如同雨后春芽般發(fā)展起來。
近年來,隨著計(jì)算機(jī)算力的高度飛躍以及深度學(xué)習(xí)的飛速發(fā)展,人臉表情識別也被越來越多的研究學(xué)者所關(guān)注,人臉表情識別領(lǐng)域也開啟了新的大門。表情識別的研究根據(jù)方法不同分為兩大類:基于傳統(tǒng)算法的表情識別和基于深度學(xué)習(xí)的表情識別。基于傳統(tǒng)算法的表情識別是利用傳統(tǒng)算法檢測,然后提取表情信息,最后進(jìn)行分類。常用的傳統(tǒng)表情識別算法有局部二值模式(LBP)[2]、Gabor小波法[3]和尺度不變特征變換(Scale Invariant Feature Transform,SIFT)[4-5]等,這些算法都在當(dāng)時(shí)取得了良好的效果。文獻(xiàn)[6]將人臉表情通過LBP處理得到具有辨識性的紋理特征,然后利用增強(qiáng)局部特征的支持向量機(jī)(Support Vector Machine,SVM)作為分類器,該方法在CK+數(shù)據(jù)集中的識別率為91.4%;莫修飛[7]采用Fisher準(zhǔn)則[8]選取15個(gè)特征代表點(diǎn)表征圖像,然后利用SIFT算法提取表情特征,最后采用權(quán)重投票機(jī)制(WMV)進(jìn)行分類,該方法在JAFFE數(shù)據(jù)集上取得了良好的識別效果;楊凡等[9]重新定義Gabor參數(shù)矩陣,并結(jié)合Adboost算法來構(gòu)建分類器,該方法平均的識別率為88%左右。傳統(tǒng)的人臉表情算法提取的特征屬于淺層特征,不能更加深入地提取高語義特征,而且必須結(jié)合手工特征的幫助,標(biāo)注特征繁雜,在如今大數(shù)據(jù)的背景下,傳統(tǒng)提取特征算法顯得略有不足。深度學(xué)習(xí)表情識別算法的常用模型主要有CNN、深度置信網(wǎng)絡(luò)(Deep Belief Networks,DBNs)和堆疊式自動編碼器(Stacked Auto-encoder,SAE)等[10],這些深度學(xué)習(xí)的模型能夠更好地解決傳統(tǒng)手工提取特征的缺點(diǎn),甚至能夠提取人類肉眼無法查別的深層特征。也有很多學(xué)者將傳統(tǒng)特征提取算法與深度學(xué)習(xí)相結(jié)合,將人臉表情識別領(lǐng)域推向了一個(gè)新的高度,使得人臉表情的識別率不斷地提升。文獻(xiàn)[11]提出了一種兩階段CNN級聯(lián)的結(jié)構(gòu):在第一階段使用VGG16網(wǎng)絡(luò)提取視頻序列中人臉的自然特征和充分的表情特征,第二階段加入多個(gè)卷積層和全連接層提取兩種表情的不同特征來進(jìn)行分類,該方法在CK+數(shù)據(jù)集取得了95.4%的識別率。文獻(xiàn)[12]采用三種不同的CNN模型,比較了淺層CNN、雙通道CNN和預(yù)訓(xùn)練CNN模型的不同識別效果,其中淺層CNN在CK+和FER2013數(shù)據(jù)集分別取得了92.86%和68%的識別率,但是該文將實(shí)驗(yàn)數(shù)據(jù)集FER2013做了鏡像的數(shù)據(jù)增強(qiáng)且淺層CNN僅卷積層數(shù)目也多達(dá)18層。張俞晴等[13]采用SIFT算法提取局部特征,并將在CNN中得到的全局特征進(jìn)行融合,最后利用Softmax進(jìn)行分類,該方法在CK+和FER2013數(shù)據(jù)集上分別取得了95.4%和68.1%的識別率。
以上的方法都取得了不錯(cuò)的識別效果,但是文獻(xiàn)[12]擴(kuò)充了數(shù)據(jù)集的大小,文獻(xiàn)[11]和文獻(xiàn)[12]使用了大規(guī)模的網(wǎng)絡(luò)模型,都使得訓(xùn)練時(shí)間過長,同時(shí)識別率還有進(jìn)一步提升空間。為此為了避免一味追求高準(zhǔn)確率而不斷擴(kuò)充實(shí)驗(yàn)數(shù)據(jù)集大小或者增加網(wǎng)絡(luò)模型深度的缺點(diǎn),本文不再改動實(shí)驗(yàn)數(shù)據(jù)集樣本數(shù)量,但是將樣本的呈現(xiàn)順序進(jìn)行隨機(jī)打亂訓(xùn)練并驗(yàn)證,同時(shí)創(chuàng)建了僅含有5個(gè)卷積層的CNN模型,使網(wǎng)絡(luò)訓(xùn)練速度變快,并且借鑒了將傳統(tǒng)LBP算法和CNN相結(jié)合的策略,采用SGD算法進(jìn)行模型權(quán)重更新,選取權(quán)重最優(yōu)的CNN模型,最后在CK+與FER2013數(shù)據(jù)集做了仿真實(shí)驗(yàn),經(jīng)過與多個(gè)文獻(xiàn)方法對比,本文方法在訓(xùn)練時(shí)間較短的情況下,提高了表情的識別效果。
CK+表情數(shù)據(jù)集是人臉表情識別領(lǐng)域的開源庫之一,可以供用戶免費(fèi)下載使用,該數(shù)據(jù)集創(chuàng)建于2010年,是在數(shù)據(jù)集Cohn-Kanade Dataset的基礎(chǔ)上添加動態(tài)視頻序列變化而來的,該數(shù)據(jù)集包含123名參與者,共含有593個(gè)圖片序列,每名參與者都包含7種帶有表情標(biāo)簽的表情序列,圖片大小為640×490,圖1選取了部分參與者不同表情的實(shí)例圖片。
圖1 CK+數(shù)據(jù)集部分參與者圖片
FER2013表情數(shù)據(jù)集是由Kaggle公司在2013年的比賽提供的,該數(shù)據(jù)集圖片大小均為48×48,全部為統(tǒng)一的灰度圖像。數(shù)據(jù)集包含具有一定差異的35 886幅人臉表情圖片,同樣含有7種不同的面部表情,由標(biāo)簽0-6組成,每種表情的數(shù)量各不相同,最少的與最多的表情圖片數(shù)量相差十幾倍,圖2清晰地顯示了每種表情的數(shù)量差距。
圖2 FER2013數(shù)據(jù)集構(gòu)成圖
圖3選取了數(shù)據(jù)集中的部分圖片,可以看出FER2013數(shù)據(jù)集參與者種族、年齡差距跨度大,圖片背景信息參差不齊,圖片沒有經(jīng)過特意的預(yù)處理矯正,更甚至有些圖片并不是人臉表情圖片并且有些圖片的標(biāo)簽也存在錯(cuò)誤。因?yàn)樵摂?shù)據(jù)集樣本不是經(jīng)過實(shí)驗(yàn)室環(huán)境下準(zhǔn)確獲取,所以數(shù)據(jù)集要求網(wǎng)絡(luò)的泛化能力和魯棒性能必須強(qiáng)大,很多文獻(xiàn)在該數(shù)據(jù)集上的識別率并不是很高。本文選取了以上兩種數(shù)據(jù)集作為實(shí)驗(yàn)數(shù)據(jù)集,確保了網(wǎng)絡(luò)模型的可靠性。
圖3 FER2013數(shù)據(jù)集部分示例圖片
原始的表情數(shù)據(jù)集圖片包含許多無用的背景信息,并且圖片特征單一,本文首先對圖片進(jìn)行預(yù)處理,然后使用LBP算法提取圖片的紋理特征,并且與CNN進(jìn)行級聯(lián),創(chuàng)建了具有權(quán)重更迭的CNN模型。該模型能夠準(zhǔn)確地訓(xùn)練網(wǎng)絡(luò),得到更好的識別效果。本文算法的總體流程如圖4所示。
圖4 LBP和權(quán)重最優(yōu)下的CNN算法流程
原始的表情數(shù)據(jù)集背景尺寸寬,包含拍攝時(shí)的一些與表情特征無關(guān)的信息,比如圖片背景、配飾、頭發(fā)等,這些都會在一定程度上影響識別的結(jié)果,所以本文對這些信息進(jìn)行了剔除,只保留了與表情相關(guān)的有用信息,然后對圖片進(jìn)行了像素的歸一化操作,將兩個(gè)數(shù)據(jù)集的圖片的像素都變?yōu)?4×44。圖5顯示了數(shù)據(jù)集預(yù)處理前后的差異。
圖5 CK+數(shù)據(jù)集預(yù)處理前后圖片
LBP特征是在20世紀(jì)末被學(xué)者Ojala等[14]研究得到的,與SIFT和HOG算法一樣,都可以提取圖片的局部特征,并且不受旋轉(zhuǎn)和灰度變化的影響。使用LBP算子能夠更好地利用圖片的淺層特征,同時(shí)可以提高CNN的訓(xùn)練速度和識別效果。
2.2.1LBP算子原理
最初的LBP算子定義在一個(gè)3×3的方形框內(nèi),把框內(nèi)區(qū)域的中心點(diǎn)像素視作基準(zhǔn)點(diǎn),剩余8個(gè)像素點(diǎn)的灰度值與中心點(diǎn)像素做差值,根據(jù)差值的大小分別將對應(yīng)像素點(diǎn)標(biāo)記為1或0,依次排列構(gòu)成一個(gè)8位二進(jìn)制數(shù),該值的大小等于LBP算子值,如圖6所示。
圖6 LBP算子模型
2.2.2不同的LBP算子
由圖6可以看出,最初的LBP算子只能在固定的區(qū)域內(nèi)運(yùn)算,然而不同的圖片尺寸、頻率紋理各不相同,這就使研究學(xué)者再次創(chuàng)新了LBP算子,將原始的3×3正方形框拓展到n×n的圓形區(qū)域,改進(jìn)的圓形LBP算子在半徑R區(qū)域內(nèi)可以含有任意多的P個(gè)采樣點(diǎn),稱為Circular LBP,并由符號LBPP,R表示,圖7中定義了三種不同的圓形算子。
(a) LBP8,1 (b) LBP8,2(c) LBP16,2圖7 Circular LBP算子模型
由圖7(a)可以看出,里面包含8個(gè)黑色采樣點(diǎn),每個(gè)采樣點(diǎn)的位置坐標(biāo)如式(1)所示。
(1)
式中:(xc,yc)是圓點(diǎn),(xp,yp)是黑色的某個(gè)采樣點(diǎn)。采樣點(diǎn)的位置坐標(biāo)可能會出現(xiàn)小數(shù),所以可以用雙線性插值來取整,如式(2)所示。
(2)
之后,許多改進(jìn)的LBP算法也層出不窮,例如Uniform Pattern LBP等價(jià)模式、MB-LBP(Multiscale Block LBP)特征和LBPH特征向量等,本文通過比較采用了Circular LBP算法,將預(yù)處理好的數(shù)據(jù)集進(jìn)行了LBP特征提取,并通過多次實(shí)驗(yàn)比較了LBP(P=8,R=1)、LBP(P=8,R=3)和LBP(P=6,R=1)時(shí)不同的表情識別效果,選取了最優(yōu)的半徑R和采樣點(diǎn)P,即P=6、R=1時(shí)結(jié)果最佳。提取的特征圖片如圖8所示。
圖8 不同LBP特征提取圖
CNN模型是機(jī)器學(xué)習(xí)中最常用的前饋神經(jīng)網(wǎng)絡(luò)模型,特別對于大規(guī)模的圖片處理有著強(qiáng)大的功能。CNN的多層結(jié)構(gòu)使得它具有自主學(xué)習(xí)能力,并不斷更新網(wǎng)絡(luò)參數(shù),最后得到良好的識別效果。CNN模型的結(jié)構(gòu)主要有輸入層、卷積層、池化層、激活函數(shù)、全連接層和輸出層等[15],下面介紹CNN的主要層特點(diǎn)及作用。
2.3.1卷積層
卷積層主要負(fù)責(zé)執(zhí)行卷積的運(yùn)算,它可以使圖片的某些原始特征得到加強(qiáng),并降低了圖片的噪聲,一幅圖片經(jīng)過卷積運(yùn)算之后得到的輸出值是線性的,它必須將輸出經(jīng)過激勵函數(shù)來實(shí)現(xiàn)非線性表達(dá),使數(shù)據(jù)更加復(fù)雜,卷積層的操作公式為:
Gi=f(Gi-1*ωi+bi)
(3)
式中:Gi代表第i個(gè)卷積層;f代表卷積后的激活函數(shù);ωi代表第i個(gè)卷積層的權(quán)重參數(shù);bi代表偏移量;*表示卷積的乘法運(yùn)算。
2.3.2池化層
池化層就是將上層卷積操作后的特征進(jìn)行聚合,主要操作為下采樣[16],池化層不會產(chǎn)生新的訓(xùn)練參數(shù),而且下采樣更簡化了網(wǎng)絡(luò)的規(guī)模,本文采取了最大池化操作,可以提取特征圖中每一塊最大的特征值,最大池化的運(yùn)算如式(4)所示。
Gi=max sample(Gi-1)
(4)
式中:Gi代表第i個(gè)下采樣層;maxsample代表最大池化操作。
2.3.3激活函數(shù)
激活函數(shù)是CNN模型中很重要的一個(gè)單元,隨著CNN網(wǎng)絡(luò)模型的逐漸成熟,激活函數(shù)也更新得很快,它可以使網(wǎng)絡(luò)引入非線性因素,使模型不再單一,而且更加復(fù)雜化,有利于網(wǎng)絡(luò)更好地學(xué)習(xí)。本文選用了ReLU激活函數(shù)[17],它的計(jì)算公式為:
f(x)=max(0,x)
(5)
2.3.4全連接層
在CNN模型中,全連接層往往出現(xiàn)在最后幾層,目的是將前面設(shè)計(jì)的特征進(jìn)行加權(quán),并且實(shí)現(xiàn)分類,全連接層每個(gè)節(jié)點(diǎn)都與前層的節(jié)點(diǎn)進(jìn)行連接,這就意味著全連接層的參數(shù)數(shù)目比較大。運(yùn)算公式如下:
F(x)=f(x*ω+b)
(6)
式中:F(x)為全連接層;f為激活函數(shù);ω為權(quán)重參數(shù);b為偏移量。
眾所周知,大規(guī)模復(fù)雜的網(wǎng)絡(luò)模型能夠在一定程度上提高表情識別的準(zhǔn)確率,但是這就需要大量的實(shí)驗(yàn)訓(xùn)練樣本,并且對計(jì)算機(jī)的硬性條件也有著苛刻的要求,此外還會耗費(fèi)大量的成本和降低模型的訓(xùn)練速度。
為了提高訓(xùn)練速度,需采用淺層CNN,為了達(dá)到和深層CNN網(wǎng)絡(luò)同樣好的識別效果,必須在圖片的特征提取階段提取更具有表現(xiàn)力和魯棒性的特征。原始圖片的紋理特征表現(xiàn)力差,并且易受光照條件變化,包含的多是淺層的表情特征,所以在CNN之前先提取LBP特征,便可以得到更深的具有良好魯棒性的紋理特征。同時(shí)將實(shí)驗(yàn)樣本進(jìn)行多次隨機(jī)打亂訓(xùn)練并驗(yàn)證,選取權(quán)重最優(yōu)的CNN作為最終模型,即本文設(shè)計(jì)的基于LBP和權(quán)重最優(yōu)下的CNN識別方法。
實(shí)驗(yàn)時(shí)本文對實(shí)驗(yàn)數(shù)據(jù)集樣本數(shù)量不進(jìn)行擴(kuò)充,首先對原始圖片進(jìn)行了灰度值轉(zhuǎn)換和尺寸的歸一化操作,然后利用Circular LBP算子提取出LBP紋理特征。在借鑒CNN模型的通用架構(gòu)設(shè)計(jì)的基礎(chǔ)上創(chuàng)建了一種比較淺層的CNN模型,CNN模型參數(shù)如表1所示。
表1 CNN模型參數(shù)
本文構(gòu)建的CNN模型共有5個(gè)卷積層和5個(gè)最大池化層。每一個(gè)卷積層卷積核的數(shù)目分別是64、128、256、512、512,使用數(shù)目多的卷積核能夠在網(wǎng)絡(luò)加深時(shí)提取更高階的深層特征。卷積核大小統(tǒng)一為3×3,有利于降低網(wǎng)絡(luò)參數(shù)的數(shù)量,加快運(yùn)算效率。在每個(gè)卷積層之后,本文還添加了ReLU激活函數(shù)、BN歸一化層和2×2最大池化層。ReLU激活函數(shù)和BN歸一化層可以使卷積層的線性輸出的數(shù)據(jù)變?yōu)榉蔷€性化表達(dá),并且可以防止梯度爆炸和彌漫,而最大池化層能夠繼續(xù)提取特征并且減少參數(shù)數(shù)量。池化層之后還使用3個(gè)全連接層提取更為深度的圖片特征,解決網(wǎng)絡(luò)最后輸出的非線性問題。最后使用Softmax層進(jìn)行表情圖片的輸出分類。
本文實(shí)驗(yàn)采用Python3.6語言編寫,實(shí)驗(yàn)軟硬件平臺為:64位Linux操作系統(tǒng)、CPU為英特爾酷睿i5- 9400F,主頻是2.90 GHz,內(nèi)存是16 GB、顯卡型號為GeForce GTX 1080Ti,顯存是11 GB。將預(yù)處理好的CK+和FER2013數(shù)據(jù)集首先平均劃分為10組,并且無受試者重疊(同一幅圖片不能同時(shí)出現(xiàn)在同一個(gè)分組里面),選出1組作為驗(yàn)證集,1組作為測試集,其余為訓(xùn)練集,對訓(xùn)練集采用自建CNN和隨機(jī)梯度下降法進(jìn)行訓(xùn)練,利用驗(yàn)證集驗(yàn)證;然后隨機(jī)打亂數(shù)據(jù)集順序,繼續(xù)劃分驗(yàn)證集、測試集和訓(xùn)練集再次進(jìn)行訓(xùn)練和驗(yàn)證(本文共進(jìn)行了5次隨機(jī)打亂)得到最優(yōu)的權(quán)重;最后將權(quán)重最優(yōu)的模型進(jìn)行保存,并進(jìn)行測試,測試時(shí)進(jìn)行10倍交叉驗(yàn)證算出模型最終的識別率。
由于兩個(gè)實(shí)驗(yàn)數(shù)據(jù)集樣本數(shù)量存在較大差異,所以在不同數(shù)據(jù)集下CNN模型參數(shù)也有所不同,表2列出了不同數(shù)據(jù)集的參數(shù)比較。
表2 不同數(shù)據(jù)集的模型參數(shù)
為了得到模型最終穩(wěn)定的識別率,經(jīng)過多次實(shí)驗(yàn),在CK+和FER2013數(shù)據(jù)集上,將最大迭代次數(shù)分別設(shè)置為50和150次。多次訓(xùn)練迭代后,CNN模型的識別率達(dá)到了穩(wěn)定,最終在CK+數(shù)據(jù)集的識別率達(dá)到了97.2%,在FER2013數(shù)據(jù)集的識別率達(dá)到了71.4%。圖9顯示了在不同數(shù)據(jù)集上訓(xùn)練時(shí)不同迭代次數(shù)識別率的變化。
圖9 不同數(shù)據(jù)集的識別率折線圖
可以看出,在CK+數(shù)據(jù)集上,當(dāng)CNN模型迭代到第20次時(shí),就會基本收斂,識別率也會逐漸穩(wěn)定;而在FER2013數(shù)據(jù)集上,當(dāng)CNN模型到第35代(識別率69%)時(shí)還在緩慢增長(圖9中最大的迭代次數(shù)只顯示到第35代),最終在115代(識別率71%)達(dá)到峰值,這是由于CK+數(shù)據(jù)集與FER2013數(shù)據(jù)集相比,圖片的拍攝條件更為苛刻,并且圖片更為規(guī)整。同時(shí)為了比較本文方法的有效性,將本文方法進(jìn)行拆分并逐一比較,并在數(shù)據(jù)集CK+上做了多次測試,并取平均值作為最終的結(jié)果,如表3所示。實(shí)驗(yàn)結(jié)果表明,相對于單一的CNN模型,加入權(quán)重最優(yōu)下的CNN模型的識別率得到提高,CNN與LBP進(jìn)行融合后,識別率進(jìn)一步提高,達(dá)到了比較好的識別效果。同時(shí)本文自建的CNN在CK+數(shù)據(jù)集上訓(xùn)練迭代一次的平均時(shí)間為0.1 s,將其他網(wǎng)絡(luò)模型如VGG19進(jìn)行替換后,進(jìn)行多次實(shí)驗(yàn),訓(xùn)練迭代一次的平均時(shí)間為0.2 s,對比發(fā)現(xiàn)本文自建的CNN模型訓(xùn)練速度比較快。
表3 在CK+數(shù)據(jù)集上的模型識別率(%)
為了比較本文方法與其他傳統(tǒng)算法以及不同深度學(xué)習(xí)方法的性能,在CK+數(shù)據(jù)集上與SIFT融合CNN方法[13]、并行CNN模型[15]、HOG融合CNN方法[18]進(jìn)行了對比;在FER2013數(shù)據(jù)集上與CNN[19]和深度神經(jīng)網(wǎng)絡(luò)(DNN)[20]的深度學(xué)習(xí)算法進(jìn)行了比較。結(jié)果表明,本文提出的基于LBP特征和權(quán)重最優(yōu)下的人臉表情識別方法的識別率明顯高于其他方法。比較結(jié)果如表4、表5所示。
表4 不同方法在CK+數(shù)據(jù)集上的識別率對比
表5 不同方法在FER2013數(shù)據(jù)集上的識別率對比
為了比較各個(gè)表情在CK+和FER2013數(shù)據(jù)集上不同的識別效果,本文方法的混淆矩陣如表6、表7所示。表6的結(jié)果說明在CK+數(shù)據(jù)集上開心、驚訝和蔑視表情的識別率最高,因?yàn)檫@3種表情的特點(diǎn)都非常明顯,而且不至于混淆;生氣、憎惡、恐懼和悲傷的識別效果較差,這是因?yàn)檫@幾種表情都反映了人在消極情況下的特點(diǎn),而人在消極情況下的表情具有一定的相似性,這給表情分類帶來了難度。表7的結(jié)果說明在FER2013數(shù)據(jù)集上對開心和驚訝的識別效果較好,剩余的表情識別效果較差,原因在于本身FER2013數(shù)據(jù)集受干擾因素比CK+數(shù)據(jù)集要大得多得多,標(biāo)簽也存在錯(cuò)誤,并且人類肉眼的識別率也不到70%,這也從側(cè)面反映了原始樣本數(shù)據(jù)的重要性。
表6 本文方法在CK+數(shù)據(jù)集上的混淆矩陣
表7 本文方法在FER2013數(shù)據(jù)集上的混淆矩陣
本文提出的基于LBP特征和權(quán)重最優(yōu)下的CNN面部表情識別算法在CK+和FER2013數(shù)據(jù)集上分別取得了97.2%和71.4%的識別率,反映了自建的淺層CNN在融入傳統(tǒng)算法LBP,并且隨機(jī)打亂數(shù)據(jù)集后利用梯度下降算法訓(xùn)練來保存最優(yōu)權(quán)重后的模型取得了良好的性能提升,同時(shí)在不同數(shù)據(jù)集上展現(xiàn)了較好的魯棒性。但是有些表情,比如恐懼、悲傷的識別效果并不如人意,在接下來的工作中考慮能否改進(jìn)一些經(jīng)典的網(wǎng)絡(luò)模型,或者通過數(shù)據(jù)增強(qiáng)技術(shù),使其在表情特征的提取中,提取出更加細(xì)微的表情特征,以及利用遷移學(xué)習(xí)的方法對網(wǎng)絡(luò)模型進(jìn)行進(jìn)一步的優(yōu)化,期望達(dá)到更高的識別效果。