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