昝曉菲
(北京交通大學(xué) 計算機與信息技術(shù)學(xué)院,北京 100044)
隨著虛擬現(xiàn)實及動畫產(chǎn)業(yè)的高速發(fā)展,人體運動捕捉技術(shù)扮演著越來越重要的角色。然而,由于人體運動捕捉設(shè)備價格昂貴、設(shè)備的使用對場地及人員的要求過高等因素,人體運動捕捉數(shù)據(jù)的獲取是一件成本很大、門檻很高的事情。這大大制約了相關(guān)產(chǎn)業(yè)的發(fā)展。人體運動捕捉數(shù)據(jù)的重用技術(shù)則是解決運動數(shù)據(jù)獲取成本較高的有效手段。通過人體運動捕捉數(shù)據(jù)的重用技術(shù),可以利用運動數(shù)據(jù)庫中已經(jīng)存在的運動捕捉數(shù)據(jù)生成逼真的新的指定運動序列,從而提高數(shù)據(jù)的利用率,擺脫運動捕捉設(shè)備的限制。
在動畫制作中,虛擬角色的運動往往需要具有鮮明的風(fēng)格。但是,傳統(tǒng)的人體運動捕捉技術(shù)很難滿足眾多的人體運動風(fēng)格需求;如果依靠動畫師進行人工處理,這項工作也十分繁瑣,需要耗費大量的精力。
本文所研究的人體運動風(fēng)格轉(zhuǎn)換這一運動數(shù)據(jù)重用技術(shù),可以通過計算機自動地將一段普通的運動序列轉(zhuǎn)換為具有指定的鮮明運動風(fēng)格的新運動。例如,把一段正常行走的運動序列轉(zhuǎn)換成具有垂頭喪氣行走風(fēng)格的運動序列。人體運動非常復(fù)雜,人體運動捕捉數(shù)據(jù)由大量的骨骼關(guān)節(jié)數(shù)據(jù)組成,這些對生成自然且符合期望的新運動帶來了很大的挑戰(zhàn)。
本文將功能強大的深度學(xué)習(xí)網(wǎng)絡(luò)應(yīng)用到人體運動數(shù)據(jù)重用領(lǐng)域,構(gòu)建出一個基于深度卷積自編碼器的模型來解決人體運動風(fēng)格轉(zhuǎn)換問題。
在人體運動合成領(lǐng)域,Kovar等[1]最早提出運動圖的合成方法。運動圖是由大量的運動數(shù)據(jù)生成的表示運動數(shù)據(jù)之間相關(guān)關(guān)系的一種數(shù)據(jù)結(jié)構(gòu)。根據(jù)用戶的需求可以在所構(gòu)造的運動圖中搜索最優(yōu)的運動路徑,最后生成具有獨特風(fēng)格的新運動。但是,這類方法容易產(chǎn)生腳步滑動、運動不自然等問題。參數(shù)化的合成方法可以有效地解決這些問題。Kwon[2]等將運動速度、加速度、落腳點等因素構(gòu)造為參數(shù),添加到合成模型中。通過這樣的控制可以使新合成的運動大大減少腳步滑動、漂移等問題。Min等[3]使用主成分分析法對運動數(shù)據(jù)進行降維,得到與人體運動緊密相關(guān)的低維參數(shù),然后通過對低維參數(shù)的修改達到合成的目的,最后將處理后的數(shù)據(jù)恢復(fù)到原來的空間。
近年來,各種深度學(xué)習(xí)模型的出現(xiàn)對圖像處理及自然語言處理等領(lǐng)域的發(fā)展有很大的推動作用。深度學(xué)習(xí)模型重要的優(yōu)點之一就是它可以自動地從數(shù)據(jù)集中學(xué)習(xí)到數(shù)據(jù)的特征,這為數(shù)據(jù)的編輯和處理提供了新的研究方向。Gatys等[4]利用深度網(wǎng)絡(luò)模型分別在隱層提取圖像的風(fēng)格特征和內(nèi)容特征,然后通過在隱層的編輯處理,最后可以得到保持原來圖像的內(nèi)容但風(fēng)格不同的新圖像。在運動數(shù)據(jù)重用領(lǐng)域,Taylor等[5]構(gòu)建出一個受限玻爾茲曼機的模型,通過提取運動的相關(guān)參數(shù)來進行運動混合,以生成新的運動。Holden等[6]提出一種基于深度網(wǎng)絡(luò)框架的模型,該方法通過對大量運動數(shù)據(jù)的學(xué)習(xí)得到一個關(guān)于數(shù)據(jù)集的運動特征空間,在特征空間進行特征編輯最后達到運動合成的目的。
運動流形是大量有效的自然運動所構(gòu)成的一個子空間,它也是由大量人體運動數(shù)據(jù)提取構(gòu)造出的特征空間。在本文中,運動流形由深度卷積自編碼器的隱層單元所表示。該隱層單元可以表示運動數(shù)據(jù)時序與姿態(tài)的高度相關(guān)性。經(jīng)此深度卷積自編碼器的隱層單元處理重新生成的運動序列具有生動自然、流暢逼真的特點。
本文使用的人體運動捕捉數(shù)據(jù)來自于卡內(nèi)基梅隆大學(xué)運動捕捉數(shù)據(jù)庫(CMU Motion Capture Datebase)[7]。該數(shù)據(jù)庫共有2605組人體運動序列。其運動數(shù)據(jù)所對應(yīng)的人體骨骼架構(gòu)如圖1所示。為了處理方便,把原來120幀每秒的數(shù)據(jù)調(diào)整為60幀每秒,同時對所有的數(shù)據(jù)進行歸一化處理。
圖1 人體骨骼架構(gòu)
為了得到運動的流形空間和提取運動數(shù)據(jù)的特征,本文構(gòu)建了一個具有三個隱層的卷積自編碼器[8]。自編碼器的網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。在此卷積網(wǎng)絡(luò)中,網(wǎng)絡(luò)的每一個隱層都表示了不同層次的運動流形。網(wǎng)絡(luò)的L1、L2、L3隱層對應(yīng)的濾波器的大小分別設(shè)置為3063、3064、30128。此卷積自編碼器提供了前向操作和反向操作。前向操作就是自編碼器的編碼過程,把輸入的運動序列X編碼成在隱層空間的值H;反向操作就是自編碼器的解碼過程,把在隱層的值H進行解碼生成運動序列。
圖2 深度卷積自編碼器的網(wǎng)絡(luò)結(jié)構(gòu)
在對網(wǎng)絡(luò)的每一層進行前向操作時,首先對輸入的數(shù)據(jù)進行卷積操作;然后再用一維最大池化方法來進行時域約減;最后,再對約減后的數(shù)據(jù)進行非線性映射操作ReLu[9]。這樣,就得到了運動數(shù)據(jù)在隱層的運動流形。
對于第k層網(wǎng)絡(luò),給定卷積操作*、最大池化操作Ψ、權(quán)重矩陣Wk和偏置bk,前向操作的定義如下式所示:
Φk(X)=ReLu(Ψ(X*Wk+bk))
(1)
其中,矩陣在對每一層進行反向操作時,只需要把前向操作反轉(zhuǎn)即可。需要特別注意的是反池化操作。在單獨訓(xùn)練每一層網(wǎng)絡(luò)時,反池化操作就是在每個隱層單元所對應(yīng)的兩個單元中隨機選取一個賦予池化值,然后把另一個單元置零;在最后進行網(wǎng)絡(luò)的微調(diào)訓(xùn)練階段或者是使用網(wǎng)絡(luò)生成新的運動序列時,反池化操作和平均池化一樣將兩個對應(yīng)的單元都設(shè)為池化值。這樣,新生成的運動序列會更加流暢。
(2)
權(quán)重矩陣Kk初始化[10]為一些小的數(shù)值,偏置bk初始化為0。
網(wǎng)絡(luò)模型的訓(xùn)練通過輸入的運動序列X經(jīng)過前向操作和反向操作來完成。訓(xùn)練分為兩個階段。首先對網(wǎng)絡(luò)的每一層進行單獨訓(xùn)練,然后再對整個網(wǎng)絡(luò)進行微調(diào)訓(xùn)練。網(wǎng)絡(luò)訓(xùn)練可以視為一個最優(yōu)化問題,通過最小化下面的損失函數(shù)可以求得網(wǎng)絡(luò)對應(yīng)的參數(shù)θ={W,b}。
(3)
在這個式子中,第一項度量的是生成運動序列與輸入運動序列誤差的平方;第二項是對網(wǎng)絡(luò)參數(shù)數(shù)量的限制,用來保證盡可能使用最少數(shù)目的參數(shù)來構(gòu)建網(wǎng)絡(luò)。
在使用CMU運動捕捉數(shù)據(jù)庫的2605組運動序列完成網(wǎng)絡(luò)的訓(xùn)練后[11],這些濾波器可以表示運動庫中各種運動的時序與姿態(tài)的強相關(guān)特征。網(wǎng)絡(luò)中隱層的層級越深,得到的這種運動特征就越抽象、越具有概括性。
在進行運動風(fēng)格轉(zhuǎn)換時,需要輸入一段具有鮮明運動風(fēng)格的運動序列,即運動風(fēng)格序列;同時,還需要輸入期望它的運動風(fēng)格發(fā)生轉(zhuǎn)換的序列,即運動內(nèi)容序列。在進行運動風(fēng)格轉(zhuǎn)換之后,新生成的運動序列同時具有前者的運動風(fēng)格和后者的運動內(nèi)容。因此,在轉(zhuǎn)換時需要先使用訓(xùn)練好的深度卷積自編碼器把運動內(nèi)容序列的內(nèi)容特征和運動風(fēng)格序列的風(fēng)格特征分別提取出來;然后,在深度卷積自編碼器的隱層單元對隨機初始化生成的運動數(shù)據(jù)建立約束進行訓(xùn)練;最后,再通過反向操作輸出風(fēng)格轉(zhuǎn)換后的新運動序列。
根據(jù)深度卷積網(wǎng)絡(luò)的特性,運動序列的內(nèi)容特征可以定義為運動序列在深度卷積網(wǎng)絡(luò)中的隱層值。由于池化操作減小了運動數(shù)據(jù)在時域上的分辨率,所以層級越淺的隱層對運動內(nèi)容的完成性的保持就越好。由于網(wǎng)絡(luò)的層級越深,隱層值所表達的內(nèi)容就越抽象。所以,層級越深對運動風(fēng)格的概括性就越好。運動序列的風(fēng)格特征具體可以使用Gram矩陣來計算。
利用訓(xùn)練好的深度卷積自編碼器,可以分別提取運動內(nèi)容序列的內(nèi)容特征和運動風(fēng)格序列的風(fēng)格特征。根據(jù)網(wǎng)絡(luò)層級與特征的關(guān)系,本文使用深度卷積自編碼器的L1隱層也就是最淺的隱層來提取運動序列的內(nèi)容特征,使用L3隱層也就是最深的隱層來提取運動序列的風(fēng)格特征。這樣會得到更為準(zhǔn)確的內(nèi)容及風(fēng)格特征。
對運動風(fēng)格轉(zhuǎn)換建立的約束包括運動內(nèi)容約束和運動風(fēng)格約束兩個部分。首先,為了避免生成的轉(zhuǎn)換后的運動序列偏向于運動內(nèi)容或者是偏向于運動風(fēng)格,在網(wǎng)絡(luò)的L2隱層利用白噪聲初始化得到得隱層值Ht。網(wǎng)絡(luò)最后輸出的轉(zhuǎn)換后的運動序列就是由Ht通過反向操作生成的。對于運動內(nèi)容約束,即是Ht在L1隱層的值與運動內(nèi)容序列在L1隱層的值建立的約束。內(nèi)容約束的定義如下:
(4)
對于風(fēng)格約束,即是Ht在L3隱層的值與運動風(fēng)格序列在L3隱層的值建立的約束。風(fēng)格約束的定義如下:
(5)
其中,Φ3(S)是輸入的運動風(fēng)格序列由式(1)進行三次前向操作傳到網(wǎng)絡(luò)L3隱層的值,Φ3(Ht)是由網(wǎng)絡(luò)L2隱層的初始值Ht由式(1)進行一次前向操作傳到網(wǎng)絡(luò)L3隱層的值。函數(shù)G用來計算格萊姆矩陣,表示為隱層單元的內(nèi)積。函數(shù)G的定義如下式所示:
(6)
其中,H是網(wǎng)絡(luò)隱層單元的值。
為了進行運動風(fēng)格轉(zhuǎn)換,本文將式(4)中的運動內(nèi)容約束和式(5)中的運動風(fēng)格約束合并成整體轉(zhuǎn)換約束進行訓(xùn)練。這樣,通過不斷變換L2隱層值Ht使整體轉(zhuǎn)換約束達到最小。最后,可以得到使整體轉(zhuǎn)換約束最小時對應(yīng)的Ht。把Ht進行反向操作就可以得到轉(zhuǎn)換后的新運動序列。整體轉(zhuǎn)換約束定義為:
Ltranster=cLcontent+sLstyle
(7)
其中,參數(shù)c和s是約束系數(shù),用來調(diào)節(jié)運動內(nèi)容和運動風(fēng)格的相對重要性。在本文中,c和s分別設(shè)置為1.00和0.01。
本文的目標(biāo)是通過深度卷積自編碼器,在運動內(nèi)容序列的基礎(chǔ)上生成具有另一種風(fēng)格的新的運動序列。這段新的運動序列同時具有原來的運動內(nèi)容和指定的運動風(fēng)格。例如,輸入一段具有老人行走風(fēng)格的運動序列S作為運動風(fēng)格序列,再輸入另一段普通行走的運動序列C作為運動內(nèi)容序列。經(jīng)過深度卷積自編碼器處理,可以把普通行走的運動序列C轉(zhuǎn)換成也具有老人行走風(fēng)格的新運動序列T。
實驗中,分別使用了老人行走風(fēng)格的運動序列、僵尸行走風(fēng)格的運動序列、沮喪行走風(fēng)格的運動序列等分別作為運動風(fēng)格序列與普通運動序列相結(jié)合,把沒有鮮明風(fēng)格的普通運動序列轉(zhuǎn)換成了具有不同鮮明風(fēng)格的新運動序列。部分實驗結(jié)果如圖3、圖4、圖5所示。
(a) (b)圖3 老人行走風(fēng)格轉(zhuǎn)換
(a) (b)圖4 僵尸行走風(fēng)格轉(zhuǎn)換
(a) (b)圖5 沮喪行走風(fēng)格轉(zhuǎn)換
圖3(a)是具有老人行走風(fēng)格的運動序列,圖中的動畫角色以佝僂的姿態(tài)慢慢行走;將圖3(b)左側(cè)普通的運動序列進行對應(yīng)的轉(zhuǎn)換后,生成的圖3(b)右側(cè)轉(zhuǎn)換后的運動序列同樣也具有了老人行走的運動風(fēng)格。圖4(a)是具有僵尸行走風(fēng)格的運動序列,圖中的動畫角色手臂伸直、走路搖擺,將圖4(b)右側(cè)普通的運動序列進行對應(yīng)的風(fēng)格轉(zhuǎn)換后,生成的圖4(b)左側(cè)轉(zhuǎn)換后的運動序列同樣也具有僵尸行走風(fēng)格。圖5(a)是具有沮喪風(fēng)格的運動序列,圖中的角色垂頭喪氣地行走著,將圖5(b)右側(cè)的普通運動序列進行對應(yīng)的風(fēng)格轉(zhuǎn)換后,生成的圖5(b)左側(cè)轉(zhuǎn)換后的運動序列同樣也具有明顯的沮喪風(fēng)格。
風(fēng)格轉(zhuǎn)換后的運動序列具有了新的運動風(fēng)格,同時保留著原來的運動內(nèi)容,比如運動的類型和運動軌跡。但是,這些運動內(nèi)容也會發(fā)生一些微小的變化。這是因為運動風(fēng)格的改變會對運動的類型和軌跡帶來影響。具體來說,運動步伐的大小和頻率也是運動風(fēng)格的一部分,它們的改變會對運動類型和運動軌跡有一定影響??梢酝ㄟ^調(diào)節(jié)式(7)中c和s的相對大小來調(diào)節(jié)轉(zhuǎn)換后的運動序列,通過調(diào)節(jié)可以使它偏向于特定的運動風(fēng)格或是特定的運動內(nèi)容。
本文將近幾年發(fā)展迅猛的深度學(xué)習(xí)技術(shù)應(yīng)用到人體運動捕捉數(shù)據(jù)重用領(lǐng)域,提出了基于深度卷積自編碼器的運動風(fēng)格轉(zhuǎn)換模型。該模型可以有效地實現(xiàn)對運動序列的運動風(fēng)格的轉(zhuǎn)換。不同于傳統(tǒng)的人體運動捕捉數(shù)據(jù)重用技術(shù),該模型在操作時無需對運動數(shù)據(jù)進行大量的人工處理,具有很高的工作效率。另外,它不僅具有良好的轉(zhuǎn)換效果,該模型還有著較強的泛化能力。未來將考慮把此模型推廣到視頻人體運動研究領(lǐng)域。