楊 晶,李書杰,劉曉平
(合肥工業(yè)大學 計算機與信息學院,安徽 合肥 230601)
人體骨骼運動數(shù)據(jù)在游戲設(shè)計[1-2]、影視制作、體育訓練和醫(yī)療康復等領(lǐng)域得到了廣泛的應用。人們可以通過高精度運動捕獲系統(tǒng),如Vicon光學運動捕捉系統(tǒng)和Xsens傳感器運動捕捉系統(tǒng)等來獲得人體骨骼運動數(shù)據(jù),這些高精度運動數(shù)據(jù)采集設(shè)備獲得的人體骨骼運動數(shù)據(jù)節(jié)點信息豐富并且精度較高,然而其價格昂貴且穿戴不便,難以普及使用。深度相機Kinect可以實時獲取人體骨骼運動數(shù)據(jù)[3],其價格低廉、易于使用,但其獲取的運動數(shù)據(jù)僅含25個骨骼節(jié)點并且含有大量的噪聲。因此,通過Kinect獲得的人體骨骼運動數(shù)據(jù)在實際應用之前需要經(jīng)過優(yōu)化處理。運動數(shù)據(jù)優(yōu)化(motion refinement)包括2個方面:一方面是指補全運動數(shù)據(jù)中的缺失值;另一方面是去除運動數(shù)據(jù)中的噪聲和異常值,并且優(yōu)化后數(shù)據(jù)要能夠保持運動數(shù)據(jù)的時空模式和人體運動學信息[4]。本文期望通過深度神經(jīng)網(wǎng)絡(luò)對Kinect數(shù)據(jù)進行優(yōu)化,既能夠補全Kinect缺失的骨骼節(jié)點信息也去除其中的噪聲和異常值,提升Kinect骨骼運動數(shù)據(jù)的細節(jié)層次和數(shù)據(jù)精度,達到基于低精度便捷設(shè)備獲取高精度動捕數(shù)據(jù)的目的。
近年來越來越多的學者采用深度學習的方法對運動數(shù)據(jù)進行優(yōu)化處理并取得了較好的效果。例如,文獻[5]利用基于卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)的自編碼器抽取運動數(shù)據(jù)流形,實現(xiàn)運動數(shù)據(jù)的去噪;文獻[6]訓練了一個基于雙向長短時記憶(bidirectional long short term memory,Bi-LSTM)的濾波網(wǎng)絡(luò)對噪聲數(shù)據(jù)進行濾波處理;文獻[7]提出一種基于Bi-LSTM的自編碼器,并通過在訓練時施加運動學約束提升去噪后數(shù)據(jù)的平滑自然性。但是這些方法對Kinect骨骼運動數(shù)據(jù)的優(yōu)化仍存在骨骼扭曲等運動不自然的現(xiàn)象。本文借鑒計算機視覺領(lǐng)域用于從視頻中提取人體骨骼運動數(shù)據(jù)的著名網(wǎng)絡(luò) ——“堆疊沙漏”(stacked hourglass)網(wǎng)絡(luò)模型[8],該模型通過反復自下而上、自上而下的映射以及中間約束,有效地提升了運動姿態(tài)的估計效果。在運動數(shù)據(jù)處理領(lǐng)域,文獻[5]指出運動數(shù)據(jù)到隱變量空間再到運動數(shù)據(jù)這一映射過程可以獲得平滑自然的運動。在計算機視覺領(lǐng)域隱變量約束常被用來提高網(wǎng)絡(luò)生成圖像的感知真實性[9]。因此,本文提出一種面向Kinect運動數(shù)據(jù)優(yōu)化的堆疊自編碼器,將6個雙向循環(huán)自編碼器(bidirectional recurrent autoencoder,BRA)進行堆疊,使得噪聲數(shù)據(jù)能夠多次重復從運動數(shù)據(jù)到隱變量空間再到運動數(shù)據(jù)這一映射過程,并且同時使用隱變量約束提升優(yōu)化后數(shù)據(jù)與動捕數(shù)據(jù)之間的感知相似度,使得網(wǎng)絡(luò)生成的運動真實自然。
綜上所述,本文主要工作包括以下3點:
(1) 提出的堆疊雙向循環(huán)自編碼器能夠?qū)崿F(xiàn)運動數(shù)據(jù)到隱變量的重復映射與逆映射,提升了網(wǎng)絡(luò)輸出運動數(shù)據(jù)的平滑自然性。實驗數(shù)據(jù)表明隨著自編碼器堆疊個數(shù)的增加,優(yōu)化后運動數(shù)據(jù)平滑性逐漸提升,網(wǎng)絡(luò)生成的運動數(shù)據(jù)平滑自然。
(2) 采用隱變量約束提高網(wǎng)絡(luò)輸出運動數(shù)據(jù)與動捕數(shù)據(jù)的感知真實性。實驗結(jié)果表明,在網(wǎng)絡(luò)訓練過程中施加隱變量約束,本文方法生成的運動自然協(xié)調(diào),具有較強的感知真實性。
(3) 采用滑窗方式對長運動序列進行處理,使得本文算法可以將Kinect數(shù)據(jù)轉(zhuǎn)化為高精度動捕數(shù)據(jù),實現(xiàn)低精度設(shè)備的采集數(shù)據(jù)高精度化。
為優(yōu)化Kinect捕獲的不完整的運動數(shù)據(jù),文獻[10]提出了一種基于高斯過程模型的實時概率框架來提高Kinect捕獲運動數(shù)據(jù)的準確性,其方法在自遮擋情況下,也能產(chǎn)生高質(zhì)量的運動數(shù)據(jù),然而由于高斯過程的計算復雜度高,該方法只適用于小型數(shù)據(jù)集;文獻[11]使用基于高斯過程的局部混合方法提高求解速度,其方法允許局部模型實時增量更新,相比文獻[10]能夠處理更多數(shù)據(jù)樣本。這2種方法都通過約束連續(xù)幀的速度變化來保證生成運動平滑,然而很難恢復轉(zhuǎn)身的運動。文獻[12]利用基于主成分分析的降維方法從運動數(shù)據(jù)庫中搜索合適的運動數(shù)據(jù)來補全缺失值,并使用比例-微分(proportional-derivative,PD)控制器生成物理上可信的運動,這種運動恢復方法的準確性嚴重依賴數(shù)據(jù)庫的內(nèi)容和大小;文獻[13]提出一種將局部姿態(tài)估計與全局檢索技術(shù)相結(jié)合的方法,使用基于霍斯多夫距離的投票方法將2種假設(shè)結(jié)合起來,得到最終的運動姿態(tài),其方法考慮了運動的連續(xù)性,能夠有效解決因遮擋和噪聲導致的數(shù)據(jù)缺失問題,然而對快速或繞垂直軸旋轉(zhuǎn)超過45°的運動恢復效果較差。上述非深度學習類的Kinect數(shù)據(jù)去噪方法可以實現(xiàn)一些運動片段的處理,但對于可能包含任意運動的連續(xù)長序列運動處理效果不明顯。
基于深度學習的運動數(shù)據(jù)優(yōu)化方法近年來也逐漸發(fā)展起來。文獻[6]使用EBD(Encoder-Bidirectional-Decoder)、EBF(Encoder-Bidirectional-Filter)2個神經(jīng)網(wǎng)絡(luò)來優(yōu)化運動數(shù)據(jù),其中神經(jīng)網(wǎng)絡(luò)EBD利用關(guān)節(jié)信息和時域相關(guān)性填補缺失數(shù)據(jù),經(jīng)由EBD降噪后的運動數(shù)據(jù)存在抖動以及噪聲未完全清除的缺點,因此還需使用神經(jīng)網(wǎng)絡(luò)EBF做后續(xù)的平滑處理,但是該方法不能夠用于提升運動數(shù)據(jù)的細節(jié)層次;文獻[14]通過基于卷積神經(jīng)網(wǎng)絡(luò)的自編碼器將Kinect運動數(shù)據(jù)進行映射和逆映射,但是生成的運動數(shù)據(jù)還存在一定的抖動;文獻[15]使用深度循環(huán)神經(jīng)網(wǎng)絡(luò)(deep recurrent neural network,DRNN)分別處理Kinect數(shù)據(jù)的關(guān)節(jié)點三維坐標和速度,其結(jié)果分別記為pDRNN和vDRNN,使用卡爾曼濾波和k近鄰算法整合增強pDRNN和vDRNN的結(jié)果來保證運動的自然性,也就意味著該方法還需要后處理步驟才可以生成平滑自然的運動;文獻[7]提出的BRA網(wǎng)絡(luò)能夠?qū)崿F(xiàn)對Kinect骨骼運動數(shù)據(jù)片段的優(yōu)化,但是當數(shù)據(jù)的細節(jié)層次需要提高時,BRA難以保證優(yōu)化后數(shù)據(jù)的感知真實性。
本文提出的算法目標是能夠?qū)inect骨骼運動數(shù)據(jù)序列自動轉(zhuǎn)化為動捕數(shù)據(jù),動捕數(shù)據(jù)的數(shù)據(jù)精度和細節(jié)層次都高于Kinect數(shù)據(jù),因此算法需要能夠去除噪聲、能夠確保細節(jié)層次提高后的數(shù)據(jù)具有感知真實性,使得輸出的運動平滑自然,而且要能夠?qū)﹂L運動序列作處理。
為實現(xiàn)本文目標,首先需要構(gòu)建Kinect和動捕設(shè)備2種運動數(shù)據(jù)采集設(shè)備同步采集的運動數(shù)據(jù)集。本文采用Kinect和諾亦騰Perception Neuron動作捕捉儀采集同步數(shù)據(jù)庫,讓表演者在采集環(huán)境中連續(xù)做常見運動,如打籃球、舞蹈、跳躍、步行等,獲得一系列長運動序列。Kinect采集到的數(shù)據(jù)以關(guān)節(jié)點坐標格式保存,每幀數(shù)據(jù)包含25個關(guān)節(jié)點的三維坐標,因此每一幀運動數(shù)據(jù)的維度為75(25×3=75)。諾亦騰采集到的運動數(shù)據(jù)被轉(zhuǎn)換為關(guān)節(jié)坐標格式,每幀數(shù)據(jù)包含59個關(guān)節(jié)點的三維坐標,因此每一幀運動數(shù)據(jù)的維度為177(59×3=177)。2種運動采集設(shè)備獲取運動數(shù)據(jù)骨骼架構(gòu)如圖1所示。
圖1 運動數(shù)據(jù)骨骼架構(gòu)
用2種設(shè)備獲得運動序列后,需要對數(shù)據(jù)進行同步預處理:首先做空間上的處理,將2種數(shù)據(jù)都變換為以0號節(jié)點即根節(jié)點為基準的相對坐標數(shù)據(jù);然后將2種運動數(shù)據(jù)做時間同步處理,因為諾亦騰動捕的采樣頻率為60幀/s,而Kinect的采樣頻率不穩(wěn)定,約為30幀/s,所以以諾亦騰的采樣率和時間域為基準,使用自然樣條插值將Kinect數(shù)據(jù)上采樣為60幀/s。預處理之后得到同步的“Kinect-動捕”長序列運動數(shù)據(jù)集,其中70%的數(shù)據(jù)作為訓練集,30%的數(shù)據(jù)作為測試集。
圖2 滑動切片示意圖
本文提出的網(wǎng)絡(luò)架構(gòu)由堆疊雙向循環(huán)自編碼器與感知自編碼器組成,如圖3所示。
圖3 堆疊自編碼器網(wǎng)絡(luò)結(jié)構(gòu)
堆疊雙向循環(huán)自編碼器由6個雙向循環(huán)自編碼器(S1~S6)堆疊而成。在堆疊雙向循環(huán)自編碼器中,XSi=DSi(ESi(XSi-1)),其中:i為雙向循環(huán)自編碼器的序號,i=1,2,…,6;XS0=XN為首個雙向循環(huán)自編碼器的輸入,即為噪聲運動數(shù)據(jù)。最后一個雙向循環(huán)自編碼器的輸出XS6作為感知自編碼器的輸入,感知自編碼器的輸出Y作為優(yōu)化后運動數(shù)據(jù)。
本文網(wǎng)絡(luò)結(jié)構(gòu)中堆疊的6個雙向循環(huán)自編碼器結(jié)構(gòu)與感知自編碼器結(jié)構(gòu)一致,如圖4所示,其中雙向循環(huán)自編碼器由結(jié)構(gòu)對稱的編碼器(encoder)和解碼器(decoder)構(gòu)成,均由3個全連接(fully connected,FC)層和1個Bi-LSTM單元組成,其中全連接網(wǎng)絡(luò)有利于運動數(shù)據(jù)預測及缺損修復[16],Bi-LSTM單元更適用于處理具有時間序列特征的數(shù)據(jù)[7]。
圖4 雙向循環(huán)自編碼器結(jié)構(gòu)
在編碼器中運動數(shù)據(jù)到隱變量的映射過程中數(shù)據(jù)維度變化過程為:
其中,m為運動片段的幀數(shù),在本文中m=120。在雙向循環(huán)自編碼器S1中,d1=75,d2=128;在雙向循環(huán)自編碼器S2~S6與感知自編碼器中,d1=177,d2=226。
解碼器與編碼器對稱,隱變量到運動數(shù)據(jù)的維度變化過程為:
編碼器將含有噪聲的人體骨骼運動數(shù)據(jù)映射到隱變量空間,解碼器將隱變量映射回運動數(shù)據(jù)空間得到優(yōu)化后的運動,本文方法通過首尾連接6個雙向循環(huán)自編碼器與一個感知自編碼器,將運動數(shù)據(jù)進行重復的映射與逆映射,有利于獲得平滑度更高的運動。
本文設(shè)置了2類約束損失函數(shù),分別是均方誤差約束和運動學約束。
均方誤差約束記為網(wǎng)絡(luò)輸出和標簽數(shù)據(jù)之間的均方誤差,運動學約束用于提升網(wǎng)絡(luò)輸出數(shù)據(jù)的運動學合理性,包括骨骼長度約束Lb、平滑性約束Ls和隱變量約束Lc。
2.3.1 均方誤差約束
網(wǎng)絡(luò)的輸入數(shù)據(jù)為Kinect運動數(shù)據(jù)片段,標簽數(shù)據(jù)為動捕運動數(shù)據(jù)片段,為此本文定義均方誤差Lp為:
(1)
其中,f=120為訓練數(shù)據(jù)的總幀數(shù)。需要重點指出的是,類似于堆疊沙漏模型[8],在本文方法中堆疊自編碼器中的每個子編碼器的輸出都會用于與標簽數(shù)據(jù)求均方誤差,即(1)式中Y可以指代每個子自編碼器的輸出。
2.3.2 骨骼長度約束
骨骼長度約束用于堆疊自編碼器。設(shè)堆疊自編碼器輸出Y在第i幀骨骼t的骨骼長度為:
(2)
(3)
其中:lt為XC骨骼長度集合中的元素;J為關(guān)節(jié)點的個數(shù)。
2.3.3 平滑性約束
為確保優(yōu)化后的運動序列在相鄰幀間過渡平滑,本文對堆疊自編碼器輸出數(shù)據(jù)施加平滑性約束,首先重復自編碼器的輸出Y的邊界元素得到Y(jié)′:Y(1,k)′=Y(2,k)′=Y(1,k),Y(f+1,k)′=Y(f+2,k)′=Y(f,k),Y(i,k)′=Y(i-1,k),1≤k≤177,2≤i≤f-1。其次,定義平滑矩陣O為:
(4)
平滑性損失函數(shù)為:
(5)
(5)式數(shù)值越小,證明運動越平滑。最小化‖OY′‖2相當于使自編碼器輸出的運動序列在前后兩幀連續(xù)[4,17]。
2.3.4 隱變量約束
由于相似運動的隱變量相似,且可以在隱變量空間中對運動數(shù)據(jù)進行編輯,為提高優(yōu)化后的數(shù)據(jù)與動捕數(shù)據(jù)的感知相似性,本文基于預訓練的感知自編碼器,記感知自編碼器的編碼器為EC,感知損失函數(shù)的定義為:
(6)
其中,EC(XS6)、EC(XC)分別為堆疊自編碼器的輸出XS6與動捕數(shù)據(jù)XC經(jīng)由感知自編碼器編碼后的隱變量,將兩者作比較得出XS6與XC的感知相似性。
(1) 第1階段僅使用訓練數(shù)據(jù)集中所有的XC訓練感知自編碼器,對感知自編碼器的輸出YC施加均方誤差約束、骨骼長度約束和平滑性約束,損失函數(shù)為:
L1=λc1Lp(YC)+
λc2Lb(YC)+λc3Ls(YC)
(7)
其中,λc1、λc2、λc3分別為3種約束的權(quán)重系數(shù),本文設(shè)置λc1=1,λc2=λc3=0.000 2,訓練迭代200次。訓練完成后的感知自編碼器的編碼器和解碼器部分分別記為EC和DC。
(2) 第2階段訓練基于隱變量約束的堆疊自編碼器,對堆疊雙向循環(huán)自編碼器中每個自編碼器的輸出施加均方誤差約束、骨骼長度約束和平滑性約束,并施加隱變量約束,損失函數(shù)為:
λsLs(XSi))+λcLc(XS6)
(8)
此階段使用XN與XC進行網(wǎng)絡(luò)訓練,由于2種數(shù)據(jù)骨骼架構(gòu)不一致,需加強骨骼長度約束和平滑性約束,設(shè)置權(quán)重系數(shù)λp=1,λb=λs=0.000 5,λc=1,訓練迭代200次。
實驗硬件處理器為Intel(R) Core(TM) i9-9900K,內(nèi)存32 GiB,顯卡為NVIDIA GeForce RTX 2080 Ti。實驗基于TensorFlow框架,網(wǎng)絡(luò)的學習率初始化為0.000 01,并使用Adam優(yōu)化器動態(tài)調(diào)整各參數(shù)的學習速率。為避免過擬合,Bi-LSTM單元的dropout=0.2, batchsize設(shè)置為16。
長運動序列的滑窗處理示意圖如圖5所示。
圖5 長運動序列的滑窗處理示意圖
實現(xiàn)Kinect采集數(shù)據(jù)的動捕化,即將Kinect獲取的運動數(shù)據(jù)序列自動轉(zhuǎn)化為具有動捕級精度的數(shù)據(jù),因此需要算法能夠處理Kinect獲取的整個長運動數(shù)據(jù)序列。在訓練階段網(wǎng)絡(luò)的輸入和輸出都是120幀的運動片段,因此在運行階段需要對長序列作滑窗處理。本文采用寬度為120幀、步長為1的滑窗對整個長運動序列進行逐幀處理。設(shè)Xw,i為長序列在第i次滑窗操作中得到的運動片段,Yw,i為相應網(wǎng)絡(luò)輸出,Xw,i、Yw,i的長度均為120幀,但僅取Yw,i的中間幀放入最終優(yōu)化序列中。
本部分實驗的目的是驗證雙向循環(huán)自編碼器堆疊層數(shù)與網(wǎng)絡(luò)輸出數(shù)據(jù)平滑性的關(guān)系,為此,分別比較了堆疊層數(shù)為1、2、3、4、5、6的網(wǎng)絡(luò)結(jié)構(gòu),分別記為BRA-S-1、BRA-S-2、BRA-S-3、BRA-S-4、BRA-S-5、BRA-S-6,見表1所列。
表1 堆疊次數(shù)與平滑性關(guān)系
由表1可知,堆疊模式可以提升運動數(shù)據(jù)的平滑性,但隨著堆疊層數(shù)的增加,網(wǎng)絡(luò)參數(shù)急劇增長,考慮到算法的計算效率和計算資源損耗,本文設(shè)置網(wǎng)絡(luò)中雙向循環(huán)自編碼器的堆疊層數(shù)為6層。
本部分將證明隱變量約束可以提升優(yōu)化后數(shù)據(jù)的感知真實性。
3種方法網(wǎng)絡(luò)結(jié)構(gòu)特征見表2所列,將不使用隱變量約束的方法記為BRA-S,而本文采用的添加感知約束的方法記為BRA-S-C。另外,由于本文方法是在文獻[7]的BRA方法基礎(chǔ)上提出的,為此在本部分將對比本文提出的BRA-S-C和BRA方法的效果。測試數(shù)據(jù)是同步后的“Kinect-動捕”長序列運動數(shù)據(jù)集。
表2 3種方法的網(wǎng)絡(luò)結(jié)構(gòu)特征
不同方法對一段對打籃球的長運動序列處理效果如圖6所示,測試結(jié)果的某一幀中右手手腕的運動軌跡如圖7所示。
圖6 運動序列處理效果對比
圖7 運動軌跡對比
類似于文獻[7],本文也采用均方誤差、骨骼長度誤差和平滑性誤差來對比不同的方法,視覺效果已制作為視頻,BRA、BRA-S、BRA-S-C 3種方法在測試長序列上的均方誤差(Lp)、骨骼長度誤差(Lb)、幀間平滑性誤差(Ls)的均值見表3所列。
表3 3種方法整個測試數(shù)據(jù)集上的3種誤差均值
表3中,BRA-S-C的Ls低于BRA-S,這從數(shù)值角度說明在網(wǎng)絡(luò)中施加隱變量約束有利于提升運動數(shù)據(jù)的幀間平滑性。另外,BRA-S-C的Ls約為BRA的1/2,而且Lb也低于BRA,這說明BRA-S-C優(yōu)化后的運動具有更好的平滑連貫性,骨骼長度更加穩(wěn)定、不易跳變。
由圖6可知,雖然BRA可以恢復出完整骨架,但出現(xiàn)手部骨骼扭曲的畸形現(xiàn)象,而BRA-S-C處理后的運動數(shù)據(jù)則不出現(xiàn)這種運動失真現(xiàn)象。雖然表3中BRA-S-C的Lp高于BRA,但圖7中BRA-S-C得到的運動軌跡最能擬合動捕數(shù)據(jù)的運動軌跡,因此BRA-S-C的優(yōu)化效果優(yōu)于BRA,這得益于BRA-S-C的堆疊模式和隱變量約束:一方面堆疊模式提升運動數(shù)據(jù)的平滑性;另一方面隱變量約束在提升優(yōu)化后數(shù)據(jù)與動捕數(shù)據(jù)的感知相似性的同時,能進一步提升幀間平滑性和運動自然性。
由于Kinect數(shù)據(jù)的單只手僅有4個關(guān)節(jié)點,而動捕數(shù)據(jù)的手部具有20個關(guān)節(jié)點,手部結(jié)構(gòu)的穩(wěn)定真實是評價算法輸出是否具有感知真實性的重要標志。雖然表3中BRA-S-C的Lb略高于BRA-S,但在圖6中,經(jīng)BRA-S優(yōu)化后的運動數(shù)據(jù)易在手部出現(xiàn)骨骼扭曲的運動不自然現(xiàn)象,而經(jīng)BRA-S-C優(yōu)化后的運動數(shù)據(jù)則不出現(xiàn)這種現(xiàn)象,從而說明隱變量約束有利于提升運動的自然性。隱變量約束通過提升網(wǎng)絡(luò)生成數(shù)據(jù)與動捕數(shù)據(jù)的感知相似度,使得兩者具有更強的一致性,網(wǎng)絡(luò)生成的運動數(shù)據(jù)真實自然。
本文針對Kinect運動數(shù)據(jù)的動捕化問題,提出一種可對長序列進行處理的堆疊自編碼器及其訓練方法。網(wǎng)絡(luò)由堆疊雙向循環(huán)自編碼器與感知自編碼器組成,網(wǎng)絡(luò)訓練時用Kinect和動捕數(shù)據(jù)片段進行訓練,在訓練過程中對堆疊雙向循環(huán)自編碼器中每個雙向循環(huán)自編碼器的輸出施加均方誤差約束、骨骼長度約束以及平滑性約束,并對感知自編碼器的隱藏單元施加隱變量約束。堆疊自編碼器訓練完成后,用滑窗的方式對長運動序列進行處理。實驗結(jié)果表明,優(yōu)化后的運動數(shù)據(jù)具有更好的感知真實性,運動序列平滑、自然,實現(xiàn)了基于低精度便捷設(shè)備獲取高精度運動數(shù)據(jù)的目的。該項工作目前也存在一些不足,因為本文方法旨在獲取平滑自然的運動,位置精度沒有得到提高,所以在后期的研究工作中將設(shè)計加入殘差網(wǎng)絡(luò),通過調(diào)整網(wǎng)絡(luò)結(jié)構(gòu)進一步提高運動數(shù)據(jù)的優(yōu)化質(zhì)量。