文章目錄
- 概述
- 動畫技術的演進
- 原理介紹
- 核心邏輯
- 環境配置/部署方式
- 小結
本文涉及的源碼可從無監督動畫中關節動畫的運動表示該文章下方附件獲取
概述
該文探討了動畫在教育和娛樂中的作用,以及通過數據驅動方法簡化動畫制作的嘗試。近期研究通過無監督運動轉移減少對真實數據的依賴,取得一定進展,但仍面臨關節和非剛性對象運動的表示、運動序列動畫化及背景運動處理等問題。為解決這些挑戰,文章提出三個貢獻:
-
使用區域表示一階運動以增強穩定性;
-
明確建模背景運動以提高點識別的穩定性;
-
在無監督空間中解耦對象的形狀和姿態,防止形狀轉移。這些改進提升了無監督運動轉移的精度,特別是對于關節對象的動畫。
作者還提出一個新的TED演講者數據集以驗證方法,其性能優于現有無監督動畫技術。
動畫技術的演進
圖像動畫方法相關工作總結
圖像動畫方法可以大致分為監督和無監督兩類,每種方法都有其獨特的挑戰和局限性。這篇總結概述了這兩類方法中的已有工作,為論文關注的無監督方法提供背景。
檢測實現的靜止源圖像動畫
監督圖像動畫:
監督方法在訓練期間需要關于動畫對象的先驗知識,通常以地標、語義分割或參數化的3D模型的形式存在。這些方法受到標記數據的需求的限制,僅適用于具有豐富標記數據集的少數對象類別,例如面部和人體。早期的面部再現工作利用3D可塑模型,使用圖形技術進行動畫和渲染。神經網絡后來被引入以提高渲染質量,有時需要每個身份的多個圖像 。
監督方法的重要部分將動畫視為圖像到圖像或視頻到視頻的轉換問題,將問題限制為對單個對象實例進行動畫處理,無論是面部還是人體。盡管這些方法取得了一些有希望的結果,但在更廣泛的對象類別范圍內進行泛化仍然具有挑戰性。此外,它們往往不僅傳遞了運動,還傳遞了驅動對象的形狀 。
無監督圖像動畫:
無監督方法旨在克服監督方法的局限性,通過消除對動畫對象形狀或地標的標記數據的需求。這一類別包括基于視頻生成的動畫方法,其根據初始幀和動畫類別標簽預測未來幀 。值得注意的是,Menapace等人引入了可玩的視頻生成,允許在每個時間戳選擇動作 。
另一組無監督方法專注于將動畫從驅動視頻重新定向到源幀。X2Face構建了輸入面的規范表示,生成了一個基于驅動視頻的變形場 。Monkey-Net學習無監督關鍵點以生成動畫,隨后的工作,包括第一階段運動模型(FOMM),通過考慮每個關鍵點的局部仿射變換來增強動畫質量。
從經驗上看,這些無監督方法通常在動畫對象的邊界上提取關鍵點,對于人體等關節對象,內部運動建模不足,導致動畫不自然。
原理介紹
在無監督學習的動畫領域中,關節動畫的運動表示原理主要基于對人體或物體運動的模擬。關節動畫是一種常用的計算機動畫技術,它通過模擬人體或物體的關節運動來實現復雜的動畫效果。以下是無監督動畫中關節動畫的運動表示原理的詳細介紹:
一、關節動畫的基本原理
關節動畫的基本原理是將一個復雜的物體或角色(如人體)分解為一系列相互連接的關節(或骨骼),然后通過控制這些關節的運動來實現整個物體或角色的運動。在動畫中,這些關節之間的連接關系形成了一種層次結構,類似于生物體的骨骼系統。
二、關節動畫的表示方法
- 骨架:關節動畫的核心是骨架,它由一系列具有層次關系的關節(骨骼)和關節鏈組成。這些關節通過連接形成了一種樹結構,其中一個關節被選作根關節,其他關節則是根關節的子孫。通過平移和旋轉根關節,可以移動并確定整個骨架在世界空間中的位置和方向。
- 關節的表示:通常,每個關節都會包含一些基本信息,如關節名、父關節索引、關節綁定姿勢的逆變換矩陣(offset矩陣)等。關節的綁定姿勢是指蒙皮網格頂點綁定至骨骼時,關節的位置、朝向和縮放。這些信息對于確定關節的運動狀態和動畫效果至關重要。
- 姿勢的表示:關節的姿勢被定義為關節相對于某坐標系的位置、朝向和縮放。在關節動畫中,通常存在三種姿勢:綁定姿勢、局部姿勢和全局姿勢。綁定姿勢是網格綁定到骨骼之前的姿勢,局部姿勢是關節相對于父關節來指定的,全局姿勢則是關節在整個動畫模型所在的坐標空間中的變換。
三、無監督動畫中的關節動畫
在無監督學習的動畫中,關節動畫的運動表示原理與傳統關節動畫類似,但更加注重從數據中學習和推斷關節的運動規律。通過大量的無標簽視頻數據,無監督學習算法可以自動提取出物體或角色的運動特征,并學習到關節之間的運動約束和相互關系。這樣,即使在沒有明確標注的情況下,算法也能夠生成符合自然規律的關節動畫效果。
核心邏輯
- 一階運動模型
FOMM 主要包括兩個部分:運動估計和圖像生成,其中運動估計進一步包含粗糙運動估計和密集運動預測。粗糙運動被建模為分離對象部分之間的稀疏運動,而密集運動則生成整個圖像的光流和置信度圖。我們用S和D分別表示源幀和驅動幀,這兩者來自同一視頻。
首先從S和D估計各個對象部分的粗糙運動。每個對象部分的運動由仿射變換表示,Ak ∈ R^2x3,到一個抽象的共同參考幀R;X可以是S或D。針對K個不同的部分估計運動。編碼器-解碼器關鍵點預測網絡輸出K個熱圖,M1到MK,這些熱圖對輸入圖像進行建模,然后經過softmax,使得Mk ∈ [0,1]^HW,滿足∑Mk(z) = 1,其中z是圖像中的像素位置。這樣,仿射變換的平移分量(即Ak的最后一列)可以使用softargmax進行估計。
在FOMM 中,剩余的仿射參數通過每個像素進行回歸,形成4個附加通道。用于索引仿射矩陣。這個模型被稱為基于回歸的模型,因為仿射參數由網絡預測并進行池化以計算。D和S之間的每個部分k的運動然后通過公共參考幀計算。
- 基于PCA的運動估計
準確的運動估計是實現高質量圖像動畫的主要要求。與FOMM不同,我們采用了不同的運動表示方式,即所有運動直接從熱圖Mk中測量。我們像以前一樣計算平移,而x和y方向的平面旋轉和縮放則通過熱圖Mk的主成分分析(PCA)進行計算。
這里使用奇異值分解(SVD)方法來計算PCA,將熱圖的協方差分解為酉矩陣Uk和V_k以及奇異值的對角矩陣S_k。我們稱這種方法為基于PCA的方法,與基于回歸的方法相對。盡管這兩者在此使用相同的區域表示和編碼器,但由于我們創新的前景運動表示,編碼的區域之間存在顯著的差異,將前景映射到有意義的對象部分,例如關節。
- 背景運動估計
背景占據圖像的大部分。因此,即使在幀之間有微小的背景運動,例如由于攝像機運動引起的運動,也會對動畫質量產生負面影響。FOMM未將背景運動單獨處理,因此必須使用關鍵點對其進行建模。這帶來了兩個負面影響:(i)需要額外的網絡容量,因為關鍵點用于模擬背景而不是前景;(ii)過度擬合訓練集,因為這些關鍵點集中在背景的特定部分上,而這些部分可能在測試集中不存在。因此,我們使用編碼器網絡額外預測背景仿射變換。由于我們的框架是無監督的,背景網絡可能將前景的某些部分包
含到背景運動中。實際上,這并沒有發生,因為對于網絡來說,使用前景的更適當的基于PCA的運動表示要比使用S和D編碼前景運動更簡單。從經驗上講,我們證明了所提出的運動表示可以在完全無監督的情況下分離背景和前景。
- 圖像生成
- 與FOMM 類似,我們將目標圖像分為兩個階段進行渲染:像素級的光流生成器將粗糙運動轉換為密集光流,然后根據光流對源的編碼特征進行變形,隨后對缺失區域進行修補。密集光流預測器的輸入是一個HxWx(4K+3)張量,每個區域有四個通道,每個區域有三個用于根據區域的仿射變換變形的源圖像通道,一個用于區域的熱圖的高斯近似,另外三個通道用于根據背景的仿射變換變形的源圖像。與FOMM不同,后者使用常數方差,我們從熱圖中估計協方差。
這種模型在背景運動略有變化時會變得復雜。當有輕微的背景運動時,該模型會自動適應通過將一些可用關鍵點分配給模擬背景來進行調整。我們還通過使用相同的網絡預測置信度圖C來處理源圖像中缺失的部分。最后,S通過編碼器傳遞,然后通過光流變形生成的特征圖乘以置信度圖。一個解碼器然后重建驅動圖像D。在測試時,FOMM 有兩種動畫模式:標準模式和相對模式。在標準動畫中,逐幀計算源和驅動之間的運動。對于相對動畫,為了生成幀t,首先計算D1和Dt之間的運動,然后應用于s。
通過上述改進,我們提出的方法克服了以前方法在處理關節對象時無法捕捉完整對象部分、形狀和姿勢的局限性。我們的基于PCA的運動表示以及背景運動估計模塊提供了更高的穩定性和區域分布的改善,同時能夠更好地適應不同數量的區域。我們的方法在多個數據集和任務上都取得了令人滿意的定量和定性結果,為未來在這一領域的改進提供了有力的基準。
環境配置/部署方式
-
命令行參數解析:
parser = ArgumentParser() parser.add_argument("--config", required=True, help="path to config") parser.add_argument("--mode", default="train", choices=["train", "reconstruction", "animate"]) parser.add_argument("--log_dir", default='log', help="path to log into") parser.add_argument("--checkpoint", default=None, help="path to checkpoint to restore") parser.add_argument("--device_ids", default="0", type=lambda x: list(map(int, x.split(','))),help="Names of the devices comma separated.") parser.add_argument("--verbose", dest="verbose", action="store_true", help="Print model architecture") opt = parser.parse_args()
- 使用
ArgumentParser
解析命令行參數,包括配置文件路徑--config
、運行模式--mode
(默認為 “train”)、日志目錄--log_dir
(默認為 ‘log’)、檢查點路徑--checkpoint
、設備編號--device_ids
、是否輸出模型架構--verbose
。 - 參數解析結果保存在
opt
對象中。
- 使用
-
加載配置文件:
with open(opt.config) as f:config = yaml.load(f)
- 使用
yaml.load
讀取配置文件,其中配置了模型參數、數據集參數等。配置信息保存在config
字典中。
- 使用
-
初始化模型和數據集:
generator = OcclusionAwareGenerator(**config['model_params']['generator_params'],**config['model_params']['common_params']) discriminator = MultiScaleDiscriminator(**config['model_params']['discriminator_params'],**config['model_params']['common_params']) kp_detector = KPDetector(**config['model_params']['kp_detector_params'],**config['model_params']['common_params'])
- 創建了生成器
generator
、判別器discriminator
和關鍵點檢測器kp_detector
。 - 模型的參數從配置文件中獲取。
- 創建了生成器
-
設備配置和模型移動:
if torch.cuda.is_available():generator.to(opt.device_ids[0])discriminator.to(opt.device_ids[0])kp_detector.to(opt.device_ids[0])
- 如果 GPU 可用,將模型移動到指定的 GPU 設備上。
-
日志目錄和配置文件的保存:
if not os.path.exists(log_dir):os.makedirs(log_dir) if not os.path.exists(os.path.join(log_dir, os.path.basename(opt.config))):copy(opt.config, log_dir)
- 創建日志目錄,如果不存在的話。
- 將配置文件拷貝到日志目錄中。
-
選擇運行模式并調用相應函數:
if opt.mode == 'train':print("Training...")train(config, generator, discriminator, kp_detector, opt.checkpoint, log_dir, dataset, opt.device_ids) elif opt.mode == 'reconstruction':print("Reconstruction...")reconstruction(config, generator, kp_detector, opt.checkpoint, log_dir, dataset) elif opt.mode == 'animate':print("Animate...")animate(config, generator, kp_detector, opt.checkpoint, log_dir, dataset)
- 根據命令行參數中的
--mode
的值,選擇運行訓練、重建還是動畫生成。 - 分別調用相應的函數:
train
、reconstruction
或animate
。
- 根據命令行參數中的
整個代碼實現了一個端到端的圖像動畫生成流程,用戶可以通過命令行參數選擇不同的模式,并在配置文件中指定模型和數據集的參數。訓練模型時,通過調用 train
函數,進行模型的訓練;重建時,通過調用 reconstruction
函數,進行圖像的重建;動畫生成時,通過調用 animate
函數,生成動畫。
小結
動畫技術在教育和娛樂領域的重要性不言而喻,它不僅能夠提供豐富多樣的視覺體驗,還能有效地傳達信息和知識。然而,傳統的動畫制作方法通常要求專業技能、昂貴的硬件和大量的時間投入,這在一定程度上限制了動畫的廣泛應用。
為了解決這些問題,近年來數據驅動的方法逐漸受到關注,其中無監督動畫框架是一個重要的研究方向。這種框架試圖通過自動學習和分析大量數據來生成動畫,從而減少了對專業技能和硬件的依賴。然而,無監督動畫框架在處理關節對象時面臨一些挑戰,其傳統的表示方法往往無法準確捕捉關節的運動規律。
為了解決這一問題,研究人員提出了一種全新的PCA-Based區域運動表示方法。這種方法利用主成分分析(PCA)技術,對動畫中的區域運動進行建模和表示。PCA是一種強大的數據分析工具,它能夠識別數據中的主要模式和趨勢,從而簡化數據的復雜性。在動畫中,PCA可以幫助我們更容易地學習到區域運動的關鍵特征,并鼓勵網絡學習到語義豐富的對象部分。
具體來說,PCA-Based區域運動表示方法通過以下幾個步驟實現:
- 數據預處理:首先,從動畫數據中提取出與關節運動相關的區域特征,例如關節的位置、速度、加速度等。
- 主成分分析:然后,利用PCA對這些區域特征進行降維處理,以識別出其中的主要運動模式。這些主要模式代表了關節運動的關鍵特征,可以用于后續的動畫生成。
- 網絡學習:接下來,將PCA提取的主要運動模式作為輸入,訓練一個深度學習網絡來學習關節運動的規律。這個網絡可以是一個循環神經網絡(RNN)或卷積神經網絡(CNN),具體取決于問題的復雜性和數據量。
- 動畫生成:最后,利用訓練好的網絡生成新的動畫。在生成過程中,可以根據需要調整PCA提取的主要運動模式的權重,以實現不同的動畫效果。
此外,為了進一步提高動畫質量,研究人員還引入了背景運動估計模塊。這個模塊能夠有效地區分前景和背景的運動,從而避免了在動畫中出現不自然的背景運動。通過解耦前景和背景的運動,可以使動畫看起來更加真實和自然。
綜上所述,PCA-Based區域運動表示方法以及背景運動估計模塊的引入為無監督動畫框架提供了新的思路和技術手段。這些方法不僅能夠更準確地捕捉關節對象的運動規律,還能夠提高動畫的質量和真實性。隨著技術的不斷發展和完善,相信未來無監督動畫框架將在教育和娛樂領域發揮更加重要的作用。