尚宇成 郝世宇 洪 揚
(南京郵電大學自動化學院人工智能學院,江蘇 南京210000)
人臉面部表情是人與人溝通的一種高效、快速的方式,也是當代實現人機交互的關鍵組成部分,廣泛應用于教育、科技、醫學等領域。在1974 年美國心理學家Mehrabian 的研究中,在人類情緒表達方式中,通過聲音及語言表達的信息分別占所有信息的7%,38%,而55%的信息則通過表情來傳達。二十世紀,心理學家Ekman 和Friesen 經過跨文化的研究和實驗,將人類表情分為六種基本表情,包括:憤怒、驚訝、害怕、哀傷、高興、厭惡。人臉情緒識別是用計算機獲取的面部數據,通過網絡進行模型的建立,對人臉面部表情進行分類,從而來判斷當前人臉所代表的情緒。
進入21 世紀,以深度學習為首的機器學習獲得了迅速發展,其通過對輸入的數據進行迭代處理,并不斷調整參數,使機器能夠在學習中找到某一事物的特定“規則”,并建立該“規則”下的模型,下次數據輸入時便可直接使用。其中深度網絡已經在機器視覺、圖像分類、聲音識別等多個方面取得很多成果。深度神經網絡和傳統的處理方式相比,能夠更好的揭示數據之間的深層聯系,提取出有利于處理和分類的抽象特征。數據量決定模型訓練的高度,輸入的數據越多,深度網絡建立的模型就越精準,使用深度神經網絡進行模型訓練的方法效果明顯優于傳統的提取方法,所以采用深度學習進行情緒識別。

圖1 深度學習基本流程圖

圖2 殘差網絡情緒識別框圖
近來隨著視覺識別挑戰賽(ILSVRC)和FER2013 表情識別比賽提供了充分的情緒數據,推動了情緒識別技術的發展,深度學習作為研究機器學習的新領域,其在準確和效率方面得到了很大提高,卷積神經網絡(CNN)在目標分類任務上取得了顯著成效,1998 年,LeCun 等應用CNN 實現了手寫數字識別,2012年,Alex Krizhevsky 等使用CNN 方法在ImageNet 2012 比賽中贏得了第一名。2013 年,Tang 和Bergstra 在kaggle 舉辦的面部表情識別挑戰賽中使用卷積神經網絡贏得了第一名。可以將人類面部表情進行分類,譬如:“驚訝”、“恐慌”、“憤怒”、“厭惡”、“中性”等,每一類尋取足夠多的圖片數據放入深度神經網絡中進行訓練,獲得隸屬于每一類的深度學習模型(如圖1)。
卷積神經網絡受生物學視覺皮層的啟發,由Hubel 和Wiesel 在1962 年對貓視覺皮層的實驗中研究而來,在圖像分類中應用廣泛,若采用傳統優化算法訓練網絡,包括梯度下降及變體、牛頓法或其他算法,若沒有殘差模塊,沒有首尾段的直接相連,隨著網絡層數的增多,模型訓練的準確率會下降,訓練表現不是很好,會出現梯度下降十分緩慢的問題。由此可見網絡結構的層數不是越多越好。事實上,網絡層數的增多會導致訓練集的準確率降低。但殘差網絡不同,其將原始輸入數據加到下一層的輸入,可以學習更深層次的網絡,顯著改善梯度消失和爆炸的問題,使得在訓練深層網絡的同時,又可提高模型訓練的準確性。殘差網絡在訓練深度網絡模型方面效果顯著,故可以用來進行情緒分類、識別。結構框圖如圖2。
FER2013 人臉面部表情數據集是在Kaggle 競賽中被提出,其中有28709 張訓練圖。驗證圖像與測試圖像相同,都為3589 張,每張圖像為48*48 像素,包括厭惡、恐懼、悲傷、高興、驚訝、憤怒和中性七種表情,大多是在自然條件下拍攝的表情。
CK+數據集是進行人臉表情識別最大的實驗室數據集,包含593 個視頻序列,其中有327 個被標簽的序列,包含生氣、輕視、厭惡、悲痛、驚訝、恐懼、快樂七種基本情緒,沒有訓練集、驗證集、測試集。
ExpressionNet 是一個大規模的人臉表情數據集,包括了從互聯網上收集到的一百萬張人臉表情圖片。其中共有95 萬張圖片被收集、提供標記。其中也包含了2478 張被六種基本表情和十種復合表情標記的人臉表情圖片。
MU MultiPLE 數據庫有337 個人、共750000 張照片,從不同的角度和光照條件進行拍攝,共有憤怒、厭惡、快樂、中立、驚喜、傷心、驚訝七種情緒。
GEMEP-FERA 2011 數據庫中含有10 個演員的表情數據,包括7 個主題含155 個圖像序列的訓練數據及6 個主題含134個圖像序列的測試數據,包括了生氣、害怕、幸福、安慰和哀傷五種情緒。
JAFFE 人臉表情數據庫,包括10 位日本女性構成的213 張圖像,包含七種面部表情(生氣、開心、悲痛、中性、厭惡、恐懼、驚訝)。60 名女學生對6 個情感形容詞進行語義評分。
本文使用FER2013 數據集,其像素大小規整,且包含訓練集、驗證集、測試集,可以更好進行網絡測試和數據訓練,減少了計算量。為了提高模型訓練的成效,需要對數據預處理,常見的數據預處理方式包括均值化、歸一化、PCA 和白化等。均值化是使數據每個點的數值減去平均值,對于圖像來說,可以在RGB三個維度上分別操作,使圖像的每一個像素減去圖像中所有像素加權求得的平均值。可以較有效的移除圖像的公共部分,顯現特性,對圖片處理更加方便快速,歸一化是將數據的多個維度進行映射,使得不同量綱的數據可以進行比較和運算。對于圖像數據,像素從0-255 變為0-1 范圍,加快訓練網絡的收斂性,但這種處理只在輸入圖像形狀不同的情況下使用才有意義,本文使用的FER2013 數據集不必再做歸一化處理。PCA 即主成分分析,將數據降維后得到新的數據,將一系列可能存在相關性的變量轉換成線性無關的變量,將多維特征降到n 維上,這n 維特征即為主成分,可以降低輸入的冗余性。白化,即是在主成分分析的基礎上除以每個特征值的標準差,使數據進行歸一化,白化后的數據相關性低,是一個均值為零的矩陣。
網絡層數的增多可能會伴隨著梯度消失、過擬合以及耗費計算資源等問題,發生網絡退化時,層數較少的網絡往往能取得比深層網絡更準確的模型,在提取特征的過程中,將原始數據傳送到高層,補充深層丟失的特征原始信息,可以解決網絡退化的問題以及層數太多導致的過擬合,增加模型的泛化能力。2015 年,ResNet 卷積神經網絡被微軟提出,可以解決神經網絡深度過深呈現的梯度消失問題,且殘差網絡塊的提出可以明顯提高訓練效率。殘差網絡可分為ResNet-50、ResNet-101、ResNet-152 等。ResNet 殘差網絡中,包含的殘差模塊如圖3,首先用1x1 的卷積核對網絡進行降維,再經過3x3 卷積,之后使用1x1 卷積進行升維。其中,1x1 的卷積核能夠大大減少參數數量。此外殘差網絡中使用的批歸一化方法,可以對網絡進行優化,以達到高的準確率,解決了訓練網絡過深造成的梯度消失問題。

圖3 殘差單元模塊
目前較為流行的深度學習框架包括命令式的實現和符號式的實現兩大類,包括以下幾類:
(1)Caffe 是模塊化的,由BVLC 創立,內核由C++實現,但提供有C++、Python 接口,支持卷積神經網絡與圖像處理,可以實現CPU 和GPU 的無縫轉換,能夠大幅減少網絡訓練時間,但其安裝和配置時較為復雜且可移植性較低。
(2)Tensorflow 是Google 開發且開源的深度學習技術,內含大量RNN 的API,支持快速開發,支持移動端,但其由Python 編寫導致速度較慢。
(3)Keras 是基于Theano 和Tensorflow 的深度學習框架,由Python 編寫,高級API 簡化了模型搭建,在keras 中實現網絡設計較輕松。
(4)Torch 于2002 年誕生于紐約大學,使用不是很大眾的Lua 作為接口,其簡潔高效但使用的人較少。
本文的目標是找一個操作簡便、計算迅速、兼容性好、靈活性高的框架,Tensorflow 能夠滿足要求,所以選取Tensorflow 作為訓練模型的框架。
隨著深度學習和計算機視覺迅猛發展,教育、醫療機構、廣告公司等為了更好的實現人機交互,急需能夠準確識別人臉面部表情的技術,用來達到更好的醫療效果和廣告轉換率。通過研究,發現目前實現圖像分類效果較好的是采用深度學習算法中的卷積神經網絡,采用fer2013 數據集,所有圖片為48*48 大小的分辨率且有足夠多的樣本,可以大大縮減網絡模型大小,加快計算速度,得到更高的準確率,而卷積神經網絡中的殘差網絡,采用首段與尾端相連,解決了網絡過深造成的梯度過深的問題,以達到更好的情緒識別效果。