曾晴 曾小舟 申靜
關(guān)鍵詞: 表情識別;卷積神經(jīng)網(wǎng)絡(luò);數(shù)據(jù)增強;MTCNN;人臉檢測
0 引言
表情作為人類重要的情感表達方式之一[1],目前正成為新的研究熱點,人們希望通過研究人臉表情識別方法來實現(xiàn)計算機獲取人類表情的功能。具備表情識別功能的計算機設(shè)備能提高人機交互體驗,高效地解決更多實際問題并滿足更多的生活需求。例如:及時掌握駕駛員的情緒狀態(tài),減少交通事故;監(jiān)控老人和嬰幼兒的情緒狀態(tài),及時掌握其身體狀況,提高生活質(zhì)量;實時掌握遠(yuǎn)程教學(xué)過程中學(xué)生的上課狀態(tài),提高教學(xué)效果等。
卷積神經(jīng)網(wǎng)絡(luò)具有局部感知和權(quán)值共享的特點以及強大的特征提取能力,更適合于表情識別領(lǐng)域的應(yīng)用[2-7]。李冠杰等人[8]提出一種基于深度卷積神經(jīng)網(wǎng)絡(luò)的表情識別方法,實驗結(jié)果說明基于卷積神經(jīng)網(wǎng)絡(luò)的面部表情識別方法優(yōu)于傳統(tǒng)方法;趙彩敏等人[9]將一種改進的LeNet-5卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用于人臉表情識別,在JAFFE表情數(shù)據(jù)集上的仿真結(jié)果表明,在數(shù)據(jù)集樣本很小的情況下,該方法的識別率達到了79.81%。魏赟等人[10]提出了一種引入注意力機制的輕量級CNN通道和卷積自編碼器預(yù)訓(xùn)練通道的雙通道模型,在FER2013和CK+兩個表情數(shù)據(jù)集上分別取得了較高的識別率;王軍等人[11]提出一種雙通道遮擋感知神經(jīng)網(wǎng)絡(luò)模型,用于解決面部遮擋情況下特征提取難的問題,在CK+、RAF-DB、SFEW 3個表情數(shù)據(jù)集上進行對比實驗,其識別準(zhǔn)確率分別達到97.33%、86%和61.06%,有效提高了面部遮擋情況下的表情識別精度。
1 數(shù)據(jù)預(yù)處理
1.1 數(shù)據(jù)增強
人臉表情數(shù)據(jù)集大多數(shù)據(jù)量較小,而多層卷積神經(jīng)網(wǎng)絡(luò)的復(fù)雜度較高,直接將人臉表情數(shù)據(jù)集中的圖像作為輸入,容易出現(xiàn)過擬合的情況,不能訓(xùn)練出適用性強的樣本。為了解決這個問題,本文采用了數(shù)據(jù)增強的方法,即通過對原始圖像進行裁剪、旋轉(zhuǎn)、縮放等操作獲得大量新的圖像,用以擴增數(shù)據(jù)集,使表情識別模型所能學(xué)習(xí)到更多特征,從而增強算法的魯棒性。
本文中數(shù)據(jù)增強的具體操作包括:將原始圖像逆時針旋轉(zhuǎn)5度、縮放成260×180大小、按左上角坐標(biāo)(50, 60) 和右下角坐標(biāo)(220, 200) 進行裁剪。如圖1所示,以JAFFE 數(shù)據(jù)集中表情圖像為例,進行數(shù)據(jù)增強操作。
1.2 人臉檢測和剪切[12]
為了提高人臉識別的準(zhǔn)確率,去除人臉表情以外信息的干擾,在將人臉圖片輸入訓(xùn)練模型和預(yù)測模型之前,先對圖片進行人臉的檢測和剪切。本文選用MTCNN(Multi-task Convolutional Neural Network,多任務(wù)卷積神經(jīng)網(wǎng)絡(luò))實現(xiàn)人臉檢測和剪切。MTCNN主要分為P-Net、R-Net和O-Net三層網(wǎng)絡(luò)結(jié)構(gòu)。具體來說,基于MTCNN的人臉檢測和剪切實現(xiàn)流程如圖2所示。
1) 將輸入的圖像按照不同的縮放因子進行不同尺度的變換,依據(jù)圖像大小生成圖像金字塔,從而實現(xiàn)檢測不同大小的人臉圖像。
2) 通過淺層的全連接卷積網(wǎng)絡(luò)P-Net(ProposalNetwork) 快速產(chǎn)生人臉候選檢測框。將上一步的圖像金字塔輸入P-Net中的三個卷積層后,通過人臉分類器初步判斷所輸入圖像是否包含人臉,同時使用邊框和定位器將初步判斷所得的人臉區(qū)域和面部關(guān)鍵點進行定位,并輸出判斷所得的所有可能的人臉區(qū)域邊框,且將結(jié)果輸入R-Net,即下一步進行處理。
3) 通過比P-Net結(jié)構(gòu)較為復(fù)雜的卷積網(wǎng)絡(luò)R-Net(Refine Network) ,對上一步輸出的多個候選人臉區(qū)域框進行精選,刪除大部分效果較差的人臉區(qū)域框,留下極小部分可信度較高的人臉區(qū)域框。該層結(jié)構(gòu)主要是卷積神經(jīng)網(wǎng)絡(luò),與P-Net相比增加了一個全連接層,所以具有更為嚴(yán)格的數(shù)據(jù)篩選標(biāo)準(zhǔn),可以對輸入的人臉區(qū)域框進行細(xì)化選擇,并再次使用邊框和定位器進行人臉邊框定位,將結(jié)果輸出給O-Net,即下一步進行處理。
4) 通過比R-Net 結(jié)構(gòu)更復(fù)雜的卷積網(wǎng)絡(luò)O-Net(Output Network) ,對上一步結(jié)果進一步篩選,得到最終的人臉區(qū)域框和面部特征點坐標(biāo)。O-Net比R-Net多了一個卷積層,它的輸入圖像特征更多,能對輸入信息再次進行人臉判別、人臉邊框定位和人臉特征點定位,最終輸出人臉區(qū)域框的左上角坐標(biāo)、右下角坐標(biāo)以及人臉的五個特征點(左眼、右眼、鼻子、左嘴角和右嘴角)。
5) 根據(jù)上一步的人臉區(qū)域框坐標(biāo)結(jié)果,對原始圖像進行剪切,得到人臉區(qū)域框包含的人臉部分圖像。
2 基于多層卷積神經(jīng)網(wǎng)絡(luò)的人臉表情識別方法
本文提出的基于多層卷積神經(jīng)網(wǎng)絡(luò)的人臉表情識別方法如圖3所示,具體步驟如下:
1) 選擇數(shù)據(jù)集:本文選取JAFFE 表情數(shù)據(jù)集,輸入多層卷積神經(jīng)網(wǎng)絡(luò)中進行訓(xùn)練。JAFFE 表情數(shù)據(jù)集共213張圖像,包含了10個日本女學(xué)生的7種面部表情:Angry(憤怒)、Disgust(厭惡)、Fear(恐懼)、Happy(高興)、Sad(悲傷)、Surprise(驚訝)和Neutral(中性)。
2) 數(shù)據(jù)預(yù)處理:首先對JAFFE表情數(shù)據(jù)集中的圖像進行數(shù)據(jù)增強,包括裁剪、旋轉(zhuǎn)和縮放操作,得到增強后的表情數(shù)據(jù)集,從而提高模型的學(xué)習(xí)能力;然后基于MTCNN實現(xiàn)人臉檢測和剪切,將剪切后得到的人臉圖像作為表情識別網(wǎng)絡(luò)模型的輸入,從而去除多余的干擾。本文在預(yù)處理后的圖像數(shù)據(jù)集中隨機選取90%作為訓(xùn)練集,10%作為測試集。
3) 設(shè)計表情識別網(wǎng)絡(luò)模型:本文設(shè)計的用于人臉表情識別的多層卷積神經(jīng)網(wǎng)絡(luò)模型共包含8個權(quán)重層,即6個卷積層和2個全連接層。其中,卷積層的第1、2層分別使用3個卷積核,每個卷積核大小為3×3,卷積層的第3、4層分別使用4個卷積核,每個卷積核大小為3×3,卷積層的第5、6層分別使用5個卷積核,每個卷積核大小為3×3;池化層采用最大池化,窗口大小為2,步長為1;兩個全連接層的節(jié)點數(shù)分別設(shè)置為512和64;最后通過Softmax分類層進行分類,得到7種表情的預(yù)測結(jié)果,模型結(jié)構(gòu)如圖4所示。
4) 訓(xùn)練表情識別網(wǎng)絡(luò)模型:將第2步得到的訓(xùn)練集輸入第3步設(shè)計的表情識別模型進行訓(xùn)練,得到訓(xùn)練后的表情識別模型。
5) 人臉表情預(yù)測:將第2步得到的測試集輸入第4 步訓(xùn)練后的表情識別模型,進行預(yù)測并輸出預(yù)測結(jié)果。
3 實驗
本文實驗基于Python語言和TensorFlow平臺,在JetBrains PyCharm 集成開發(fā)環(huán)境下實現(xiàn)。筆者將JAFFE人臉表情數(shù)據(jù)庫的圖片共213張進行壓縮、剪切、旋轉(zhuǎn)后得到增強后的圖片,加上原來表情庫中圖片一起共818張,其中90%的圖片用于模型訓(xùn)練,10%的圖片用于預(yù)測,即訓(xùn)練圖片736張,預(yù)測圖片82張。訓(xùn)練時,選擇優(yōu)化器Adam,誤差函數(shù)categorical_cros?sentropy,迭代次數(shù)100,學(xué)習(xí)率0.005,激活函數(shù)選擇Relu。
預(yù)測結(jié)果如表1所示,其中高興的預(yù)測準(zhǔn)確率為91.67%,驚訝的預(yù)測準(zhǔn)確率為90.91%,中性的預(yù)測準(zhǔn)確率為81.82%,憤怒的預(yù)測準(zhǔn)確率為76.92%,厭惡的預(yù)測準(zhǔn)確率為72.73%,效果較好,而恐懼和悲傷的預(yù)測準(zhǔn)確率都低于50%,效果不理想。主要原因包括:1) 本文方法將JAFFE表情數(shù)據(jù)集進行數(shù)據(jù)增強后得到的表情數(shù)據(jù)集作為輸入,能提高模型的學(xué)習(xí)能力,另一方面,基于MTCNN對輸入圖像進行人臉檢測和剪切,去除了多余的干擾;2) 本文設(shè)計的多層卷積神經(jīng)網(wǎng)絡(luò)模型對于所輸入的數(shù)據(jù)集,能夠較好地提取出相應(yīng)的表情特征,所以大多數(shù)情況能很好地識別出人臉表情;3) 恐懼和悲傷的表情特征相對于其他幾種表情來說不夠明顯,提取難度更高,所以實驗得到的預(yù)測準(zhǔn)確率較低;4) 要獲得更高的表情識別率,一是要從數(shù)量角度和多樣性角度進一步豐富輸入的表情數(shù)據(jù)集,二是要設(shè)計出更合適的神經(jīng)網(wǎng)絡(luò)模型,能夠提取出更多有效的表情特征,從而提高整體的表情識別能力。
4 總結(jié)
人臉表情識別功能可以提升智能設(shè)備人機交互體驗和解決問題的能力。本文提出了一種基于多層卷積神經(jīng)網(wǎng)絡(luò)的人臉表情識別方法,先對JAFFE表情數(shù)據(jù)集中的圖像進行數(shù)據(jù)增強,包括裁剪、旋轉(zhuǎn)和縮放操作,得到增強后的表情數(shù)據(jù)集;然后基于MTCNN實現(xiàn)人臉檢測和剪切,將剪切后得到的人臉圖像作為表情識別網(wǎng)絡(luò)模型的輸入;接下來設(shè)計表情識別網(wǎng)絡(luò)模型,模型共包含8個權(quán)重層,即6個卷積層和2個全連接層;再把預(yù)處理后的人臉圖像數(shù)據(jù)集中90%的圖像輸入模型進行訓(xùn)練得到訓(xùn)練后的模型;最后將預(yù)處理后的人臉圖像數(shù)據(jù)集中剩下的10%的圖像作為測試集進行預(yù)測。實驗結(jié)果表明,本文方法對高興、驚訝、中性、憤怒和厭惡五種表情的預(yù)測準(zhǔn)確率較高,而恐懼和悲傷的預(yù)測準(zhǔn)確率較低。為了進一步提高本文方法的表情識別能力,可以從以下兩個方面進行改進,一是從數(shù)量角度和多樣性角度進一步豐富輸入的表情數(shù)據(jù)集;二是設(shè)計更合適的神經(jīng)網(wǎng)絡(luò)模型,能夠提取出更多有效的表情特征。