程衛(wèi)月,張雪琴,林克正,李 驁
1.黑龍江工商學(xué)院,哈爾濱150025
2.哈爾濱理工大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,哈爾濱150080
表情是人類在交際中傳達(dá)情感的重要載體,研究表明,55%的情感或意向信息是通過面部表情傳達(dá)的,面部表情包括六種基本情緒:快樂、悲傷、憤怒、驚訝、厭惡和恐懼。面部表情識別旨在讓機(jī)器來識別預(yù)測這六種表情。
隨著機(jī)器學(xué)習(xí)、深度學(xué)習(xí)的迅速發(fā)展,基于深度神經(jīng)網(wǎng)絡(luò)的方法被應(yīng)用到面部表情識別中,相比于傳統(tǒng)方法,如人工標(biāo)注、淺層學(xué)習(xí)等,深度神經(jīng)網(wǎng)絡(luò)具有良好的自學(xué)習(xí)能力、并行處理能力和較高的分類精度。手工特征提取方法具有光照魯棒性和尺度不變性,如方向梯度直方圖、局部二值模式(local binary pattern,LBP)、尺度不變特征變換和Gabor變換等,它們側(cè)重于關(guān)注人臉的主要組成部分:眼睛、眉毛、鼻子和嘴巴等。基于卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)的人臉表情識別方法,大多強(qiáng)調(diào)表情的完整性,從整體圖像中提取特征,忽略局部區(qū)域的細(xì)粒度信息。例如,Shin 等人提出通過訓(xùn)練20 多個(gè)不同的卷積神經(jīng)網(wǎng)絡(luò),尋找具有較強(qiáng)面部表情識別能力的CNN 結(jié)構(gòu),平均識別率達(dá)到59.93%。
近年來,在圖像分類領(lǐng)域已經(jīng)有學(xué)者使用手工特征與深度特征融合。例如,Connie 等人將傳統(tǒng)尺度不變特征變換與CNN 提取的特征相結(jié)合,進(jìn)一步提高面部表情識別的性能;Zou 等人將Gabor 特征與深度特征融合,在姿態(tài)變化的人臉中表現(xiàn)出較好的識別率。
為提高人臉表情識別率,獲取更有效的面部表情特征,提出融合全局與局部特征的深度卷積神經(jīng)網(wǎng)絡(luò)算法(deep convolutional neural network algorithm fusing global and local features,GL-DCNN),其網(wǎng)絡(luò)結(jié)構(gòu)由兩個(gè)CNN 分支組成:第一個(gè)分支采用改進(jìn)的VGG19(visual geometry group)網(wǎng)絡(luò),提取出人臉的整體特征;第二分支主要對紋理特征進(jìn)行處理,為減少光照等噪音的干擾,采用中心對稱局部二值模式(central symmetric local binary pattern,CSLBP)算法,該算法可以大幅度降低處理時(shí)間,同時(shí)有很強(qiáng)的抗噪能力,將處理后的特征輸入到自主設(shè)計(jì)的淺層CNN 中訓(xùn)練。將兩個(gè)分支輸出的特征進(jìn)行加權(quán)融合,最后使用softmax 分類器完成人臉表情分類任務(wù)。
典型的卷積神經(jīng)網(wǎng)絡(luò)通常包含三種基本操作,即卷積、池化和全連接,通過對圖像不斷地進(jìn)行卷積和池化運(yùn)算,在保留人臉重要信息的情況下,提取出不同尺度的抽象特征。卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖如圖1所示。
圖1 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 Structure of convolutional neural network
卷積層(convolutional layer)是CNN 的核心,它主要對圖像特征進(jìn)行提取,當(dāng)數(shù)據(jù)輸入時(shí),卷積層利用不同尺度的卷積核對數(shù)據(jù)進(jìn)行卷積操作,將輸出值經(jīng)過激活函數(shù)進(jìn)行非線性變換,得到當(dāng)前層的特征,運(yùn)算如式(1)所示。
池化層(pooling layer)在CNN 中的主要作用是對上一層卷積層的特征進(jìn)行降維。它可以有效地減少計(jì)算量,特別是避免了過多特征所造成的溢出現(xiàn)象。最大池函數(shù)如式(2)所示,它將圖像大小下采樣為原尺寸的1/。
在全連接層(full connection layer)中,實(shí)現(xiàn)了從特征到類別的轉(zhuǎn)換,全連接層用于綜合前向提取的特征,將卷積層或池化層的局部信息與類別判別相結(jié)合。由于其全連通特性,一般全連通層也具有最多的參數(shù)。從卷積層提取特征后,將網(wǎng)絡(luò)連接到全連接層,既可以提高網(wǎng)絡(luò)的特征提取能力,又可以限制網(wǎng)絡(luò)的規(guī)模。每個(gè)神經(jīng)元的輸出如式(3)所示:
其中,為前一層神經(jīng)元數(shù)量;是第層與前層的連接強(qiáng)度;是偏置;(·)是激活函數(shù)。
Dropout 層也是CNN 的常用結(jié)構(gòu),Dropout 是一種正則化技術(shù),用于減少過擬合,在每次訓(xùn)練時(shí),隨機(jī)減少單元之間的連接,在完整的網(wǎng)絡(luò)中隨機(jī)采樣一個(gè)網(wǎng)絡(luò),只更新采樣網(wǎng)絡(luò)的參數(shù),這樣可以提高網(wǎng)絡(luò)的泛化能力。
采用反向傳播和隨機(jī)梯度下降法(stochastic gradient descent,SGD)對模型進(jìn)行優(yōu)化,用一小部分?jǐn)?shù)據(jù)就可以對參數(shù)進(jìn)行一次更新,這個(gè)數(shù)據(jù)遠(yuǎn)小于訓(xùn)練樣本,這有效地提高了訓(xùn)練速度,用于解決訓(xùn)練數(shù)據(jù)量過大的問題。隨機(jī)梯度下降法的迭代更新過程如算法1 所示。
SGD 訓(xùn)練迭代算法
CSLBP 算法的主要思想:比較以中心像素點(diǎn)為中心對稱的鄰域值對,對比兩者像素點(diǎn)灰度值之間的大小,當(dāng)差值大于等于0 時(shí),二進(jìn)制編碼為1,否則為0。并將二進(jìn)制值轉(zhuǎn)換為十進(jìn)制的CSLBP 值。CSLBP 僅產(chǎn)生/2 個(gè)二進(jìn)制模式,當(dāng)使用直方圖來描述局部紋理特征時(shí),CSLBP 的直方圖維數(shù)為2,低于局部二值模式(LBP)的直方圖維數(shù)2,極大地降低了特征維數(shù),節(jié)省了存儲空間。這種算子可以表達(dá)圖像局部紋理的空間結(jié)構(gòu),對光照變化具有一定的魯棒性,并且計(jì)算復(fù)雜度較低。CSLBP 算法的編碼規(guī)則定義如式(4)、式(5)所示。
圖2 8 鄰域像素下CSLBP 計(jì)算實(shí)例Fig.2 Computing examples of CSLBP in 8 neighborhood pixels
用兩個(gè)分支CNN 來提取人臉表情特征,一個(gè)分支處理全局特征,另一個(gè)提取局部特征。對于全局分支CNN 采用改進(jìn)的VGG19網(wǎng)絡(luò)模型,VGG19網(wǎng)絡(luò)模型在淺層CNN 的基礎(chǔ)上,增加幾個(gè)卷積層,由于加入卷積層比加入全連接層更有利于圖像分類,VGG19網(wǎng)絡(luò)模型比淺層卷積神經(jīng)網(wǎng)絡(luò)更容易克服面部表情多樣性和復(fù)雜性的不足,最終達(dá)到更好的分類精度。VGG19 網(wǎng)絡(luò)結(jié)構(gòu)如圖3 所示。
圖3 VGG19 網(wǎng)絡(luò)模型Fig.3 VGG19 network model
VGG19 網(wǎng)絡(luò)模型采用的是3×3 卷積核、2×2 池化核,激活函數(shù)采用ReLU,如式(6)所示。
網(wǎng)絡(luò)的輸入是一個(gè)灰度圖像,為64×64 像素。它包含5 個(gè)最大池化層,在每個(gè)最大池化操作之后添加一個(gè)Dropout層,Dropout率為0.25。
VGGNet(visual geometry group net)由大型圖像數(shù)據(jù)庫ImageNet 訓(xùn)練而成,它有很強(qiáng)的學(xué)習(xí)深度特性的能力。為了減少訓(xùn)練時(shí)間,提高網(wǎng)絡(luò)訓(xùn)練的效率,采用遷移學(xué)習(xí)的方法,用經(jīng)過訓(xùn)練的VGG19 網(wǎng)絡(luò)作為本模型的預(yù)訓(xùn)練模型,對VGG19 網(wǎng)絡(luò)模型的結(jié)構(gòu)進(jìn)行優(yōu)化。由于人臉表情識別輸出6 種情緒,即6 個(gè)類別,設(shè)置第一個(gè)全連接層為500,最后一個(gè)設(shè)置為6,這樣就減少了網(wǎng)絡(luò)參數(shù),降低了計(jì)算復(fù)雜度。
為解決訓(xùn)練過程中神經(jīng)網(wǎng)絡(luò)參數(shù)多導(dǎo)致的過擬合問題,在每個(gè)池化層及最后的全連接層還使用Dropout方法。Dropout多用于池化與全連接層后,參數(shù)常設(shè)置為0.5 左右,它的原理如圖4 所示。圖4 左邊為正常的全連接層,右邊為經(jīng)過使用Dropout 后的全連接層??梢钥闯?,Dropout 可以對全連接中的某些節(jié)點(diǎn)進(jìn)行選擇性失活,按照一定的概率讓一些隱藏的神經(jīng)元節(jié)點(diǎn)暫時(shí)失去作用,從而減少實(shí)際訓(xùn)練參數(shù),有效避免過擬合現(xiàn)象。
圖4 Dropout原理圖Fig.4 Schematic diagram of Dropout
對于局部特征分支的CNN,構(gòu)造一個(gè)淺層卷積神經(jīng)網(wǎng)絡(luò)來提取局部特征。首先,使用CSLBP 算法對輸入的圖像進(jìn)行一次特征提取,獲取圖像的局部紋理特征;其次,將其輸入淺層神經(jīng)網(wǎng)絡(luò),讓其自動(dòng)地從CSLBP 圖像中提取與表情相關(guān)的特征。淺層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)如圖1 所示,具體的參數(shù)設(shè)計(jì)為:第一個(gè)卷積層使用64 個(gè)濾波器對輸入的人臉CSLBP 圖像進(jìn)行濾波,使用的是7×7 卷積核,輸出64 張64×64像素的圖像,之后是2×2 池化核操作對圖像進(jìn)行下采樣。第二個(gè)卷積層使用256 個(gè)3×3 卷積核來映射前一層,接著使用2×2 池化核操作。之后輸出到一個(gè)包含500 個(gè)神經(jīng)元的全連接層,全連接層使用Dropout操作來防止過擬合,設(shè)置Dropout=0.5。
第一個(gè)分支經(jīng)過VGG19模型得到特征向量1,第二個(gè)分支經(jīng)過CSLBP 局部神經(jīng)網(wǎng)絡(luò)模型得到特征向量2 。對1 和2 采用兩個(gè)級聯(lián)的全連接層對其進(jìn)行降維,對1 和2,分別設(shè)其兩個(gè)級聯(lián)的節(jié)點(diǎn)個(gè)數(shù)為500 和6,如式(7)、式(8)所示。
其中,1_1 與2_1 表示第一層全連接層,1_2 與2_2 表示第二層全連接層。
降維后的加權(quán)融合網(wǎng)絡(luò)如圖5所示,其中CSLBP_CNN 表示CSLBP 局部神經(jīng)網(wǎng)絡(luò)模型。
圖5 加權(quán)融合網(wǎng)絡(luò)Fig.5 Weighted fusion network
降維之后,1_2 與2_2 采用加權(quán)融合方法構(gòu)造融合后的特征向量,v(=1,2,…,6)的構(gòu)造方法如式(9)所示。
其中,為權(quán)值系數(shù),用來調(diào)節(jié)兩個(gè)分支的比重,用交叉驗(yàn)證法對進(jìn)行了實(shí)驗(yàn)計(jì)算,發(fā)現(xiàn)取0.7 時(shí)網(wǎng)絡(luò)表現(xiàn)較好。
在融合特征向量的基礎(chǔ)上,采用維度為6 的softmax 分類器對表情進(jìn)行分類。在softmax 中,將分為類的概率表達(dá)式如式(10)所示。
其中,=1,2,…,。與的值都在(0,1)范圍內(nèi),對于給定輸入且=1,2,…,(=6),=的概率用矩陣形式表示如式(11)所示。
其中,(=|)是在輸入為的情況下類別為的概率。式(10)中的每一個(gè)元素都對應(yīng)于一個(gè)唯一的表達(dá)式類,是以元素值最大的類為預(yù)測類。因此,模型的損失函數(shù)可表示為式(12)。
其中,Z表示真實(shí)標(biāo)簽,y表示softmax 函數(shù)的輸出。
在改進(jìn)的VGG19 和淺層卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)基礎(chǔ)上提出GL-DCNN 算法,算法的總體框架如圖6 所示。
圖6 GL-DCNN 模型Fig.6 GL-DCNN model
圖6 中,人臉圖像經(jīng)過預(yù)處理后,獲得64×64 像素的人臉灰度圖,同時(shí)送入兩個(gè)分支,其中一個(gè)在送入卷積神經(jīng)網(wǎng)絡(luò)時(shí)會(huì)進(jìn)行CSLBP 處理提取局部紋理特征,VGG19 和淺層卷積神經(jīng)網(wǎng)絡(luò)部分參數(shù)如表1和表2 所示。
表1 CNN 的網(wǎng)絡(luò)配置Table 1 Configuration of CNN
表2 改進(jìn)的VGG19 網(wǎng)絡(luò)配置Table 2 Configuration of improved VGG19
整體分支專注于從整個(gè)圖像中提取抽象表示,而局部分支專注于提取特定區(qū)域的紋理信息,這兩個(gè)分支的聚合不僅增加了特征提取的數(shù)量,而且提高了模型的表達(dá)能力。特征提取之后對雙分支人臉圖像的輸出進(jìn)行加權(quán)融合,最后對融合結(jié)果進(jìn)行softmax 分類,預(yù)測當(dāng)前的面部表情。
實(shí)驗(yàn)中使用的實(shí)驗(yàn)平臺:CPU 主頻為3.7 GHz,內(nèi)存為32 GB,Nvidia Ge Force GTX 980Ti GPU,操作系統(tǒng)為Windows 10,64 位,編程語言為Matlab 和Python3.6,模型訓(xùn)練框架為Tensorflow,開發(fā)工具為Matlab 2017R 和PyCharm。
實(shí)驗(yàn)采用JAFFE 數(shù)據(jù)集和CK+數(shù)據(jù)集,用以評估算法的性能。實(shí)驗(yàn)之前,將圖像統(tǒng)一為64×64 像素大小,并將所有圖像進(jìn)行歸一化處理,利用CSLBP算法處理兩個(gè)數(shù)據(jù)庫中的人臉表情圖像。
CK+數(shù)據(jù)集共包含123 個(gè)人的327 張有標(biāo)簽的表情圖像,包括Angry(生氣)、Disgust(厭惡)、Fear(恐懼)、Happy(高興)、Sad(悲傷)、Surprise(驚訝)和Contempt(輕蔑)。為了和JAFFE 數(shù)據(jù)集的表情對應(yīng),將輕蔑的表情去掉,剩309 張圖片。圖7 為CK+數(shù)據(jù)集上6 種表情的示例圖像。
圖7 CK+數(shù)據(jù)集中6 種表情的示例圖像Fig.7 Sample images of 6 expressions in CK+dataset
JAFFE 數(shù)據(jù)集包含10 名日本女性的213 幅圖像,每個(gè)人每種表情有3 至4 張,每個(gè)人有7 種表情,包含Angry(生氣)、Neutral(中性)、Disgust(厭惡)、Fear(恐懼)、Happy(高興)、Sad(悲傷)和Surprise(驚訝)。實(shí)驗(yàn)中只選取6 種表情的183 張圖片,圖8 展示了JAFFE 數(shù)據(jù)庫中的樣本。表3 是兩個(gè)數(shù)據(jù)庫中6 類表情的數(shù)量分布。
圖8 JAFFE 數(shù)據(jù)集中6 種表情的示例圖像Fig.8 Sample images of 6 expressions in JAFFE dataset
表3 CK+與JAFFE 數(shù)據(jù)集的6 類表情數(shù)量分布Table 3 Number distribution of 6 types of expressions in CK+and JAFFE datasets
對每個(gè)數(shù)據(jù)集,選擇憤怒、厭惡、恐懼、快樂、悲傷和驚訝這6類基本表情作為分類任務(wù)的目標(biāo)。CK+數(shù)據(jù)集中使用數(shù)據(jù)增強(qiáng)法將數(shù)據(jù)擴(kuò)充到原始圖像的5 倍進(jìn)行訓(xùn)練,JAFFE 數(shù)據(jù)集中數(shù)據(jù)擴(kuò)充10 倍進(jìn)行實(shí)驗(yàn),兩個(gè)數(shù)據(jù)集都采用十折交叉驗(yàn)證,每個(gè)批量設(shè)置為64,初始學(xué)習(xí)率設(shè)置為0.01。
圖9 為CK+數(shù)據(jù)集在GL-DCNN 模型上實(shí)驗(yàn)的混淆矩陣,它的每一列代表了分類器預(yù)測得到的類別,每一行代表了數(shù)據(jù)的真實(shí)歸屬類別。
圖9 GL-DCNN 方法在CK+數(shù)據(jù)集上的混淆矩陣Fig.9 Confusion matrix of GL-DCNN method on CK+dataset
由圖9 可看出,該方法對于Happy 表情最容易識別,識別率達(dá)到98%。從表3 可以看到,Happy 表情的樣本數(shù)量并不是最多的,說明GL-DCNN 算法對紋理特征的學(xué)習(xí)是十分有效的,預(yù)測結(jié)果不會(huì)偏向于樣本數(shù)量多的數(shù)據(jù)。Surprise 表情的識別率達(dá)到97%,因?yàn)樗谋砬楦鋸?,特征更容易學(xué)習(xí),所以Surprise 表情的識別率也較高。Disgust與Sad 會(huì)被混淆,在識別中會(huì)導(dǎo)致錯(cuò)誤,可能是因?yàn)樗鼈兊谋砬橛邢嗨浦?,尤其是嘴的部分。對于Fear 表情相對識別較弱,一是因?yàn)闃颖緮?shù)較少,可學(xué)到的特征相對較少,但是正確識別率也達(dá)到92%左右,說明網(wǎng)絡(luò)中融入的局部特征分支是可以提高圖像的表達(dá)能力。對于一個(gè)不均勻分布的樣本集,GL-DCNN 的正確識別率在92%~98%之間,說明GL-DCNN 能有效識別表情在外觀上的變化。
圖10 為JAFFE 數(shù)據(jù)集在GL-DCNN 模型上實(shí)驗(yàn)的混淆矩陣。
圖10 GL-DCNN 方法在JAFFE 數(shù)據(jù)集上的混淆矩陣Fig.10 Confusion matrix of GL-DCNN method on JAFFE dataset
由圖10可看出,GL-DCNN識別Anger 表情和Happy 表情的效果最好,識別率都達(dá)到了96%,因?yàn)楦吲d或者生氣的表情特征較其他特征更為容易判斷;其次對Surprise 表情的識別率達(dá)到94%左右,有3%的數(shù)據(jù)被錯(cuò)誤預(yù)測為Happy,主要由于Happy 表情和Surprise 表情都有張大嘴的動(dòng)作,增加訓(xùn)練樣本數(shù)量可以提高識別率;對恐懼的識別明顯低于其他分類,但也能達(dá)到89%左右,其中有將近5%的樣本被錯(cuò)誤分為驚訝,可能兩種表情在幾個(gè)面部區(qū)域上動(dòng)作幅度相似。但是對于厭惡與悲傷這兩個(gè)表情的分類容易互相干擾,經(jīng)常將厭惡分類為悲傷或者悲傷分為厭惡,可能是訓(xùn)練時(shí)使用的樣本較少。對于一個(gè)均勻分布的樣本集,GL-DCNN 也有較好的表現(xiàn),識別率高達(dá)96%,說明GL-DCNN 對整體特征和局部特征的學(xué)習(xí)是十分有效的。
實(shí)驗(yàn)中對比的算法主要有人工提取特征的方法、CNN+LBP 算法、單模態(tài)CNN 模型、VGG16 模型、卷積神經(jīng)網(wǎng)絡(luò)融合SIFT 特征,實(shí)驗(yàn)結(jié)果如表4所示。
表4 不同算法在CK+與JAFFE數(shù)據(jù)集上識別性能比較Table 4 Comparison of recognition performance of different algorithms on CK+and JAFFE datasets
由表4 可以得出,首先GL-DCNN 方法從整體上是優(yōu)于其他算法的,尤其在JAFFE 數(shù)據(jù)集上,識別率高于其他方法3~6 個(gè)百分點(diǎn),GL-DCNN 與人工特征提取方法相比較,無論在結(jié)果上,還是時(shí)間復(fù)雜度上,都表現(xiàn)出較好性能。單模態(tài)CNN 方法只是單純地將人臉灰度圖像輸入神經(jīng)網(wǎng)絡(luò)中訓(xùn)練,相比簡單CNN 模型與LBP 結(jié)合的人臉識別方法,GL-DCNN 既關(guān)注樣本的整體信息,也關(guān)注局部的紋理信息,因此會(huì)有更好的識別效果。VGG16 模型盡管在識別方面表現(xiàn)出了較好的性能,但是相比GL-DCNN 提出的方法識別率略低。這也說明了自動(dòng)學(xué)習(xí)的深度特征能很好地用來識別和分類,再加上對于局部特征的補(bǔ)充,使得整體模型有了更好的識別率,由此可見對于局部學(xué)習(xí)的方法確實(shí)有利于提高分類的效果。另外樣本是用數(shù)據(jù)增強(qiáng)法擴(kuò)充的,因此樣本中包含有旋轉(zhuǎn)變化的圖像,利用CSLBP 算法對旋轉(zhuǎn)不變具有魯棒性優(yōu)勢,并和深度網(wǎng)絡(luò)結(jié)合,使得整體的識別效果有了提高,但是在時(shí)間復(fù)雜度上略顯不足。
表5 給出用CPU 和GPU 遍歷一個(gè)訓(xùn)練樣本集所需時(shí)間和識別率的對比。從表5 可以看出,在識別率差不多的情況下,訓(xùn)練時(shí)間上,GPU 所用時(shí)間遠(yuǎn)少于CPU,主要因?yàn)镚PU 可以并行處理數(shù)據(jù)。
表5 使用CPU 和GPU 的訓(xùn)練時(shí)間和識別率比較Table 5 Comparison of training time and recognition rate using CPU and GPU
本文針對傳統(tǒng)CNN 存在僅從整個(gè)圖像中提取特征而忽略了有效的局部細(xì)節(jié)信息的問題,提出了一種融合全局與局部特征的深度卷積神經(jīng)網(wǎng)絡(luò)算法。采用了兩個(gè)網(wǎng)絡(luò)模型分別提取全局與局部信息進(jìn)行特征融合:一方面,基于遷移學(xué)習(xí)的方法,使用已訓(xùn)練好的VGG19 模型進(jìn)行全局特征提取,降低了網(wǎng)絡(luò)的訓(xùn)練時(shí)間;另一方面,在訓(xùn)練階段引入CSLBP 局部學(xué)習(xí)方法,增加了網(wǎng)絡(luò)處理特征時(shí)的多樣性,實(shí)現(xiàn)了特征互補(bǔ),使整體模型在分類時(shí)表現(xiàn)出明顯優(yōu)勢。實(shí)驗(yàn)中使用的是CK+、JAFFE 數(shù)據(jù)集,圖片數(shù)量相對不足,而且不同類別的樣本數(shù)目也存在差距,卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練依賴大量的數(shù)據(jù),如果數(shù)據(jù)太少,容易產(chǎn)生過擬合問題。進(jìn)一步工作將研究應(yīng)用在較小樣本上的網(wǎng)絡(luò)模型。