陳昌川,王海寧,黃 煉,黃 濤,李連杰,黃向康,代少升
(1.重慶郵電大學 通信與信息工程學院,重慶 400065;2.山東大學 信息科學與工程學院,山東 青島 266000)
人臉表情識別可以識別人類面部表情,例如驚訝、悲傷、高興、憤怒等,且面部表情識別存在廣泛潛在應用[1],可用于人機交互、購物推薦、犯罪調查、醫療救助等。例如:人機交互時根據用戶瀏覽商品表情變化推薦商品、推測喜好;刑事偵查中利用犯罪嫌疑人面部表情推測其心理變化;醫療救助時觀測患者面部表情調整藥品劑量等。
文獻[2]提出人類情感信息有55%是通過人臉傳遞的,若能使用計算機讀取面部信息,人機交互將會有更好的體驗。基于此,1987年美國心理學家EKMAN等[3]提出面部運動編碼系統(Facial Action Coding System,FACS),該系統對常見的面部肌肉運動單元(Action Unit,AU)做出詳盡描述并將其具體到編碼,同時,他們將人臉表情分為6種基本表情:憤怒、厭惡、驚訝、高興、悲傷、恐懼。
在EKMAN等的研究基礎上,面部表情識別已取得很大進步。通常情況下,多數方法將面部表情識別分為兩步:特征提取與分類,特征提取分析面部圖像并獲取潛在特征,分類器根據所獲潛在特征做出最優分類。特征提取是表情識別關鍵一步,直接影響表情識別的效果。對于特征提取現有研究將其分為兩類:幾何特征和紋理特征。一些研究學者[4-7]提出根據人臉特征點形變情況統計進而識別表情,建立在可靠特征點定位與跟蹤之上,并根據特征點間數學特征統計求得表情分類;然而僅靠部分特征點變化分析并不能代表整幅人臉表情,導致精度不高。文獻[8]提出使用Gabor濾波器與局部二值模式(Local Binary Pattern,LBP)相結合提取表情特征,在CK+[9]和JAFFE[10]數據集最高平均準確率取得82.0%與97.2%,傳統紋理特征提取易受光照、遮擋等環境干擾影響。隨著卷積神經網絡(Convolutional Neural Networks,CNN)興起,有學者提出將CNN特征用于表情識別,通過事先標定標簽提取人臉全局特征迭代回歸并取得不錯的成績[11-15],然而只有人臉全局特征,忽略局部細節特征,從而造成難以區分相似表情,例如驚訝與恐懼。文獻[16]采用高斯拉普拉斯算子(Laplace of Gaussian function,LoG)對眼睛與嘴巴區域細節增強并提取面部全局特征,經后續支持向量機(Support Vector Machines,SVM)分類,采用增強細節以突出局部特征不夠明顯,同時面部全局特征會對局部特征提取產生干擾。文獻[17]采用人臉關鍵點定位并在關鍵點周圍提取適量面部突出塊(Salient Facial Patches,SFP)的 LBP特征,其最高平均準確率在CK+與JAFFE數據集,分別為93.33%與91.8%;文獻[18]在面部68特征點周圍提取8個SFP的Hahn特征并級聯采用SVM分類,最高平均準確率在CK+與JAFFE數據集,分別為91.33%與93.16%。SFP方法突出了表情局部特征,然而現有研究方法SFP選取未有依據,同時忽略了不同表情局部特征的不同比重。根據文獻[19]的研究,面部6類基本表情均有FACS編碼中對應的面部肌肉運動單元AU,其將6類表情AU 細細分類,并通過識別統計AU經后續貝葉斯算法分類表情;然而該方法需要大量識別AU且單個AU識別準確率低。
基于此,筆者提出表情識別算法EAU-CNN:① 該算法在人臉68個特征點基礎上,依據FACS定義將面部細分43個子區域。文中統計了6類基本表情AU產生域,根據產生域與面部器官將子區域歸類到8個局部候選區域AUgi,為SFP選取提供依據,并盡可能避免過多提取不同表情相近面部特征,解決了貝葉斯算法中需大量識別AU與單個AU識別率低的問題;② 為均衡提取各個局部候選區域特征,EAU-CNN采取8個并行的特征提取分支,并按照局部候選區域AUgi面積比例支配不同維全連接層。分支的輸出按照注意力自適應地連接,以突出不同局部候選區域的重要程度,最終經Softmax函數將表情分為7類:中性、憤怒、厭惡、恐懼、高興、悲傷、驚訝。其平均準確率在CK+與JAFFE數據集分別取得99.85%與96.61%,相比CNN[20]方法,提升了4.09%與22.03%,相比M-Scale[16]方法,提升了1.61%與11.86%,相比S-Patches[17]方法,提升了6.01%與10.17%。后續內容分為兩部分:EAU-CNN面部表情識別算法、實驗驗證與分析。
面部肌肉運動形成面部表情,現有做法將其分為45種。表1為部分FACS描述,它可以構成多種表情。根據文獻[19]的研究,面部6類基本表情均有對應的單個或者組合面部肌肉運動單元。如表2所示,憤怒時眉毛會皺在一起、眉宇間出現豎直皺紋、下眼皮拉緊同時抬起或抬不起等,面部肌肉運動單元相應表現為AU4、AU5、AU7、AU23、AU24的其中一種或多種;厭惡時眉毛壓低、上唇抬起、下眼皮下部出現橫紋,面部肌肉運動單元相應表現為AU9、AU17;恐懼時眉毛皺在一起并抬起、上眼瞼抬起、下眼皮拉緊、嘴唇或輕微緊張等,面部肌肉運動單元相應表現為AU4、AU1+AU5、AU5+AU7;高興時眉毛可能會下彎、下眼瞼下邊可能鼓起或出現皺紋、嘴角后拉并抬高、牙齒可能會露出等,面部肌肉運動單元相應表現為AU6、AU12、AU25;悲傷時眉毛內角皺在一起并抬高、嘴角下拉、眼內角上眼皮抬高等,面部肌肉運動單元相應表現為AU1、AU4、AU15、AU17;驚訝時眉毛抬起變高變彎、眉毛下皮膚拉伸、眼睛睜大、上眼皮抬高、下眼皮下落、嘴張開、唇齒分離等,面部肌肉運動單元相應表現為AU5、AU26、AU27、AU1+AU2。

表1 部分AU描述

表2 表情相應AUs
根據FACS定義,對6類基本面部表情的面部肌肉運動單元產生區域統計,發現面部肌肉運動發生區域集中在眉毛、部分額頭、眼睛與面部下半部,對于面部其他部位,如上額、顳部、部分側面等,面部肌肉運動單元未出現在該區域,然而不同表情時該區域特征過于相像,反而會影響整體表情識別準確率。針對該問題,現有方法[18-19]是構建一定數量SFP提取特征做表情識別,然而SFP選取未考慮FACS,所提面部局部特征還不夠突出。為此,根據6類基本表情肌肉運動單元產生區域,將面部劃分為43個特征區域,如圖1所示,并同時按照面部器官眉毛、眼睛、鼻子、嘴巴所在區域,構建8個局部候選區域AUgi,i表示1至8。每個候選區域包含一定特征區域并負責只提取屬于組內的肌肉運動單元特征,分區和候選區域產生表情如表3所示。如圖2(a)所示,AUg1屬于眉毛與眼睛所在區域,是 AU1、AU2、AU5與AU7產生域,包含1、2、5、6、8、9、12、13、40、41、42、43面部特征區域,是憤怒、恐懼、悲傷、驚訝表情產生區域。如圖2(b)所示,AUg2屬于眉毛與印堂所在區域,是AU4產生域,包含1、2、3、4、5、6、8、9、12、13、40、41面部特征區域,是憤怒、恐懼、悲傷表情產生區域。如圖2(c)所示,AUg3屬于橫向鼻子與其附近肌肉所在域,是AU6產生域,包含16、17、18、19、42、43面部特征圖,是高興表情產生區域。如圖2(d)所示,AUg4屬于縱向鼻子與其附近肌肉所在域,是AU9產生域,包含10、11、17、18、22、23面部特征圖,是厭惡表情產生區域。如圖2(e)所示,AUg5屬于鼻子與嘴巴所在域,是AU12、AU15產生域,包含21、22、23、24、25、26、27、28、37面部特征圖,是高興、悲傷、驚訝表情產生區域。如圖2(f)所示,AUg6屬于嘴巴、下巴所在域,是AU25、AU26、AU27產生域,包含25、26、27、28、29、30、31、32、33、34、35、36、37面部特征圖,是高興、驚訝表情產生區域。如圖2(g)所示,AUg7屬于下巴所在域,是AU17產生域,包含29、30、31、32、33、34、35、36面部特征圖,是厭惡、悲傷表情產生區域。如圖2(h)所示,AUg8屬于嘴巴所在域,是AU23、AU24產生域,包含26、27、29、30、31、32、37面部特征圖,是憤怒表情產生區域。

圖1 面部區域分區(黑色數字為劃分區 域、白色數字為68個特征點)

圖2 局部區域示意圖

表3 AU組包含區域
EAU-CNN在人臉68個特征點與上述分區基礎上,組成的8個局部候選區域AUgi,采用最小矩形框思想截取圖像,如圖3所示。

圖3 最小矩形區域示意
整體算法流程如圖4所示,每個AUgi圖像歸一化至不同固定大小,經過各并行的CNN網絡提取特征后,拼接為4 096維的全連接層。拼接的全連接層乘以不同表情權重值,以突出不同表情局部特征,經過后續特征提取與Softmax函數將表情分為7類:中性、憤怒、厭惡、驚訝、高興、悲傷、恐懼。

圖4 整體算法流程圖
AUg1包含左眼與右眼兩塊區域,筆者將兩塊區域拼接一起歸化到45×90像素,經過3個卷積層與池化層提取特征后,生成64通道的3×9大小特征圖,并按照各個AUgi的圖像面積比例支配輸出129維全連接層。AUg2將圖像歸化到45×220像素,同樣經過3個卷積層與池化層,生成64通道3×25大小特征圖,按照局部候選區域面積比例支配輸出290維全連接層。AUg3將圖像歸化到110×220像素,經過5個卷積層與4個池化層,生成64通道5×11大小特征圖,并按照面積比例輸出716維全連接層。AUg4將圖像歸化到140×170像素,經過5個卷積層與4個池化層,產生64通道6×8大小特征圖,并按照面積比例輸出704維全連接層。AUg5將圖像歸化到120×220像素,經過5個卷積層與4個池化層,生成64通道5×11大小特征圖,按照面積比例輸出782維全連接層。AUg6將圖像歸化到110×220像素,經過5個卷積層與4個池化層,生成64通道5×11特征圖,按照面積比例輸出717維全連接層。AUg7將圖像歸化到80×190像素,經過5個卷積層與4個池化層,生成64通道3×10大小特征圖,按照面積比例輸出451維全連接層。AUg8將圖像歸化到80×130像素,經過3個卷積層與池化層,生成64通道8×14特征圖,按照面積比例支配758維全連接層。將各個候選區域輸出拼接得到4 096維全連接層。
為突出不同表情局部特征,拼接所得4 096維全連接層乘以不同表情權重值Wfj,j表示1到7種不同表情。根據上述分區,文中定義G表示局部候選區域的個數,Cgi代表表情發生時產生面部肌肉運動單元的AUgi個數,i表示1到G,定義SCgi表示表情發生時產生面部肌肉運動單元的AUgi總面積和,定義Sm表示單個AUgi的面積,其中m屬于1到Cgi,定義b為表情權重偏置,那么可得表情突出增強因子α,如式(1)所示。對于中性表情,均未有面部肌肉運動單元分布在候選區域,不需要特別突出某個局部候選區域AUgi特征,因此,各個候選區域輸出全連接層權重參數保持不變,可得中性表情權重值Wf1為[1…,1…,1…,1…,1…,1…,1…,1…]T。憤怒表情時,面部肌肉運動單元在候選區域分布為AUg1、AUg2、AUg8,為突出該區域特征,包含發生面部肌肉運動單元的候選區域,乘以增強因子α權重值,未發生候選區域權重值保持不變,可得憤怒表情權重值Wf2為[α…,α…,1…,1…,1…,1…,1…,α…]T。厭惡表情時,面部肌肉運動單元在候選區域分布為AUg4、AUg7,候選區域突出權重值如上所述,可得厭惡表情權重值Wf3為[1…,1…,1…,α…,1…,1…,α…,1…]T。恐懼表情時,面部肌肉運動單元在候選區域分布為AUg1、AUg2,其表情權重值Wf4為[α…,α…,1…,1…,1…,1…,1…,1…]T。高興表情時,面部肌肉運動單元在候選區域分布為AUg3、AUg5、AUg6,高興表情權重值Wf5為[1…,1…,α…,1…,α…,α…,1…,1…]T。悲傷表情時,面部肌肉運動單元在候選區域分布為AUg1、AUg2、AUg5、AUg7,悲傷表情權重值Wf6為[α…,α…,1…,1…,α…,1…,α…,1…]T。驚訝表情時,面部肌肉運動單元在候選區域分布為AUg1、AUg6,可得其表情權重值Wf7為[α…,1…,1…,1…,1…,α…,1…,1…]T。定義各個標簽實際輸出為y,W為候選區域全連接層權重,定義C代表表情類別,那么可得到EAU-CNN表情識別算法損失函數A為
(1)
(2)
選用CK+與JAFFE公開表情數據集進行實驗驗證。CK+數據集由卡耐基梅隆大學LUCEY等[9]于2010年發布,其中包含123個人的表情序列,每組表情序列是從表情的中性到表情表達的最大程度。JAFFE[10]數據集在九州大學心理學系拍攝,包含由10個日本女模特構成的7個面部表情(6個基本面部表情+1個中性)的213個圖像。為了驗證算法的準確性,分別選取數據集中6個基本面部表情外加中性表情共組成7類,實驗采用GPU為RTX2080Ti、CPU為i5-9500、內存為16 GB、硬盤為256 GB固態硬盤,并搭建所需的軟件環境:Ubuntu16.04、CUDA10.1、Cudnn7.5、Opencv3.4.3、Pytorch1.2.0,同時根據數據集特點,按照類別內訓練集與測試集7∶1的比例劃分訓練數據與測試數據。實驗所用CK+數據集除中性表情外,其他6類表情每個序列均取最大幅度表情5張。采用的CK+圖像個數為5 430張,其中中性1 350、憤怒570、厭惡895、恐懼280、高興910、悲傷275、驚訝1 150,7個情緒類別依據類別內7∶1等比例劃分數據集。CK+的訓練數據與測試數據圖像分別為4 725張與705張。對于JAFFE數據集實驗所采用圖像個數為213張,其中中性30、憤怒30、厭惡29、恐懼32、高興31、悲傷31、驚訝30,7個情緒類別依據類別按照7∶1等比例劃分數據集。JAFFE的訓練數據與測試數據圖像分別為154張與59張。
為排除因訓練集圖像過少導致算法過擬合進而造成平均準確率不精確,將上述CK+與JAFFE數據集合并同時融入互聯網獲取與自行采集的圖像,組成新的數據集命名為融合情感數據集(Fusion Emotion Datasets,FED)。該數據集與EAU-CNN訓練預測代碼均已上傳至github。FED數據集共采用8 123張圖像,其中中性 1 460、憤怒1 000、厭惡1 324、恐懼712、高興1 341、悲傷706、驚訝1 580,并按照各個分類內訓練集與測試集7∶1劃分數據集,得到訓練集與測試集圖像分別為7 049與1 074張。假設T代表樣本識別正確的個數,F代表樣本識別錯誤的個數,可得出整體與各個分類平均準確率p的計算公式:
(3)
為了驗證AUgi選取是否合理,文中選取另外2組局部候選區域進行對比驗證,選取區域如表4所示。如圖5所示,經測試文中所劃分的區域在CK+數據集的平均準確率達到99.85%,相比于選取的特征區域1與特征區域2,分別高出6.83%與9.33%精度;在FED數據集的平均準確率為98.60%,相比于選取的特征區域1與特征區域2,分別高出8.28%與8.92%精度;在JAFFE數據集的平均準確率達到96.61%,相比于選取的特征區域1與特征區域2,分別高出11.87%與18.65%精度。可以發現,相比于面部器官區域簡單選取SFP區域,根據FACS定義與面部器官區域選取的SFP區域,對平均準確率的提升起到關鍵作用。

圖5 不同候選區域精度圖

表4 對比局部候選區域特征組成
為了驗證不同表情權重值Wfj對于表情識別準確率的影響,選取不使用增強因子α、使用增強因子α并采用不同偏置b的方式驗證算法平均準確率。對于偏置b選取0、1、2、3、4,共5種不同偏置,如圖6所示。對于CK+數據集,當采用偏置b為1時精度最高,達到99.85%的精度,相比未使用表情權重值Wfj高出0.56%。然而偏置并不是越大精度越好,對于偏置為4時,其精度為99.43%,相比未使用權重值提升0.14%,這是因為偏置的增大導致增強因子α變小,接近未使用表情權重值。對于FED數據集,當采用偏置b為1時精度最高,達到98.60%的精度,相比未使用表情權重值Wfj提升1.4%;對于JAFFE數據集,當采用偏置b為0時精度最高,達到96.61%的精度,相比未使用表情權重值Wfj提升5.09%。從實驗可以看出,筆者所采取的不同表情權重值Wfj方法對于平均準確率的提升起到重要作用。

圖6 不同偏置值精度圖
經測試EAU-CNN算法在CK+數據集的平均準確率達到99.85%。如圖7與表5所示,除悲傷分類1張圖像被錯誤識別成中性外,其識別準確率為97.06%,其余6類均實現正確識別,識別準確率達到100%。EAU-CNN算法比CNN[20]算法識別平均準確率提高4.05%,每個分類識別準確率均超過CNN算法的,其中單個分類準確率最高提升類為悲傷分類,提升14.92%;相比于LeNet-5[21]算法平均準確率提高16.09%,每類識別準確率均超過LeNet-5的,其中單個分類準確率最高提升類為中性,提升34.63%。EAU-CNN算法比M-scale[16]算法平均準確率提高1.61%,除高興分類識別準確率等于M-scale算法的,均為100%,其余分類識別準確率均超過M-scale的,其中單個分類準確率最高提升類為恐懼,提升4.67%;相比于S-Patches[17]算法平均準確率提高6.01%,每類識別準確率均超過S-Patches算法的,其中單個分類識別準確率最高提升類為憤怒,提升12.02%。

表5 EAU-CNN CK+數據集表情識別分布表 %

圖7 不同算法CK+數據集準確率
如圖8與表6所示,除厭惡分類1張圖像被錯誤識別為憤怒,其識別準確率達到87.50%;恐懼分類1張圖像被錯誤識別中性,其識別準確率達到75.00%,其他分類識別準確率均達到100%。EAU-CNN算法在JAFFE表現相比于CNN算法平均準確率提高22.03%,除厭惡類別與CNN算法識別準確率相等,為87.50%,其他分類識別準確率均超過CNN,其中分類準確率最高提升類為悲傷,提升30%;相比于LeNet-5算法平均準確率提高25.42%,每個分類識別準確率均超過LeNet-5算法的,其中分類準確率最高提升類為恐懼分類,提升50%。對于M-scale算法,EAU-CNN平均準確率提升11.86%,除厭惡類別準確率與CNN算法識別準確率相等,為75.00%,其他分類識別準確率均超過M-scale算法的,其中分類準確率最高提升類為中性類別,提升22.22%。相比于S-Patches算法,EAU-CNN算法平均準確率提升10.17%,除恐懼與驚訝分類準確率與其相等,為75.00%和100%,剩余分類識別準確率均超過S-Patches算法的,分類準確率最高提升類為悲傷分類,提升20%。EAU-CNN在JAFFE數據集的識別效果圖如圖10所示。

圖8 不同算法JAFFE數據集準確率

表6 EAU-CNN JAFFE數據集表情識別分布表 %
EAU-CNN算法CK+數據集識別效果圖如圖9所示。經測試EAU-CNN算法在JAFFE數據集的平均準確率達到96.61%。為了測試算法的魯棒性,在FED數據集上,采用K折線交叉驗證。該做法將全部圖像劃分K段,K次訓練時保留第K段作為測試集,其余段作為訓練集,求得K次訓練測試集的準確率均值。根據訓練集與測試集劃分通常做法,取K值為8,全部圖像按照類別劃分為8段。如表7所示,經測試EAU-CNN算法平均準確率達到98.29%,CPU平臺每幀耗時50.25 ms,相比S-Patches算法平均準確率提升6.09%,除厭惡、恐懼分類外,剩余分類準確率均超過S-Patches算法的,耗時增加44.39 ms;相比M-scale算法,平均準確率提升4.54%,所有分類準確率均超過M-scale算法的,耗時增加43.82 ms。EAU-CNN相比CNN算法,平均準確率相差不大,提升1.99%,但耗時縮短1 300.76 ms;相比于STNN算法,平均準確率提升16.31%,耗時增加49.02 ms,所有分類準確率均超過STNN算法。可以發現文中所提表情識別算法,無論在小型數據集還是大型數據集,平均準確率均達到同類表情識別算法中最高且耗時適中。其次,文中算法還具備一定魯棒性,通過在FED數據集交叉驗證,平均準確率仍在同期算法中達到最高。圖11為部分算法對比效果圖,S-Patches算法存在識別錯誤,剩余算法均實現正確識別。

圖9 CK+數據集EAU-CNN算法效果圖 圖10 JAFFE數據集EAU-CNN算法效果圖

表7 算法對比 %

圖11 部分算法效果圖
筆者提出一種新穎的表情識別研究方法。該方法基于面部肌肉運動單元,并行均衡提取局部表征,并按照注意力自適應連接,對提高表情識別準確率起到重要作用。相比其他算法,該算法解決了整體面部特征不突出與SFP方法忽略面部肌肉運動等缺點,同時結合SFP突出局部表征與采用AU分區等優點,在CK+與JAFFE數據集平均準確率達到99.85%與96.61%,相比整體面部特征方法LeNet-5提升16.10%與25.42%,比一般SFP方法S-Patches提升6.06%與10.17%。研究工作中忽略了提取特征后降維,提取大量特征數據將大幅增加訓練時長。特征提取后的降維,將是下一步重點研究工作。