崔子越,皮家甜,陳 勇,楊杰之,鮮 焱,吳至友,趙立軍,曾紹華,呂 佳
1.重慶師范大學 計算機與信息科學學院,重慶 401331
2.重慶市數(shù)字農(nóng)業(yè)服務工程技術(shù)研究中心(重慶師范大學),重慶 401331
3.智慧金融與大數(shù)據(jù)分析重慶市重點實驗室(重慶師范大學),重慶 401331
4.重慶師范大學 數(shù)學科學學院,重慶 401331
隨著計算機圖像處理技術(shù)日益的完善,人臉表情識別逐漸成為計算機圖像處理中重要的一部分,在人機交互、安全以及機器人制造等領(lǐng)域具有廣泛且必要的用途。通過面部表情的變化來獲取對象情感變化,是面部表情的主要交流方式。在實際采集表情數(shù)據(jù)集時,通常會由于光照變化、頭部姿勢、表情強度以及呈現(xiàn)方式等因素,造成表情樣本類內(nèi)表情差異大、類間表情差異小的問題,降低模型準確性。因此,人臉表情識別依然面臨著巨大的挑戰(zhàn)。
表情識別的研究可以主要分為基于傳統(tǒng)特征提取的方法和基于深度學習的方法。傳統(tǒng)特征提取主要依賴人工設計的提取器,需要大量的專業(yè)知識,同時泛化性和魯棒性較深度學習方法略有不足。Gupta等人[1]使用SVM 的方法在CK+數(shù)據(jù)集上取得了93.7%的準確性,相比深度學習方法準確性較差。深度學習方法對特征的提取是通過反向傳播和誤差優(yōu)化算法對權(quán)重進行更新迭代,在大量樣本學習過程中提取到更深層次、更抽象的特征。近年來,眾多學者將深度學習方法應用于人臉表情識別當中,并且取得了較好的效果。
2014 年,Simonyan 等人[2]提出了VGGNet 模型,探索了卷積神經(jīng)網(wǎng)絡的深度與其性能之間的關(guān)系,為深度卷積神經(jīng)網(wǎng)絡(Deep Convolutional Neural Network,DCNN)的發(fā)展奠定了基礎。在此基礎上,Duncand 等人[3]提出了VGG_S網(wǎng)絡模型用來進行實時檢測,但是準確率偏低。Zhang 等人[4]將表情圖像轉(zhuǎn)化為LBP 特征圖,再將LBP特征圖用作CNN的輸入進行訓練,取得了較好的效果,但是這會導致在未知環(huán)境下準確率不高,魯棒性不足。Dhankhar 等人[5]利用ResNet-50 模型和VGG16 模型組合形成一個新的組合模型識別面部表情,在KDEF數(shù)據(jù)集上取得了較好的效果。為了提升表情識別的準確率,增強訓練模型的泛化性,本文在傳統(tǒng)VGGNet的基礎上對模型進行了改進,設計新的輸出模塊替換全連接層,再利用遷移學習進行訓練,改進后的模型在CK+、JAFFE、FER2013數(shù)據(jù)集上進行測試,準確率和泛化性均有提升。
除了對基礎模型以及網(wǎng)絡結(jié)構(gòu)進行改進之外,很多研究者還對損失函數(shù)進行了研究與改進。Hadsell等人[6]提出了Contrastive Loss損失函數(shù),其目的是增大類間差異并且減少類內(nèi)差異。Schroff 等人[7]提出Triplet Loss損失函數(shù),能夠更好地對細節(jié)進行區(qū)分,但是Triplet Loss收斂速度慢,導致模型性能下降。Ko等人[8]提出中心損失函數(shù)Center Loss,讓樣本繞類內(nèi)中心均勻分布,最小化類內(nèi)差異,但計算效率太低。目前,常用的人臉表情數(shù)據(jù)集(CK+、JAFFE、FER2013)[9-11]中存在著樣本不平衡問題。樣本不平衡問題容易導致模型的訓練出現(xiàn)過擬合,同時也會導致模型在不同類別上分類性能出現(xiàn)較大的差異。為了解決樣本之間不平衡問題,Lin 等人[12]提出Focal Loss 損失函數(shù),通過聚焦參數(shù)γ 使模型更多的關(guān)注難分類樣本,提高模型分類性能,但并不能解決誤標注樣本問題。本文在此基礎上,對Focal Loss進行改進并應用于人臉表情識別中。針對Focal Loss 對于誤標注樣本產(chǎn)生的誤分類問題,設置閾值對置信度進行判別,將改進的Focal Loss 分別在CK+、JAFFE、FER2013數(shù)據(jù)集上進行多組實驗。實驗結(jié)果表明,相比于傳統(tǒng)交叉熵損失函數(shù),改進的Focal Loss能夠?qū)⒛P偷臏蚀_率提升1~2 個百分點。使用改進的Focal Loss,模型的分類能力更加均衡。
遷移學習從相關(guān)領(lǐng)域(源域)傳輸信息來提高一個領(lǐng)域(目標域)的學習訓練效率,在圖像處理領(lǐng)域被廣泛利用。源域的選擇是遷移學習的關(guān)鍵,預訓練模型與目標數(shù)據(jù)集關(guān)聯(lián)與相似性較高,則遷移學習效果較好。經(jīng)過實驗分析,本文使用在ImageNet 數(shù)據(jù)集上預訓練的VGG16模型的權(quán)重文件。ImageNet數(shù)據(jù)集是一個龐大的自然圖像數(shù)據(jù)集,具有超過1 500 萬幅圖像和2 萬多個類別,遷移其權(quán)重將會提升本實驗訓練效率和準確率。
在表情識別任務中,不同的類別間表情樣本具有很大的相似性和易混淆性,需要較多的卷積層對深層次、抽象的特征進行提取。深層次的網(wǎng)絡模型如ResNet等人[13],在面對樣本量較少的表情數(shù)據(jù)集時,由于層次過深容易導致參數(shù)量劇增,產(chǎn)生過擬合現(xiàn)象,并不能發(fā)揮出較好的識別效果。VGG16模型具有小卷積核和深層網(wǎng)絡兩個特點。模型中劃分了不同的塊,每一個塊內(nèi)包含若干卷積層和一個池化層,大量的卷積層使模型具有較好的特征提取能力。經(jīng)過實驗對比,本文選擇經(jīng)典的VGG16 網(wǎng)絡模型并且對其進行改進,在充分提取特征的前提下,避免過擬合現(xiàn)象的發(fā)生。改進的VGG16 網(wǎng)絡模型如圖1所示。
圖1 改進的VGG16模型對比圖Fig.1 Comparison chart of improved VGG16 model
為了避免過擬合現(xiàn)象,增強模型泛化性,本文設計新的輸出模塊替換預訓練模型的全連接模塊。輸出模塊如圖2所示。
圖2 輸出模塊流程圖Fig.2 Flow chart of output module
輸出模塊主要由改進的深度可分離卷積和全局平均池化組成。深度可分離卷積層[14]可以進一步提取特征,相比于普通卷積節(jié)省了大量參數(shù),同時仍具有和普通卷積相當?shù)奶卣魈崛∧芰?。為了防止梯度消失,減少參數(shù)之間的依存關(guān)系,緩解過擬合發(fā)生,深度可分離卷積在深度卷積和點卷積后都使用了ReLU 激活函數(shù),ReLU定義如下:
本文對深度可分離卷積進行改進,將深度卷積中的ReLU 激活函數(shù)替換為Hard-Swish[15]激活函數(shù)。Hard-Swish激活函數(shù)公式為:
與ReLU 激活函數(shù)相比,Hard-Swish 激活函數(shù)具有更強的非線性能力。在深度可分離卷積中采用Hard-Swish激活函數(shù),使得各通道的信息更好的保存下來,在訓練過程中網(wǎng)絡模型具有更好的收斂能力。
為了進一步緩解過擬合現(xiàn)象,本文采用全局平均池化層替換原本的全連接層,直接實現(xiàn)了降維,減少了網(wǎng)絡的參數(shù)量(CNN中占比最大的參數(shù)其實是最后的全連接層),在保證模型分類性能的同時,加快了訓練速度。
用新設計的輸出模塊代替VGG16的全連接模塊構(gòu)成一個新的網(wǎng)絡模型,將已訓練完成的卷積層權(quán)重與參數(shù)遷移到新的網(wǎng)絡模型中,利用表情樣本對新的網(wǎng)絡模型進行訓練。實驗證明,訓練完成的新模型具有較好的表情識別效果。具體方法流程如圖3所示。
圖3 人臉表情識別方法結(jié)構(gòu)圖Fig.3 Structure diagram of facial expression recognition method
樣本不平衡是機器學習領(lǐng)域中一個重要的問題,該問題會導致稀少樣本淹沒在較多的樣本中,降低稀少樣本的重要性。在實際分類問題中,多數(shù)樣本都是簡單易分的,而難分的樣本只占少數(shù),簡單的樣本占據(jù)主導權(quán)。簡單樣本損失小,但數(shù)量多,對損失起了主要貢獻,難分類的樣本則容易被模型忽略。不平衡類別分布問題在真實世界的人臉表情收集過程中也很常見,例如,快樂這一表情很容易被捕捉,而厭惡表情則由于其微妙性以及難理解性更難被收集到。這些參雜不確定性的樣本參與訓練往往會導致網(wǎng)絡過擬合、損害模型學習有用信息以及網(wǎng)絡在初期不收斂等問題。在FER2013 數(shù)據(jù)集中,數(shù)量最多的樣本與數(shù)量最少的樣本的數(shù)量比約為16∶1,如圖4 所示。對于表情識別任務來說,處理樣本不平衡問題,具有重大意義。
圖4 FER2013數(shù)據(jù)集中各類樣本分布圖Fig.4 Distribution map of various samples in FER2013 dataset
在表情識別任務中,交叉熵(Cross Entropy,CE)是常用的損失度量函數(shù),公式如下:
其中pi為模型預測結(jié)果對應標簽的概率。本文使用Softmax 分類器將表情數(shù)據(jù)集樣本分為7 類,則pi(i=1,2,…,7)表示Softmax 層7 個節(jié)點的離散概率,顯然,ai(i=1,2,…,7)表示Softmax層對應結(jié)點輸出。pi的計算公式為:
在表情識別任務中,交叉熵損失函數(shù)在面對多分類任務時,不同類別間的樣本不平衡會導致模型分類性能退化,困難樣本與簡單樣本之間的不平衡也會造成大量簡單樣本降低整體損失,使模型在訓練中難以對困難樣本進行過多的關(guān)注。Lin 等人[12]針對樣本不平衡問題,在標準交叉熵的基礎上進行改進,提出了聚焦損失函數(shù)(Focal Loss,F(xiàn)L),F(xiàn)ocal Loss通過減少易分類樣本的權(quán)重,使得模型在訓練時更加專注于難分類樣本。Focal Loss公式如下:
其中,平衡參數(shù)α的作用是控制不平衡樣本對總損失的權(quán)重,平衡不同類別樣本的數(shù)量。聚焦參數(shù)γ為一個大于等于0的超參數(shù),用來控制易分類樣本和難分類樣本的權(quán)重。當一個樣本被分錯時,pi是一個很小的值,因此調(diào)制系數(shù)(1-pi)γ就趨于1,而當pi趨于1 時(樣本分類正確且屬于易分類樣本),調(diào)制系數(shù)趨近于0,對總體損失貢獻很小。Focal loss通過控制調(diào)制系數(shù)達到專注于困難樣本的目的,通過平衡參數(shù)α達到平衡不同類別樣本的數(shù)量的目的。
Focal Loss面對樣本不平衡問題具有較好的效果,但同樣也有缺陷。由于表情之間具有很大的相似性,人眼難以對其進行分類,實際數(shù)據(jù)集中往往有少量誤標注樣本,如圖5所示。而在Focal Loss的計算中,若數(shù)據(jù)集樣本標注有部分錯誤,或是本身噪聲很大,則會因為權(quán)重的增加使模型學習到錯誤的信息,降低模型的性能。
圖5 FER2013數(shù)據(jù)集中易混淆樣本樣例圖Fig.5 Sample graph of confusable samples in FER2013 dataset
針對Focal Loss無法處理誤標注樣本問題,通過樣本的置信度與真實標簽對其設置閾值判斷,對誤標注樣本進行篩選,改變其置信度,從而降低Focal Loss 對該類樣本關(guān)注度,提高模型分類性能。
其中,F(xiàn)L 為Focal Loss,ptop為幾類樣本中預測為真的概率(置信度)最大值,超參數(shù)c(c<1)為概率閾值,yt為該樣本的真實標簽,yp為該樣本的預測標簽。
為了篩選出誤標注樣本,本實驗設定概率閾值c對Softmax 的輸出映射進行判斷,關(guān)于c的取值在實驗部分討論。若該樣本映射出的最大概率ptop大于這個閾值c,認為該樣本置信度很高,將該樣本預測標簽與真實標簽進行對比,若對比發(fā)現(xiàn)樣本預測標簽等于其真實標簽,說明該樣本為一個置信度高的簡單樣本,執(zhí)行Focal Loss;若樣本預測標簽不等于其真實標簽,則說明該樣本是一個置信度高的誤標注樣本,將其預測概率置為極小值ε,即舍棄該樣本。本文算法針對誤標注樣本問題,對Focal Loss 提出了改進,設置閾值參數(shù)c對Softmax 輸出結(jié)點的離散概率進行判斷,篩選出誤標注樣本并舍棄,提升了模型分類性能。改進的Focal Loss算法流程如圖6所示。
圖6 改進的Focal Loss算法流程圖Fig.6 Flow chart of improved Focal Loss algorithm
本文所有實驗均在python3.6.5上實現(xiàn),硬件平臺為Intel?Xeon Silver 4114 CPU,內(nèi)存大小為64 GB,GPU為NVIDIA TITAN V,顯存大小為12 GB。
為了說明本文方法的有效性,采用日本女性人臉數(shù)據(jù)(JAFFE)庫、Extended Cohn-Kanada(CK+)數(shù)據(jù)集和FER2013數(shù)據(jù)集進行實驗評估,實驗采用的樣本數(shù)量分布如表1所示。
表1 FER2013、JAFFE、CK+數(shù)據(jù)集實驗樣本選取數(shù)量分布表Table 1 Selection number distribution table of FER2013,JAFFE,CK+dataset experimental samples
其中JAFFEE 數(shù)據(jù)集包含10 位日本女性的213 張大小為256×256人臉正面圖像,共有7種標簽,該數(shù)據(jù)集樣本較為平衡,標簽比較標準,如圖7所示。
圖7 JAFFE數(shù)據(jù)集樣例圖Fig.7 Sample diagram of JAFFE dataset
CK+數(shù)據(jù)集采集了123人共593例的動態(tài)表情圖像序列,每個圖像序列包含從表情平靜到表情峰值的所有幀,其中僅有327例有表情標簽。共有7種表情,該數(shù)據(jù)集樣本較為不平衡,如圖8所示。
圖8 CK+數(shù)據(jù)集樣例圖Fig.8 Sample diagram of CK+dataset
Fer2013人臉表情數(shù)據(jù)集由35 886張人臉表情圖片組成,其中,測試圖(Training)28 708 張,公共驗證圖(Public Test)和私有驗證圖(Private Test)各3 589張,每張圖片是由大小固定為48×48 的灰度圖像組成,共有7種表情,該數(shù)據(jù)集樣本較為不平衡,標簽較為混亂,分類難度略大,如圖9所示。
圖9 FER2013數(shù)據(jù)集樣例圖Fig.9 Sample diagram of FER2013 dataset
由于表情數(shù)據(jù)集中人臉尺寸、角度不一致會對識別結(jié)果造成影響,針對JAFFE 和CK+數(shù)據(jù)集中原始圖像的多余信息,采用Haar-like特征對人臉區(qū)域進行檢測并提取。通過直方圖均衡化將圖像的直方圖分布變成近似均勻分布,增加圖像對比度,增強圖像細節(jié)。如圖10所示,最后對圖像進行縮放至48×48的大小。
圖10 預處理樣例圖Fig.10 Sample image of set preprocessing
為了提升訓練模型的泛化性,采用Image Data Generator數(shù)據(jù)增強技術(shù)擴充訓練數(shù)據(jù),將圖像隨機旋轉(zhuǎn)-10°到10°,在水平與豎直方向上對圖像進行10%范圍內(nèi)的隨機偏移,對圖像進行10%范圍內(nèi)的隨機縮放,對圖像進行隨機水平翻轉(zhuǎn)。
現(xiàn)有的研究工作表明,神經(jīng)網(wǎng)絡提取的特征具有通用性,在大型通用圖像數(shù)據(jù)集上訓練過的深度神經(jīng)網(wǎng)絡,再對結(jié)構(gòu)進行調(diào)整和訓練,可以很好地遷移到其他問題上,因此在此思想基礎上,利用遷移學習,分別選用了MobileNet[14-16]、SqueezeNet[17]、ShuffleNet[18]、Xception[19]、VGGNet、InceptionV3[20]以及ResNet[13]等優(yōu)秀的網(wǎng)絡模型進行實驗對比,實驗結(jié)果如表2所示。本文實驗均對數(shù)據(jù)進行了100個epoch,每個epoch迭代200次,共計迭代2 萬次訓練。采用自適應矩估計(Adam)的訓練策略,學習率設置為1E-4,當val_loss值不再下降時,學習率乘以衰減因子0.5,α和γ兩個超參數(shù)選擇經(jīng)驗值,α參數(shù)選擇為0.25,γ參數(shù)選擇為2,c設置為0.8。經(jīng)過實驗分析,最終選用VGG16作為本文的網(wǎng)絡模型。
表2 不同模型準確率對比表Table 2 Comparison table of accuracy of different models %
為了驗證本文算法的有效性,在CK+數(shù)據(jù)集上分別對改進前后的損失函數(shù)和模型進行對比實驗,如表3所示。其中,傳統(tǒng)VGG16 記為VGG16,改進后的VGG16記為I_VGG16;傳統(tǒng)Focal Loss 記為FL,改進后的Focal Loss記為I_FL。經(jīng)過實驗分析,I_FL相比交叉熵損失函數(shù)準確率提升了1.73%,相比FL 準確率提升了1.17%,本文算法相比VGG16網(wǎng)絡模型結(jié)合交叉熵損失函數(shù),準確率提升了4.12%,證明了本文算法具有更好的分類能力。
表3 CK+數(shù)據(jù)集中不同損失函數(shù)對比表Table 3 Comparison table of different loss functions in CK+dataset %
為了進一步研究改進的Focal Loss 的對實驗結(jié)果的影響,本文對超參數(shù)c進行多次實驗。表4 所示為c取不同值時,在CK+、JAFFE 以及FER2013 數(shù)據(jù)集上的表情識別準確率,可以看出c=0.8 時,準確率最高。
表4 c 取不同值時在不同數(shù)據(jù)集上面部表情識別準確率Table 4 Accuracy of facial expression recognition on different datasets when c takes different values %
在CK+、JAFFE以及FER2013數(shù)據(jù)集上與國內(nèi)外優(yōu)秀算法進行了比較,目前大部分模型都取得了較好的準確率。本文模型與其他模型相比,在CK+數(shù)據(jù)集上準確率有3%~5%的提升,在JAFFE 數(shù)據(jù)集上準確率有1%~4%的提升,如表5、表6 所示。在各類表情的準確率上也較為平均,驗證了模型的有效性。
表5 不同方法在CK+數(shù)據(jù)集上基本表情識別準確率Table 5 Accuracy of basic expression recognition on CK+dataset by different methods %
表6 不同方法在JAFFE數(shù)據(jù)集上基本表情識別準確率Table 6 Accuracy of basic expression recognition on JAFFE dataset by different methods %
在FER2013 數(shù)據(jù)集上與目前國際上已有的幾種方法進行了比較,如表7所示。FER2013數(shù)據(jù)集上人眼識別準確率約為65%,可以看出絕大部分模型相比人眼具有更高的準確性。與其他方法相比,本文算法準確率較高。
表7 不同方法在FER2013數(shù)據(jù)集上基本表情識別準確率Table 7 Accuracy of basic expression recognition on FER213 dataset by different methods %
為了進一步驗證本文算法,根據(jù)FER2013數(shù)據(jù)集上的實驗結(jié)果繪制混淆矩陣。其中列代表預測類別,行代表真實類別,對角線數(shù)值為該類預測準確率,其余為預測錯誤的概率,由表8 分析可知,本文算法的分類結(jié)果分布較為均勻,各類表情樣本更傾向于分到所屬類別,具有較好的分類能力。
表8 FER2013混淆矩陣Table 8 FERE2013 confusion matrix
為了測試本文算法在實際應用中的識別能力,設計了基于真實人臉表情識別的仿真實驗。攝像頭采用英特爾D435,使用SSD算法進行人臉檢測,對每一幀畫面基于本文方法進行表情識別,如圖11 所示。實驗結(jié)果表明,在真實條件下,本文算法具有較好的泛化性。
圖11 表情識別測試效果Fig.11 Test effects of expression recognition
本文對傳統(tǒng)VGG16 網(wǎng)絡模型做出改進,并進行遷移學習。針對數(shù)據(jù)集中存在的誤標注樣本問題,對Focal Loss添加閾值判斷,篩選出誤標注樣本并進行抑制處理。本文分別在CK+、JAFFE 以及FER2013 數(shù)據(jù)集上做了對比實驗,實驗結(jié)果表明,改進的模型識別準確率較高,改進的Focal Loss對誤標注樣本有較好的抑制性。
雖然人臉表情識別已經(jīng)取得了較好的識別效果,并且在科研項目上應用廣泛,但是光照、遮擋以及側(cè)頭等因素的影響依然較大,為了克服這些外界因素,未來的研究可以將表情識別從室內(nèi)轉(zhuǎn)向室外,在更復雜的環(huán)境下應用。