范沈偉, 李國平, 王國中
(上海工程技術(shù)大學電子電氣工程學院, 上海 201620)
在虛擬現(xiàn)實以及動畫的制作中,人物視頻的生成是一個重要的研究課題。 由于人物的外觀包含大量的細節(jié)并且人物的運動由身體各個部分的運動狀態(tài)決定,所以想要生成高質(zhì)量的人物視頻是一項具有挑戰(zhàn)性的工作。
Vid2Vid[1]提出了一種基于條件對抗生成網(wǎng)絡CGAN[2]的視頻生成模型。 模型能夠使用2D 關(guān)鍵點驅(qū)動關(guān)鍵幀生成視頻。 一方面,模型預測當前幀相對于前一幀的光流,通過扭曲前一幀得到當前幀;另一方面,模型使用CGAN 來生成無法使用光流扭曲得到的部分。
一個Vid2Vid 模型只能對應于一個人物,F(xiàn)ewshot Vid2Vid[3]在Vid2Vid 的基礎上實現(xiàn)了一個模型對應多個人物。 模型引入了生成器參數(shù)生成模塊。 其中的生成器參數(shù)不再是固定的,而是根據(jù)輸入的人物圖片來生成對應的生成器參數(shù)。 相比于Vid2Vid,F(xiàn)ew-shot Vid2Vid 訓練更加困難,需要龐大的數(shù)據(jù)集,并且訓練成本很高。
Vid2Vid[1]和Few-shot Vid2Vid[3]在訓練以及生成視頻的過程中需要使用預訓練的關(guān)鍵點提取網(wǎng)絡獲取關(guān)鍵點標簽信息,Monkeynet[4]提出了一種端到端的無監(jiān)督視頻生成模型,不再需要事先提取關(guān)鍵點。 模型使用了自編碼器結(jié)構(gòu),首先使用幀與幀之間關(guān)鍵點的位移來預測幀與幀之間的光流,然后根據(jù)光流扭曲自編碼器的隱式編碼來得到生成的幀。
由于簡單的關(guān)鍵點之間的位移并不能很好地表示關(guān)鍵點附近像素點的運動趨勢。 所以除了預測關(guān)鍵點之外,F(xiàn)OMM[5]還增加了雅可比矩陣的預測。將關(guān)鍵點及關(guān)鍵點附近像素點的運動趨勢看作是2D 平面內(nèi)的仿射變換。 由于獲取了更加準確的光流,F(xiàn)OMM[5]相比于Monkeynet[4]生成的視頻質(zhì)量更好。
國內(nèi)文獻[6-9]在國外工作的基礎上提出了幾種不同的生成網(wǎng)絡結(jié)構(gòu)進行人物視頻的生成。
上述算法都使用人物2D 圖像作為外觀信息,人物關(guān)鍵點在2D 平面內(nèi)的運動趨勢作為運動信息來進行視頻的生成,只能生成固定視角的視頻。 為了生成多視角的人物視頻,本文引入了3D 信息取代2D 信息。 區(qū)別于使用貼圖的方式進行人物3D建模[10-12],本文提出了一種結(jié)合SMPL[13]以及NERF[14]的方法獲取人物3D 模型。 考慮到3D 模型由SMPL 獲得,因此利用VIBE[15]得到的SMPL 參數(shù)可以對其進行驅(qū)動,以此完成多視角人物視頻的生成。
神經(jīng)輻射場(NERF)是一種通過稀疏的不同視角的圖片,對靜態(tài)三維物體進行重建的技術(shù)。 過程中使用一個神經(jīng)網(wǎng)絡(多層感知機MLP)來表示一個靜態(tài)的三維物體。 研究輸入是觀測視角(θ,?)和三維坐標點(x,y,z),輸出是體密度σ以及三維坐標點的顏色c。 使用輸出(σ,c) 進行體渲染,就能得到三維物體在不同視角下的二維圖像。
體渲染首先根據(jù)觀測視角和相機參數(shù)確定觀測點以及圖像平面。 以觀測點為起點,以圖像平面每個像素的中心為目標發(fā)射射線。 在近平面和遠平面之間,將射線均分成n段。 每段的長度記為δ。 在每一個小段中進行隨機采樣,并送入NERF 得到對應三維坐標點的σ,c。 根據(jù)式(1)進行積分得到射線與圖像平面交點處像素的值:
SMPL 模型是一個裸體的3D 人體模型,具有N=6 890 個頂點和K=23 個關(guān)節(jié)。 由和兩個參數(shù)來分別控制模型的體型和姿勢。的維度為10,的維度|=3?K+3 =72,每個關(guān)節(jié)對應一個三維旋轉(zhuǎn)向量,外加一個全局旋轉(zhuǎn)向量。 該過程可由如下公式進行描述:
其中,∈是SMPL 模型的平均模板,保持T-pose。 當和變化時,模型頂點會在的基礎上發(fā)生偏移。 偏移量的大小由Bs和Bp函數(shù)計算得到;S表示一個3N?的矩陣;P表示一個3N?9K的矩陣;R表示羅德里格斯公式,將三維旋轉(zhuǎn)向量變換為3?3 的旋轉(zhuǎn)矩陣。 關(guān)節(jié)點的三維坐標由式(3)計算得到:
其中,? 表示一個(K+1)?N的矩陣。進一步地,研究推得的數(shù)學公式可寫為:
得到了TP(),J(),之后,SMPL 模型使用混合矩陣W作為權(quán)重,通過混合函數(shù)W得到最終的頂點。 式(4)中,混合矩陣W是N?(K+1) 的矩陣,表示每個關(guān)節(jié)對每個頂點的影響。A(k) 表示前k個關(guān)節(jié)的集合。Gk(,J) 表示關(guān)節(jié)k相對于世界坐標系的變換,(,J) 表示關(guān)節(jié)k相對于Tpose 的變換。
本文提出的基于SMPL 的人物視頻生成算法主要包括3 個模塊,分別是:視頻前后景分割模塊、NERF 三維重建模塊、以及SMPL 參數(shù)預測模塊。算法整體流程如圖1 所示。
圖1 算法流程圖Fig. 1 Overview of the method
算法首先需要對視頻中的人物完成三維建模。使用單目攝像頭固定好拍攝位置,拍攝一段目標人物保持A-pose,原地360°旋轉(zhuǎn)的視頻,如圖2 所示。為了不讓背景影響三維重建的過程,使用視頻前后景分割模塊[16]將目標人物作為前景提取出來,然后送入NERF 訓練得到三維模型。
圖2 A-pose 示意圖Fig. 2 A-pose explanation
有了目標人物的三維模型,要生成人物視頻,還需要獲得一組SMPL 模型參數(shù)作為運動信息。SMPL 參數(shù)由SMPL 參數(shù)預測模塊VIBE[15]從一段視頻中提取。
2.2.1 三維坐標轉(zhuǎn)換
NERF 三維重建模塊需要將A-pose 圖像序列轉(zhuǎn)化為相應的三維模型,詳見圖2。 由于在A-pose獲取的過程中,需要人物在原地360°轉(zhuǎn)圈。 在沒有特殊設備的情況下,人的姿態(tài)不可避免地會有改變。而NERF 適用于靜態(tài)場景的重建,人物姿態(tài)的變化會導致重建質(zhì)量的下降。
為此,本文將圖像中人物不同姿態(tài)所對應的3D空間坐標使用SMPL 模型統(tǒng)一變換為SMPL 平均模板中的姿態(tài)T-pose,如圖3 所示。 接著,再使用NERF 進行重建。 在式(4)基礎上,繼而可推得:
圖3 A-pose 到T-pose 的空間坐標轉(zhuǎn)換示意圖Fig. 3 Coordinate transformation from A-pose to T-pose
空間坐標變換方法參考文獻[10],見式(6):
其中,v表示SMPL 模型頂點,bs,i和bp,i分別是頂點i的體型函數(shù)以及姿勢函數(shù)。 式(6)的左邊是T-pose 的人物頂點坐標,右邊的是A-pose 的人物頂點坐標。
2.2.2 三維重建模塊整體結(jié)構(gòu)與損失函數(shù)
去除背景的A-pose 作為輸入,經(jīng)過SMPL 參數(shù)預測模塊后得到弱透視相機參數(shù)以及SMPL 參數(shù)。根據(jù)相機參數(shù)進行采樣。 以相機為起點發(fā)射射線,射線的方向穿過每個像素的中心。 在視頻前后景分割時可以得到人物的輪廓掩膜,只有在輪廓內(nèi)部的射線才得到保留。 另外,根據(jù)SMPL 模型的頂點信息可以得到一個包圍3D 人體的立方體。 三維重建模塊整體結(jié)構(gòu)如圖4 所示。 假如射線和立方體有兩個交點,則在該條射線與立方體的2 個交點之間在三維空間中進行采樣。 NERF 的采樣分2 次,第一次粗略采樣,第二次在粗略采樣的基礎上再進行一次精細采樣。 2 次采樣經(jīng)過體渲染(volume rendering)后會得到2 個重建的A-pose 前景。 計算其與輸入的A-pose 的前景的MSE并相加就能得到重建損失,數(shù)學定義見下式:
圖4 三維重建模塊整體結(jié)構(gòu)圖Fig. 4 Overview of the 3D reconstruction module
研究使用了 IPER[17]數(shù)據(jù)集以及 people sanpshot[10]數(shù)據(jù)集進行實驗。 people snapshot 包含12 個人物,24 段視頻。 IPER 數(shù)據(jù)集包含30 個人物,206 段視頻,視頻長度從218 到3 629 幀不等。平均每個視頻的長度為1 172 幀。
圖5~圖7 是本文模型的效果圖。 圖5 中,第一行是原始視頻,第二行是從視頻中提取的SMPL 參數(shù)渲染得到的,第三行和第四行則是根據(jù)SMPL 參數(shù),使用預訓練的NERF 三維模型重建得到的結(jié)果。圖6 修改了相機模型的參數(shù),改變了重建視頻的視角。 圖7 則修改了人物的體型。
圖7 改變體型Fig. 7 Change shape
效果對比如圖8 所示,文中將提出的模型與Vid2Vid[1]以及FOMM[5]算法進行了比較。 Vid2Vid和FOMM 都是基于GAN 的深度學習壓縮方法,使用二維平面的運動信息配合關(guān)鍵幀進行重建。 可以看到當人體各個部分之間存在重疊的時候,二維平面的運動信息并不足以精確區(qū)分人體的各個部分。而本文所提的模型基于三維模型SMPL,即使人體的各個部分存在重疊,依舊能夠保證重建的效果。
圖8 效果對比Fig. 8 Comparison of the results
本文提出了一種基于SMPL 的人物視頻生成算法。 首先,由人物2D 圖像重建出人物3D 模型獲取外觀信息。 然后,從視頻中估計SMPL 模型參數(shù)獲取人物3D 運動信息。 最后,將人物外觀信息與運動信息相結(jié)合生成人物視頻。 算法將人物視頻生成從2D 擴展到了3D。 實現(xiàn)多視角人物視頻生成的同時,可以修改SMPL 模型參數(shù)實現(xiàn)人物體型的改變。