薛繼偉, 呂福娟, 劉顯德
(東北石油大學計算機與信息技術學院,黑龍江大慶 163318)
一直以來,表情是人類引以為傲的東西,是我們與機器一種本質(zhì)上的區(qū)別. 隨著人工智能浪潮的推進,我們更期盼人機之間帶有感情的溝通交流,希望機器可以讀懂人類的語言、知悉人類的表情,更好地為人類服務. 因此,近年來表情識別成為人工智能領域的研究熱點. 面部表情識別是一個集計算機視覺和模式識別[1]等技術為一體的范疇,同時涉及計算機科學、心理學、認知科學和行為科學等多個領域. 目前,情緒識別已經(jīng)被廣泛用于商業(yè),它的研究對于人機交互[2]、汽車駕駛[3]、醫(yī)療監(jiān)控[4]、遠程教育[5]、刑偵安防[6]等領域都有著重要的作用和意義.
面部表情是人們用來表達自己內(nèi)心情緒的方式之一,對比語言能更具形象直觀地表達人類的心情. 隨著人工智能技術和計算機技術的日益進步,人們?nèi)找嫦蛲悄芑娜藱C交互方式. 如果計算機能認識和識別人類的情感,將能更好地為人類服務. 因此,人臉表情識別技術的研究便成為近幾年計算機學者們的熱點話題. 隨之而來的是層出不窮的表情識別方法.
常見的傳統(tǒng)表情識別方法有LBP[7]、Gabor[8]小波變換以及樸素貝葉斯算法[9]等. 近幾年來,深度學習逐漸走進越來越多人的視線,成了人們研究的熱點,神經(jīng)網(wǎng)絡也成為其中較為熱門的方法,并取得了越來越好的成績,比如VGGNet[10]、DBN[11](深信度神經(jīng)網(wǎng)絡)等.
近幾年,表情識別技術的研究者提出了眾多不同的表情識別方法,但結(jié)合實時攝像進行表情識別的系統(tǒng)并不是很多. 人臉表情是多個局部區(qū)域特征的集合,而卷積神經(jīng)網(wǎng)絡提取出的特征能更多地關注局部.因此,本文采取卷積神經(jīng)網(wǎng)絡,在模型訓練之前對數(shù)據(jù)集進行人臉裁剪處理,使模型注意力更好地集中在人臉區(qū)域,從而提升人臉表情識別的置信度;使用何凱明等于2015年提出的ResNet[12]深度殘差神經(jīng)網(wǎng)絡為模型框架,并結(jié)合前端uni-app框架,設計了一個可以進行靜態(tài)圖片表情識別,以及可以隨時拍照進行人臉表情識別并且可以運行在手機端的表情識別系統(tǒng).
基于神經(jīng)網(wǎng)絡的人臉表情識別[13]通常包括人臉檢測與預處理、特征提取與識別分析、表情分類三個階段. 人臉檢測主要目的是在圖像中準確定位人臉,為后續(xù)表情識別打下基礎,如果沒有好的人臉檢測技術,后續(xù)的特征提取與表情分類則無從談起. 特征提取是處理鏈中非常關鍵的一步,因為提取的人臉特征點需要足夠準確,以便用于人臉表情識別. 本實驗中,將數(shù)據(jù)處理和模型訓練分為兩個部分進行,實驗流程如圖1 所示,即先用人臉檢測[14]技術將數(shù)據(jù)集的人臉區(qū)域裁剪切割得到新的數(shù)據(jù)集,在第二部分模型訓練時將新的人臉數(shù)據(jù)集經(jīng)過數(shù)據(jù)增強后輸入網(wǎng)絡進行訓練. ResNet 網(wǎng)絡包括18 層、34 層、50 層、101 層、150 層等不同模型,本文使用的模型是ResNet-50.
圖1 表情識別流程圖Fig.1 Flow chart of facial expression recognition
目前,常用的人臉表情數(shù)據(jù)集(CK+[15]、JAFFE、FER2013[16])中存在著樣本不平衡問題. 樣本不平衡問題容易導致模型的訓練出現(xiàn)過擬合,同時也會導致模型在不同類別上分類性能出現(xiàn)較大的差異.
基于深度學習的方法需要大量樣本來訓練,本文使用的數(shù)據(jù)集是從科賽網(wǎng)下載的人臉數(shù)據(jù)集,本數(shù)據(jù)集為彩色圖像集,且人臉圖像具有豐富的表情數(shù)據(jù)信息,如:眼睛睜大、眉毛皺起、嘴巴張大、嘴角上揚或者平靜思考等不同表情,數(shù)據(jù)集包含不同年齡段、不同種族以及不同場景下的人臉,如圖2所示. 這樣的多樣性樣本使得訓練模型更具泛化性,準確率更高,并且數(shù)據(jù)集較大,避免了訓練過程中過擬合的問題.
圖2 表情數(shù)據(jù)集部分圖片F(xiàn)ig.2 Some pictures of the emoticon dataset
因本數(shù)據(jù)集中除拍攝的大量圖片外還包含一些模糊的人臉畫像或影視劇中非正常人臉圖片,所以需要將這些非正常人臉圖片過濾,再將過濾后的數(shù)據(jù)集使用人臉檢測技術將圖片中人臉部分裁剪出來,得到224*224大小的人臉表情集,裁剪前后的圖片如圖3所示.
圖3 人臉裁剪前后對比Fig.3 Comparison before and after face image cropping
將處理后的新數(shù)據(jù)集分為訓練集和驗證集,其中每張圖片的表情由一個0~4 的數(shù)字代表,0=angry,1=happy,2=neutral,3=sad,4=surprise. 訓練集一共37 069 張圖片,驗證集1928 張圖片. 再經(jīng)過圖片翻轉(zhuǎn)、旋轉(zhuǎn)等數(shù)據(jù)增強[17]變換,模型訓練時將裁剪、變換后的數(shù)據(jù)集輸入設計好的網(wǎng)絡開始訓練. 對人臉表情數(shù)據(jù)進行一定的改進,在數(shù)據(jù)層面減少模型的運算資源消耗,同時提升了人臉表情的識別度和效率.
卷積神經(jīng)網(wǎng)絡的卷積層有兩個核心思想:網(wǎng)絡局部連接和卷積核參數(shù)共享,如圖4所示,這種特殊結(jié)構降低了網(wǎng)絡的復雜性,降低參數(shù)數(shù)量,防止參數(shù)過多而造成過擬合,并且使圖像識別的精準程度得到提升.
圖4 全連接和局部連接Fig.4 Full connection and partial connection
卷積池化交替出現(xiàn)的層組織結(jié)構方式能夠減少網(wǎng)絡參數(shù)并對輸入進行降維,使提取出的特征具有高度不變性. 并且深度學習方法能夠自動地提取更深層次的表情特征,解決了人工提取特征的麻煩,進而提高了識別率[18]. 因此本文將用深度殘差網(wǎng)絡進行人臉表情識別.
ResNet已經(jīng)被廣泛運用于各種特征提取應用中,它的出現(xiàn)解決了網(wǎng)絡層數(shù)到一定的深度后分類性能和準確率不能提高的問題,深度殘差網(wǎng)絡與傳統(tǒng)卷積神經(jīng)網(wǎng)絡相比,在網(wǎng)絡中引入殘差模塊,該模塊的引入有效地緩解了網(wǎng)絡模型訓練時反向傳播的梯度消失問題,進而解決了深層網(wǎng)絡難以訓練和性能退化的問題. 本文采用的網(wǎng)絡模型是ResNet-50.
ResNet-50經(jīng)過了4個Block,每一個Block中分別有3,4,6,3個Bottleneck,輸入圖片經(jīng)過第一個卷積層,進入Block結(jié)構. 每一個Block 包含兩種不同的Bottleneck,一種是Conv Block(卷積塊),一種是Identity Block(殘差塊).
最后通過平均池化和全連接,用softmax實現(xiàn)回歸.
如圖5展示了ResNet-50網(wǎng)絡的第一個Block結(jié)構. 第一個Block 有3 個Bottleneck 結(jié)構,其中包含一個Identity Block和兩個Conv Block.
圖5 ResNet-50網(wǎng)絡的第一個Block結(jié)構Fig.5 The first Block structure of the ResNet-50 network
表情識別的實驗中,輸入數(shù)據(jù)集的訓練圖片,輸出包含5 個神經(jīng)元,對應5 種表情,分別為angry,happy,neutral,sad,surprise.
2.3.1 損失函數(shù) 本實驗是多分類問題,故使用Softmax損失函數(shù)對模型輸出進行歸一化處理,其函數(shù)形式如下:
其中:i表示輸出節(jié)點的編號;zi就是第i個節(jié)點的輸出值;c表示輸出節(jié)點的標號,即從1到C,C為輸出節(jié)點的個數(shù),即分類的類別個數(shù),通過Softmax函數(shù)就可以將多分類的輸出值轉(zhuǎn)換為范圍在[0,1]和為1的概率分布[19].在表情識別任務中,交叉熵(Cross Entropy,CE)是常見的損失度量函數(shù),其公式表達為:
實驗中選取的優(yōu)化器為隨機梯度下降算法(Stochastic gradient descent,SGD). SGD計算梯度快,大量的理論和實踐工作證明,SGD能很好地收斂. 并且應用像本實驗中這種大型數(shù)據(jù)集時,訓練速度會比較快. 相比于標準梯度下降法的遍歷全部樣本,SGD每輸入一個樣本更新一次參數(shù)的效率要高很多.
2.3.2 DYReLU激活函數(shù) ResNet-50網(wǎng)絡中使用線性修正單元(Rectified linear unit,ReLU)作為激活函數(shù),如圖6 a,ReLU函數(shù)簡單且高效. 但是ReLU函數(shù)及其變體在推理階段都是靜態(tài)的. 靜態(tài)激活函數(shù)在網(wǎng)絡運行之前設定激活率,對所有的輸入數(shù)據(jù)都執(zhí)行相同的操作,缺乏靈活性,約束了網(wǎng)絡的表征能力[20-21],所以將ReLU替換為Dynamic ReLU(動態(tài)線性修正單元,DYReLU).
圖6 ReLU與DYReLUFig.6 ReLU and DYReLU
圖7所示是DYReLU的網(wǎng)絡結(jié)構以及ResNet網(wǎng)絡被替換了激活函數(shù)之后的Bottleneck. DYReLU的網(wǎng)絡結(jié)構包含一個池化層(avg pool)和兩個全連接層(FC),并且在全連接層中間設置了一個ReLU 激活層,最后經(jīng)過一個歸一化層.
圖7 DYReLU和激活函數(shù)替換前后對比Fig.7 Comparison of DYReLU and activation function before and after replacing
實驗中初始學習率設置為LR=0.01,權重衰減率設置為5,最終在訓練集和驗證集上分別達到99.56%和93.25%的準確率,相比于使用ReLU激活函數(shù),模型在驗證集的準確率提升了2.07%,最終結(jié)果如圖8 所示,虛線和實線分別是使用動態(tài)激活函數(shù)與激活函數(shù)的PR曲線(P為精準率,R為召回率).
圖8 ResNet-50模型訓練結(jié)果Fig.8 ResNet-50 model training results
服務端使用Django 框架,客戶端使用uni-app 框架. uni-app是一個基于Vue.js 開發(fā)的、可以適用多端的開源框架,
圖9為系統(tǒng)的主頁面及表情識別結(jié)果,底部的導航欄顯示的是系統(tǒng)的三個不同子功能.
圖9 系統(tǒng)主頁面Fig.9 System main page
點擊選擇照片時,下方會出現(xiàn)“拍攝”和“從相冊選擇”,使用者可以選擇自己想識別的照片或者當下拍攝照片去識別. 不管是隨時拍攝識別或者選取已有圖片識別,識別過程都分為人臉檢測和人臉表情識別兩個部分,當檢測到人臉時先在圖片中畫出人臉框,再進行人臉表情分析,若沒有檢測到人臉,則會提示“未檢測到人臉”. 本系統(tǒng)訓練的模型最多可以檢測識別5張人臉,即當圖片中有多張人臉時,系統(tǒng)會根據(jù)人臉面積按從大到小選取,只選擇前5張人臉進行分析,如圖10的識別結(jié)果.
圖10 多人識別結(jié)果Fig.10 Multi-person recognition results
利用卷積神經(jīng)網(wǎng)絡訓練模型,針對圖片過大延長訓練時間、訓練過程中檢測人臉消耗運算資源等問題,在模型訓練之前采取人臉檢測和人臉裁剪手段,得到只包含人臉且大小統(tǒng)一的數(shù)據(jù)集進行訓練,并且將靜態(tài)激活函數(shù)替換為動態(tài)激活函數(shù). 最終在驗證集上取得93.25%的準確率,相比于使用ReLU 激活函數(shù),替換為DYReLU 之后,模型準確率提升了2.07%. 實驗結(jié)果表明,在復雜場景下,本文方法具有較好的識別度和識別效率.
雖然人臉表情識別已經(jīng)取得了較好的識別效果,并且在科研項目上應用廣泛,但是遮擋以及側(cè)臉等因素的影響依然較大. 為了克服這些外界因素,未來的表情識別研究可以側(cè)重于側(cè)臉或口罩遮擋的情況,以便于技術成果在更復雜的環(huán)境下應用.