童立靖,曹健莉
(北方工業(yè)大學 信息學院,北京 100144)
運動遷移技術是將已獲得的源模型的運動數(shù)據(jù)轉(zhuǎn)移到設備無法捕捉的目標模型上,從而生成目標模型運動序列的一種模型生成技術[1]。在游戲或者影視領域的動畫生成時,運動遷移技術對于將演員的動作內(nèi)容遷移到軟件中虛擬的動畫模型上具有重要的應用價值[2]。
隨著深度學習的發(fā)展,人體運動遷移技術也出現(xiàn)了很多新的方法。如Ni等提出一種對于給定的主體模型和驅(qū)動模型利用TS-Net(Transformation-Synthesis network)網(wǎng)絡生成一個新的遷移模型,該模型能夠含有主體模型的外觀和驅(qū)動模型的運動模式[3]。Wei 等提出了通用外觀可控GAC-GAN(General Appearance-Controllable motion transfer- Generative Adversarial Network)的方法,用于實現(xiàn)外觀可控模型動作轉(zhuǎn)移[4],網(wǎng)絡訓練完成后,模型就可以通過改變輸入的外觀信息來生成新的外觀。Jiang等提出了利用人體模型分段處理的方法進行運動遷移,其生成模型具有較好的時間連續(xù)性[5]。Zhang等提出了一種基于神經(jīng)潛變量優(yōu)化的人體動作轉(zhuǎn)移方法,潛變量優(yōu)化利用解碼器建立潛變量空間和目標模型運動空間之間的映射,通過搜索最優(yōu)潛變量向量得到滿足約束條件的動作遷移結果[6]。Aberman等提出了一種Skeleton-Aware網(wǎng)絡,利用CNN骨骼卷積網(wǎng)絡將輸入的人體模型化簡為簡單的原始骨骼,并利用Vanilla GAN網(wǎng)絡進行運動遷移[7]。Yang等提出了一種TransMoMo方法,利用模型運動中動作、結構、視角的不變性設計的自編碼器來訓練一個運動遷移的網(wǎng)絡,將提取到的原始運動模型和目標運動模型送入其中進行學習[8]。
人體運動遷移是一個高度復雜的過程,需要考慮速度、方向、姿勢和力量等多個因素,從而實現(xiàn)自然動作。為了實現(xiàn)高質(zhì)量的運動遷移,訓練的模型需要具備高精度和高準確性,以確保模型具有泛化能力和適應性。本文提出了一種基于DenseNet[9](Dense convolutional Network)與WGAN-GP[10](Wasserstein GAN with Gradient Penalty)的運動遷移方法。首先,使用基于DenseNet 網(wǎng)絡的方法來提取人體靜態(tài)特征,通過增加編碼器深度提高了靜態(tài)參數(shù)的提取能力;其次,采用基于WGAN-GP 深度學習網(wǎng)絡的方法以提高運動遷移網(wǎng)絡的精度和穩(wěn)定性。
對于給定的源動作序列A和目標模型B,首先由動態(tài)編碼器EQ計算出深度動態(tài)特征AQ,然后由靜態(tài)編碼器ES計算出深度靜態(tài)特征BS,最后由目標模型解碼器Dm結合這兩個深度特征形成目標模型B的運動序列,從而完成人體模型的運動遷移GA→B??傮w框架如圖1所示。
圖1 運動遷移生成過程Figure 1 Motion migration generation process
對于時間長度為T幀的人體運動動畫序列A,人體的J個關節(jié)點{n0,n1,n2,…,ni,…,nJ}的運動數(shù)據(jù)由靜態(tài)部分S∈RJ×f和動態(tài)部分D∈RT×J×q組成。S為模型靜態(tài)位移數(shù)據(jù),由J個三維向量f組成,f為人體模型每一關節(jié)相對中心點的偏移量。D為模型動態(tài)關節(jié)點旋轉(zhuǎn)數(shù)據(jù),由T×J個四維向量q組成,q為每個關節(jié)點旋轉(zhuǎn)角度四元數(shù)[11]。
為了完成從源模型至目標模型的運動遷移,首先通過靜態(tài)編碼器和動態(tài)編碼器提取源模型和目標模型的深度動態(tài)特征和深度靜態(tài)特征,然后將它們送入骨骼池化層中以簡化為具有相同骨骼結構的同胚骨骼,最后在同胚骨骼構成的共享隱變量空間中完成運動遷移計算。
對于人體模型靜態(tài)數(shù)據(jù)S,其深度靜態(tài)位移特征由靜態(tài)編碼器提取,其結構如圖2所示。靜態(tài)編碼器由兩個層級組成,每個層級由DenseNet網(wǎng)絡層、全連接層和池化合并層組成。DenseNet是由多個Dense模塊和Transition模塊堆疊而成的深度神經(jīng)網(wǎng)絡。每個Dense由多個通過稠密連接的Bottleneck模塊組成,在Bottleneck中,輸入的靜態(tài)數(shù)據(jù)S先后經(jīng)過兩次激活層和卷積層的處理,然后該層輸出與上一層的輸入數(shù)據(jù)按通道拼接在一起,作為該層Bottleneck 的輸出。Transition 模塊為相鄰Dense 之間連接模塊,由1×1卷積層和激活層組成,目的是降低每個Dense計算結果的通道數(shù),以減少模型參數(shù)量和計算復雜度。
圖2 靜態(tài)編碼器結構Figure 2 Static encoder structure
DenseNet 網(wǎng)絡結構的主要優(yōu)勢在于它可以通過將每個層的輸出與所有后續(xù)層的輸入連接起來增強特征重用和梯度流動,從而有效地學習到復雜、非線性的特征表示。通過這些層級組成的DenseNet網(wǎng)絡,系統(tǒng)可以根據(jù)預處理數(shù)據(jù)中的人體拓撲結構獲取相鄰關節(jié)點信息和關節(jié)之間的連接方式,提高靜態(tài)特征的提取精度,從而可以生成更為準確的運動遷移模型。
人體靜態(tài)數(shù)據(jù)在DenseNet 層處理后由全連接網(wǎng)絡提取靜態(tài)特征。所提取的靜態(tài)特征由骨骼池化層(Skeleton Pooling)保留必要的關節(jié)點從而簡化人體模型,如圖3所示。首先,骨骼池化層利用樹形結構處理骨骼段長度,骨骼段的長度定義為從父節(jié)點到子節(jié)點所經(jīng)過的邊的數(shù)量,并將長度大于d的關節(jié)點放入需要保留的關節(jié)點序列中。然后,利用合并池化方式移除多余的關節(jié)點,合并骨骼段。最后將骨骼池化層的計算結果送入到激活層中計算出深度靜態(tài)特征,作為共享隱空間中的靜態(tài)特征。
圖3 骨骼池化Figure 3 Skeleton pooling
人體運動時,每個關節(jié)連接不同的骨骼和肌肉,有獨特運動范圍和約束,導致每個關節(jié)的運動狀態(tài)不同[12]。在使用卷積神經(jīng)網(wǎng)絡提取骨骼模型的動態(tài)特征時,不同的關節(jié)點需要用不同權重的卷積核處理,以適應不同身體部位的特征,提高模型準確性。其動態(tài)編碼器結構如圖4所示。動態(tài)編碼器由2層組成,每一層分別由一維骨骼卷積、骨骼池化和激活層組成,結合原始靜態(tài)數(shù)據(jù)與利用DenseNet 計算出的深度靜態(tài)特征完成骨骼動態(tài)特征提取。
圖4 動態(tài)編碼器結構Figure 4 Dynamic encoder structure
原始靜態(tài)數(shù)據(jù)與利用DenseNet計算出的深度靜態(tài)特征需結合動態(tài)數(shù)據(jù)進行一維骨骼卷積提取特征,如圖5所示。一維卷積在每個時間幀上的關節(jié)點序列的動態(tài)數(shù)據(jù)上進行動態(tài)特征提取,并附加上靜態(tài)特征從而構成完成的運動特征。其一維骨骼卷積如式(1)所示。
圖5 一維骨骼卷積Figure 5 1D skeletal convolution
本文采用WGAN-GP 網(wǎng)絡完成人體運動遷移訓練,包括編碼器、解碼器和判別器,如圖6所示,其中,編碼器和解碼器組成生成器,負責生成人體運動遷移后的運動模型。對源模型A和目標模型B分別訓練了靜態(tài)編碼器和動態(tài)編碼器以及用于還原源模型和目標模型的兩個解碼器DA和DB。鑒別器CA和CB負責鑒別生成運動模型的真實性。編碼器生成深度動、靜態(tài)特征,該特征與原始骨骼獨立,并構成了由原始同胚骨骼組成的潛變量空間,利用該空間實現(xiàn)源模型的動態(tài)編碼器產(chǎn)生的動態(tài)特征與產(chǎn)生的靜態(tài)特征的結合,再通過解碼器DB完成兩個模型間的運動遷移G(A→B)。為了盡可能生成逼真的運動遷移模型,提高生成器的生成能力和鑒別器的鑒別能力,系統(tǒng)損失函數(shù)設計為鑒別器損失函數(shù)和生成器損失函數(shù)兩個部分。
圖6 基于WGAN-GP運動遷移網(wǎng)絡Figure 6 Motion retargeting network based on WGAN-GP
1.3.1 生成器損失函數(shù)
生成器的損失函數(shù)包括重構損失、同胚骨骼動態(tài)特征損失以及末端效應損失3個部分。
(3)末端效應損失:在人體模型的運動遷移中,不同模型具有不同數(shù)量的關節(jié)節(jié)點和不同比例長度的關節(jié)段,但它們應具有相同的末端關節(jié)單位速度。該損失函數(shù)式計算運動過程中末端關節(jié)的單位速度損失,如式(4)所示。其中,為源模型A的末端關節(jié)速度,為生成模型B的末端關節(jié)速度,利用身高hAe和hBe完成歸一化計算。
1.3.2 鑒別器損失函數(shù)
鑒別器損失函數(shù)包括3部分:判斷由生成動態(tài)參數(shù)合成模型的損失、判斷由原始動態(tài)參數(shù)合成模型的損失和梯度懲罰項,如式(5)所示:
使用WGAN-GP 網(wǎng)絡模型可以避免模式崩潰的問題,能夠提高生成對抗網(wǎng)絡的性能和泛化能力,從而使得生成器可以產(chǎn)生更高質(zhì)量的運動模型。通過該框架可以實現(xiàn)無監(jiān)督的運動遷移[14],并且保證生成的運動與原始運動的相似度。
實驗在一臺CPU 為AMD EPYC 7402 24-Core Processor,GPU 為NVIDIA Tesla P100-16GB 的PC 設備上進行,算法的編程語言為Python 3.8,開發(fā)環(huán)境為Jupyter lab,開發(fā)框架為Pytorch1.7.1。數(shù)據(jù)集為Mixamo人體模型庫。Mixamo是一個在線3D動畫平臺,其數(shù)據(jù)集包含大量的人體模型和動作數(shù)據(jù),模型庫包含了大量的人物角色模型,包括男性、女性、兒童等不同類型的人物模型。實驗中骨骼池化長度d值為2,WGAN-GP網(wǎng)絡訓練的梯度懲罰項系數(shù)λ值為0.1。
本文方法生成的動作模型與源模型的動作對比如圖7所示。圖7a與圖7b分別是兩組不同動作的3幀運動遷移結果圖像,左側為源動作模型,右側為遷移后模型,可見本文方法所生成的運動模型與源模型相比具有較高的相似度。
為了評估DenseNet靜態(tài)編碼器的有效性,對生成運動模型與真實模型的靜態(tài)位移特征進行了對比,如圖8所示。圖8中黑色柱狀條為生成模型的關節(jié)點位移,灰色柱狀條為真實模型的關節(jié)點位移數(shù)據(jù),圖中顯示每個關節(jié)點對應的兩個位移均能高度重合。實驗表明本文的DenseNet編碼器具有良好的靜態(tài)特征提取能力,能夠有效地提取人體模型的靜態(tài)特征。
為了評估基于WGAN-GP運動遷移網(wǎng)絡生成的遷移模型的準確性,對生成模型與真實模型部分關節(jié)點的旋轉(zhuǎn)角進行了對比,4個隨機時間幀的比較數(shù)據(jù)如圖9所示。圖中紅色折線為真實模型關節(jié)點旋轉(zhuǎn)角,藍色折線為生成模型關節(jié)點旋轉(zhuǎn)角。由圖9可見,利用WGAN-GP訓練網(wǎng)絡生成的模型與真實模型相比,動態(tài)旋轉(zhuǎn)角有較高準確性。
為了驗證本文方法的有效性,分別與CycleGAN[15]和Skeleton-Aware 方法進行了對比性實驗。精度對比數(shù)據(jù)如表1所示,評價指標為基于模型身高歸一化處理后生成模型與真實模型的關節(jié)點位置誤差,如式(7)所示:
表1 對比實驗數(shù)據(jù)表Table 1 Comparison experiment data table
式(7)中N為動作幀總數(shù),J為關節(jié)點總數(shù),M為測試模型集合,hk為模型身高。為將骨骼C上的動作遷移到骨骼模型k上之后生成模型第i幀第j個關節(jié)點的位置,為真實骨骼模型k在第i幀第j個關節(jié)點的位置。
與Skeleton-Aware方法和CycleGAN方法相比,本文方法在靜態(tài)編碼器中使用了DensNet網(wǎng)絡,提高了關節(jié)點特征提取的準確度。此外,在遷移網(wǎng)絡中添加了WGAN-GP網(wǎng)絡的梯度懲罰項,防止出現(xiàn)梯度爆炸或者梯度消失的現(xiàn)象,保證了鑒別器能夠更加有效地鑒別生成器產(chǎn)生的運動序列,提高了運動遷移網(wǎng)絡的遷移精度。
本文提出一種基于DenseNet與WGAN-GP的運動遷移方法,針對目前人體骨骼模型運動遷移算法計算精確度不高的問題,利用DenseNet網(wǎng)絡增加靜態(tài)編碼器深度提高人體模型靜態(tài)特征提取能力,并利用GANGP深度學習網(wǎng)絡提高了運動遷移模型的精度和穩(wěn)定性。實驗結果表明所生成的運動模型與目標動作模型有較高的相似度,并且與Skeleton-Aware 和CycleGAN 方法相比本文方法生成誤差較小,能夠產(chǎn)生良好的視覺效果。下一步將針對動態(tài)編碼器進行改進,提高編碼器動態(tài)特征提取能力,并實現(xiàn)個性化運動模型遷移。