靳顯智,林 霏,王 葉
齊魯工業(yè)大學(xué)(山東省科學(xué)院) 電氣工程與自動化學(xué)院,濟(jì)南 250353
過去的面部表情識別方法主要依靠于人工設(shè)計(jì)的特征(比如邊和紋理描述量)和機(jī)器學(xué)習(xí)技術(shù)(如主成分分析、線性判別分析或支持向量機(jī))的結(jié)合。但是在無約束的環(huán)境中,人工設(shè)計(jì)對不同情況的特征提取是很困難的,同時(shí)容易受外來因素的干擾(光照、角度、復(fù)雜背景等),進(jìn)而導(dǎo)致識別率下降。深度學(xué)習(xí)方法的主要優(yōu)點(diǎn)在于它們可通過使用非常大的數(shù)據(jù)集進(jìn)行訓(xùn)練學(xué)習(xí)從而獲得表征這些數(shù)據(jù)的最佳功能。
劉諭奇等認(rèn)為基于深度學(xué)習(xí)的新方法可以改善面部表情分類任務(wù)[1-3],特別是ImageDataGenerator實(shí)現(xiàn)數(shù)據(jù)增強(qiáng),使的CNN達(dá)到了更大的突破。陳雄采用AAM模型對中性表情圖像進(jìn)行特征點(diǎn)定位,接著采用SVM算法訓(xùn)練分類器,進(jìn)行人臉表情運(yùn)動單元分類[4]。李清霞等用AR-LGC算子對提取的Gabor特征進(jìn)行編碼,從而得到圖像的AR-LGGC復(fù)合特征,進(jìn)而進(jìn)行人臉識別[5-6]。韋堅(jiān)等依據(jù)神經(jīng)網(wǎng)絡(luò)算法的原理,設(shè)計(jì)出了修復(fù)數(shù)字電視故障的神經(jīng)網(wǎng)絡(luò)模型[7]。
本文主要研究如何利用卷積神經(jīng)系統(tǒng)設(shè)計(jì)一個人臉表情識別系統(tǒng),一個表情識別系統(tǒng)的核心便是網(wǎng)絡(luò)模型部分[1],在VGG模型的基礎(chǔ)上改動了部分參數(shù)得到自己的網(wǎng)絡(luò)模型,并利用Fer2013數(shù)據(jù)集的訓(xùn)練集對其進(jìn)行訓(xùn)練,優(yōu)化,最終可以達(dá)到較準(zhǔn)確的識別圖片中人物表情的結(jié)果。
面部表情識別通??梢詣澐譃樗膫€進(jìn)程。包括圖像獲取,面部檢測,圖像預(yù)處理和表情分類。其中,面部檢測,臉部特征提取和面部表情分類是面部表情識別的三個關(guān)鍵環(huán)節(jié)[2]。面部表情識別的基本框架如圖1所示。
圖1 表情識別大致框架
首先是獲取圖像并執(zhí)行面部檢測,然后提取僅具有面部的圖像部分。所提取的面部表情在比例和灰度上不均勻,因此有必要對面部特征區(qū)域進(jìn)行分割和歸一化,其中執(zhí)行歸一化主要是對面部光照和位置進(jìn)行統(tǒng)一處理,將圖像統(tǒng)一重塑為標(biāo)準(zhǔn)大小,如48×48像素的圖片,即圖像預(yù)處理[3]。然后對臉部圖像提取面部表情特征值,并進(jìn)行分類[4]。采用卷積神經(jīng)網(wǎng)絡(luò)(CNN)來完成特征提取和分類的任務(wù),因?yàn)镃NN是模仿人腦工作并建立卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)模型的著名模型,所以選擇卷積神經(jīng)網(wǎng)絡(luò)作為構(gòu)建模型體系結(jié)構(gòu)的基礎(chǔ),最后不斷訓(xùn)練,優(yōu)化,最后達(dá)到較準(zhǔn)確識別出面部表情的結(jié)果[5]。
采用多普勒擴(kuò)展法的幾何歸一化分為兩個主要步驟:面部校正和面部修剪。主要目的是將圖像轉(zhuǎn)化為統(tǒng)一大小。具體步驟如下:
1)找到特征點(diǎn)并對其進(jìn)行標(biāo)記,首先選取兩眼和鼻子作為三個特征點(diǎn)并采用一個函數(shù)對其進(jìn)行標(biāo)記,這里選擇的函數(shù)是[x,y]=ginput(3)。這里重要的一點(diǎn)是獲得特征點(diǎn)的坐標(biāo)值,可以用鼠標(biāo)進(jìn)行調(diào)整。
2)兩眼的坐標(biāo)值可以看作參考點(diǎn),將兩眼之間的距離設(shè)置為d,找到兩眼間的中點(diǎn)并標(biāo)記為O,然后根據(jù)參考點(diǎn)對圖像進(jìn)行旋轉(zhuǎn),這步操作是為了保證將人臉圖像調(diào)到一致。
3)接下來以選定的O為基準(zhǔn),分別向左右兩個方向各剪切距離為d的區(qū)域,在垂直方向剪切0.5d和1.5d的區(qū)域,這樣就可以根據(jù)面部特征點(diǎn)和幾何模型對特征區(qū)域進(jìn)行確定。如圖2所示。
圖2 剪切的特征區(qū)域
4)為了更好的對表情進(jìn)行提取,本文的做法是將表情的子區(qū)域圖像裁剪成統(tǒng)一的48×48尺寸。
卷積神經(jīng)網(wǎng)絡(luò)(CNN)是一種前饋神經(jīng)網(wǎng)絡(luò),它包括卷積計(jì)算并具有較深的結(jié)構(gòu),因此是深度學(xué)習(xí)的代表性算法之一。隨著科技的不斷進(jìn)步人們在研究人腦組織時(shí)受啟發(fā)創(chuàng)立了神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)由很多相互聯(lián)系的神經(jīng)元組成并且可以在不同的神經(jīng)元之間通過調(diào)整傳遞彼此之間聯(lián)系的權(quán)重系數(shù)x來增強(qiáng)或抑制信號[6]。
標(biāo)準(zhǔn)卷積神經(jīng)網(wǎng)絡(luò)通常由輸入層、卷積層、池化層、全連接層和輸出層組成,如圖3所示。
圖3 標(biāo)準(zhǔn)卷積神經(jīng)網(wǎng)絡(luò)
其中圖3中第一層為輸入層,大小為28×28,然后通過20×24×24的卷積層,得到的結(jié)果再輸入池化層中,最后再通過圖中第四層既全連接層,直到最后輸出。
圖4為本文所采用的網(wǎng)絡(luò)模型。其中包括4個卷積層,3個池化層,池化層的大小為3×3,最終再通過兩個全連接層到達(dá)輸出層。網(wǎng)絡(luò)模型中的輸入層一般是一個矩陣,卷積層,池化層和全連接層可以當(dāng)作隱藏層,這些層通常具有不同的計(jì)算方法,需要學(xué)習(xí)權(quán)重以找到最佳值。
圖4 實(shí)驗(yàn)網(wǎng)絡(luò)模型
通過研究發(fā)現(xiàn),卷積神經(jīng)網(wǎng)絡(luò)類似于生物視覺神經(jīng)系統(tǒng)網(wǎng)絡(luò),具有分層特征。從圖3可以看出,標(biāo)準(zhǔn)卷積神經(jīng)網(wǎng)絡(luò)除了輸入和輸出外,還主要具有三種類型:池化層,全連接層和卷積層。這三個層次是卷積神經(jīng)網(wǎng)絡(luò)的核心部分[8]。
2.2.1 卷積層
卷積層是卷積神經(jīng)網(wǎng)絡(luò)的第一層,由幾個卷積單元組成。每個卷積單元的參數(shù)可以通過反向傳播算法進(jìn)行優(yōu)化,其目的是提取輸入的各種特征,但是卷積層的第一層只能提取低級特征,例如邊、線和角[7]。更多層的可以提取更高級的特征,利用卷積層對人臉面部圖像進(jìn)行特征提取。
一般卷積層結(jié)構(gòu)如下圖5,卷積層可以包含多個卷積面,并且每個卷積面都與一個卷積核相關(guān)聯(lián)。
圖5 卷積層機(jī)構(gòu)
h1,α和W1,α分別表示H1的第α個卷積面和第α個卷積核,x 表示輸入的人臉面部圖像矩陣;b1,α表示偏置,f表示卷積層函數(shù)。通過圖3至圖5可以看到,h1,α就是通過輸入的人臉面部圖像矩陣x和W1,α進(jìn)行內(nèi)卷積運(yùn)算然后加上偏置b1,α得到的,如式1所示。
h1,α=f(u1,a)=f(C1,α+b1,α)=f(x·W1,α)。
(1)
由式(1)可以看出,每次執(zhí)行卷積層計(jì)算時(shí),都會生成與之相關(guān)的多個權(quán)重參數(shù),這些權(quán)重參數(shù)的數(shù)量與卷積層的數(shù)量相關(guān),即與卷積層所用的函數(shù)有直接的關(guān)系。
2.2.2 池化層
在卷積神經(jīng)網(wǎng)絡(luò)中第二個隱藏層便是池化層,在卷積神經(jīng)網(wǎng)絡(luò)中,池化層通常會在卷積層之間,由此對于縮小參數(shù)矩陣的尺寸有很大幫助,也可以大幅減少全連接層中的參數(shù)數(shù)量[9]。此外池化層在加快計(jì)算速度和防止過擬合方面也有很大的作用[10]。
在識別圖像的過程中,有時(shí)會遇到較大的圖像,此時(shí)希望減少訓(xùn)練參數(shù)的數(shù)量,這時(shí)需要引入池化層。池化的唯一目的是減小圖像空間的大小。常用的有mean-pooling和max-pooling。
mean-pooling 即對一小塊區(qū)域取平均值,假設(shè)pooling窗的大小是2×2,那么就是在前面卷積層的輸出的不重疊地進(jìn)行2×2的取平均值降采樣,就得到mean-pooling的值。如圖6所示。
圖6 不重疊的4個2×2區(qū)域分別mean-pooling
max-pooling 即對一小塊區(qū)域取最大值,假設(shè)pooling的窗大小是2×2,就是在前面卷積層的輸出的不重疊地進(jìn)行2×2的取最大值降采樣,就得到max-pooling的值。如圖7所示。
圖7 不重疊的4個2×2區(qū)域分別max-pooling
2.2.3 全連接層
卷積神經(jīng)網(wǎng)絡(luò)中的最后一個隱藏層是全連接層。該層的角色與之前的隱藏層完全不同。卷積層和池化層的功能均用于面部圖像的特征提取,而全連接層的主要功能就是對圖像的特征矩陣進(jìn)行分類[11]。根據(jù)不同的狀況,它可以是一層或多層。
通過該層的圖片可以高度濃縮為一個數(shù)。由此全連接層的輸出就是高度提純的特征了,便于移交給最后的分類器或者回歸。
神經(jīng)網(wǎng)絡(luò)通過自學(xué)習(xí)的方式可以獲得高度抽象的,手工特征無法達(dá)到的特征,在計(jì)算機(jī)視覺領(lǐng)域已經(jīng)取得了革命性的突破[12]。被廣泛的應(yīng)用于生活中的各方面。而要想讓神經(jīng)網(wǎng)絡(luò)智能化,必須對它進(jìn)行訓(xùn)練,在訓(xùn)練過程中一個重要的算法就是反向傳播算法。反向傳播算法主要是不斷調(diào)整網(wǎng)絡(luò)的權(quán)重和閾值,以得到最小化網(wǎng)絡(luò)的平方誤差之和,然后可以輸出想要的結(jié)果。
設(shè)誤差函數(shù)為公式(2)
(2)
y為實(shí)際結(jié)果,o為預(yù)測結(jié)果。所以此時(shí)要求的就是J最小的時(shí)候wi的值。α是變化的速率。wi的計(jì)算方法如以下(3),(4)兩式。
(3)
=(y-o)×f(∑wixi)(1-f(∑wixi))×xi。
(4)
由此方法便可以計(jì)算出最好的wi值,讓最終的輸出結(jié)果更貼近想要的結(jié)果。
本次實(shí)驗(yàn)是在Win10環(huán)境下進(jìn)行的,為了少出錯誤,方便起見,查閱資料后決定利用Anaconda3搭建tensorflow。
3.2.1 數(shù)據(jù)集介紹
圖8為部分?jǐn)?shù)據(jù)庫圖像。本文中使用的Fer2013數(shù)據(jù)庫是一個常用于面部表情識別的數(shù)據(jù)庫,2013年舉辦了面部表情識別挑戰(zhàn)賽,在此次比賽中,kaggle引入Fer2013數(shù)據(jù)庫,數(shù)據(jù)庫中的圖片已經(jīng)進(jìn)行標(biāo)注,根據(jù)圖片中人物的表情標(biāo)注為六個基本表情和一個中性表情。
圖8 數(shù)據(jù)庫圖像
3.2.2 實(shí)驗(yàn)過程
搭建卷積神經(jīng)網(wǎng)絡(luò)模型:本次實(shí)驗(yàn)根據(jù)VGG網(wǎng)絡(luò)的想法,嘗試將5×5網(wǎng)絡(luò)拆分為兩層3×3但最后效果并不理想,在多次嘗試了多種不同的模型并不斷調(diào)整之后最終自己定義了一個模型。如圖4所示。
訓(xùn)練模型:在訓(xùn)練的過程中使用了ImageDataGenerator實(shí)現(xiàn)數(shù)據(jù)增強(qiáng),并通過flow_from_directory根據(jù)文件名劃分label,優(yōu)化算法選擇了SGD,而激活函數(shù)選擇了硬飽和的ReLU。因?yàn)閠anh和sigmoid在訓(xùn)練后期,產(chǎn)生了因沒有進(jìn)行歸一化而梯度消失訓(xùn)練困難的問題。如圖9所示。
圖9 梯度下降
在訓(xùn)練好表情識別模型之后,選用了部分?jǐn)?shù)據(jù)集以及自己的圖片作測試,數(shù)據(jù)集中的圖片大都是歸一化之后的黑白圖片,所以識別結(jié)果較自己的圖片更為準(zhǔn)確。下面為測試集中圖片的識別結(jié)果,結(jié)果如圖10所示。
圖10 測試集識別結(jié)果
首先識別了兩張表情不明顯的圖片,識別結(jié)果如圖10 a)和b)所示。因?yàn)槠叻N表情里面neutral概率最大,所以最后輸出Emotion:neutral,從圖片中可以看出人物是笑著的,由于背景以及貼紙的遮擋導(dǎo)致了不準(zhǔn)確性。同理檢測圖10 b)圖片時(shí)輸出概率最大的仍為中性,所以最終輸出結(jié)果為neutral,觀察可知,此張圖片識別結(jié)果正確。對表情比較明顯的圖片(圖10 c)至g))進(jìn)行識別,得出結(jié)果準(zhǔn)確,系統(tǒng)識別輸出的結(jié)果都與圖片面部表情相符。
表1為上述幾種表情對應(yīng)的分類結(jié)果數(shù)據(jù),可以看出,相比傳統(tǒng)的識別算法,此處采用的算法其分類正確率還是較高的。不足之處是本文中采用的Fer2013數(shù)據(jù)集中的部分圖片進(jìn)行訓(xùn)練,由于圖片分辨率低,存在錯誤標(biāo)簽等原因,導(dǎo)致最終的識別率并不理想。但是構(gòu)建網(wǎng)絡(luò)模型,對數(shù)據(jù)進(jìn)行訓(xùn)練,并不斷更改參數(shù),減少錯誤率,經(jīng)過嘗試之后,用上述所示的網(wǎng)絡(luò)模型最終識別率明顯得到很大的提高,但是對于表情不是特別明顯的多人圖片,表情識別的準(zhǔn)確度還有待提高。
表1 表情的分類結(jié)果
本文在無約束條件的情況下,提出了基于集成卷積神經(jīng)網(wǎng)絡(luò)的面部表情分類方法,主要研究的是如何利用卷積神經(jīng)系統(tǒng)設(shè)計(jì)一個人臉表情識別系統(tǒng),一個表情識別系統(tǒng)的核心便是網(wǎng)絡(luò)模型部分,在VGG模型的基礎(chǔ)上改動了部分參數(shù)得到自己的網(wǎng)絡(luò)模型,并利用Fer2013數(shù)據(jù)集的訓(xùn)練集對其進(jìn)行訓(xùn)練,優(yōu)化,提高了分類的識別率,具有識別率高,泛化能力強(qiáng)、穩(wěn)健性好等優(yōu)點(diǎn),最終可以達(dá)到較準(zhǔn)確的識別圖片中人物表情的結(jié)果。