EasyAnimate是阿里云人工智能平臺(tái)PAI自主研發(fā)的DiT-based視頻生成框架,它提供了完整的高清長(zhǎng)視頻生成解決方案,包括視頻數(shù)據(jù)預(yù)處理、VAE訓(xùn)練、DiT訓(xùn)練、模型推理和模型評(píng)測(cè)等。在預(yù)訓(xùn)練模型的基礎(chǔ)上,EasyAnimate可通過(guò)少量圖片的LoRA微調(diào)來(lái)改變生成視頻的風(fēng)格,相比已有方案具有更好的擴(kuò)展性和完整性。
EasyAnimate在人工智能平臺(tái)PAI上進(jìn)行了集成,供用戶一鍵訓(xùn)練和部署,其支持以下功能:
· 最大分辨率768x768,最長(zhǎng)144幀的視頻推理 (512x512分辨率可在A10 24G上推理)
· DiT 基線模型的訓(xùn)練
· DiT LoRA模型的訓(xùn)練(512x512分辨率可在A10 24G上訓(xùn)練圖片Lora)
· VAE模型的訓(xùn)練和推理
· 視頻預(yù)處理
用戶可以使用EasyAnimate來(lái)進(jìn)行任意風(fēng)格視頻模型的訓(xùn)練和推理。目前,EasyAnimate項(xiàng)目仍處在初期,并將持續(xù)優(yōu)化來(lái)達(dá)到更好的生成效果,歡迎大家持續(xù)關(guān)注~
開(kāi)源地址:https://github.com/aigc-apps/EasyAnimate
技術(shù)報(bào)告:https://arxiv.org/abs/2405.18991
效果展示
上圖包含了EasyAnimate部分測(cè)試視頻的第一幀圖像。更多結(jié)果可以參考https://github.com/aigc-apps/EasyAnimate/blob/v2/scripts/Result_Gallery.md。
數(shù)據(jù)預(yù)處理
a、視頻分割
對(duì)于較長(zhǎng)的視頻分割,EasyAnimate使用PySceneDetect以識(shí)別視頻內(nèi)的場(chǎng)景變化并基于這些轉(zhuǎn)換,根據(jù)一定的門限值來(lái)執(zhí)行場(chǎng)景剪切,以確保視頻片段的主題一致性。切割后,我們只保留長(zhǎng)度在3到10秒之間的片段用于模型訓(xùn)練。
b、視頻清洗與描述
參考SVD的數(shù)據(jù)準(zhǔn)備流程,EasyAnimate提供了一條簡(jiǎn)單但有效的數(shù)據(jù)處理鏈路來(lái)進(jìn)行高質(zhì)量的數(shù)據(jù)篩選與打標(biāo)。并且支持了分布式處理來(lái)提升數(shù)據(jù)預(yù)處理的速度,其整體流程如下:
· 時(shí)長(zhǎng)過(guò)濾: 統(tǒng)計(jì)視頻基本信息,來(lái)過(guò)濾時(shí)間短/分辨率低的低質(zhì)量視頻
· 美學(xué)過(guò)濾: 通過(guò)計(jì)算視頻均勻4幀的美學(xué)得分均值,來(lái)過(guò)濾內(nèi)容較差的視頻(模糊、昏暗等)
· 文本過(guò)濾: 通過(guò)easyocr計(jì)算中間幀的文本占比,來(lái)過(guò)濾文本占比過(guò)大的視頻
· 運(yùn)動(dòng)過(guò)濾: 計(jì)算幀間光流差異來(lái)過(guò)濾運(yùn)動(dòng)過(guò)慢或過(guò)快的視頻。
· 文本描述: 通過(guò)videochat2和vila對(duì)視頻幀進(jìn)行recaption。PAI也在自研質(zhì)量更高的視頻recaption模型,將在第一時(shí)間放出供大家使用。
模型結(jié)構(gòu)
EasyAnimate使用了PixArt-alpha作為基礎(chǔ)模型進(jìn)行開(kāi)發(fā),并在此基礎(chǔ)上修改了VAE和DiT的模型結(jié)構(gòu)來(lái)更好地支持視頻的生成。EasyAnimate的整體結(jié)構(gòu)如下:
為了引入特征點(diǎn)在時(shí)間軸上的特征信息,EasyAnimate引入了運(yùn)動(dòng)模塊(Motion Module),以實(shí)現(xiàn)從2D圖像到3D視頻的擴(kuò)展。為了更好的生成效果,其聯(lián)合圖片和視頻將Backbone連同Motion Module一起Finetune。在一個(gè)Pipeline中即實(shí)現(xiàn)了圖片的生成,也實(shí)現(xiàn)了視頻的生成。
另外,參考U-ViT,其將跳連接結(jié)構(gòu)引入到EasyAnimate當(dāng)中,通過(guò)引入淺層特征進(jìn)一步優(yōu)化深層特征,并且0初始化了一個(gè)全連接層給每一個(gè)跳連接結(jié)構(gòu),使其可以作為一個(gè)可插入模塊應(yīng)用到之前已經(jīng)訓(xùn)練的還不錯(cuò)的DIT中。
同時(shí),其提出了Slice VAE,用于解決MagViT在面對(duì)長(zhǎng)、大視頻時(shí)編解碼上的顯存困難,同時(shí)相比于MagViT在視頻編解碼階段進(jìn)行了時(shí)間維度更大的壓縮。
我們將在下面的部分對(duì)所使用的視頻VAE,視頻Diffusuion Transformer進(jìn)行簡(jiǎn)單介紹,更多算法細(xì)節(jié)可查看技術(shù)報(bào)告。
a、視頻VAE
視頻VAE的一個(gè)著名例子是MagViT,大家均認(rèn)為其被用于Sora框架。EasyAnimateV2版本采用MagViT進(jìn)行探索研究。MagViT采用Casual 3D Conv。在使用普通3D Conv之前,該塊在時(shí)間軸前引入填充,從而確保每一幀可以利用它先前的信息來(lái)增強(qiáng)因果關(guān)系,同時(shí)不考慮到后幀的影響。另外MagViT還允許模型同時(shí)處理圖像和視頻。盡管它在視頻編碼和解碼方面很優(yōu)雅,但在超長(zhǎng)視頻序列上進(jìn)行訓(xùn)練時(shí),它仍面臨挑戰(zhàn),這主要是GPU VRAM的限制。當(dāng)視頻增大時(shí),MagViT所需的內(nèi)存往往甚至超過(guò)A100 GPU的可用內(nèi)存,這使得對(duì)大視頻(例如1024x1024x40)進(jìn)行一步解碼變得不可行。這個(gè)挑戰(zhàn)突出了分批處理的必要性,它有助于增量解碼,而不是試圖一步解碼整個(gè)序列。
對(duì)于分批處理,其首先在空間維度上(寬度和高度上)試驗(yàn)切片機(jī)制。然而,這可能導(dǎo)致一個(gè)視頻不同塊上有不一致的光照。因此,其轉(zhuǎn)向沿時(shí)間維度(時(shí)間上)進(jìn)行切片。通過(guò)這種方法,一組視頻幀被分為幾個(gè)部分,每個(gè)部分都被單獨(dú)編碼和解碼,如圖所示。但由于MagViT的獨(dú)特機(jī)制,3D Conv前需要進(jìn)行前向填充,對(duì)應(yīng)的潛在latent中,每個(gè)部分的第一個(gè)latent由于填充特征僅包含較少的信息。這種不均勻的信息分布是一個(gè)可能阻礙模型優(yōu)化的方面。此外,MagViT使用這種批處理策略還影響處理過(guò)程中視頻的壓縮率。
總結(jié)上述的結(jié)果,MagViT在處理極長(zhǎng)視頻序列的訓(xùn)練過(guò)程中面臨挑戰(zhàn),對(duì)于一些大且長(zhǎng)的視頻序列,直接對(duì)完整視頻序列編解碼的編解碼顯存開(kāi)銷極大,因此需要用到批處理來(lái)進(jìn)行改善。基于此,EasyAnimate 引入了一種切片機(jī)制到MagViT中,提出了Slice VAE,該VAE在面臨不同輸入時(shí)使用不同的處理策略,當(dāng)輸入的是視頻幀時(shí),則在高寬與時(shí)間軸上進(jìn)行壓縮,當(dāng)輸入為512x512x8的視頻幀時(shí),將其壓縮為64x64x2的潛在latent;當(dāng)輸入的是圖片時(shí),則僅僅在高寬上進(jìn)行壓縮,當(dāng)輸入為512x512的圖片時(shí),將其壓縮為64x64x1的潛在latent。所提出的Slice VAE的架構(gòu)如上圖所示。為了進(jìn)一步提高解碼的性能,EasyAnimate 在時(shí)間維度進(jìn)行切片并引入了特征共享機(jī)制,從而獲得時(shí)空更一致的特征,并在時(shí)間維度實(shí)現(xiàn)更高的壓縮率。通過(guò)這種方式,編碼的特征封裝了時(shí)間信息,從而節(jié)省了計(jì)算資源,并同時(shí)提高了生成結(jié)果的質(zhì)量。
參考Stable Diffusion,EasyAnimate分兩階段訓(xùn)練了所提出的VAE,在第一階段共同訓(xùn)練視頻的編碼器和解碼器,在第二階段僅對(duì)解碼器進(jìn)行微調(diào)來(lái)更好地提升解碼視頻的效果。Slice VAE的與相關(guān)Diffusion Transformer權(quán)重會(huì)在近期開(kāi)源。
b、視頻Diffusion Transformer
在圖像DiT的基礎(chǔ)上,EasyAnimate首先引入了Motion Module 在時(shí)序維度上引入注意力機(jī)制來(lái)讓模型學(xué)習(xí)時(shí)序信息,以進(jìn)行連續(xù)視頻幀的生成。同時(shí),利用額外的網(wǎng)格計(jì)算(Grid Reshape),來(lái)擴(kuò)大注意力機(jī)制的input token數(shù)目,從而更多地利用圖像的空間信息以達(dá)到更好的生成效果。運(yùn)動(dòng)模塊專門設(shè)計(jì)用于嵌入時(shí)間信息。通過(guò)在時(shí)間維度上集成注意力機(jī)制,該模型獲得了時(shí)間軸上的先驗(yàn)知識(shí),這對(duì)生成視頻運(yùn)動(dòng)至關(guān)重要。
另外,由于觀察到深層DIT的訓(xùn)練經(jīng)常是不穩(wěn)定的,模型的損失有時(shí)候會(huì)從0.05急劇增加到0.2,最終增加到1.0。為了加強(qiáng)模型優(yōu)化過(guò)程,避免DIT層反向傳播過(guò)程中的梯度坍塌,EasyAnimate在訓(xùn)練過(guò)程中引入了U-VIT,在相應(yīng)的Transform Block之間使用了跳連接,這種基于UNet的框架對(duì)于Stable Diffusion模型來(lái)說(shuō)是有效的。為了將這種修改無(wú)縫集成到現(xiàn)有的擴(kuò)散變換器架構(gòu)中,而無(wú)需進(jìn)行全面的再訓(xùn)練,EasyAnimate初始化了幾個(gè)具有零填充權(quán)重的完全連接層,如上圖(c)中的灰色塊。
訓(xùn)練過(guò)程
EasyAnimate的DiT模型訓(xùn)練分為三階段。
首先,在圖像數(shù)據(jù)上訓(xùn)練DiT模型來(lái)快速適應(yīng)新訓(xùn)練的VAE模型。
其次,融合了大量的圖像和視頻數(shù)據(jù)集來(lái)訓(xùn)練motion module模塊,將DiT模型從圖像生成遷移到視頻生成上來(lái)。僅訓(xùn)練motion module的條件下,模型能夠生成微動(dòng)的視頻,但生成的畫面質(zhì)量和運(yùn)動(dòng)范圍有限。
因此,在最后一個(gè)階段,用進(jìn)一步篩選后的高質(zhì)量數(shù)據(jù)集對(duì)整個(gè)DiT模型進(jìn)行微調(diào)來(lái)達(dá)到更好的模型效果。
首先訓(xùn)練256x256x144的視頻模型,然后擴(kuò)展到512x512x144的視頻模型,最后擴(kuò)展到768x768x144的視頻模型。
可擴(kuò)展性(微調(diào)訓(xùn)練)
EasyAnimate不僅支持整個(gè)模型的基線訓(xùn)練,同時(shí)支持Lora訓(xùn)練,具有良好的可擴(kuò)展性。
以Lora訓(xùn)練為例,其可以支持使用視頻數(shù)據(jù)或者圖片數(shù)據(jù)對(duì)Backbone進(jìn)行Lora訓(xùn)練,以引入期望運(yùn)動(dòng)的信息。EasyAnimate提供了一個(gè)Minimalism極簡(jiǎn)主義圖片數(shù)據(jù)集,其中的demo圖像如下所示:
參考Training-Lora-Wiki,完成Lora模型的微調(diào)后,可以進(jìn)入頁(yè)面中選擇對(duì)應(yīng)的Lora模型進(jìn)行預(yù)測(cè)。
聯(lián)系我們
· 項(xiàng)目開(kāi)源地址:https://github.com/aigc-apps/EasyAnimate
· 釘釘交流群號(hào): 77450006752
· 微信交流群:
參考文檔
· https://github.com/aigc-apps/EasyAnimate
· magvit: https://github.com/google-research/magvit
· PixArt: https://github.com/PixArt-alpha/PixArt-alpha
· Open-Sora-Plan: https://github.com/PKU-YuanGroup/Open-Sora-Plan
· Open-Sora: https://github.com/hpcaitech/Open-Sora
· Animatediff: https://github.com/guoyww/AnimateDiff
· https://huggingface.co/liuhaotian/llava-v1.6-vicuna-7b
· https://github.com/baofff/U-ViT