韓天翊,林榮恒
(1.北京郵電大學計算機學院(國家示范性軟件學院),北京 100876) (2.北京郵電大學網絡與交換技術國家重點實驗室,北京 100876)
情感是一系列主觀認知體驗的總稱,是一種心理和生理狀態(tài),是各種感覺和行為的結合. 情感通常與心情、性格等因素相互作用,也會受到激素的影響. 不同的情緒對日常行為會有著不同的導向作用,人們做的每件事都會有不同的情感表達. 了解用戶使用產品時的情感,可以大大提高服務質量和服務效果.
近年來,隨著科學技術的日益發(fā)達,情感識別的效率和準確性均有大幅提升. 情感識別系統(tǒng)能夠幫助客服人員預先了解客戶的情感狀況,提高服務質量,進而提高服務效率和滿意度. 但是,情感識別在單一模態(tài)下很難進一步提高識別準確率,又往往需要使用高性能的GPU,這使得系統(tǒng)的使用范圍很小,很難在現實生活中表現出應有的效果. 因此,有必要減少系統(tǒng)的使用條件,設計一個軟硬件結合的多模態(tài)情感識別系統(tǒng),并行加速計算過程,提高系統(tǒng)識別準確率,讓系統(tǒng)可以在更廣泛的范圍內使用.
本文設計并實現了一種軟硬結合的多模態(tài)情感識別方法,使用語音和面部表情兩個模態(tài),通過梅爾頻率倒譜系數與卷積神經網絡對情感進行識別和分類,同時將語音情感識別遷移到神經網絡計算棒以降低環(huán)境負載,在模態(tài)融合時采用決策層融合的方式來提高識別準確率.
基于音頻的情感識別出現于1972年. Ang等使用決策樹方法進行語音情感識別[1]. Lee等通過結合詞匯和話語來識別情感[2]. 目前廣泛應用于語音情感識別的算法包括SVM、長短期記憶網絡等. Graves等使用長短期記憶網絡對音素進行分類和識別[3]. Eyben等使用雙向長短期記憶網絡進行語音情感識別[4]. 陳闖等提出了一種基于改進遺傳算法優(yōu)化的BP神經網絡進行識別(IAGA-BP)[5].
視頻的情感識別主要依賴于使用者的面部表情. Ekman等提出了一種通過劃分面部區(qū)域的表情編碼系統(tǒng)[6]. 此后,研究人員提出了許多識別面部表情的方法. Zhang使用多層感知機作為分類器[7],Shan等使用LBP特征進行面部情感識別[8]. 由于深度學習技術不需要在分類之前手動提取特征,深度學習技術在面部情感識別中得到了越來越廣泛的應用. Ko結合了針對單個幀的空間特征的卷積神經網絡(CNN)和針對連續(xù)幀的時間特征的長短期記憶網絡(LSTM)[9]. 謝非等提出了一種基于膚色增強和分塊PCA的人臉檢測及表情識別方法[10].
人的聲音和表情可以直接反映人的情感. 在早期的研究中,情感識別往往使用單一模態(tài)數據進行,導致識別精度通常較低. 為了解決單數據識別精度差的問題,Kim等提出了一種同時使用語音和視頻兩種模式的情感識別系統(tǒng),將不同的模態(tài)數據一起使用可以提高系統(tǒng)識別的準確性[11]. Hossain等提出了一種多方向回歸的視聽情感識別系統(tǒng)[12],使用MDR和基于脊波變換的特征,用極限學習機進行分類,獲得的準確率為83.06%. 閆靜杰等提出了一種基于稀疏典型相關分析的特征融合方法,使用表情和語音數據獲得了60.09%的準確率[13]. Jiang等提出了一種使用語音和面部特征來識別情緒的系統(tǒng),使用三態(tài)流DBN模型作為分類器,在eNTERFACE數據庫中,準確率為66.54%[14]. 在Kaya等的研究中,語音信號中的音頻特征、圖像幀中的密集特征以及基于卷積神經網絡的圖像幀特征在評分級別上被融合以識別情緒[15].
梅爾頻率倒譜系數是目前應用于情感識別中重要的聲學特征. 考慮到人類的聽覺特征,即人耳的靈敏度對頻率的感知并不是線性的,將普通頻率轉換為梅爾頻率,定義梅爾頻率如下:
圖1 梅爾頻率倒譜系數提取流程Fig.1 Extraction process of Mel spectrum
梅爾頻率倒譜系數(Mel-frequency cepstral coefficients,MFCC)是在Mel標度頻率域提取出來的倒譜參數,圖1所示為梅爾頻率倒譜系數提取流程.
預加重是為了提高語言的高頻部分,使頻譜變得更加平滑,一般將語音信號通過一個高通濾波器:
H(z)=1-μz-1,
式中,H(z)為傳遞函數;μ為預加重系數,取μ=0.97.為了平滑信號,減弱頻譜泄露,使用漢明窗對信號進行加窗處理:
式中,a的值不同會產生不同的漢明窗,一般情況下取a=0.46.
經過一系列步驟,最終得到MFCC計算公式為:
式中,ml表示濾波器輸出的對數;L是濾波器的個數.
PyAudio庫可在系統(tǒng)中錄制音頻. 在錄音過程中,需要設置每個緩沖區(qū)的幀數、采樣位數、聲道模式及采樣頻率. 在使用過程中,首先實例化PyAudio庫,打開音頻數據流并分別傳入上述4個參數,同時調用Wave庫,不斷從音頻數據流中讀取Chunk寫入文件流,最終得到一個完整的聲音文件. Wavio是一個python庫,可以讀取wav文件,在打開采集到的音頻后,依次對音頻對象進行預加重、分幀、FFT、梅爾濾波等操作,就可以獲得音頻數據的梅爾頻率倒譜系數特征值.
可使用AlexNet卷積神經網絡進行音頻的情感識別[16]. AlexNet的網絡結構包括5個卷積層、3個池化層和3個全連接層. 多個卷積內核可以提取數據源中的不同特征. 在前兩個卷積層后是最大池化層,之后第三、第四和第五卷積層直接相連,在第五個卷積層后是重疊的最大池化層,同時輸出將進入全連接層. 全連接層可以為分類器提供標簽.
為了滿足情感識別過程的環(huán)境要求且并行加速計算過程,讓系統(tǒng)可以在更廣泛的范圍內使用,需要將訓練后的卷積神經網絡運行在Intel神經網絡計算棒上. 為此,需進行一些格式轉換,使得系統(tǒng)可以成功運行. 神經網絡計算棒的數據輸入格式僅接受由OpenVINO工具套件的模型優(yōu)化器生成的網絡中間表示IR,而模型優(yōu)化器可以接收ONNX格式的神經網絡,所以首先需將AlexNet神經網絡生成對應的ONNX格式模型,之后通過模型優(yōu)化器將ONNX格式轉換為網絡中間表示IR. 在轉換模型后,可在神經網絡計算棒中使用推理引擎來預測收集的數據. 此外,可將多線程和異步操作用于預測,以提高神經網絡計算棒的性能.
OpenCV中的VideoCapture類可用來從攝像頭捕獲視頻或讀取圖像序列. 視頻數據從攝像頭拍攝后,每隔幾幀將視頻流中的圖片進行人臉識別,使用Haar特征與級聯分類器可以從圖片中切割人臉表情[17].
Haar特征是基于“塊”的特征,一般分為3類:邊緣特征、線性特征、中心特征和對角線特征. 特征模板內有白色和黑色兩種矩形,并定義該模板的特征值為白色矩形像素和減去黑色矩形像素和,反映了圖像的灰度變化情況. Haar特征值的計算方法是將灰度化的圖像分為黑色和白色兩個區(qū)域,并計算白色區(qū)域W與黑色區(qū)域B的像素值之和的差值,乘以相應的權重系數T,得到i區(qū)域Haar特征值:
積分圖是一種只遍歷一次圖像就可以求出圖像中所有區(qū)域像素和的快速算法,能夠提高圖像特征值計算的效率.對于灰度圖像中的任意一點,其積分圖定義為:
其中,第0行和第0列為0,image(x,y)為點(x,y)處的原始灰度圖.
Adaboost是一種迭代算法,會挑選出一些最能代表人臉的矩形特征,按照加權投票的方式將多個弱分類器構造為強分類器. 將訓練得到的強分類器串聯可以組成一個級聯結構的層疊分類器來提高分類器的檢測速度. 得到識別出的人臉表情后,將切割到的人臉表情圖片中最大的一個經如下轉換后可以作為卷積神經網絡的輸入:
(1)從視頻流找到的最大的人臉圖片格式為ndarray,首先將其轉化成PIL Image類型;
(2)重新設定大小,將輸入的PIL Image大小設置為48;
(3)在PIL Image中心進行剪裁;
(4)隨機水平翻轉給定的PIL Image,翻轉概率為0.5;
(5)將PIL Image格式轉成Tensor格式,大小范圍為[0,1].
在得到Tensor格式的數據后,可以將其導入卷積神經網絡,對表情進行情感識別.
本文利用TensorFlow處理進行視頻數據的情感識別. 視頻識別的網絡由10個卷積層、4個池化層及 2個全連接層組成. 前4個卷積層后是池化層,第五、六卷積層是直接相連的,之后緊跟一個池化層,與之類似,七、八卷積層與九、十卷積層后都緊跟一個池化層. 全連接層可以給分類器提供標簽. 圖2所示為視頻模型的網絡結構.
在預測當前小片段的類別時,可能識別結果與前序結果完全相反. 由于情感一般是連續(xù)和平穩(wěn)的,在大多數情況下不會發(fā)生突變,系統(tǒng)在識別情感時需要結合之前的識別結果.
圖2 視頻模型網絡結構Fig.2 Network structure of video model
數據采集需要分別處理系統(tǒng)輸入的語音流數據與視頻幀數據. 從語音流中提取的梅爾頻率倒譜系數首先被用于卷積神經網絡進行訓練,將訓練后的網絡遷移至神經網絡計算棒,后續(xù)通過OpenVINO推理引擎進行情感識別. 對于視頻幀數據,系統(tǒng)要通過OpenCV對幀進行人臉檢測,將檢測到的人臉輸入卷積神經網絡來識別情感. 系統(tǒng)的兩種模式會同時進行工作,圖3所示為情感識別系統(tǒng)整體的結構框圖.
圖3 情感識別系統(tǒng)結構框圖Fig.3 Module structure of the multimodal emotion recognition system
圖4 決策層融合基本流程Fig.4 The basic process of decision-level fusion
在單模態(tài)情感識別結束后,可得到分別由語音和視頻識別的結果. 為了提高系統(tǒng)總體的準確率,需融合兩種模態(tài). 多模態(tài)融合通過不同模態(tài)之間的關聯性,將多個角度的數據結合,來提高總體識別準確率. 決策層融合[18]是在提取不同模態(tài)的數據后,各自獨立地進行情感分類,最后利用兩種模態(tài)的結果得到多模態(tài)的識別結果. 本文中決策層融合采用加權求和的方式:
p=w0·paudio+w1·pvideo,
式中,w0和w1分別為語音和視頻情感識別的權重,且w0+w1=1.
考慮到同一種感情不同人說話會有不同的表現形式,而人的表情并不會因為人的不同而相差甚遠,因此對于視頻數據情感識別的權重要高于語音數據. 圖4顯示了決策層融合的基本流程.
為了測試系統(tǒng)的有效性,多模態(tài)情感識別系統(tǒng)需檢查每個模塊的輸入和輸出,包括功能測試和非功能測試. 計算機的配置為i7-8550u,mx150,16G. 系統(tǒng)的Python開發(fā)環(huán)境為Python3.7.3,系統(tǒng)版本為 Windows10 1903. 計算機中裝有OpenVINO R2020.2套件,并已進行配置. 在此基礎上設計了系統(tǒng)的測試用例,測試用例涵蓋了每個模塊的功能. 經測試顯示,所有結果均與預期相同.
系統(tǒng)對開心、生氣與正常3種表情進行識別. 語音識別模型使用營業(yè)廳通話錄音作為數據集. 數據集按照8∶2的比例隨機劃分為訓練集與測試集. 使用測試集對語音模型測試,其分類準確度為74.5%. 同時,為了測試神經網絡計算棒對系統(tǒng)性能的影響,選擇了不同長度的音頻文件進行測試.
表1顯示了對于相同時長的音頻在不同硬件上的運行時間,可以發(fā)現,神經網絡計算棒的運行時間與高性能CPU相似,可以在性能較差的運行環(huán)境中保持運行速度.
視頻模型的數據集結合了Fer2013、CK+和GENKI數據集,訓練集和測試集按8∶2進行劃分,使用支持向量機和深度神經網絡作為基線算法. 實驗結果如表2所示,卷積神經網絡識別準確率為78.62%,召回率77.98%,優(yōu)于支持向量機和深度神經網絡的識別準確率. 圖5顯示了面部表情的混淆矩陣. 取w0=0.3,w1=0.7,系統(tǒng)經過決策層融合,準確率提升了3.4%. 系統(tǒng)測試效果如圖6所示. 相比于文獻[13]和[19],以及多流隱馬爾可夫模型[14]和異步DBN模型[14],本文方法可以得到相似或更高的準確率.
表2 不同方法對情感的識別結果Table 2 Recognition results of different methods
表1 不同硬件所需時間的對比Table 1 Comparison table of time for different hardware
圖5 面部表情識別結果Fig.5 Recognition results of facial expressions
圖6 系統(tǒng)效果示意圖Fig.6 The schematic diagram of the system
為了測試系統(tǒng)的有效性,多模式情感識別系統(tǒng)需要檢查每個模塊的輸入和輸出,包括功能測試和非功能測試. 該系統(tǒng)基于瀏覽器/服務器架構模式,系統(tǒng)非功能測試主要對兼容性和連接速度進行測試. 兼容性測試是指系統(tǒng)對瀏覽器的支持. 經測試,該系統(tǒng)功能無明顯異常,在主流瀏覽器中具有良好的兼容性,系統(tǒng)界面可以順利打開,沒有明顯的延遲和滯后.
針對傳統(tǒng)情感識別系統(tǒng)準確率較低和往往需要高性能環(huán)境的問題,本文設計和實現了一種軟硬結合的多模態(tài)情感識別系統(tǒng)以降低環(huán)境負載. 語音情感識別首先對每句語音進行語音信號預處理,提取語音的梅爾頻率倒譜系數特征,將卷積神經網絡遷移至神經網絡計算棒對其進行情感識別分類. 視頻情感識別使用Haar特征與級聯分類器從圖片中切割人臉表情,通過卷積神經網絡對表情進行識別和分類. 實驗結果表明,本研究采用的軟硬結合的多模態(tài)情感識別方法具有較高的識別準確率,能夠在性能較差的運行環(huán)境中保持運行速度.