表情識別(七)--面部表情識別階段綜述(2018.4)

Eason.wxd發表於2018-05-30

本文主要參考論文《Deep Facial Expression Recognition: A Survey》

  首先我們來了解一下表情識別的相關背景知識以及發展近況。人臉表情是最直接、最有效的情感識別模式。它有很多人機互動方面的應用,例如疲勞駕駛檢測和手機端實時表情識別。早在20世紀Ekman等專家就通過跨文化調研提出了七類基礎表情,分別是生氣,害怕,厭惡,開心,悲傷,驚訝以及中立。然而不斷的研究發現這七類基本表情並不能完全涵蓋人們在日常生活中所表露的情感。針對該問題,2014年在PNAS上發表的一篇文章研究提出了符合表情的概念,並且指出多個離散的基礎表情能結合在一起從而形成複合表情。例如當人們遇到意外的驚喜時,應該是既開心又驚訝的。

    人臉表情識別的具體應用如人機互動,駕駛員疲勞檢測,醫療,謊言檢測等(好像都不是很靠譜)。

    Facial Expression Recognition 面部表情識別,以下簡稱FER,另外一個概念AFEA,Automatic Facial Expression Analysis。完整的FER包含靜態影象FER和動態序列FER。靜態影象FER,就是我們通常意義上的圖片表情識別了,動態序列FER是基於視訊序列建模,如RNN方式等。下面是歷年來,FER上面的發展,主要是演算法和資料集。

    其實可以看出,主要還是基於靜態影象的FER。主流的方式,從傳統的手工特徵(LBP,LBP-TOP等),淺層學習(SVM,Adaboost等),深度學習(CNN,DBN,RNN)。從2013年開始,開始有了表情識別的比賽,如FER2013,EmotiW等。

    整個人臉表情識別的研究是跟隨人臉識別的發展而發展的,人臉識別領域比較好的方法會同樣適用於表情識別(這裡主要是指靜態影象FER,畢竟是個分類問題,跟人臉識別類似)。該綜述從演算法和資料庫兩方面調研了人臉表情識別領域的進展。在資料庫方面,表情識別逐漸從傳統的實驗室統一控制下的小樣本量資料庫轉移到了現實生活中的多樣化大規模資料庫。在演算法方面,傳統的手工設計特徵乃至淺層學習特徵也不再能很好地適應現實世界中種種與表情無關的干擾因素,例如光照變換,不同的頭部姿態以及面部阻擋。於是越來越多的研究開始將深度學習技術運用到了人臉表情識別之中,來解決上述問題。

    基於深度學習的面部表情識別,主要分以下3個過程。

    1.預處理

    所謂的預處理,是將計算特徵之前,排除掉跟臉無關的一切干擾,因此,就有了人臉檢測,人臉對齊,歸一化等過程,主要有:人臉檢測,人臉對齊,資料增強,人臉歸一化。

    人臉檢測不做贅述。

    人臉對齊,主流的有IntraFace,採用SDM演算法,提供49個點。其他的如Mot,DRMF,Dlib,MTCNN,DenseReg,TinyFaces.作者這裡的人臉對齊,主要是指根據人臉,檢測出人臉定位點landmark.

    資料增強,包含線上和離線兩種。

    主流的離線資料增強,包含隨機擾動,變換(旋轉,平移,翻轉,縮放,對齊),噪聲新增如椒鹽噪聲,斑點噪聲,以及亮度,飽和度變化,以及在眼睛之間新增2維高斯隨機分佈的噪聲。同時,還有其他的如GAN生成臉,3DCNN輔助AUs生成表情。但是,GAN生成的臉,是否對網路模型有效能提升,還沒有證實。

    線上資料增強,包含Crop,水平翻轉等,主要的意思是指,在預測時,可以一次性對測試資料進行Crop,翻轉等操作生成多張類似的測試圖,然後每張測試出圖預測出的輸出做均值,這主要是基於隨機擾動訓練的模型,需要在測試時計算均值的原因而定的。

完整的FER系統示意圖

    人臉歸一化,主要是指亮度歸一化和姿態歸一化(就是人臉對齊拉正)。

    亮度歸一化,不僅包含亮度調整,也包含了對比度調整,常見的對比度調整方式 有直方圖歸一化,DCT歸一化,DoG歸一化,相關論文證明直方圖歸一化效果最穩定,適應各種網路模型,也有論文證明,全域性對比度歸一化,區域性歸一化,直方圖歸一化,三種方法中,全域性對比度歸一化和直方圖歸一化效果最好。所以,建議直方圖歸一化聯合亮度歸一化一起。

    姿態歸一化,其實這個是人臉專案中影響最大的了。目前大多數還是在小角度內,2D 的landmark對齊,比較可靠的方向是3D landmark,有通過影象和相機引數估計出來的,也有通過深度感測器測量然後計算出來的。比較新的估計模型有:FF-GAN,TP-GAN,DR-GAN等。 

2.深度特徵學習

這裡不做過多描述,主要是基於CNN的網路模型,具有非常高效能的特徵表達能力。特別適合基於影象的分類問題,另外一個基於DBN網路的特徵提取,以及DAE轉門用作特徵提取。最後,還有一部分是基於序列建模的RNNs,如LSTM等。

3.面部表示分類

這裡主要是說,可以基於深度學習,直接學習特徵,預測概率(softmax),也可以把學習的深度特徵,用SVM等淺層分類器進行分類。

下面開始介紹FER涉及到資料集。

上圖展示了作者收集整理的FER資料集,很全面,基本涵蓋了從開始到當下,公開的資料集。

目前的資料結果分析:

這裡分兩部分,包含基於靜態影象和基於動態序列。

1.靜態影象FER進展

基於靜態影象的FER,在使用深度學習進行分類時,分以下幾種情況:

1.1預訓練模型fineturn.

主要採用分類網路,或者人臉識別網路,相對來說,後者更好。只是有各種fineturn的方式,比如分級、固定某些層,不同層採用不同資料集,如下圖:

還有,考慮到人臉識別模型弱化了人臉情緒差異,可以用人臉識別模型提取特徵,然後用表情識別網路消除人臉識別模型帶來情緒差異的弱化。也就是這裡人臉識別模型起到初始化表情網路的作用。

1.2差異化網路輸入

實際上就是,除了常見的輸入RGB原始臉部資料給網路,還有一些手工特徵,如SIFT,LBP,MBP(人臉識別之表情識別(五)--MBP+CNN),AGE(3D angle,gradient edge),NCDV,還有LBP+HOG+Gray@51點landmark生成DSAE,PCA以及裁剪出五官進行特徵學習而不是整個臉部等。個人覺得這個是有道理的,純粹臉部表情,沒有必要將全部臉部資料傳遞進去提取特徵,畢竟,網路模型的權重更新,依據臉部全部資料的話,雖然大多數特徵是好的, 但誰也說不好,臉部與表情無關的資料,對錶情識別的貢獻多大,以及生成的特徵是否有效,因為最終的輸出是部分節點的啟用結果。

1.3輔助塊或者層改進

基於經典CNN網路架構,一些人設計了更好的網路塊或者網路層,如HoloNet(CReLU代替ReLU以及改進的殘差塊),還有下圖這種結構(多模組監督):

需要注意的一點是,Softmax在表情識別領域,不是很合適,畢竟表情的類間區分本來就不高,這也是難點所在,所以,用人臉識別模型中的改進損失如A-Softmax等效果比普通分類的Softmax普遍好。但是,個人覺得思路還是有問題。作者也整理了了幾種針對表情分類的loss,如基於center loss 改進的ISLand loss(增加類間距離),LP Loss(locality-preserving,減小類內距離)。基於triplet loss改進的exponential triplet-based loss(網路中增加困難樣本的權重),(N+M)-tupes cluster loss(降低anchor的選擇難度,以及閾值化triplet不等式),如下圖:

1.4網路整合

整合的方式,在機器學習上面非常成功,如Adaboost就是一個很成功的例子,這裡講的是網路結構的整合,要考慮兩點,一是網路模型要有充分多樣性這樣才可以具有互補性,二是一個可靠的整合演算法。

對於深度學習來說,不同的訓練資料,不同的網路架構,甚至不同的網路引數,不同的預處理,都有可能產生不同的網路模型,這個不多說了。

對於整合演算法,這裡需要考慮兩點,一個是特徵整合,另外一個就是輸出的決策整合,對於特徵整合,最常見的是不同網路模型的特徵直接連線,還有如下圖:

 

決策整合,如多模型輸出加權投票,簡單平均,加權平均,甚至可以一起學習每個模型的整合權重。

1.5多工網路

這裡的多工網路,不是指常見的檢測和對齊一起做,而是表情和landmark一起、表情和人臉驗證一起、以及表情和AUs分類一起。如disBM(高階玻爾茲曼機),學習與表情有關的主要座標以及後續的表情分類,值得注意的有SJMT解決AUs的多標籤用以識別AUs,IACNN包含兩種提取網路,一路用表情感知測度學習提取判別表情類別的特徵,一路用身份感知測度學習提取表情中不變特徵,類似的還有MSCNN,基於監督的表情識別和人臉驗證一起,如下圖

1.6網路級聯

如下圖,就是一個網路級聯過程

最後,給出一個目前在不同資料集上的結果圖。

2.動態序列FER進展

基於時空上下文的表情分析,相比靜態影象更全面,畢竟,人的表情,是在真實世界的一個時間和麵部空間裡變化的結果。這裡的動態序列,主要是指表情在視訊序列中的變化。

2.1幀聚合

考慮到表情的時空變化,單獨的統計每幀的結果作為類別輸出不太合適,因此,需要針對一段幀序列給出一個表情結果,這就涉及到幀聚合,也就是用一個特徵向量,表示一段時間序列幀。通常有兩類,一類是決策級幀聚合,一類是特徵級幀聚類。

對於決策級幀聚合,例如有生成所有幀的表情類別概率,並連線成一個固定幀長度向量再進行分類。具體分類序列時,考慮到表情是一個實際由開始到結束的變化過程,因此,作者比較了這些向量最後的決策機制,如去平均,最大,或者WTA,平方再平均等等,具體可以看看論文。

對於特徵級幀聚合,主要是指標對每幀的原始資料,提取特徵,聯合多幀,再做處理,如有人針對這些聯合幀的特徵資料,計算特徵向量(eigenvector),協方差矩陣,以及高維高斯模型。還有人提出STAT,即統計編碼模型,聯合了均值,方差,最小,最大值等。還有采用GMM進行編碼生成Fisher 向量的。有興趣的可以看論文。這裡不再贅述了。

2.2強度表達網路

這裡的強度,是指在一段序列中,所有幀表現出某個表情的程度,一般中間位置最能表達某個表情,即為強度峰值。大多數方法,都關注峰值附近而忽略了開始和結束時的低谷幀。這部分,主要介紹幾個深度網路,輸入是具有一定強度資訊的樣本序列,輸出是某一個類表情中不同強度幀之間的相關性結果。如PPDN(peak-piloted),用以內在表情序列裡幀之間相關性識別,還有基於PPDN的級聯PPDN網路DCPN,具有更深更強的識別能力。雖然,這些網路,都考慮了一段序列裡的表情變換,甚至為了計算表情的變化趨勢,設計了不同的損失函式,但是,真心覺得,這種代價,對於工程來說,其實是沒有意義的。有興趣的,可以看看論文裡對應的方法,這裡不再贅述了。

2.3深度時空FER網路

其實 ,到這裡,你可以看出,上面的幀聚合,強度表達網路,都是屬於傳統的結構化流程,這裡的時空網路,形成了端到到的序列分類。即輸入單獨的影象序列,輸出某一類表情的分類結果。主要肯定是RNN啦,還有C3D:

RNN:這個不用多說,就是專門為序列建模的,經典的有LSTMs,GRUs等。

C3D:其實就是3D卷積核,對於通常影象上的2D空間卷積,沿著時間軸增加了一個時間維度,就是3D時空卷積。如3DCNN-DAP:

http://

當然,你也可以不用考慮時間維度,直接將一段序列資料,拼接成大向量,進行CNN分類。這種思路簡單粗暴如DTAN。

面部landmark運動軌跡

通過研究五官的變化軌跡,來分析表情變化,如DTGN,深度空間幾何網路,聯合每幀landmark點的x,y座標值,歸一化之後,作為一個運動軌跡維度。或者計算landmark特徵點的成對L2距離特徵,以及基於PHRNN用於獲取幀內的空間變化資訊。還有根據五官將landmark點分成4塊,輸入到BRNNs,定位區域性特徵,如下圖:

級聯網路

跟之前靜態影象的級聯網路思路一樣,主要是CNN提取特徵,級聯RNN做序列特徵分類。如LRCN,級聯CNN與LSTM,類似的,還有級聯DAE作為特徵提取,LSTM進行分類,還有ResNet-LSTM,即在低階CNN層,直接用LSTM連線序列之間的低階CNN特徵,3DIR用LSTM作為一個單元構建了一個3D Inception-ResNet特徵層,其他還有很多類似的級聯網路,包括,用CRFs代替了LSTM等等。

網路整合

如兩路CNN網路模型用於行為識別,一路用多幀資料的稠密光流訓練獲取時間資訊,一路用於單幀影象特徵學習,最後融合兩路CNN的輸出。還有多通道訓練,如一通道用於自然臉和表情臉之間的光流資訊訓練,一路用於臉部表情特徵訓練,然後用三種融合策略,平均融合,基於SVM融合,基於DNN融合。也有基於PHRNN時間網路和MSCNN空間網路相結合來提取區域性整體關係,幾何變化以及靜動態資訊。除了融合,也有聯合訓練的,如DTAN和DTGN聯合fineturn訓練。

最後,給出一個動態序列分析在各個資料集上的目前最佳效果:

 

 

補充:

遮擋和非正臉頭部姿態,是兩個FER上主要的問題,對於遮擋問題,有人嘗試用DBNs提取特徵,排除遮擋干擾,也有嘗試用兩個CNN網路,一個用於沒有遮擋干擾資料訓練,一個用遮擋資料訓練。對於非正面頭部姿態的影響,除了上文提到的SIFT特徵,做3D/2D透視投影轉換,將該轉換過程直接放置在CNN模型中,其他,基本就是3D landmakr估計了。

還有,增加額外的資料,如IR近紅外,深度資料等,用於輔助光線影響,3D真實臉部資料等。

總結:

1.靜態/動態都有一定的應用空間,後者更接近真實客觀表情理解。

2.可以看出,除了後面網路整合,網路級聯更多的用在刷分,工程意義不大,當然,也不能說沒有,在沒有資源限制時可用。

3.主要關鍵過程有預處理,比如人臉檢測,人臉對齊,亮度,對比度歸一化,姿態歸一化,保證輸入資料干擾影響較少。

4.資料增強與常見的圖片資料擴充套件一致,深度網路包括CNN分類/識別/RNN分類,與常見分類任務一致。

5.可以用預訓練的分類/人臉識別網路fineturn,可以針對表情修改對應的損失函式,也可以區域性或者針對某些層,塊進行改進

6.可以將DL和Handcrafted特徵結合,增加網路輸入的多樣性。

7.可以CNN+RNN進行端到端的序列識別。具體CNN設計,以及CNN+RNN如何設計(級聯,整合,或者聯合)需要實際結果測試你確認,說白了,這幾種結合方式都有用。

相關文章