李南帆,司文文,杜思遠(yuǎn),王志勇,鐘重陽*,夏時(shí)洪
(1.國(guó)網(wǎng)北京城區(qū)供電公司,北京 100034;2.中國(guó)科學(xué)院計(jì)算技術(shù)研究所,北京 100190;3.中國(guó)科學(xué)院大學(xué),北京 100049)
人體運(yùn)動(dòng)合成是計(jì)算機(jī)圖形學(xué)中的重要問題,在自動(dòng)駕駛、人機(jī)交互、目標(biāo)追蹤、運(yùn)動(dòng)規(guī)劃、動(dòng)作識(shí)別等領(lǐng)域被廣泛應(yīng)用,為這些應(yīng)用提供數(shù)據(jù)支撐。動(dòng)作識(shí)別方法[1]在實(shí)際生活中有著重要的應(yīng)用價(jià)值,它能自動(dòng)識(shí)別人的動(dòng)作類型,幫助系統(tǒng)對(duì)行人進(jìn)行安全監(jiān)測(cè)?;谏窠?jīng)網(wǎng)絡(luò)的動(dòng)作識(shí)別模型的性能相較于傳統(tǒng)的統(tǒng)計(jì)學(xué)習(xí)方法有了很大的提升,但是它的準(zhǔn)確率和效率嚴(yán)重地依賴人體運(yùn)動(dòng)數(shù)據(jù)的數(shù)量和質(zhì)量。由于傳統(tǒng)的運(yùn)動(dòng)捕獲方法費(fèi)時(shí)費(fèi)力,越來越多的學(xué)者開始研究如何自動(dòng)高效地捕獲人體運(yùn)動(dòng)數(shù)據(jù)[2-3]。其中一種高效且低成本的方式就是利用已有的運(yùn)動(dòng)捕獲數(shù)據(jù),構(gòu)建生成模型以自動(dòng)合成運(yùn)動(dòng)數(shù)據(jù)。不僅能提高運(yùn)動(dòng)捕獲數(shù)據(jù)的利用率,還能合成很多難以捕獲的人體運(yùn)動(dòng),為識(shí)別算法提供數(shù)據(jù)支撐,提高識(shí)別準(zhǔn)確率,減少運(yùn)作成本。
近年來,研究者們[4-8]使用循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)進(jìn)行人體運(yùn)動(dòng)建模與合成,并取得了較好的效果。然而,基于RNN 的人體運(yùn)動(dòng)模型一直都存在一個(gè)問題:運(yùn)動(dòng)合成結(jié)果的第一幀與輸入的最后一幀之間存在跳變[4-5,7-8]。如圖1 所示,圓圈中的膝關(guān)節(jié)和頸關(guān)節(jié)在輸入末幀與合成首幀之間存在不連續(xù)現(xiàn)象。由于該問題只存在于運(yùn)動(dòng)合成的第一幀,很多研究者忽略了這一問題。但是首幀跳變不僅影響運(yùn)動(dòng)合成的質(zhì)量,而且無法回避運(yùn)動(dòng)去噪、運(yùn)動(dòng)插值等應(yīng)用。因?yàn)镽NN 模型在進(jìn)行運(yùn)動(dòng)合成時(shí),首幀的隱狀態(tài)通常初始化為0 或進(jìn)行隨機(jī)初始化,然而隱狀態(tài)代表了RNN 單元對(duì)前面序列的記憶,理論上應(yīng)該與前面的運(yùn)動(dòng)序列相關(guān),正是這種簡(jiǎn)單的初始化方法導(dǎo)致了跳變的出現(xiàn)。雖然訓(xùn)練數(shù)據(jù)足夠充分和多樣時(shí),跳變的影響會(huì)得到緩解,但是高質(zhì)量的運(yùn)動(dòng)數(shù)據(jù)的獲取費(fèi)時(shí)費(fèi)力、成本高昂。
為合理估計(jì)隱狀態(tài),在數(shù)據(jù)有限的情況下合成高質(zhì)量的數(shù)據(jù),為數(shù)據(jù)驅(qū)動(dòng)的模型提供數(shù)據(jù)支撐,本文解釋了基于RNN 的人體運(yùn)動(dòng)合成中輸入末幀與合成首幀之間存在跳變的原因,提出一種基于優(yōu)化的初始隱狀態(tài)估計(jì)的人體運(yùn)動(dòng)合成方法。將初始隱狀態(tài)作為自變量,利用神經(jīng)網(wǎng)絡(luò)的目標(biāo)函數(shù)作為優(yōu)化目標(biāo),使用梯度下降法進(jìn)行優(yōu)化求解,得到一個(gè)合適的初始隱狀態(tài),可提高運(yùn)動(dòng)合成結(jié)果的質(zhì)量和運(yùn)動(dòng)預(yù)測(cè)的精確率。為驗(yàn)證本文方法的效果,在常用數(shù)據(jù)集CMU(http://mocap.cs.cmu.edu/)和H3.6m(http://vision.imar.ro/human3.6m/description.php)上進(jìn)行大量的定性和定量實(shí)驗(yàn),并且和經(jīng)典的運(yùn)動(dòng)合成與預(yù)測(cè)工作進(jìn)行對(duì)比。實(shí)驗(yàn)結(jié)果表明,經(jīng)過初始隱狀態(tài)估計(jì)的運(yùn)動(dòng)合成方法消除了以往基于RNN 的運(yùn)動(dòng)模型中輸入末幀與合成首幀間的跳變情況,得到了更連續(xù)、自然的運(yùn)動(dòng),有效提高了合成運(yùn)動(dòng)的質(zhì)量。
隨著深度學(xué)習(xí)的興起,很多工作集中于使用深度神經(jīng)網(wǎng)絡(luò)建模人體運(yùn)動(dòng)中的動(dòng)態(tài),實(shí)現(xiàn)對(duì)人體運(yùn)動(dòng)的合成和預(yù)測(cè)。
Holden等[9-10]嘗試了其他類型的神經(jīng)網(wǎng)絡(luò)進(jìn)行人體運(yùn)動(dòng)建模:1)在一個(gè)很大的數(shù)據(jù)集中訓(xùn)練了一個(gè)卷積自編碼器,然后用卷積神經(jīng)網(wǎng)絡(luò)建立一個(gè)從高層參數(shù)到角色運(yùn)動(dòng)的回歸模型。該方法適用于運(yùn)動(dòng)編輯,但是不能建模運(yùn)動(dòng)的分布,并且需要使用方波生成步態(tài)信息,受到的限制較大。2)建立了一個(gè)根據(jù)相位改變網(wǎng)絡(luò)參數(shù)的三層神經(jīng)網(wǎng)絡(luò),結(jié)合歷史運(yùn)動(dòng)軌跡和當(dāng)前的控制輸入實(shí)時(shí)合成當(dāng)前幀的運(yùn)動(dòng)姿態(tài)。Zhang等[11]使用混合權(quán)重的神經(jīng)網(wǎng)絡(luò)模型處理四足動(dòng)物的運(yùn)動(dòng)建模與在線控制問題。上述模型雖然能夠?qū)刂谱鞒鲰憫?yīng),但是實(shí)質(zhì)上仍然不是生成式模型,并且不能預(yù)測(cè)運(yùn)動(dòng)的分布。雖然基于其他神經(jīng)網(wǎng)絡(luò)的方法在人體運(yùn)動(dòng)合成方面作出了有益的嘗試,但是由于RNN 在處理時(shí)序序列上的優(yōu)勢(shì),目前RNN 仍是主流的人體運(yùn)動(dòng)合成模型。
RNN 能夠處理時(shí)序動(dòng)態(tài)關(guān)系和長(zhǎng)時(shí)間的時(shí)序依賴關(guān)系,能夠很好地建模人體運(yùn)動(dòng)的動(dòng)態(tài)。Fragkiadaki等[4]引入LSTM-3LR(3 層的長(zhǎng) 短期記 憶(Long-Short-Term-Memory,LSTM))和編碼器-循環(huán)-解碼器(Encoder-Recurrent-Decoder,ERD),利用LSTM 單元建模人體運(yùn)動(dòng)的動(dòng)態(tài)。Jain等[5]引入結(jié)構(gòu)化的RNN 模型,將人體關(guān)節(jié)的圖結(jié)構(gòu)與人體運(yùn)動(dòng)的序列關(guān)系一起引入運(yùn)動(dòng)預(yù)測(cè)。除了在運(yùn)動(dòng)預(yù)測(cè)方面的應(yīng)用外,Harvey等[12]使用RNN 和半監(jiān)督學(xué)習(xí)幫助訓(xùn)練運(yùn)動(dòng)分類器,成功地在半監(jiān)督的條件下利用運(yùn)動(dòng)合成結(jié)果輔助進(jìn)行運(yùn)動(dòng)分類。
然而,現(xiàn)有的RNN 模型往往在合成長(zhǎng)時(shí)間的運(yùn)動(dòng)時(shí)遇到困難。在生成長(zhǎng)序列運(yùn)動(dòng)時(shí),由于每一幀的誤差不斷累積,模型的誤差會(huì)不斷變大,并終止于平均姿態(tài)。此外,大多數(shù)RNN 模型都會(huì)遇到合成首幀與輸入末幀不連續(xù)的問題。Martinez等[6]提出殘 差門控 循環(huán)單 元(Residual Gate Recurrent Unit,RGRU)模型,使用一個(gè)基于殘差的序列到序列的方法減小了跳變;但是基于殘差的方法會(huì)影響系統(tǒng)的穩(wěn)定性,導(dǎo)致以上方法并不能生成很長(zhǎng)的運(yùn)動(dòng)序列。Zhou等[8]成功地訓(xùn)練了一個(gè)自適應(yīng)的RNN 模型,能夠生成很長(zhǎng)的運(yùn)動(dòng)而不出現(xiàn)崩潰;但是該模型在初始幀處理中與傳統(tǒng)的RNN 模型相同,依然會(huì)在輸入的最后一幀與合成的第一幀之間出現(xiàn)跳變。Lee等[13]將控制參數(shù)加入運(yùn)動(dòng)表示,實(shí)現(xiàn)了可控制的運(yùn)動(dòng)合成;然而控制參數(shù)的引入也無法解決首幀跳變的問題。
上述工作要么忽視了首幀跳變的問題,要么在訓(xùn)練時(shí)采用一些技巧回避該問題。只有Wang等[14]在構(gòu)建基于RNN的人體運(yùn)動(dòng)模型時(shí)提到了首幀跳變問題,但是缺少詳細(xì)分析。本文將分析傳統(tǒng)的基于RNN 的人體運(yùn)動(dòng)合成模型首幀跳變問題產(chǎn)生的原因并給出解決方案,通過優(yōu)化的方法求解合理的初始隱狀態(tài),有效減少首幀跳變,最后通過實(shí)驗(yàn)驗(yàn)證該方法在運(yùn)動(dòng)合成、運(yùn)動(dòng)預(yù)測(cè)和運(yùn)動(dòng)插值任務(wù)中的有效性。
在使用神經(jīng)網(wǎng)絡(luò)模型建模人體運(yùn)動(dòng)之前,需要把人體運(yùn)動(dòng)表示為計(jì)算機(jī)能夠理解的特征信號(hào),在定義好運(yùn)動(dòng)表示后再針對(duì)人體運(yùn)動(dòng)的特點(diǎn)建立對(duì)應(yīng)的合成模型。
2.1.1 人體運(yùn)動(dòng)表示與特征表示
本文使用的骨架包括18 個(gè)自由運(yùn)動(dòng)關(guān)節(jié),可表示為:
其中:q為角色的關(guān)節(jié)角運(yùn)動(dòng)參數(shù);tx、ty、tz是根節(jié)點(diǎn)的位置;rx、ry、rz是根節(jié)點(diǎn)的旋轉(zhuǎn)角度;θ2,θ3,…,θd是其他各個(gè)關(guān)節(jié)的三維旋轉(zhuǎn)角度。人體運(yùn)動(dòng)建模中使用的特征需要具有旋轉(zhuǎn)不變性和平移不變性,所以更改為如下表示:
其中:x為具有旋轉(zhuǎn)不變性和平移不變性的運(yùn)動(dòng)參數(shù);Δtx、Δtz、Δry是相較于前一幀的相對(duì)平移和旋轉(zhuǎn);其他變量的定義方式與式(1)相同。
2.1.2 RNN人體運(yùn)動(dòng)模型
本文創(chuàng)新點(diǎn)在于初始隱狀態(tài)問題的發(fā)現(xiàn)與相應(yīng)估計(jì)方法的提出,該方法能夠應(yīng)用于任意的RNN 模型。因此本文通過改進(jìn)經(jīng)典的運(yùn)動(dòng)合成模型ERD 以驗(yàn)證方法的有效性,改進(jìn)的運(yùn)動(dòng)模型如圖2 所示,(·)為該網(wǎng)絡(luò)層神經(jīng)元個(gè)數(shù)。
圖2 運(yùn)動(dòng)模型結(jié)構(gòu)Fig.2 Structure of motion model
本文采用的RNN 模型包含兩層全連接(Fully-Connected,F(xiàn)C)-兩層LSTM-兩層全連接的編碼-解碼結(jié)構(gòu)。與ERD 不同,它能建模人體運(yùn)動(dòng)參數(shù)在下一幀的分布,因此可以用于多種任務(wù),數(shù)學(xué)表達(dá)形式為:
與文獻(xiàn)[15]類似,本文使用協(xié)方差矩陣為對(duì)角矩陣的高斯混合模型(Gaussian Mixture Model,GMM)建模下一幀的特征分布,混合高斯分布的定義為:
其中:wi、μi、δi分別為第i個(gè)高斯分量的概率、均值和標(biāo)準(zhǔn)差。高斯分布的參數(shù)需要滿足一定條件,而神經(jīng)網(wǎng)絡(luò)的輸出可以是任意實(shí)數(shù)。所以本文定義以下的變換以保證得到的參數(shù)符合高斯分布的定義:
在模型訓(xùn)練完成后,通過如下方式實(shí)現(xiàn)運(yùn)動(dòng)生成:用戶提供若干幀的運(yùn)動(dòng)數(shù)據(jù)作為初始輸入,將當(dāng)前幀運(yùn)動(dòng)數(shù)據(jù)和上一幀的隱狀態(tài)作為RNN 單元的輸入,RNN 單元經(jīng)過計(jì)算得到當(dāng)前幀的隱狀態(tài)和下一幀的運(yùn)動(dòng)參數(shù)分布;從這個(gè)分布中進(jìn)行采樣,可以得到下一幀的運(yùn)動(dòng)參數(shù);重復(fù)這一過程,就可以逐幀地合成一個(gè)無限長(zhǎng)的運(yùn)動(dòng)序列。
生成式模型得到的并不是下一幀運(yùn)動(dòng)參數(shù)的準(zhǔn)確值,而是對(duì)下一幀運(yùn)動(dòng)參數(shù)的分布的估計(jì),所以模型并不能直接應(yīng)用于運(yùn)動(dòng)預(yù)測(cè)問題。在進(jìn)行運(yùn)動(dòng)預(yù)測(cè)實(shí)驗(yàn)時(shí),本文使用概率最大的高斯分量的平均值作為下一幀的運(yùn)動(dòng)預(yù)測(cè)值,然后將這個(gè)運(yùn)動(dòng)預(yù)測(cè)結(jié)果輸入神經(jīng)網(wǎng)絡(luò),從而得到運(yùn)動(dòng)預(yù)測(cè)結(jié)果。
基于RNN 的人體運(yùn)動(dòng)模型中的首幀跳變現(xiàn)象如圖1 所示。出現(xiàn)首幀跳變現(xiàn)象的原因是在訓(xùn)練中RNN 模型會(huì)將上一幀的運(yùn)動(dòng)參數(shù)和上一幀學(xué)習(xí)到的隱狀態(tài)作為RNN 模型當(dāng)前幀的輸入,將下一幀的運(yùn)動(dòng)參數(shù)作為目標(biāo)輸出以進(jìn)行訓(xùn)練。模型訓(xùn)練目標(biāo)表示為式(6)。一般輸入隱狀態(tài)包含對(duì)以前狀態(tài)的正確的記憶,非零。然而在計(jì)算首幀運(yùn)動(dòng)參數(shù)時(shí),神經(jīng)網(wǎng)絡(luò)無法從前一幀得到隱狀態(tài),只能使用零初始隱狀態(tài)或隨機(jī)初始化的隱狀態(tài)作為輸入,得到的概率值為:
這樣的初始輸入與訓(xùn)練時(shí)不一致,將導(dǎo)致輸出的第一幀與輸入的最后一幀之間出現(xiàn)明顯跳變,這也是在實(shí)驗(yàn)中往往會(huì)發(fā)現(xiàn)模型在運(yùn)動(dòng)合成開始處出現(xiàn)不連續(xù)現(xiàn)象的原因。
文獻(xiàn)[4-5,8]中均指出了這個(gè)問題,但是認(rèn)為首幀跳變?cè)谶\(yùn)動(dòng)合成和預(yù)測(cè)任務(wù)中可以接受,因此選擇忽略這個(gè)問題。然而本文的研究表明,估計(jì)一個(gè)更好的初始隱狀態(tài)可以提高運(yùn)動(dòng)合成的質(zhì)量,并降低運(yùn)動(dòng)預(yù)測(cè)的誤差。同時(shí),當(dāng)基于RNN 的人體運(yùn)動(dòng)模型被應(yīng)用到運(yùn)動(dòng)去噪或者運(yùn)動(dòng)插值任務(wù)中時(shí),首幀跳變問題的影響會(huì)被放大。例如,在運(yùn)動(dòng)去噪中,由于首幀跳變,即使去掉第一幀運(yùn)動(dòng),后續(xù)的運(yùn)動(dòng)去噪結(jié)果與輸入運(yùn)動(dòng)仍存在一定差異,不能達(dá)到運(yùn)動(dòng)去噪的目的;在運(yùn)動(dòng)插值中,用戶給定運(yùn)動(dòng)序列中的若干關(guān)鍵幀,要求算法自動(dòng)合成各個(gè)關(guān)鍵幀中間的運(yùn)動(dòng),首幀跳變會(huì)導(dǎo)致運(yùn)動(dòng)插值結(jié)果不夠自然?;谏鲜鲈?,首幀跳變問題無法回避。
目前已經(jīng)有一些方法來解決該問題,如基于序列到序列的RGRU 模型[6]采用殘差連接的方法使模型在零初始隱狀態(tài)下也被充分訓(xùn)練,但是有兩個(gè)局限性:1)只能用于無約束的運(yùn)動(dòng)合成,無法用于運(yùn)動(dòng)插值、運(yùn)動(dòng)去噪等應(yīng)用;2)序列到序列的模型只能合成一定長(zhǎng)度的運(yùn)動(dòng),無法保證訓(xùn)練得到的模型能夠合成無限長(zhǎng)的運(yùn)動(dòng)。這些方法本質(zhì)上是一種訓(xùn)練的技巧,沒有從原理層面解決這個(gè)問題。還有一些方法采用預(yù)訓(xùn)練的方式,先訓(xùn)練一個(gè)基本模型,然后進(jìn)行最終調(diào)整(Fine-tune)。然而這些方法并不適用于初始隱狀態(tài)估計(jì)的問題。因?yàn)殡[狀態(tài)是一個(gè)RNN 單元的輸入,而不是參數(shù),預(yù)訓(xùn)練并不能得到合適的隱狀態(tài)。無論是否進(jìn)行預(yù)訓(xùn)練,RNN模型在實(shí)際測(cè)試時(shí),都需要給定一個(gè)初始隱狀態(tài)作為第一個(gè)RNN 單元的輸入,想要得到一個(gè)合理的非零的隱狀態(tài),必須要進(jìn)行隱狀態(tài)估計(jì),而不是簡(jiǎn)單地置零或者隨機(jī)初始化。
為了解決人體運(yùn)動(dòng)建模中的首幀不連續(xù)問題,需要給出一個(gè)對(duì)神經(jīng)網(wǎng)絡(luò)初始狀態(tài)的估計(jì)。本文提出從RNN 運(yùn)動(dòng)模型的定義出發(fā),使用第一幀隱狀態(tài)對(duì)應(yīng)的高斯似然估計(jì),利用神經(jīng)網(wǎng)絡(luò)的誤差函數(shù)來度量隱狀態(tài)的合理性:
其中:P(xi|xi-1,hi-1,ci-1)是式(7)中描述的高斯混合模型;n表示輸入運(yùn)動(dòng)的長(zhǎng)度。
如圖3 所示,本文將h1和c1視為自變量,通過優(yōu)化h1和c1以最大化式(8)中的概率P。因此需要找到一個(gè)隱狀態(tài)h1和c1,在這個(gè)隱狀態(tài)和用戶給出的第一幀運(yùn)動(dòng)的條件下,指定運(yùn)動(dòng)輸入的剩余部分出現(xiàn)的概率最大。
圖3 隱狀態(tài)估計(jì)模型Fig.3 Hidden state estimation model
本文將上述問題作為一個(gè)優(yōu)化問題來求解。該問題的導(dǎo)數(shù)的推導(dǎo)方式與神經(jīng)網(wǎng)絡(luò)相同,只是自變量從網(wǎng)絡(luò)各層的參數(shù)w和b變成了神經(jīng)網(wǎng)絡(luò)在初始時(shí)刻的因變量h1和c1。圖3 用虛線框出的h1和c1是本文需要求解的初始隱狀態(tài),x1,x2,…,xn為輸入運(yùn)動(dòng)序列。本文使用梯度下降的方法求解這個(gè)問題,方法步驟如下。
步驟1 首先把初始隱狀態(tài)初始化為零狀態(tài)。
步驟2 利用當(dāng)前隱狀態(tài)對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行正向傳播,更新y1,y2,…,yn-1。
步驟3 將-lnP作為損失函數(shù),求出損失函數(shù)的值,并進(jìn)行沿時(shí)間的反向傳播[16],得到導(dǎo)數(shù)
步驟4 利用得到的導(dǎo)數(shù)更新h1和c1的值其中:lr是梯度下降法的步長(zhǎng)。如果損失函數(shù)已經(jīng)收斂,那么迭代結(jié)束,并將得到的h1和c1作為運(yùn)動(dòng)合成中使用的初始隱狀態(tài);否則回到步驟2。
本文成功地通過該方法找到了合適的初始狀態(tài),使神經(jīng)網(wǎng)絡(luò)模型對(duì)各幀的運(yùn)動(dòng)參數(shù)分布預(yù)測(cè)的均值與實(shí)際的用戶運(yùn)動(dòng)輸入非常接近,保證了在運(yùn)動(dòng)輸入末幀與運(yùn)動(dòng)合成首幀之間的連續(xù)性。同時(shí),由于本文方法具有一個(gè)更合理的初始隱狀態(tài),預(yù)測(cè)結(jié)果也比傳統(tǒng)的零初始隱狀態(tài)方法更準(zhǔn)確。
為了驗(yàn)證本文的初始隱狀態(tài)估計(jì)方法能夠提升運(yùn)動(dòng)模型的性能,從運(yùn)動(dòng)合成、運(yùn)動(dòng)預(yù)測(cè)和運(yùn)動(dòng)插值三個(gè)方面進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果表明本文方法能夠提高運(yùn)動(dòng)合成質(zhì)量和運(yùn)動(dòng)預(yù)測(cè)精度,還能得到真實(shí)自然的運(yùn)動(dòng)插值效果。
為驗(yàn)證本文方法的有效性,將本文方法與經(jīng)典的運(yùn)動(dòng)模型ERD 和RGRU 進(jìn)行比較,在CMU 和H3.6m 數(shù)據(jù)集上進(jìn)行定性和定量實(shí)驗(yàn)。實(shí)驗(yàn)中,學(xué)習(xí)步長(zhǎng)取0.002,最大迭代次數(shù)取1 000,網(wǎng)絡(luò)結(jié)構(gòu)中FC1、FC2、LSTM1、LSTM2、FC3 的神經(jīng)元個(gè)數(shù)均設(shè)為500,模型在NVIDIA GTX 1080 上運(yùn)行。
在運(yùn)動(dòng)合成實(shí)驗(yàn)中,本文使用相同的隨機(jī)數(shù),把3 幀運(yùn)動(dòng)作為輸入,使用ERD 和本文方法分別進(jìn)行運(yùn)動(dòng)合成;在運(yùn)動(dòng)預(yù)測(cè)實(shí)驗(yàn)中,將運(yùn)動(dòng)的前幾幀作為輸入,隨后分別測(cè)試ERD、RGUR 和本文方法的誤差結(jié)果,以度量本文方法的準(zhǔn)確性;同時(shí)進(jìn)行運(yùn)動(dòng)插值實(shí)驗(yàn)以驗(yàn)證本文方法能夠針對(duì)給定的運(yùn)動(dòng)首末幀生成一段完整的運(yùn)動(dòng)。
圖4 為運(yùn)動(dòng)合成實(shí)驗(yàn)的可視化結(jié)果。前3 幀為輸入的運(yùn)動(dòng),后5 幀為合成的運(yùn)動(dòng),將運(yùn)動(dòng)不連續(xù)現(xiàn)象用圓圈標(biāo)出??梢钥闯?,本文方法明顯合成了更自然的運(yùn)動(dòng),消除了首幀的不連續(xù)現(xiàn)象,并且后續(xù)的合成幀也受到了第一幀的影響。這種影響在后續(xù)的運(yùn)動(dòng)預(yù)測(cè)實(shí)驗(yàn)中將體現(xiàn)得更加明顯。
圖4 運(yùn)動(dòng)合成結(jié)果比較Fig.4 Comparison of motion synthesis results
圖5(a)繪制了腳踝關(guān)節(jié)點(diǎn)的z方向速度曲線。可以看出,經(jīng)過本文方法的初始隱狀態(tài)估計(jì)的結(jié)果明顯更加平滑。同時(shí),為了驗(yàn)證本文方法能夠消除神經(jīng)網(wǎng)絡(luò)隱狀態(tài)在運(yùn)動(dòng)起始階段的跳變,使用相同的隨機(jī)變量,對(duì)使用CMU 運(yùn)動(dòng)數(shù)據(jù)庫(kù)訓(xùn)練得到的運(yùn)動(dòng)模型進(jìn)行采樣,隱狀態(tài)值如圖5(b)所示??梢钥闯霰疚姆椒ǖ玫降那€更加平滑,而ERD 得到的曲線在起始幀存在一個(gè)跳變。這也驗(yàn)證了在2.2 節(jié)中提出的理論:運(yùn)動(dòng)隱狀態(tài)一般情況下都不會(huì)恰好為0。以往的運(yùn)動(dòng)模型在運(yùn)行中從零隱狀態(tài)出發(fā),對(duì)于人體運(yùn)動(dòng)合成模型本身也不合適。通過估計(jì)一個(gè)初始隱狀態(tài),本文不但從輸出的運(yùn)動(dòng)姿態(tài)層面得到了一個(gè)更好的首幀合成結(jié)果,而且使RNN模型本身也得到了更加連續(xù)的隱狀態(tài)。
圖5 踝關(guān)節(jié)速度與隱狀態(tài)比較Fig.5 Comparison of ankle joint velocity and hidden state curves
本文在H3.6m 數(shù)據(jù)集上進(jìn)行運(yùn)動(dòng)預(yù)測(cè)實(shí)驗(yàn),與之前的研究[4-6]使用相同的訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)劃分方法。運(yùn)動(dòng)預(yù)測(cè)的評(píng)估標(biāo)準(zhǔn)是預(yù)測(cè)結(jié)果和真實(shí)值的誤差大小。將本文方法在走路運(yùn)動(dòng)中的預(yù)測(cè)誤差和ERD、RGRU 進(jìn)行了對(duì)比,如表1 所示。實(shí)驗(yàn)結(jié)果表明本文方法的首幀運(yùn)動(dòng)預(yù)測(cè)結(jié)果誤差更小,相較于ERD 的預(yù)測(cè)結(jié)果,在第1 幀上的誤差減小了63.51%;相較于RGRU,在第1 幀的誤差減小了6.90%。并且因?yàn)榈? 幀的誤差減小,導(dǎo)致后續(xù)的運(yùn)動(dòng)預(yù)測(cè)誤差也更小,在10 幀上的總誤差相較于ERD 和RGRU 減小了50.00%、4.89%。本文方法不僅能夠顯著降低模型的第一幀運(yùn)動(dòng)預(yù)測(cè)的誤差,還能降低總體的運(yùn)動(dòng)預(yù)測(cè)誤差。
表1 走路運(yùn)動(dòng)的關(guān)節(jié)角預(yù)測(cè)誤差比較Tab.1 Comparison of joint angle prediction errors for walking motion
圖6 為本文方法和ERD 的運(yùn)動(dòng)預(yù)測(cè)的可視化比較結(jié)果,圖中實(shí)線框內(nèi)的3 幀為給定的運(yùn)動(dòng)輸入,虛線框內(nèi)的5 幀為運(yùn)動(dòng)預(yù)測(cè)結(jié)果??梢钥闯觯疚姆椒ǖ念A(yù)測(cè)結(jié)果很好地緩解了首幀跳變問題,更接近真實(shí)運(yùn)動(dòng)。
圖6 運(yùn)動(dòng)預(yù)測(cè)結(jié)果比較Fig.6 Comparison of motion prediction results
由于首幀跳動(dòng)變,文獻(xiàn)[4-5,7,17]中的方法都無法用于運(yùn)動(dòng)插值問題;而文獻(xiàn)[6]中的方法雖然避免了跳動(dòng),但是這種方法要求一個(gè)運(yùn)動(dòng)序列作為輸入,在運(yùn)動(dòng)插值問題中往往無法滿足;本文方法可以很好地用于運(yùn)動(dòng)插值任務(wù)。
運(yùn)動(dòng)插值問題的輸入是首幀和末幀的運(yùn)動(dòng)姿態(tài)和位置,要求合成中間的運(yùn)動(dòng)。與傳統(tǒng)運(yùn)動(dòng)插值方法不同,本文在最大后驗(yàn)概率的框架下,利用運(yùn)動(dòng)模型作為先驗(yàn)來優(yōu)化求解最適合的運(yùn)動(dòng),使運(yùn)動(dòng)合成結(jié)果保持自然的同時(shí),盡可能地符合給定的運(yùn)動(dòng)輸入。優(yōu)化問題的誤差函數(shù)可以寫成:
其中:第1 項(xiàng)是運(yùn)動(dòng)先驗(yàn)項(xiàng),度量得到的運(yùn)動(dòng)是否滿足運(yùn)動(dòng)模型建模,與式(6)完全一致;第2 項(xiàng)是擬合項(xiàng),度量得到的結(jié)果是否符合指定的運(yùn)動(dòng)首末幀。該擬合項(xiàng)可以表示為:
其中:Pn是給定的末幀關(guān)節(jié)點(diǎn)位置;pn是優(yōu)化得到的末幀關(guān)節(jié)點(diǎn)位置。插值結(jié)果如圖7 所示,首幀和末幀的姿態(tài)用實(shí)線框出,虛線框中的姿態(tài)對(duì)應(yīng)運(yùn)動(dòng)插值,圖中每隔4 幀顯示1幀。實(shí)驗(yàn)結(jié)果表明,本文方法可以很好地應(yīng)用于運(yùn)動(dòng)插值問題,能夠解決以往基于RNN 的方法都無法解決的問題。
圖7 運(yùn)動(dòng)插值結(jié)果Fig.7 Motion interpolation results
針對(duì)基于RNN 的人體運(yùn)動(dòng)模型中首幀跳變的問題,本文分析了問題產(chǎn)生的原因,并通過估計(jì)RNN 模型的初始隱狀態(tài),成功地解決了RNN 模型的首幀跳變問題,并在運(yùn)動(dòng)合成、運(yùn)動(dòng)預(yù)測(cè)和運(yùn)動(dòng)插值任務(wù)上進(jìn)行大量實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明,本文方法在運(yùn)動(dòng)合成任務(wù)中得到了連續(xù)、自然的運(yùn)動(dòng)合成結(jié)果;在運(yùn)動(dòng)預(yù)測(cè)問題中得到了更準(zhǔn)確的運(yùn)動(dòng)預(yù)測(cè)結(jié)果;在運(yùn)動(dòng)插值任務(wù)中,解決了其他基于RNN 的模型無法解決的插值問題。本文主要研究人體運(yùn)動(dòng)合成中的首幀跳變問題,原理上并不依賴于使用的網(wǎng)絡(luò)模型結(jié)構(gòu),所以任何基于RNN 的運(yùn)動(dòng)模型都可以通過引入本文的初始隱狀態(tài)估計(jì)方法得到更好的運(yùn)動(dòng)合成質(zhì)量和更精確的運(yùn)動(dòng)預(yù)測(cè)結(jié)果。
本文方法雖然在實(shí)驗(yàn)中始終有效,但還無法從理論上保證得到的初始隱狀態(tài)始終合理,求出的隱狀態(tài)有可能并未在訓(xùn)練中出現(xiàn),導(dǎo)致運(yùn)動(dòng)合成結(jié)果不自然。而且本文方法只適用于逐幀運(yùn)動(dòng)合成的網(wǎng)絡(luò)結(jié)構(gòu),并不適用序列到序列的模型。