賈茜偉,閆 娟,楊慧斌,劉向前
(上海工程技術大學 機械與汽車工程學院,上海 201620)
人的面部表情識別可以識別出中性、憤怒、厭惡、驚訝、高興、悲傷和恐懼七類表情,該表情識別技術有許多應用場景,例如:在汽車司機的疲勞駕駛監測中,通過司機的表情變化來推測司機的駕駛狀態,從而對司機發出提醒。在智能安防中,通過監測公眾場合人們表情的變化來推測其心理想法,并及時阻止潛在危險行為,從而避免危險事故的發生。在醫療單位中,通過監測病人表情的變化來了解病人的身體狀況,一旦發現異樣及時采取措施等。
Mehrabian研究指出,人臉面部表情可以傳遞人們的內心活動和情感變化,如果計算機可以獲取到人臉信息,人機交互將會有很大的發展空間。經過Ekman等人的一系列研究,人臉的面部表情識別技術已經迅速發展起來。一般來說,將表情識別分為特征提取和特征分類這兩步,特征提取主要是解析人臉面部圖像,并將局部特征提取出來,分類器再根據提取到的局部特征進行最優分類。近年來,部分學者提出依據人臉的特征點發生的形變程度來推測人臉面部表情,然而僅僅依靠部分特征點的形變并不能代表整個人臉表情,從而造成表情識別準確率較低。伴隨著卷積神經網絡(Convolutional Neural Networks,CNN)的研發問世,一些學者提出可以在表情識別中融入CNN算法,經過劃分好的區域提取人臉的全局特征迭代回歸,取得了不錯的識別效果,但是只有面部全局特征,未能突顯出局部特征,因此會造成相似表情在一定程度上的區分困難,例如驚訝和恐懼的區分。Kaleekal等人基于面部68個特征點周圍提取8個面部突出塊(Salient Facial Patches,SFP)的Hahn特征,并采用SVM進行分類,經過試驗表明,在CK+與JAFFE數據集的識別率分別為91.33%與93.16%。SFP方法雖然突出了面部的局部特征,但是選取時并未設置一個固定的標準,也忽視了不同表情中局部特征比例上的不同。另外,根據Li等人研究,面部的6類基本表情均有FACS編碼中對應的面部肌肉運動單元,但是該分區方法需要大量識別,而單個的識別準確率并不高。
因此,本文提出基于面部多重局部特征的人臉表情識別技術,論文的創新點可表述為:
(1)本算法基于人臉的68個特征點,再將額頭部分加上去,總共將面部分為23個子區域。面部表情也會在額頭上體現出來,例如額頭的皺紋和表面舒張等。本文統計了6類基本表情產生域,再依據其產生域、面部肌肉單元以及面部器官將23個子區域歸類到8個候選區域中,為SFP的選取提供了依據,而且可以不用重復就能提取不同表情中包含的相似的局部特征,從而解決了需要重復識別和識別單個效率低的問題。
(2)本文算法采用8個并行的分支進行提取,并根據候選區域所占的面積比例支配不同維全連接層,解決了局部候選區域提取得不夠均衡的問題。每個分支的輸出按照注意力自適應地連接,經過函數將人臉面部表情基本分為7類:中性、憤怒、厭惡、恐懼、高興、悲傷、驚訝。在CK+和JAFFE數據集得到的平均準確率分別為99.87%與96.72%,相比S-Patches方法分別增加了6.03%與10.28%。
根據人臉的構造以及產生表情時一些運動的局部肌肉單元,將面部肌肉運動分為45種,現選取部分FACS展示,詳見表1。這些局部肌肉運動單元可以組成多個人臉表情,其中包含6類人臉基本表情。繼而研究得到的表情相應結果見表2。分析表1、表2可知,眉毛緊在一起、眉毛間出現直形皺紋等,對應著表1的面部肌肉運動單元中的、、、、的一種或幾種,表情表現為憤怒;眉毛向下壓、上嘴皮向上抬、下眼皮下面出現皺紋,對應著表1的面部肌肉運動單元中的、,表情表現為厭惡;眉毛緊皺并抬起、額頭顯現皺紋、上眼瞼向上抬起、下眼皮向下拉伸、嘴微微變化或張大等,對應著表1的面部肌肉運動單元中的、、,表情表現為恐懼;牙齒露出、嘴角向外拉并微微抬起、眉毛可能會向下彎一點、眼皮下面凸起等,對應著表1的面部肌肉運動單元中的、、,表情表現為高興;眉毛向內收縮、嘴角向下拉伸、上眼皮下拉、額頭舒張等,對應著表1的面部肌肉運動單元中的、、、,表情表現為悲傷;眼睛睜大、上眼皮向上抬起、下眼皮向下拉伸、嘴巴張大等,對應著表1的面部肌肉運動單元中的、、、,表情表現為驚訝。

表1 部分面部肌肉運動單元AUTab.1 Part of facial muscles movement unit AU

表2 表情相應AUsTab.2 AUs corresponding to the expression
6類基本表情產生時,大部分面部肌肉運動單元存在明顯動作,基于此,將面部分為23個局部特征區域,如圖1所示,再將這23個面部區域按照人臉的構造分為8個局部區域AUo,為1到8。每個候選區域都包含一定的特征區域,且只提取本候選區域內的特征,在候選區域內產生的表情見表3。人臉表情的局部區域示意如圖2所示。由圖2可看出,圖2(a)中包含額頭和眉毛部分,是、、和的產生域,包含1、2、3、6、7面部的局部特征區域,屬于憤怒、恐懼、悲傷、驚訝等表情發生時的肌肉運動單元活動區域;圖2(b)中包含眉毛和眼睛部分,是產生域,包含2、3、6、7、8、11面部的局部特征區域,屬于憤怒、恐懼、悲傷表情產生區域;圖2(c)中包含眼睛、鼻梁及其鼻子附近部分,是產生域,包含8、9、10、11、13、15面部的局部特征區域,屬于高興表情產生區域;圖2(d)中包含縱向鼻子及鼻梁部分,是產生域,包含4、5、9、10、14面部的局部特征區域,屬于厭惡表情產生區域;圖2(e)中包含鼻子和嘴巴部分,是、產生域,包含14、17、18、19面部的局部特征區域,屬于高興、驚訝、悲傷表情產生區域;圖2(f)中包含嘴巴、下巴及附近肌肉部 分,是、、產生域,包含17、18、19、20、21、22、23面部的局部特征區域,屬于高興、驚訝表情產生區域;圖2(g)中包含下巴部分,是產生域,包含20、21、22、23面部的局部特征區域,屬于厭惡、悲傷表情產生區域;圖2(h)中包含嘴巴部分,是、產生域,包含18面部的局部特征區域,屬于憤怒表情產生區域。

表3 AU組包含區域Tab.3 AU group contains area

圖1 面部區域分區Fig.1 Facial area division

圖2 局部區域示意圖Fig.2 Local area diagram
本文算法基于面部區域的68個特征點和23個分好的局部特征區域,構成8個局部候選區域,并將候選區所占的面積最小的矩形框輸入卷積神經網絡中。8個局部候選區選取的矩形框如圖3所示。

圖3 局部候選區最小矩形示意圖Fig.3 Schematic diagram of the smallest rectangle of the local candidate area
本文算法的整體流程如圖4所示。每個AUo圖像中選取的局部特征區域大小不一,并且都需要經過CNN網絡提取特征,再將提取得到的特征拼接為4096大小的全連接層。為了得到更好的識別效果,就需要突出不同表情的局部特征,因此再將拼接的全連接層乘以不同表情所占的權重值,后續又經過特征提取與函數將表情基本分為7類:中性、憤怒、厭惡、恐懼、驚訝、高興、悲傷。

圖4 本文算法流程圖Fig.4 Flow chart of the algorithm in this paper
每一類基本表情都有不同的局部特征,將其局部特征突顯出來,損失函數是必不可少的。損失函數在許多視覺工作中被經常使用,主要通過最大化真實樣本類別的后驗概率將特征從不同的類中分離出來,給定輸入特征為x,對應的標記y,其計算公式如下:

其中,為批次的大??;為類的數量;w∈R是第類最后一個完全連接層的權重;是特征維度;b∈是偏置項。在w和x上應用歸一化來優化球面上的特征,特征距離與特征角的計算關系如下:

其中,θ是w和x之間的角度。
為驗證本文算法的有效性,實驗選用Win10系統、內存8 G、CPU為i5-9500、硬盤為512 G固態硬盤,實 驗 中 所 需 要 的 軟 件 包 括:Ubuntu16.04、Pytorch1.9.0、Opencv4.5.1、Cudnn7.5、CUDA10.1。
本文算法的模型選用CK+數據集和JAFFE數據集進行實驗,實驗前先將圖像進行預處理,統一大小為48×48的灰度圖,訓練集和測試集大致按照4:1隨機進行劃分,由此得到的CK+和JAFFE數據集中7類基本表情的訓練集和測試集的數量分布見表4和表5。

表4 CK+數據集中各表情分布情況Tab.4 Distribution of expressions in the CK+dataset

表5 JAFFE數據集中各表情分布情況Tab.5 The distribution of expressions in the JAFFE dataset
現選取2組不同的局部候選區域與AUo進行實驗驗證,對比結果如圖5所示。選取的2組不同局部候選區域組成見表6。由圖5(a)可看到,本文算法選取的區域在CK+數據集的平均準確率達到99.87%,相比于選取的特征區域1與特征區域2高出6.89%與8.84%。在JAFFE數據集的平均準確率達到96.72%,相比于選取的特征區域1與特征區域2高出11.68%與18.68%。實驗表明,精確選取局部特征區域比簡單選取面部的器官區域得到的識別效果要高得多,局部特征區域對人臉面部表情識別的準確率起到重要的作用。

表6 對比局部候選區域組成Tab.6 Comparing the composition of local candidate regions

圖5 對比圖Fig.5 Comparison chart
不同表情的權重值W是不同的,也會對面部表情的識別造成一定的影響,現從偏置的值為0、1、2、3、4這五種來進行實驗驗證不同偏置值對表情識別準確率的影響。由圖5(b)可知,當偏置值為1時,CK+數據集中的準確率最高為99.87%;當偏置值為0時,JAFFE數據集中的準確率為96.72%。實驗表明,偏置值不是越大、或者越小越好。
算法對比結果見表7。將本文算法與CNN算法在CK+和JAFFE的混合數據集下對7類基本表情識別的準確率進行對比后,從表7中可以看出,本文算法除在厭惡表情識別上略低于S-Patches算法外,其余表情識別和平均準確率均高于S-Patches算法。對于CNN算法而言,本文算法只在悲傷表情識別中略低,其余方面均與其相等或勝過CNN算法。總地來說,實驗通過與兩大經典算法做對比,可以證明本文算法在對面部特征劃分成有效的局部特征區域后,具有有效性,并且提高了表情識別性能。

表7 算法對比Tab.7 Comparison results of the algorithms
本文基于68個特征點和面部肌肉運動單元,提出基于面部多個局部特征的人臉表情識別算法。算法將包含額頭的人臉面部區域劃分成23個子區域,再經卷積神經網絡提取特征,最后經函數進行表情分類。本文算法在CK+和JAFFE數據集的平均準確率分別為99.87%和96.72%,相對于S-Patches則分別提升了6.03%和10.28%。本文算法也存在一定的不足,比如大量提取局部特征,必然會增加訓練時長,還有就是提取局部特征后的降維問題,這些都需要后續進一步地去研究。