高精度人臉表情識別(附GitHub地址)

  • 2019 年 12 月 27 日
  • 筆記

編者按:本文原作者吳捷,目前於中山大學就讀研究生。研究領域為計算機視覺與自然語言處理。本文原載於知乎,經作者授權發佈。歡迎去GitHub給大佬加星。

先放出GitHub地址:

https://github.com/WuJie1010/Facial-Expression-Recognition.Pytorch

一. 表情識別 (Facial Expression Recognition )

表情識別是計算機理解人類情感的一個重要方向,也是人機交互的一個重要方面。表情識別是指從靜態照片或視頻序列中選擇出表情狀態,從而確定對人物的情緒與心理變化。20世紀70年代的美國心理學家Ekman和Friesen通過大量實驗,定義了人類六種基本表情:快樂,氣憤,驚訝,害怕,厭惡和悲傷。在本文的表情分類中還增添了一個中性表情。人臉表情識別(FER)在人機交互和情感計算中有着廣泛的研究前景,包括人機交互、情緒分析、智能安全、娛樂、網絡教育、智能醫療等。


二. 表情識別的常用方法

2.1 人為設計特徵

各種的人為設計的特徵已經被用於FER提取圖像的外觀特徵,包括Gabor、LBP、LGBP、HOG和SIFT。這些人為設計的方法在特定的小樣本集中往往更有效,但難以用於識別新的人臉圖像,這給FER在不受控制的環境中帶來了挑戰。

存在問題:

(1)人為設計的特徵太受制於設計的算法,設計太耗費人力。

(2)特徵提取與分類是兩個分開的過程,不能將其融合到一個end-to-end的模型中

2.2 神經網絡

近幾年來,前饋神經網絡(FNN)和卷積神經網絡(CNN)也被用來提取表情特徵。基於卷積神經網絡(CNN)的新的識別框架在FER中已經取得了顯著的結果。CNN中的多個卷積和彙集層可以提取整個面部或局部區域的更高和多層次的特徵,且具有良好的面部表情圖像特徵的分類性能。經驗證明,CNN比其它類型的神經網絡在圖像識別方面更為優秀。基於神經網絡的方法也存在着兩個問題:

(1)簡單的神經網絡(如FNN)忽略圖像二維信息。

(2)淺層卷積網絡所提取的特徵,魯棒性較差。

基本上面的人為設計特徵與神經網絡的缺陷,我們嘗試着用深度卷積網絡來解決表情識別的問題。


三. 基於深度卷積神經網絡的表情識別

3.1 模型設計

(1)我們採用深度卷積神經網絡來將人臉表情特徵提取與表情分類融合到一個end-to-end的網絡中。分別採用了VGG19和Resnet18來完成表情的識別與分類。

(2)VGG19 的每一個小塊是有一個卷積層,一個BatchNorm層,一個relu層和一個平均池化層來構成的。而resnet是由兩個卷積層,兩個BatchNorm層組成,而且每個resnet模塊輸入輸出端還有快捷鏈接。

(3)在全連接層之前加入了dropout策略,增加了模型魯棒性;

(4)我們都去掉了傳統VGG19與Resnet18中的多個全連接層,直接在一個全連接層後直接分為7類去識別。

3.2 損失函數設計

在設計中,我們探索了兩種損失函數的計算方法,第一種是交叉熵損失函數。模型在全連接層之後,得到了每一類的輸出概率,但此時概率是沒有經過歸一化的,我們通過一個softmax層,將概率歸一化到1,更加易於數據處理。而交叉熵損失函數計算公式如下:

在 softmax回歸中,我們通過歸一化的概率的大小解決多分類問題,類標y可以取k個不同的值(而不是 2 個)。

第二種損失函數是線性SVM分類損失,其抽象為hinge損失函數,Hinge loss 的叫法來源於其損失函數的圖形,為一個折線,第i 類的損失表達式為:

如果被正確分類,損失是0,否則損失就是

SVM和Softmax分類器是最常用的兩個分類器。不同的是,SVM將輸出為每個分類評分,然後再選擇得分最高的類;與SVM不同,Softmax分類器是一個logistic分類器面對多個分類的歸納,其歸一化的分類概率更加直觀,其概率總和為1。


四. 實驗設計

4.1 數據集

本文採用了FER2013和CK+數據庫。

https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data

FER2013數據集由28709張訓練圖,3589張公開測試圖和3589張私有測試圖組成。每一張圖都是像素為48*48的灰度圖。FER2013數據庫中一共有7中表情:憤怒,厭惡,恐懼,開心,難過,驚訝和中性。該數據庫是2013年Kaggle比賽的數據,由於這個數據庫大多是從網絡爬蟲下載的,存在一定的誤差性。這個數據庫的人為準確率是65% 士5%。

http://www.portointeractivecenter.org/site/wp-content/uploads/2012-11-22WeeklyPresentationGustavoAugusto_Paper.pdf

CK+數據庫則是發佈於2010年,由Cohn-Kanade Dataset的基礎上擴展而來的。這個數據庫包括123個subjects, 593 個 image sequence,每個image sequence的最後一張 Frame 都有action units 的label,而在這593個image sequence中,有327個sequence 有 emotion的 label,如圖4.2.2。這個數據庫是在實驗室條件下獲取的,較為嚴謹可靠。CK+是人臉表情識別中比較標準的一個數據庫,很多文章都會用到這個數據做測試。

4.2 數據增強

為了防止網絡過快地過擬合,可以人為的做一些圖像變換,例如翻轉,旋轉,切割等。上述操作稱為數據增強。數據操作還有另一大好處是擴大數據庫的數據量,使得訓練的網絡魯棒性更強。在本實驗中,在訓練階段,我們採用隨機切割44*44的圖像,並將圖像進行隨機鏡像,然後送入訓練。在測試階段,本文採用一種集成的方法來減少異常值。我們將圖片在左上角,左下角,右上角,右下角,中心進行切割和並做鏡像操作,這樣的操作使得數據庫擴大了10倍,再將這10張圖片送入模型。然後將得到的概率取平均,最大的輸出分類即為對應表情,這種方法有效地降低了分類錯誤。

4.3 在FER2013數據集的實驗效果

表1: 在FER2013數據集下VGG19的結果

表2:在FER2013數據集下Resnet18的結果

實驗結果分析

(1) VGG和Resnet18的深度模型在FER數據庫上都可以取得不錯的分類效果。而且VGG的方法要比Resnet18的方法要好一些。

(2) Dropout 能有效得降低過擬合,提高準確率。Dropout的方法相當於訓練的時候隨機失活掉一些連接,而在測試的時候把這些連接補充回來,這就相當於集成多個不錯的模型來做綜合的預測。

(3)10倍切割的方案能進一步降低識別的錯誤率,對於訓練階段來說,隨機切割增加了數據量,這相當於直接擴充了數據集,減緩了過擬合的作用。對於預測階段,10倍的數據同時預測結果,相當於集成操作減小網絡誤判的情況。

(4)Softmax的分類方法比SVM的方法好。softmax將所有分類都考慮到了,而且分類的結果,就是在所有K類分類結果。而SVM的方法,每次只是二分類,只能學習到是否是這個樣本,而不一定能學習到正確的樣本,這進一步加大了分類的困難。

(5) 在單模型的效果上,我們VGG19+dropout+10crop+softmax達到了很高的水平。在 Public test set 上,達到了71.496%,在Private test set 上達到了73.112%,這個水平也是單一模型下的state-of-the-art水平。

準確率分析

圖1:VGG19+dropout+10crop+softmax訓練,測試準確率曲線

混淆矩陣分析

圖2:VGG19+dropout+10crop+softmax在PrivateTest數據集的混淆矩陣

由圖2可知:對於快樂和驚訝的準確率明顯高於其他,但是恐懼的準確率就很低。對於此問題的出現,作者認為一是因為該數據集的不同表情的數量不均衡,例如有7215張開心的圖片,但只有436張厭惡的圖片,而每個分類的圖片平均數量是4101,這種種類的不平衡足以使得分類出現誤差;二是生氣,厭惡,恐懼,悲傷這四類表情本身就有一定的相似性,在現實生活中,人也會覺得這四類表情難以區分,特別是在彼此都不相識的情況下,要正確識別表情就更難了。而且我們發現,誤判總是出現在某些類,可能是某些類真的難以區分,易於混淆。接下來應該研究對特定表情的關注模塊,關注到細節信息,對提高分類能力提供進一步的支持。

與經典方法的對比

圖3:kaggle比賽準確率的排名(2013年)

對於私有測試集,我們模型的準確率是73.112%,圖3是2013年的比賽排行榜的準確率,最高的結果是71.161%,而且我們不同的方法都要比2013年的方法好,這說明了深度卷積網絡在分類上真的有很明顯的效果,比傳統的計算機視覺的方法要更優越。

與最先進方法的對比

圖4:與最先進paper的對比(2018年)

目前FER2013數據集下,就我們所知,我們的模型是單模型(非集成方法)中效果最好的一個,我們猜想這源於深度卷積網絡對於特徵提取的有效性。數據增強的方法也能提升表情分類效果。

4.4 在CK+數據集的實驗效果

圖5:10-fold 交叉驗證的結果

實驗結果表明,VGG19的效果還是超過了Resnet18。對於FER2013的數據集,CK+的數據的結果要明顯好於FER2013,因為CK+數據集是在實驗室環境中獲得的,樣本比較容易識別。我們的VGG19+dropout+10crop+softmax取10折的平均準確率,達到了94.646%的較高水平。


五. 測試可視化實例

我們將測試圖片輸入FER2013數據集下訓練好的最佳模型,得到了不同的表情的概率,接着可視化出圖片在不同分類的概率以及模型預測的結果。


六. 總結

我們採用深度卷積神經網絡(VGG19,Resnet18)模型在FER2013上取得很高的準確率,在CK+也獲得了較高的準確率。這進一步驗證了深度卷積網絡在表情分類問題上的準確性與可靠性。對於一些表情,比如傷心,難過還是比較難以區分,我們猜想需要設計一些子網絡或者關注網絡進行進一步的分類。目前該模型還是在單模型下嘗試的結果,沒有進行集成,多模型集成的方法將使準確率有進一步提高。

代碼已在GitHub上發佈:

https://github.com/WuJie1010/Facial-Expression-Recognition.Pytorch

參考文獻

【1】Jeon, J., Park, J. C., Jo, Y. J., Nam, C. M., Bae, K. H., & Hwang, Y., et al. (2016). A Real-time Facial Expression Recognizer using Deep Neural Network.International Conference on Ubiquitous Information Management and Communication(pp.1-4). ACM.

【2】Kim, B. K., Roh, J., Dong, S. Y., & Lee, S. Y. (2016). Hierarchical committee of deep convolutional neural networks for robust facial expression recognition.Journal on Multimodal User Interfaces,10(2), 1-17.

【3】Chang, T., Wen, G., Hu, Y., & Ma, J. J. (2018). Facial expression recognition based on complexity perception classification algorithm.

【4】Li, D., Wen, G., Hou, Z., Huan, E., Hu, Y., & Li, H. (2018). Rtcrelief-f: an effective clustering and ordering-based ensemble pruning algorithm for facial expression recognition.Knowledge & Information Systems, 1-32.