張俞晴 何 寧 魏潤辰
1(北京聯合大學北京市信息服務工程重點實驗室 北京 100101)2(北京聯合大學智慧城市學院 北京 100101)
表情中包含著豐富的感情信息,是人類交流的非語言形式。人臉表情識別技術是實現人工智能與人機交互的基礎,也是情感計算的關鍵技術,其涉及機器視覺、圖像處理、模式識別等多個領域,在虛擬現實、身份認證等領域有著廣泛的應用前景。
人臉表情識別技術由人臉檢測、特征提取及表情分類三個部分組成。其中特征提取是最重要、最困難的部分,特征的有效性將直接影響表情識別的準確率和性能。表情識別的關鍵問題是如何提取出有利于識別的特征[1-3]。表情識別的研究一般分為基于靜態的表情識別和基于動態的表情識別兩類。基于靜態的表情識別方法僅提取輸入圖像的空間特征,不包含圖像的時序特征;而基于動態的表情識別方法則從序列圖像中提取表情的時間特征用以表情識別。常用的空間特征提取方法有Gabor小波變換[4-5]、局部二值模式(local binary patterns,LBP)[6-8]、尺度不變特征變換(Scale Invariant Feature Transform, SIFT)以及方向梯度直方圖(Histograms of Oriented Gradients, HOG)[9]。SIFT算法在表情識別上取得了不錯的成績。劉洋等[10]采用傳統的SIFT特征提取方式,對每幅表情圖像的特征進行匹配,文中所采用的閾值為0.3時的匹配效果最佳。SIFT特征有效地提取出面部表情的獨特特征,克服人臉間的相似性,該方法在JAFFE數據集上的識別率為95%。文獻[11]先定位出48個與表情相關的特征點,并提取每個特征點的SIFT特征,每個特征點選用相鄰的梯度直方圖作為SIFT特征的描述符,最終融合局部和整體類別的兩級SVM進行分類,該方法在JAFFE數據集上的識別率達到94.2%。文獻[12]提出了一種解決非正面人臉表情識別的方法,將人臉圖像提取出的SIFT特征送到深度神經網絡中學習出一組最優的辨別特征向量,利用這些特征向量對表情進行分類。活動外觀模型[13]、光流法[14]等也常用于提取動態圖片的特征。視覺詞袋模型對提取的圖像特征作相應處理獲得視覺詞典已廣泛地應用于圖像分類與圖像檢索等領域,文獻[15]將詞袋模型結合上下文語義環境進行圖像分類。
基于深度學習的相關方法在近幾年已經成功用于人臉相關的領域中。基于深度學習的算法與傳統的淺層學習算法的區別在于能夠自主地從樣本數據中學習特征。卷積神經網絡(Convolutional Neural Networks, CNN)、堆疊式自動編碼器(Stacked Auto-encoder, SAE)、深度置信網絡(Deep Belief Networks, DBNs)等是深度學習模型中比較經典的網絡。深度卷積神經網絡[16-18]的端到端學習方法被認為在分類和模式識別中能夠自動發現最佳圖像特征。CNN的局部權值共享特殊結構降低了網絡的復雜性,同時提高了特征提取和分類的性能,使得CNN在語音識別和圖像處理方面占據著一定的優勢。CNN可以直接輸入圖像的像素值,自主學習訓練樣本,同時完成特征提取和分類的任務,并且直接通過網絡給出識別結果。
近幾年,CNN已大量用于人臉表情識別,Li等[19]提出了一個遞歸框架來識別真實場景中圖像的面部表情。該框架通過微調AlexNet,不改變網絡的前四層卷積層,采用CIFE數據集更新第五層卷積層及第一層全連接層,將第二層的全連接數改為2 048,第三層全連接層的數為7。同時采用VGG網絡中的第二到四層卷積層代替AlexNet中的每個卷積層,微調后的網絡對CIFE及GaMo兩個數據集的識別率分別為85%及83%。這個遞歸網絡可以幫助構建更好的面部表情模型來處理真實場景面部表情任務。Sun等[20]設計的網絡結構在池化層與全連接層加入了嵌入式注意力模型。該網絡通過卷積層提取面部的局部卷積特征,嵌入式注意力模型將根據這些局部特征自動確定感興趣的區域,利用這些區域的特征進行識別,該方法在RaFD-FRONT數據集上的識別率有95%左右。文獻[21-22]將卷積神經網絡分別與特定的圖像預處理步驟和遺傳算法(GA)相結合來進行表情識別。Zhang等[23]將局部人臉補丁和多尺度全局圖像的框架用于表情識別,明顯提高了識別的性能。結合表情序列的識別方法能夠增大表情的識別率,雖然CNN能夠有效地提取表情的空間特征,但提取圖像序列的時間特征效果欠佳。為了提高表情的識別率,常將CNN提取的空間特征與其他方法提取的時間特征進行融合。Kim等[24]通過CNN學習代表性表達狀態幀的空間圖像特征,再將空間特征表示的時間特征通過長時間的面部表情記憶來學習,提高識別率,該網絡在MMI數據集上的識別率有78.61%。
本文提出的融合CNN和SIFT特征的表情識別方法,主要用于靜態表情圖像的識別,采用CNN提取圖像的全局特征,圖像的局部特征則是采用詞袋模型對圖像提取的SIFT特征作進一步處理得到。在卷積神經網絡中的全連接層之后對兩種特征進行融合,從而提高對表情的識別率。
本文首先對數據集中的圖像進行預處理,去除與表情不相關的背景等信息,得到有利于識別的規范表情圖像;然后提取CNN全連接層的特征作為全局特征以及采用視覺詞袋模型對圖像的SIFT特征作進一步處理得到的特征向量作為局部特征;最終將提取出的兩組特征進行融合,在Softmax層將融合后的特征進行分類。本文方法的算法流程如圖1所示。

圖1 SIFT-CNN表情識別算法流程圖
人臉五官附近聚集了大量的表情信息,但一般表情圖像還中包括了背景、頭發、配飾等與表情無關的信息,這些信息會降低分類的準確率[25]。本文根據人臉的特征對表情圖像進行手動裁剪,額頭與下巴也包含了大量的表情信息,因此我們將此部分保留,去除與表情無關的信息,再對圖像進行尺寸歸一化處理,歸一化后的圖片大小為48×48。圖2展示了部分圖像預處理前后的圖片。

圖2 CK+數據集部分預處理圖像
卷積神經網絡(CNN)在1998年由Lecun等[26]提出,其在人臉識別、人臉檢測、行人檢測、目標分類等應用中非常有效。
CNN的基本網絡結構由輸入層以及若干個卷積層、池化層、全連接層組成。在卷積層與池化層中提取圖像的特征。淺層卷積層常用于提取圖像邊緣、線條等低級特征,更深層次的圖像特征則在深層卷積層中提取。池化層采用下采樣的方法對卷積層提取出的特征進行壓縮得到新的、維度較小的特征。CNN為了減少網絡訓練的參數個數,常采用局部感受野和權值共享這兩種方法,卷積層與池化層中的每個神經元的輸入與前一層的局部接受域相連,特征提取層中每個神經元只對特征面的局部區域進行感知,提取圖像的局部特征。全連接層則把前兩層提取出的所有局部特征綜合起來得到全局特征,CNN是一種有效提取全局特征的方法。
本文的CNN結構如圖3所示,包含3個卷積層,每個卷基層之后接一個池化層、 1個全連接層和1個Softmax層。網絡采用48×48的灰度圖像作為輸入圖像,卷積層采用大小為5×5的卷積核,池化層采用的是2×2最大值采樣。第一層卷積層采用10個卷積核與輸入圖像進行卷積運算,第二層卷積層采用20個卷積核對第一層池化層的輸出進行卷積運算,第三層卷積層采用40個卷積核與第二層池化層的輸出進行卷積運算,全連接層中神經元的個數為100,表情分類在Softmax層中進行。

圖3 CNN結構圖
一般地,卷積層的計算公式為:
(1)

f(x)=max(0,x)
(2)
本文采用的池化方法是2×2最大值下采樣(Max-Pooling),池化層通過對上一層特征圖的局部區域取最大值來壓縮特征圖,對特征圖中主要特征進行提取的同時降低網絡計算復雜度,圖4是2×2的Max-Pooling。

圖4 2×2的最大值下采樣
傳統的隨機梯度下降算法與本文采用的Adam算法相比,前者保持單一的學習率更新所有的權重,學習率在整個訓練過程中始終保持不變;后者則利用梯度的一階矩估計和二階矩估計為不同的參數設計相應獨立的自適應性學習率。
SIFT特征是Lowe[27]在2004年提出的,SIFT特征對視角、仿射變化及噪聲保持著一定的穩定性,同時在旋轉、尺度縮放、亮度變化方面具有良好的不變性,SIFT的這些特性讓其成為一種十分穩定的局部特征。本文提取表情圖像的SIFT特征作為局部特征,SIFT特征提取的步驟一般包括:1) 尺度空間極值檢測;2) 關鍵點精確定位;3) 關鍵點方向確定;4) 關鍵點描述。
1.3.1尺度空間極值檢測
在高斯尺度空間中進行極值點的初步檢測,高斯尺度空間則通過高斯函數與原圖像進行卷積得到:
L(x,y,σ)=G(x,y,σ)×I(x,y)
(3)
式中:σ為尺度空間因子;G(x,y,σ)為高斯核函數。σ的值越大圖像越模糊,對應的尺度也越大。
對圖像進行不同尺度的高斯模糊后進行隔點采樣構建高斯金字塔,金字塔中每組相鄰兩層圖像相減便可以得到高斯差分(Difference of Gaussian, DoG)金字塔。使用DoG金字塔來檢測尺度空間中的極值點,DoG定義為:
D(x,y,σ)=[G(x,y,kσ)-G(x,y,σ)]×I(x,y)=
L(x,y,kσ)-L(x,y,σ)
(4)
式中:k為兩個相鄰尺度空間的比例因子。
在DoG金字塔同一組內,像素點大于(或者小于)相鄰兩層圖像之間共26個像素點,該點就是初步得到的極值點。
1.3.2關鍵點精確定位
在尺度空間中初步檢測到的極值點是離散的,更精確的關鍵點的位置和尺度通過擬合三維二次函數得到,在尺度空間中高斯差分函數的泰勒展開式為:
(5)
對式(5)求導確定極值點,舍棄絕對值小于0.03的極值點。為了增強關鍵點的穩定性及抗噪性能,采用二維Hessian去除對比度較低的關鍵點以及不穩定的邊緣影響點。
1.3.3關鍵點方向確定
通過計算關鍵點領域像素的梯度的模值和方向為每個關鍵點分配一個基準方向,使描述符具有旋轉不變性,梯度的模值和方向如下:
m(x,y)=
(6)
(7)
1.3.4關鍵點描述
每個關鍵點用一組向量來描述,描述符包含位置、尺度和方向三個信息,在關鍵點尺度空間4×4的區域內,區域內的每個字塊中計算8個方向的梯度信息,用最終形成的128維向量來表征描述子,如圖5所示。

圖5 SIFT 128維特征向量
不同表情提取出來的SIFT特征的關鍵點的方向不一樣,有助于表情的分類。圖6是從人臉圖像中提取出的SIFT特征向量,箭頭代表SIFT特征點的方向,長度代表SIFT特征點的大小。可以看出,SIFT特征大量集中在眼睛、鼻子及嘴巴附近,這些特征點將有利于表情的識別。

圖6 人臉圖像的SIFT特征向量
1.3.5視覺詞袋模型
每幅圖像提取出的SIFT特征數不一致,將影響表情的匹配,從而影響表情的識別率。因此本文將采用視覺詞袋模型對提取出的SIFT特征作進一步處理。將每一幅圖像的SIFT特征統計為視覺單詞頻數直方圖,每幅圖像所提取出的特征直方圖包含相同的視覺單詞,不同的表情的單詞詞頻不同,將有利于表情的識別。
本文采用視覺詞袋模型主要包括以下幾個步驟:1) 對提取出的所有圖像的SIFT特征通過K-means聚類的方法聚出k類(即k個單詞),將這些類作為字典;2) 對每一幅圖像統計字典中每個單詞在圖像中出現的次數;3) 用一個k維數值向量表示相應的圖像。本文采用的視覺詞袋模型步驟如圖7所示。

圖7 視覺詞袋模型步驟
圖像的SIFT特征表述的是圖像的底層特征,底層特征缺乏空間集合信息及對圖像高層語義的描述。CNN全連接層提取的特征對圖像局部細節的描述欠佳,同時SIFT特征的幾何不變性優于CNN提取的特征,SIFT與CNN的特征可以改進相互之間的缺點。本文將CNN全連接層的輸出特征fc與視覺詞袋模型得到的特征向量fs進行歸一化處理,兩組特征歸一化之后串聯連接在一起得到融合后的特征向量,表示為:
f=(fc,fs)
(8)
融合SIFT特征與CNN可以有效提高描述符的幾何不變性,增強特征的區分力與抗噪性能,提高表情識別率。
本文對公開的The Extended Cohn-Kanade(CK+)數據集以及FER2013數據集進行人臉識別驗證。
CK+數據集由123個人拍攝而成,一共包含593個圖像序列,其中有327個序列帶有表情標簽,此數據集是表情識別中常用的一個數據集。本文選用了共計1 356幅表情圖像,包含憤怒(179幅)、厭惡(275幅)、恐懼(96幅)、高興(352幅)、悲傷(106幅)、驚訝(348幅)。本文實驗中的訓練集選用其中的1 256幅峰值圖像,測試集則選用其中的100幅表情圖像。
FER2013數據集包含中性、憤怒、厭惡、恐懼、高興、委屈、驚訝7種表情共35 000多幅表情圖像,本文對此數據集中除去中性剩余的6種表情進行測驗,本文選用28 000幅圖像作為訓練集,3 000幅圖像作為測試集。
本文采用識別率作為表情識別性能的定量評價指標,定義為:
(9)
訓練過程中,輸入圖像的大小為48×48,采用步長為1、大小為5×5的卷積核進行卷積計算,不僅減小了參數數量,還可以保留圖像或特征圖的尺寸空間,提升了整個網絡的準確率。本文采用dropout策略避免模型出現過擬合,dropout是很簡單的正則化技術,以一定的概率將隱層神經元的輸入、輸出設置為0,被選中的神經元不參加前向傳播及誤差的反向傳播,訓練時,設置dropout為0.5。Batch_size是CNN訓練時的重要參數,適當范圍內的Batch_size較大使得下降方向越準確,震蕩越小。Batch_size過大,會出現局部最優的情況;Batch_size過小,產生的隨機性更大,導致收斂困難。故將Batch_size設置為30。
本文方法在CK+和FER2013兩個數據集上進行了測驗,為了驗證本文方法在表情識別上的有效性,在CK+數據集上的實驗與SIFT、CNN、MSR等的表情識別算法進行了比較,在FER2013數據集上的實驗與CNN和DNN的表情識別算法進行了比較。表1、表2分別列出了在CK+和FER2013兩個數據集上不同方法的識別率比較。本文方法在兩個數據集上的識別率高于其他幾種方法,驗證了本文方法在識別表情上的可行性。

表1 不同方法在CK+數據集上識別結果比較

表2 不同方法在FER2013數據集上識別結果比較
本文方法在兩個數據集上的混淆矩陣如表3、表4所示。從表3中可以看出,本文的方法在CK+數據集上對憤怒、開心、驚訝這三種表情的識別結果很好,在厭惡、恐懼、沮喪這三種表情的識別結果比較欠缺,原因是這三種表情具有一定的相似性,對區分不同表情的特征在提取時增加了一定的難度。

表3 CK+數據集的混淆矩陣

表4 FER2013數據集的混淆矩陣
從表4中可以看出,本文的方法在FER2013數據集上對憤怒和開心這兩種表情的識別結果很好,在厭惡、恐懼、沮喪和驚訝這三種表情的識別結果比較欠缺,原因是FER2013數據集中數據樣本質量不如CK+數據集,對區分不同表情的特征在提取時增加了一定的難度。
本文針對靜態表情圖像提出了一種融合SIFT特征與CNN的方法,與其他幾種方法相比,本文在特征提取方面具有重要改進。采用CNN全連接層的特征作為全局特征用以描述表情的整體差異,同時采用視覺詞袋模型對圖像提取出的SIFT特征作進一步處理。將得到的特征向量作為局部特征來描述表情的細節差異,通過融合兩組特征來增加表情特征的穩定性,以此提高表情的識別率。實驗結果表明,本文方法在FER2013和 CK+兩個數據集上的識別率有所提高。未來將結合表情序列圖像的時間特征,進一步提高表情的識別率。