衛(wèi)文韜,李亞軍
(南京理工大學 設計藝術與傳媒學院,南京 江蘇 210094)
手是人體最靈活的肢體,手勢識別系統(tǒng)將用戶的手勢動作轉化為對設備的指令,是實現人與設備自然、精準溝通和交流的重要途徑之一。在眾多手勢識別技術中,基于表面肌電信號(surface Electromyography, sEMG)的手勢識別(簡稱“肌電手勢識別”)技術憑借其對用戶手部運動意圖較強的理解能力、較好的可穿戴性以及不受光照條件和遮擋影響的特性,被廣泛應用于面向智能假肢[1]、工業(yè)機器人[2]、自然人機交互[3]等領域的肌電控制系統(tǒng)中,并有諸如Myo智能交互臂環(huán)、CTRL-labs臂環(huán)等研制成功并面向消費市場的肌電手勢識別與控制套件,具有十分重要的研究價值和廣闊的發(fā)展前景。
隨著大規(guī)模公開表面肌電數據集樣本量的增加和深度機器學習技術的發(fā)展,本領域最新研究工作開始聚焦以深度神經網絡為代表的特征學習方法[4],其可以通過多重非線性變換,從大量輸入數據樣本中自動學習高層的抽象特征[5],因此可以在一定程度上擺脫時域、頻域或時頻域信號特征的手工提取和選擇過程,實現“端到端”的模式識別。另一方面,由于表面肌電信號的隨機性、不穩(wěn)定性以及信號采集過程中產生的各種噪聲干擾,端到端深度神經網絡模型在肌電手勢識別任務中的性能依然有較大的提升空間[6]。因此,研究者嘗試在相關工作中手工提取時域、頻域和時頻域信號特征,作為深度神經網絡模型的輸入進行肌電手勢識別。如ZHAI等[7]通過快速傅里葉變換從表面肌電信號提取信號頻譜輸入卷積神經網絡(Convolutional Neural Network, CNN)模型進行手勢識別,識別49類手勢動作的準確率為78.7%;SHEN等[8]提取多種時域、頻域以及時頻域特征并轉化為圖像,作為堆疊CNN模型的輸入進行肌電手勢識別,識別40類手勢動作的準確率達到72.1%;WEI等[9]手工提取兩種時頻域特征集以及一個包含時域、頻域特征的經典Phinyomark特征集,并轉化為圖像,作為CNN模型的輸入,進行肌電手勢識別,識別50類手勢動作的準確率達到83.7%。上述方法基于手工信號特征所提供的豐富領域知識實現了更高的手勢識別準確率,卻在一定程度上忽視了CNN模型的端到端特征學習能力,使系統(tǒng)難以在手工特征提取所需要的額外計算開銷和手勢識別準確率之間取得平衡。
針對上述問題,本文提出一種雙流CNN模型,其兩個CNN分支分別從原始表面肌電信號轉化的圖像和離散小波變換系數轉化的圖像中學習高層特征,并通過一個高層特征融合模塊對兩個分支學習得到的高層特征進行融合,融合后的高層特征被輸入分類器中進行手勢識別。本文將傳統(tǒng)特征工程方法和基于CNN的特征學習方法相結合,在肌電手勢識別過程中既利用了離散小波變換系數所提供的表面肌電信號時頻域信息,也利用了CNN從原始表面肌電信號中通過特征學習得到的高層卷積特征。在公開數據集上的實驗結果表明,相比已有使用多種手工信號特征作為輸入的CNN模型[9],本文提出的雙流CNN模型僅使用一種手工信號特征和原始表面肌電信號作為輸入,即可獲得更高的手勢識別準確率。
小波變換(Wavelet Transform, WT)是一種通過帶有伸縮和平移量參數的小波基函數對原始信號進行多尺度分解的信號時頻分析方法。相比連續(xù)小波變換(Continuous Wavelet Transform, CWT),離散小波變換(Discrete Wavelet Transform, DWT)可直接應用于表面肌電信號等離散采樣信號,不需要進行額外的插值連續(xù)化處理,因此所需的計算開銷更低,更適用于肌電控制系統(tǒng)[10]。離散小波變換通過基于小波基函數構建的高通濾波器G(h)和低通濾波器G(l)將原始離散采樣信號分解為高頻(細節(jié))系數Wh和低頻(近似)系數Wl,實現對信號的多尺度分解。
本文首先對多通道表面肌電信號進行滑動窗口采樣,隨后對每個采樣窗口內多通道表面肌電信號的每一通道信號基于Daubechies 1小波基函數進行多尺度的一維離散小波變換分解。
本文將小波變換尺度k設置為?k=log2N?,其中N為以幀為單位的滑動采樣窗口長度,將每個通道表面肌電信號在所有k個小波變換尺度下的高頻系數以及在第k個小波變換尺度下的低頻系數拼接為一個包含M個元素的一維向量,作為從該通道表面肌電信號中提取的小波變換系數向量。當N=400時,有k=8,M=200+100+50+25+13+7+4+2+1+1=403。最終每個采樣窗口內所有C通道(C為采集表面肌電信號所使用的肌電傳感器數量)的表面肌電信號通過離散小波變換分解可得到一個C×M的小波變換系數矩陣,并通過歸一化操作將該矩陣轉化為離散小波變換系數(Discrete Wavelet Transform Coefficients, DWTC)圖像。如圖1所示為在對NinaPro數據集第2個子集第3名被試第2類手勢動作第2次重復的表面肌電信號進行長度為400幀(N=400)的連續(xù)滑動窗口采樣后,根據上述過程生成的連續(xù)4幀(第300~303幀)DWTC圖像。
雙流深度神經網絡是近年來在基于計算機視覺技術的人體動作和行為識別領域應用較為廣泛的深度神經網絡模型結構之一,例如張小俊等[11]在基于視頻的人體動作識別中將輸入數據分為時間數據流和空間數據流,并使用雙流的三維CNN模型分別從時間數據流和空間數據流中提取時間域和空間域信息。
本文從每個采樣窗口內的多通道表面肌電信號提取DWTC圖像,同時將每個采樣窗口內的多通道表面肌電信號轉化為表面肌電(sEMG)圖像,并將sEMG圖像流和DWTC圖像流分別作為雙流CNN模型兩個分支的輸入進行高層特征的學習,并最終通過高層特征融合模塊對兩個CNN分支的輸出進行融合。如果用x表示一個N幀采樣窗口里的C通道表面肌電信號,上述過程可以由式(2)描述:
y=Hf(Hs(x;θs),Hw(W;θw);θf),
x∈N×C,W∈M×C。
(1)
其中:y為CNN模型最終輸出的高層特征;W為從x中提取的DWTC圖像;Hs為用于處理sEMG圖像流的CNN分支;θs為Hs的參數;Hw為用于處理DWTC圖像流的CNN分支;θw為Hw的參數;Hf為用于融合兩個CNN分支輸出特征的高層特征融合模塊;θf為Hf的參數。Hs和Hw在訓練過程中保持參數的相互獨立。
本文提出的用于肌電手勢識別的雙流CNN結構如圖2所示,其中用于處理DWTC圖像流的CNN分支由2個卷積層和2個局部連接層構成,每個卷積層均采用2×2的二維濾波器(卷積核)對DWTC圖像進行卷積,每個卷積層生成的卷積特征圖數量均為64。2個卷積層之后是2個采用1×1濾波器的局部連接層,每個局部連接層生成的特征圖數量均為64。相比卷積層,局部連接層在輸入圖像不同位置進行特征提取的濾波器之間不共享權值,因此對圖像的局部特征具有更好的學習能力。用于處理sEMG圖像流的CNN分支結構參考了在肌電手勢識別中應用較為廣泛的GengNet結構[12],其包含2個卷積層和2個局部連接層,每個卷積層均采用3×3的二維濾波器,每個卷積層生成的卷積特征圖數量均為64,2個卷積層之后是2個采用1×1濾波器的局部連接層,每個局部連接層生成的特征圖數量均為64。兩個CNN分支輸出的高層特征圖像經過特征扁平化(flatten)操作后,輸入高層特征融合模塊進行融合。
對兩個CNN分支的每一個卷積層和局部連接層,應用深度學習領域應用較為廣泛的批標準化(Batch Normalization, BN)[13],并設置ReLU(rectified linear unit)非線性激活函數[14]。其中批標準化的主要目的是對每一批次的輸入數據樣本進行標準化,避免CNN中各層參數變化引發(fā)數據分布變化問題,而ReLU非線性激活函數主要通過對神經元輸入的非線性變換來避免梯度消失問題并加快收斂速度。此外,對每個分支第二層局部連接層設置隨機失活(dropout)正則化[15],以避免過擬合現象的發(fā)生。
本文提出如圖3所示高層特征融合模塊,對經過扁平化處理的兩個CNN分支輸出的高層特征進行融合,其結構具體描述如下:
高層特征融合模塊包含兩個神經網絡分支,每個分支均由兩個全連接層構成。其中:第1個分支兩個全連接層的神經元數量分別為512和128,該分支的輸入為sEMG圖像流所對應CNN分支輸出的扁平化高層特征;第2個分支兩個全連接層的神經元數量分別為1 024和512,該分支的輸入為sEMG圖像流所對應CNN分支輸出的扁平化高層特征與DWTC圖像流所對應CNN分支輸出的扁平化高層特征拼接而成的特征向量。兩個分支所輸出的特征向量經過拼接后輸入一個神經元數量等于待識別手勢類別數的G-way全連接層,G-way全連接層的輸出被作為Softmax分類器的輸入,進行手勢識別。
在上述高層特征融合模塊中,雙流CNN兩個分支從sEMG圖像流與DWTC圖像流分別學習得到的高層特征進行了兩次特征層融合[16],從而實現了兩個數據流之間更為充分和頻繁的信息交互和傳遞。
采用隨機梯度下降法(Stochastic Gradient Descent, SGD)訓練神經網絡,批數據量(batch size)設置為1 000,迭代次數設置為28。為加速收斂,采用了學習率衰減(decay)策略,即初始學習率設置為0.1,在第16次迭代和第24次迭代時分別將學習率除以10。對所有采用隨機失活正則化的神經網絡隱層,其隨機失活的神經元比例為65%。
實驗采用AMAX DevMax401工作站進行,其配置為英特爾I7 8700K處理器,2塊英偉達GeForce GTX1080Ti顯卡,128 GB內存,神經網絡訓練和測試所涉及計算主要通過顯卡的GPU完成。離散小波變換的實現基于PyWavelets小波分析庫,CNN的實現基于MxNet框架,程序編寫語言為Python。
選取大規(guī)模手勢動作基準數據集NinaPro[17]的第2、3、4號子數據集的表面肌電數據進行實驗。其中NinaPro 2號數據集(記作“NinaProDB2”)包含從40名健康被試采集的50類手勢動作12通道表面肌電信號;NinaPro 3號數據集(記作“NinaProDB3”)包含從11名前臂截肢的殘疾人被試采集的50類手勢動作12通道表面肌電信號,參考WEI等[9]使用該數據集進行肌電手勢識別實驗的配置,剔除了部分存在通道數量不全和動作數量不全情況的被試數據;NinaPro 4號數據集(記作“NinaProDB4”)包含從10名健康被試采集的52類手勢動作12通道表面肌電信號。上述3個數據集中,每名被試所完成的每類手勢動作均被重復6次,表面肌電信號采樣率為2 000 Hz,手勢動作的詳細定義和圖片在ATZORI等[17]的工作中有詳細說明。
使用截斷頻率為1 Hz的一階Butterworth低通濾波器對表面肌電信號進行濾波處理,并使用滑動采樣窗口對表面肌電信號進行窗口化采樣。ENGLEHART等[18]在對肌電控制系統(tǒng)的早期研究中指出,肌電控制系統(tǒng)的控制延遲不應大于300 ms,故主要采用200 ms長度的滑動采樣窗口以滿足這一約束,滑動采樣窗口的移動步長為10 ms。
在實驗中,本文使用手勢識別準確率(accuracy)作為主要指標評估所提出模型,對第i名被試而言,其手勢識別準確率Ai的計算公式為:
(2)
為便于性能對比,采用了與在NinaPro數據集上開展肌電手勢識別實驗的相關工作[6,9,12,19]相一致的被試內(intra-subject)手勢識別測試方法,對NinaPro數據集中每一名被試分別進行手勢識別測試,得到手勢識別準確率,最終深度神經網絡模型的手勢識別準確率為所有n名被試手勢識別準確率{A1,A2,A3,…,An}的平均值。在對每一名被試的手勢識別測試中,深度神經網絡模型的訓練方法描述如下:選取該名被試所有數據樣本中2/3的數據樣本作為訓練數據集,剩余1/3的數據樣本作為測試數據集。其中訓練集和測試集數據樣本的選取原則描述如下:將該被試每種手勢動作6次重復中第1、3、4、6次重復的表面肌電信號數據樣本作為訓練數據集,第2和第5次重復的表面肌電信號數據樣本作為測試數據集。為保證深度神經網絡模型訓練數據樣本的數量,避免過擬合現象的發(fā)生,本文參考相關工作[6,9,12,19],使用所有被試的訓練數據樣本作為預訓練數據集對深度神經網絡模型進行了預訓練,即在每一名被試的手勢識別測試中,深度神經網絡模型使用預訓練得到的預訓練模型參數進行初始化。
3.4.1 雙流CNN與單流CNN的對比實驗
首先將所提出雙流CNN模型的肌電手勢識別準確率與在其每個分支結構基礎上構建的單流CNN模型進行對比,驗證其雙流結構的有效性。對比的兩種單流CNN結構具體描述為:
(1)單流CNN模型1(記作“單流CNN_1”)的網絡結構依次為2個卷積層、2個局部連接層、神經元數量為1 024的全連接層、神經元數量為512的全連接層、G-way全連接層、Softmax分類器。每個卷積層均采用2×2的濾波器(卷積核),每個卷積層生成的卷積特征圖數量均為64,局部連接層均采用1×1的濾波器,每個局部連接層生成的特征圖數量均為64。
(2)單流CNN模型2(記作“單流CNN_2”)的網絡結構與單流CNN_1網絡結構的唯一區(qū)別在于其兩個卷積層每層均采用3×3的濾波器(卷積核)。單流CNN_1和單流CNN_2的輸入均為sEMG圖像和DWTC圖像拼接而成的圖像。
雙流CNN模型、單流CNN_1以及單流CNN_2在3個數據集中的肌電手勢識別準確率如表1所示。
表1 雙流CNN與單流CNN肌電手勢識別準確率對比 %
由表1可見,在同樣使用sEMG圖像和DWTC圖像作為輸入的前提下,本文所提出雙流CNN模型的手勢識別準確率顯著超過了兩種單流CNN模型,證明本文所提雙流CNN模型相比傳統(tǒng)單流CNN模型具有更優(yōu)的肌電手勢識別性能。
3.4.2 輸入圖像的對比實驗
為驗證所提出方法使用DWTC圖像結合sEMG圖像進行肌電手勢識別的有效性,將所提出方法與以下兩種方法進行對比:
(1)將sEMG圖像輸入單流CNN模型進行手勢識別,其中單流CNN結構與所提出雙流CNN模型用于處理sEMG圖像流的CNN分支結構相同,依次為2個卷積層、2個局部連接層、神經元數量為512的全連接層、神經元數量為128的全連接層、G-way全連接層、Softmax分類器。每個卷積層均采用3×3的濾波器(卷積核),每個卷積層生成的卷積特征圖數量均為64,局部連接層均采用1×1的濾波器,每個局部連接層生成的特征圖數量均為64。
(2)將DWTC圖像輸入單流CNN模型進行手勢識別,其中單流CNN結構與所提出雙流CNN模型用于處理DWTC圖像流的CNN分支結構相同,依次為2個卷積層、2個局部連接層、神經元數量為1024的全連接層、神經元數量為512的全連接層、G-way全連接層、Softmax分類器。每個卷積層均采用2×2的濾波器(卷積核),每個卷積層生成的卷積特征圖數量均為64,局部連接層均采用1×1的濾波器,每個局部連接層生成的特征圖數量均為64。
本文方法、僅基于DWTC圖像的方法以及僅基于sEMG圖像的方法在3個數據集中的肌電手勢識別準確率如表2所示。
表2 不同輸入圖像的肌電手勢識別準確率對比 %
由表2可見,本文所提出結合DWTC圖像與sEMG圖像的方法在手勢識別準確率方面顯著超過了另外兩種方法。
3.4.3 深度神經網絡模型的對比實驗
表3對比了本文所提出雙流CNN模型與近年來肌電手勢識別相關研究工作[7,9,19,21-22]所提出的深度神經網絡模型在3個數據集中基于150 ms與200 ms兩種不同長度滑動采樣窗口所獲得的肌電手勢識別準確率。同時,還通過多數原則投票(majority voting)計算并對比了基于整段手勢動作的手勢識別準確率,其中多數原則投票可描述為:每段手勢動作重復的標簽為分類器對其中所有200 ms滑動采樣窗口的識別結果中出現次數最多的預測標簽。
由表3可見,所提出雙流CNN模型在3個數據集中的肌電手勢識別準確率均超越了相關工作[7,9,19,21-22]所提出的深度神經網絡模型。當滑動采樣窗口長度為150 ms時,所提模型在NinaProDB2、NinaProDB3、NinaProDB4上識別所有手勢動作的準確率分別為83.9%、66.4%、69.1%。當滑動采樣窗口長度為200 ms時,所提方法在NinaProDB2、NinaProDB3、NinaProDB4上識別所有手勢動作的準確率分別為84.9%、67.8%、71.6%。當應用多數原則投票計算基于整段手勢動作的識別準確率時,所提方法在NinaProDB2、NinaProDB3、NinaProDB4上識別所有手勢動作的準確率分別為97.9%、81.3%、82.4%。
在對比的深度神經網絡模型中,WEI等[9]提出的多視角CNN(Multi-View CNN, MV-CNN)模型所取得的手勢識別準確率與本文所提出雙流CNN模型最為接近。MV-CNN的輸入為包含離散小波變換系數、離散小波包變換系數、Phinyomark特征集[20]在內的多種手工信號特征集通過肌電信號通道重排列所構成的圖像,用于提取多種信號特征的額外計算開銷會增加計算時間、降低手勢識別效率。相比MV-CNN,本文所提出雙流CNN模型僅使用離散小波變換系數與原始多通道表面肌電信號所轉化的圖像作為輸入即實現了更高的手勢識別準確率,在肌電手勢識別精度和效率上均優(yōu)于MV-CNN。
面向高性能的肌電控制系統(tǒng),本文提出一種基于雙流CNN的肌電信號手勢識別方法,其特點在于將傳統(tǒng)特征工程方法與基于CNN的特征學習方法相結合,將表面肌電信號和包含信號時頻域信息的信號離散小波變換系數轉化為圖像,分別輸入雙流CNN模型的兩個分支學習高層特征,并通過高層特征融合模塊實現了兩個數據流高層特征之間更為充分和頻繁的信息交互與傳遞。在3個大規(guī)模手勢動作基準數據集中的實驗結果證明了雙流CNN模型結構的有效性,以及使用表面肌電信號結合信號離散小波變換系數進行手勢識別的有效性,同時也表明本文所提出雙流CNN模型相較于近年來肌電手勢識別相關工作[7,9,19,21-22]所提出的深度神經網絡模型可實現更高的手勢識別準確率。
為便于與相關工作進行手勢識別性能對比,本文在大規(guī)模公開手勢動作基準數據集中進行的實驗采用了一種被本領域相關工作[6,9,12,19]所廣泛采用的手勢識別測試方法。然而,該測試方法依然屬于一種被試內測試方法,即訓練數據集和測試數據集來自于同一被試。在實際應用場景中,還可能出現訓練數據集和測試數據集來自于不同被試或不同數據采集會話的情景,因此下一步將嘗試使用被試間測試方法對所提出方法進行進一步的測試和優(yōu)化,從而使所提方法能夠適用于真實的應用環(huán)境。