張俊林:揭去神秘面紗,Sora關(guān)鍵技術(shù)逆向工程圖解
Sora生成的視頻效果好嗎?確實(shí)好。Sora算得上AGI發(fā)展歷程上的里程碑嗎?我個人覺得算。我們知道它效果好就行了,有必要知道Sora到底是怎么做的嗎?我覺得最好是每個人能有知情的選擇權(quán),任何想知道的人都能夠知道,這種狀態(tài)比較好。那我們知道Sora到底是怎么做出來的嗎?不知道。
馬斯克諷刺OpenAI是CloseAI,為示道不同,轉(zhuǎn)頭就把Grok開源了。且不論Grok效果是否足夠好,馬斯克此舉是否有表演成分,能開源出來這行為就值得稱贊。OpenAI樹大招風(fēng),目前被樹立成技術(shù)封閉的頭號代表,想想花了上億美金做出來的大模型,憑啥要開源?不開源確實(shí)也正常。所謂“開源固然可贊,閉源亦可理解”。
但是,我個人一年多來的感覺,OpenAI技術(shù)強(qiáng)歸強(qiáng),然而有逐漸把技術(shù)神秘化的傾向,如果不信您可以去讀一下Altman的各種訪談。在這個AI技術(shù)越來越封閉的智能時代,技術(shù)神秘化導(dǎo)向的自然結(jié)果就是盲目崇拜,智能時代所謂的“信息平權(quán)”或只能成夢想。我不認(rèn)為這是一個好的趨勢,我發(fā)自內(nèi)心地尊敬對技術(shù)開放作出任何貢獻(xiàn)的人或團(tuán)體,且認(rèn)為對技術(shù)神秘化的去魅,這應(yīng)該是AI技術(shù)從業(yè)者值得追求的目標(biāo)。
本文試圖盡我所能地以通俗易懂的方式來分析Sora的可能做法,包括它的整體結(jié)構(gòu)以及關(guān)鍵組件。我希望即使您不太懂技術(shù),也能大致看明白Sora的可能做法,所以畫了幾十張圖來讓看似復(fù)雜的機(jī)制更好理解,如果您看完對某部分仍不理解,那是我的問題。
一、Key Messages
這部分把本文關(guān)鍵信息列在這里,特供給沒空或沒耐心看長文的同學(xué),當(dāng)然我覺得您光看這些估計也未必能看明白。
Key Message 1: Sora的整體結(jié)構(gòu)如下(本文后續(xù)有逐步推導(dǎo)過程)
Key Message 2: Sora的Visual Encoder-Decoder很可能采用了TECO(Temporally Consistent Transformer )模型的思路,而不是廣泛傳聞的MAGVIT-v2(本文后續(xù)給出了判斷理由,及適配Sora而改造的TECO具體做法)。Encoder-Decoder部分的核心可能在于:為了能生成長達(dá)60秒的高質(zhì)量視頻,如何維護(hù)“長時一致性”最為關(guān)鍵。要在信息壓縮與輸入部分及早融入視頻的“長時一致性”信息,不能只靠Diffusion Model,兩者要打配合。
Key Message 3: Sora之所以把Patch部分稱為“Spacetime Latent Patch”,大概是有一定理由的/Patch部分支持“可變分辨率及可變長寬比”視頻,應(yīng)該是采用了NaVIT的思路,而不是Padding方案(本文后續(xù)部分給出了方案選擇原因)。
Key Message 4: 目前的AI發(fā)展?fàn)顟B(tài)下,您可能需要了解下Diffusion Model的基本原理(后文會給出較易理解的Diffusion模型基本原理介紹)
Key Message 5: Video DiTs很可能長得像下面這個樣子(本文后續(xù)內(nèi)容會給出推導(dǎo)過程)
Key Message 6: Sora保持生成視頻的“長時一致性”也許會采取暴力手段(后文給出了可能采用的其它非暴力方法FDM)
Key Message 7: Sora應(yīng)該包含雙向訓(xùn)練過程(后文給出了雙向訓(xùn)練的可能實(shí)現(xiàn)機(jī)制)
二、為何能對Sora進(jìn)行逆向工程
能否對Sora進(jìn)行逆向工程,要依賴一些基本假設(shè),若基本假設(shè)成立,則逆向工程可行,如不成立,則無希望。上面列出了Sora可被逆向工程的兩個基本假設(shè)。
首先,我們假設(shè)Sora并未有重大算法創(chuàng)新,是沿著目前主流技術(shù)的漸進(jìn)式改進(jìn)。這條無論是從OpenAI的算法設(shè)計哲學(xué)角度(我來替OpenAI歸納下核心思想:簡潔通用的模型結(jié)構(gòu)才具備Scale潛力,如果可能的話,盡量都用標(biāo)準(zhǔn)的Transformer來做,因?yàn)樗腟cale潛力目前被驗(yàn)證是最好的,其它想取代Transformer的改進(jìn)模型都請靠邊站。模型結(jié)構(gòu)改進(jìn)不是重點(diǎn),重點(diǎn)在于懟算力懟數(shù)據(jù),通過Scale Transformer的模型規(guī)模來獲取大收益。),還是歷史經(jīng)驗(yàn)角度(比如ChatGPT,關(guān)鍵技術(shù)皆參考業(yè)界前沿技術(shù),RLHF強(qiáng)化學(xué)習(xí)是OpenAI獨(dú)創(chuàng)的,但并非必需品,比如目前有用DPO取代RLHF的趨勢)來看,這個條件大體應(yīng)該是成立的。
第二個條件,其實(shí)Sora技術(shù)報告透漏了不少關(guān)于模型選型的信息,但是您得仔細(xì)看才行。
關(guān)于Sora技術(shù)報告透漏的信息,這里舉個例子。它明確提到了使用圖片和視頻聯(lián)合訓(xùn)練模型,而不像大多數(shù)視頻生成模型那樣,在訓(xùn)練的時候只用視頻數(shù)據(jù)。這是關(guān)鍵信息,對保證Sora效果也肯定是個重要因素,原因后文會談。既然Sora需要圖片和視頻聯(lián)合訓(xùn)練,這等于對Sora內(nèi)部結(jié)構(gòu)怎么設(shè)計增加了約束條件,而這有利于我們進(jìn)行逆向工程。
再舉個例子,Sora應(yīng)采取了逐幀生成的技術(shù)路線,而不像很多視頻生成模型那樣,采取“關(guān)鍵幀生成+插幀”的模式。上圖中Sora技術(shù)報告標(biāo)紅圈的部分是支持這一判斷的部分證據(jù),如果您參考的文獻(xiàn)足夠多,會發(fā)現(xiàn)一旦提“generating entire video all at once”,一般和“at once”對應(yīng)的方法指的就是“關(guān)鍵幀+插幀”的模式。上圖下方給出了Google 的視頻生成模型Lumiere的論文摘要(可參考:Lumiere: A Space-Time Diffusion Model for Video Generation),也提到了“at once”等字眼,表明自己用的不是“關(guān)鍵幀+插幀”的模式,這是把“at once”作為論文創(chuàng)新點(diǎn)高度來提的。
“關(guān)鍵幀生成+插幀”是視頻生成模型中普遍采用的模式,但它的問題是會導(dǎo)致生成的視頻整體動作幅度很小、而且不好維護(hù)全局的時間一致性。我們看到市面上很多視頻生成產(chǎn)品都有這個問題,就可以倒推它們大概采用了“關(guān)鍵幀+插幀”的模式??梢钥闯?,這點(diǎn)也是保證Sora視頻質(zhì)量好的重要技術(shù)選型決策,但若您看文獻(xiàn)不夠仔細(xì),就不太容易發(fā)現(xiàn)這個點(diǎn)。
歸納一下,之所以我們能對Sora進(jìn)行逆向工程,是因?yàn)榍笆鰞蓚€基本假設(shè)大致成立,而每當(dāng)Sora技術(shù)報告透漏出某個技術(shù)選型,就等于我們在算法龐大的設(shè)計空間里就去掉了很多種可能,這相當(dāng)于通過對主流技術(shù)進(jìn)行不斷剪枝,就可逐步靠近Sora的技術(shù)真相。
接下來讓我們根據(jù)目前的主流技術(shù),結(jié)合Sora的技術(shù)報告,假設(shè)Sora模型已經(jīng)訓(xùn)練好了,來一步步推導(dǎo)出Sora可能采用的整體技術(shù)架構(gòu)。
三、逐步推導(dǎo)Sora的整體結(jié)構(gòu)
Sora給人的第一印象是高質(zhì)量的<文本-視頻>生成模型:用戶輸入Prompt說清楚你想要生成視頻的內(nèi)容是什么,Sora能生成真實(shí)度很高的10秒到60秒的視頻。至于內(nèi)部它是怎么做到這一點(diǎn)的,目前我們還一無所知。
首先,我們可如上圖所示,技術(shù)性地稍微展開一下,細(xì)化Sora的整體輪廓。
用戶給出相對較短且描述粗略的Prompt后,Sora先用GPT對用戶Prompt進(jìn)行擴(kuò)寫,擴(kuò)充出包含細(xì)節(jié)描述的長Prompt,這個操作是Sora技術(shù)報告里明確提到的。這步Prompt擴(kuò)寫很重要,Prompt對細(xì)節(jié)描述得越明確,則視頻生成質(zhì)量越好,而靠用戶寫長Prompt不現(xiàn)實(shí),讓GPT來加入細(xì)節(jié)描述,這體現(xiàn)了“在盡可能多的生產(chǎn)環(huán)節(jié)讓大模型輔助或取代人”的思路。
那么,Sora內(nèi)部一定有文本編碼器(Text Encoder),把長Prompt對應(yīng)的文字描述轉(zhuǎn)化成每個Token對應(yīng)的Embedding,這意味著把文字描述從文本空間轉(zhuǎn)換為隱空間(Latent Space)的參數(shù),而這個Text Encoder大概率是CLIP模型對應(yīng)的“文本編碼器”(CLIP學(xué)習(xí)到了兩個編碼器:“文本編碼器”及“圖片編碼器”,兩者通過CLIP進(jìn)行了文本空間和圖片空間的語義對齊),DALLE 系列里的文本編碼器使用的就是它。
上文分析過,Sora應(yīng)該走的是視頻逐幀生成的路子,假設(shè)希望生成10秒長度、分辨率為1080*1080的視頻,按照電影級標(biāo)準(zhǔn)“24幀/秒”流暢度來算,可知Sora需要生成24*10=240幀1080*1080分辨率的圖片。所以,若已知輸出視頻的長度和分辨率,我們可以在生成視頻前,事先產(chǎn)生好240幀1080*1080的噪音圖,然后Sora在用戶Prompt語義的指導(dǎo)下,按照時間順序,逐幀生成符合用戶Prompt描述的240張視頻幀對應(yīng)圖片,這樣就形成了視頻生成結(jié)果。
從Sora技術(shù)報告已知,它采用的生成模型是Diffusion模型,關(guān)于Diffusion模型的基本原理我們放在后文講解,但現(xiàn)在面臨的問題是:Diffusion Model也有不同的做法,到底Sora用的是像素空間(Pixel Space)的Diffusion Model,還是隱空間(Latent Space)的Diffusion Model呢?現(xiàn)在我們需要關(guān)于此做出技術(shù)決策。
在做決策前,先了解下兩個空間的Diffusion Model對應(yīng)的特點(diǎn)。上圖展示的是在像素空間內(nèi)做Diffusion Model的思路,很直觀,就是說在像素范圍內(nèi)通過Diffusion Model進(jìn)行加噪音和去噪音的過程。因?yàn)閳D片包含像素太多,比如1080*1080的一張圖片,就包含超過116萬個像素點(diǎn),所以像素空間的Diffusion Model就需要很大的計算資源,而且無論訓(xùn)練還是推理,速度會很慢,但是像素空間保留的細(xì)節(jié)信息豐富,所以像素空間的Diffusion Model效果是比較好的。這是它的特點(diǎn)。
再說隱空間Diffusion Model的特點(diǎn)。最早的Diffusion Model都是在像素空間的,但速度實(shí)在太慢,所以后來有研究人員提出可以在對像素壓縮后的隱空間內(nèi)做Diffusion Model。具體而言,就是引入一個圖像“編碼器”(Encoder)和“解碼器”(Decoder),編碼器負(fù)責(zé)把圖片表征從高維度的像素空間壓縮到低維度的參數(shù)隱空間,而在經(jīng)過Diffusion Model去噪后,生成隱空間內(nèi)的圖片內(nèi)容,再靠解碼器給隱空間圖片內(nèi)容添加細(xì)節(jié)信息,轉(zhuǎn)換回圖片像素空間??梢钥闯觯琇atent Diffusion Model(LDM)的特點(diǎn)正好和Pixel Diffusion Model(PDM)相反,節(jié)省資源速度快,但是效果比PDM差點(diǎn)。
現(xiàn)在來做技術(shù)選型,從Sora技術(shù)報告明顯可看出,它采用的是Latent Diffusion Model,這個也正常,目前無論做圖像還是視頻生成,很少有用Pixel Diffusion Model,大部分都用LDM。但是,LDM也存在一個壓縮率的問題,可以壓縮得比較狠,這樣速度會更快,也可以壓縮的不那么狠。我猜Sora在Encoder這一步不會壓縮得太狠,這樣就能保留更多原始圖片細(xì)節(jié)信息,效果可能會更好些。Sora大概率會重點(diǎn)保證生成視頻的質(zhì)量,為此可以多消耗些計算資源,“以資源換質(zhì)量”。Sora生成視頻速度很慢,很可能跟Encoder壓縮率不高有一定關(guān)系。
于是,目前我們得到上圖所示的Sora整體結(jié)構(gòu)圖,主要變化是增加了針對視頻的Encoder和Decoder,以試圖加快模型訓(xùn)練和推理速度。另外,一般把文本編碼結(jié)果作為LDM模型的輸入條件,用來指導(dǎo)生成圖片或視頻的內(nèi)容能遵循用戶Prompt描述。
現(xiàn)在,我們面臨新的技術(shù)決策點(diǎn):對視頻幀通過Encoder壓縮編碼后,是否會有Patchify(中文翻譯是“切塊”?不確定)操作?Patchify本質(zhì)上可看成對視頻數(shù)據(jù)的二次壓縮,從Sora技術(shù)報告可看出,它應(yīng)有此步驟,這也很正常,目前的視頻生成模型一般都包含這個步驟。而且Sora將他們自己的做法稱為“Spacetime Latent Patch”,至于為啥這么叫,我在后文關(guān)鍵模塊分析會給出一個解釋。另外,Sora還主打一個“支持不同分辨率、不同長寬比”的圖片與視頻生成,為了支持這個功能,那在Patchify這步就需要做些特殊的處理。
于是,加入Spacetime Latent Patch后,目前的Sora整體結(jié)構(gòu)就如上圖所示。Patchify一般放在視頻編碼器之后,而且輸出時把多維的結(jié)果打成一維線性的,作為后續(xù)Diffusion Model的輸入。
我們接著往下推導(dǎo),來看下實(shí)現(xiàn)Diffusion Model時具體采用的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),此處需注意,Diffusion Model是種偏向數(shù)學(xué)化的算法思想,具體實(shí)現(xiàn)時可以采用不同的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。其實(shí)目前Diffusion Model視頻生成的主流網(wǎng)絡(luò)結(jié)構(gòu)一般會用U-Net,Transformer做Diffusion 視頻生成目前并非主流。當(dāng)然,Sora出現(xiàn)之后,選擇Transformer來做Diffusion Model肯定很快會成為主流結(jié)構(gòu)。從Sora技術(shù)報告可知,它采用的骨干網(wǎng)絡(luò)是Transformer,應(yīng)該主要看中了它良好的可擴(kuò)展性,方便把模型規(guī)模推上去。當(dāng)然用Transformer+Diffusion做視頻生成,Sora并不是第一個這么做的,這再次印證了OpenAI經(jīng)常干的那種操作,就是利用“吸星大法”從開源屆汲取各種前沿思路,但是自己反而越來越封閉的CloseAI作風(fēng)。
于是,我們把基于Transformer網(wǎng)絡(luò)結(jié)構(gòu)的信息融進(jìn)去,目前Sora整體結(jié)構(gòu)如上圖所示。
讓我們繼續(xù)。Sora在宣傳時特別強(qiáng)調(diào)一個特性:可以支持不同分辨率(Variable Resolution)、不同長寬比(Various Aspect Ratio)、不同時長(Various Duration)的視頻訓(xùn)練與生成。目前主流技術(shù)里這么做的不能說沒有,但是確實(shí)極少,三者同時做到的在公開文獻(xiàn)里我沒有看到過,要做到這一點(diǎn),對具體技術(shù)選型時也有不少要求,所以作為宣傳點(diǎn)無可厚非。后文為了表達(dá)簡潔些,統(tǒng)一以“不同分辨率”來同時代表“不同分辨率和不同長寬比”,這點(diǎn)在閱讀后文的時候還請注意。關(guān)于生成視頻時長問題我們后文會單獨(dú)分析。
這里先解釋下什么是“不同分辨率和長寬比”。如上圖所示,其實(shí)好理解,分辨率的話一般跟圖片大小有關(guān)系,圖片小分辨率就低一些,圖片大清晰度或分辨率就高一些,而長寬比就比如我們經(jīng)??吹降亩桃曨l的“豎屏模式”和長視頻的“橫屏模式”等。Sora都支持。
那為啥要支持“不同的分辨率和長寬比”呢?上圖給了個例子,目前做視頻或者圖片生成的主流技術(shù),為了方面內(nèi)部處理(訓(xùn)練時Batch內(nèi)數(shù)據(jù)的規(guī)則性),會把輸入的圖片或視頻大小統(tǒng)一起來,比如對于不同大小的圖片,通過Crop操作,就是在圖片中心截取一個正方形的圖片片段,通過這種方式把輸入大小統(tǒng)一。而這么做的問題上圖展示出來了,因?yàn)槟憬貓D,所以很容易把一個完整的實(shí)體切割開,使用這種經(jīng)過Crop數(shù)據(jù)訓(xùn)練的視頻生成模型,生成的人體就很容易看著不完整,而使用“不同的分辨率和長寬比”,會保持原始數(shù)據(jù)所有信息,就沒有這個問題,實(shí)體表達(dá)的完整性就會好很多。從這也可看出,Sora為了保視頻質(zhì)量,真的是在視頻生成的全環(huán)節(jié)都拼了全力。
我們把Sora這一關(guān)鍵特性表達(dá)到整體結(jié)構(gòu)圖上,就如上圖所示。如果要支持這一特點(diǎn),那么在Spacetime Latent Patch以及LDM這兩個階段,需要作出一些特殊的設(shè)計決策,這也是我們用來在后面推斷Sora關(guān)鍵技術(shù)的重要參考和約束信息。
下一個決策點(diǎn)之前我們提到過,Sora使用了圖片和視頻聯(lián)合訓(xùn)練,這對于保證視頻生成質(zhì)量很重要。
為啥說這點(diǎn)重要呢?上圖給了個例子(可參考Phenaki: Variable Length Video Generation From Open Domain Textual Description),用戶Prompt要求輸出的視頻是“Water Color Style”風(fēng)格的,如果只用視頻訓(xùn)練(右側(cè)視頻截圖),就做不到這一點(diǎn),而如果混合了80%的視頻數(shù)據(jù)和20%的圖片數(shù)據(jù)訓(xùn)練的視頻生成模型(左側(cè)視頻截圖),做得就不錯。這是因?yàn)閹?biāo)注的<文本-圖片>數(shù)據(jù)量多,所以各種風(fēng)格的圖片數(shù)據(jù)都包含,而帶標(biāo)視頻數(shù)據(jù)數(shù)量少,所以很多情景要求下的數(shù)據(jù)都沒有,就導(dǎo)致了這種生成結(jié)果的差異。從此例子可以看出視頻和圖片聯(lián)合訓(xùn)練對于視頻生成質(zhì)量的影響。
如果Sora要支持圖片和視頻聯(lián)合訓(xùn)練,則需要在視頻編碼-解碼器,以及Spacetime Latent Patch階段做技術(shù)選型要作出獨(dú)特的設(shè)計,這進(jìn)一步形成了關(guān)鍵模塊的設(shè)計約束。加上越多約束,其實(shí)你能做的技術(shù)選擇就越少,就越容易推斷出具體的做法。目前的Sora整體結(jié)構(gòu)如上圖所示。
Sora的另外一大特性是能生成長達(dá)60秒的較長時長的視頻,這點(diǎn)眾所周知。
如果把時長要求加進(jìn)去,Sora應(yīng)該會在“視覺編碼器-解碼器”階段,以及LDM階段作出一些獨(dú)特的設(shè)計,才有可能維護(hù)這么長時間的視覺連貫性和內(nèi)容一致性。把所有這些約束都加入后,我們就經(jīng)過一步步推導(dǎo),最終得出了Sora完整的整體結(jié)構(gòu),如上圖所示。
如果對文生視頻領(lǐng)域比較熟悉,我覺得從技術(shù)報告推導(dǎo)出Sora的整體結(jié)構(gòu),這事難度不算大,真正難的地方在于Sora關(guān)鍵模塊具體采用的什么技術(shù)。可列出的關(guān)鍵技術(shù)主要有四塊:
- 視頻編碼器-解碼器?
在支持“圖片&&視頻聯(lián)合訓(xùn)練”、“視頻長時一致性”這兩個約束條件下,具體模型應(yīng)該如何設(shè)計?
- Spacetime Latent Patch
在支持“圖片&&視頻聯(lián)合訓(xùn)練”、“可變分辨率”這兩個約束條件下,具體模型應(yīng)該如何設(shè)計?
- 基于Transformer的視頻Diffusion Model?
在支持“可變分辨率”約束條件下,具體模型應(yīng)該如何設(shè)計?(這塊的長時一致性策略放在第四部分了)
- Diffusion Model階段的長時一致性如何維護(hù)?
接下來,我們對Sora四個關(guān)鍵技術(shù)進(jìn)行更深入的分析。
四、視頻編碼器-解碼器:從VAE到TECO(Temporally Consistent Transformer )
Sora的視頻Encoder-Decoder采用VAE模型概率極大,原因很簡單,因?yàn)榻^大多數(shù)圖片或視頻模型基本都用VAE,定位到VAE不難,難在繼續(xù)探索Sora可能使用的到底是哪個具體模型。
VAE模型出來后有不少改進(jìn)模型,總體而言可分為兩大類:“連續(xù)Latent” 模型和“離散Latent”模型。VAE本身是連續(xù)Latent的,而離散Latent模型變體眾多,最常用的包括VQ-VAE和VQ-GAN,這兩位在多模態(tài)模型和圖片、視頻各種模型中經(jīng)?,F(xiàn)身?!半x散Latent”之所以比較火,這與GPT模型采用自回歸生成離散Token模式有一定關(guān)聯(lián),使用離散Latent模型,比較容易套到類似LLM的Next Token的生成框架里,有望實(shí)現(xiàn)語言模型和圖片、視頻生成模型的一體化,典型的例子就是谷歌的VideoPoet。
考慮到Sora主干模型采用Diffusion Model而非Next Token這種類LLM模式,而Diffusion Model加噪去噪的過程,本就比較適合在連續(xù)Latent空間進(jìn)行,可以推斷Sora采用“連續(xù)Latent”的模式概率較大,倒不是說離散Latent模型不能做Diffusion Model,也是可以的,但如果這么做,一方面把本來是連續(xù)Latent的VAE多做一道轉(zhuǎn)成離散Latent,感覺沒有太大必要性,有點(diǎn)多此一舉的味道。另一方面,如果對接Diffusion Model,離散Latent效果肯定是不如連續(xù)Latent的,原因后面會談。
之前不少探索Sora實(shí)現(xiàn)原理的技術(shù)文獻(xiàn)把Sora可能使用的Encoder-Decoder定位到MAGVIT-v2模型(可參考:Language Model Beats Diffusion -- Tokenizer is Key to Visual Generation),它是VQ-VAE的一個變種。不清楚得出這個判斷的原因是什么,但我個人感覺采用MAGVIT-v2的概率應(yīng)該不大,反而是VQ-GAN的變體模型TECO(Temporally Consistent Transformer)可能性更高些,理由后面會談到。當(dāng)然如果適配Sora的一些要求,TECO也需要做出些改動,具體怎么改后文也會談。
為了便于理解后續(xù)內(nèi)容,先介紹下圖片VAE模型的基本思路。如上圖所示,VAE是種類似GPT的自監(jiān)督學(xué)習(xí),不需要標(biāo)注數(shù)據(jù),只要有足夠圖片數(shù)據(jù)就能訓(xùn)練模型。VAE的基本思想是通過重建圖片,來獲得一個Encoder和對應(yīng)的Decoder。
輸入隨機(jī)某張圖片x后,Encoder對像素進(jìn)行壓縮,形成一個低維的圖片特征壓縮表示z,而Decoder與Encoder相反,從壓縮后的圖片Latent表征z,試圖還原原始圖像x,產(chǎn)生重建的圖像x’,重建過程中x和x’的差異就可以作為訓(xùn)練模型的損失函數(shù),以此引導(dǎo)VAE模型的encoder產(chǎn)生高質(zhì)量的壓縮表示z,decoder則從壓縮表示中盡可能準(zhǔn)確地還原x。一般會采用CNN卷積網(wǎng)絡(luò)來做Encoder和Decoder,所以VAE本身產(chǎn)生的圖片Latent表征,本來就是連續(xù)的。
說完圖片VAE的思路,再來談視頻VAE的基本思想。如果把一張圖片看作是世界某個時刻三維空間的二維壓縮表示,那視頻就在此之上,加入時間維度,可看做沿著時間軸由若干連續(xù)的二維Space圖片組成的某段物理世界場景的三維Space-time表征。
于是,視頻可以被看成是由多張圖片沿著時間軸組成的有序圖片序列,視頻VAE的任務(wù)和圖片VAE是類似的,就是盡可能準(zhǔn)確地重建組成視頻的每一幀,在重建視頻的過程中學(xué)習(xí)視頻壓縮Encoder和視頻解壓縮Decoder。
一般Encoder可以使用Causal CNN 3D卷積來做,和圖片的2D卷積意思類似,最大的不同在于,CNN的卷積核從2D升級成3D卷積。就是說在壓縮第i幀圖片的時候,不僅僅像圖片2D卷積一樣只參考第i幀圖片內(nèi)容,也可以參考第(i?1)、(i?2)….(i?k)等之前的 k 幀圖片,所以是一種casual 3D卷積(Causal的意思是只能參考前面的,不能參考后面的,因?yàn)閷τ谝曨l生成來說,后面的幀還沒生成,所以是不可能參考到的,但是第 i 幀之前的 k 幀已經(jīng)生成了,所以在生成第 i 幀的時候是可以參考的。一般這種就叫causal(因果),類似GPT生成Next Token的時候只能參考之前已經(jīng)生成的Token,這是為啥GPT的attention被稱作Causal Attention。)
3D卷積因?yàn)樵谥亟ǖ?nbsp;i 幀的時候參考了之前的 k 幀,這其實(shí)融入時間信息了,如果 k 可以拉到比較長的時間,那么對于維護(hù)生成圖像的時間一致性是有幫助的。但是,僅靠CNN 卷積一般融入的歷史比較短,很難融入較長時間的信息,所以需要有新思路,至于新思路是什么,這個晚些會談。
簡單介紹下“連續(xù)Latent”和“離散Latent”的概念。如上圖所示,如果使用CNN卷積操作對圖片進(jìn)行掃描,因?yàn)榫矸e結(jié)果數(shù)值是在連續(xù)實(shí)數(shù)范圍內(nèi),所以得到的卷積結(jié)果自然就是連續(xù)的Latent。所謂“離散Latent”,就是把“連續(xù)Latent”進(jìn)行ID化,從實(shí)數(shù)向量通過一定方法轉(zhuǎn)換成一個專屬ID編號,這跟LLM里的字符串Tokenizer離散化過程是比較像的。
具體而言,一般對“連續(xù)Latent”離散化過程的基本思想可參考上圖中的右側(cè)子圖:模型維護(hù)一個“密碼本”(Codebook),密碼本由很多Codeword構(gòu)成,每項(xiàng)Codeword維護(hù)兩個信息,一個是這個Codeword對應(yīng)的Latent特征Embedding,這是連續(xù)的,另外就是這個Codeword對應(yīng)的專屬ID編號。Codebook類似詞典信息。在離散化過程中,對于某個待離散化的”連續(xù)Latent”,會和密碼本里每個Codeword對應(yīng)的Embedding比對下,找到最接近的,然后把Codeword對應(yīng)的ID賦予待離散化Latent。你看,其實(shí)很簡單。
這里解釋下前面提到的一點(diǎn):為何說對于Diffusion Model來說,“離散Latent”的效果應(yīng)該比不上“連續(xù)Latent”。其實(shí)從上面離散化過程可以看出來,本質(zhì)上”連續(xù)Latent”離散化過程,可以看成對圖片片段聚類的過程,賦予的那個ID編號其實(shí)等價于聚類的類編號。目前的圖像處理而言,Codeword通常在8000左右,如果再大效果反而不好,這里就看出一個問題了,這種聚類操作導(dǎo)致很多“大體相似,但細(xì)節(jié)不同”的圖片被賦予相同的ID,這意味著細(xì)節(jié)信息的丟失,所以離散化操作是有信息損失的。這是為何說如果對接Diffusion Model最好還是用“連續(xù)Latent”的原因,因?yàn)楸A舻膱D片細(xì)節(jié)的信息含量更多,有利于后續(xù)生成更高質(zhì)量的視頻內(nèi)容。
再說“離散Latent”的一個典型模型VQ-VAE(可參考:Neural Discrete Representation Learning),思路如上圖所示,其實(shí)就是剛提到的如何對VAE獲得的“連續(xù)Latent”進(jìn)行離散化的過程,思路已說過,此處不贅述。
另外一個“離散化Latent”的典型是VQ-GAN(可參考:Taming Transformers for High-Resolution Image Synthesis),其思路可參考上圖??梢园阉唵卫斫獬杉尤肓薌AN的改進(jìn)版本VQ-VAE。在VQ-VAE離散化基礎(chǔ)上,集成進(jìn)GAN的思路,以獲得更好的編碼效果。我們知道,對于GAN而言,主要是由一個“生成器”和一個“判別器”相互欺騙對抗來優(yōu)化模型效果,VAE Decoder 會生成圖像,自然這可作為GAN天然的生成器,再引入一個獨(dú)立的GAN判別器即可。
那Sora到底用的哪個VAE模型呢?上圖展示了傳說中被提及率最高的MAGVIT-2。過程較為簡單,它把輸入視頻幀分組,首幀單獨(dú)作為一組(這導(dǎo)致它可以支持“圖片&&視頻的聯(lián)合訓(xùn)練”,因?yàn)閳D片可看成單幀的視頻,首幀單獨(dú)表示就可以對單張圖片進(jìn)行編碼了),其它幀比如可以4幀分為一組。對于每一組4幀圖片,通過Causal 3D 卷積把4幀圖片先壓縮成一個“連續(xù)Latent”。然后再進(jìn)行上面講的“連續(xù)Latent”離散化操作,就得到了MAGVIT的編碼結(jié)果。
我們先不考慮離散化操作,對于Sora來說,很明顯這是不需要的,原因上文有述。單說Causal 3D卷積操作,MAGVIT的這個操作意味著兩個事情:
首先,MAGVIG-v2因?yàn)闀?幀最后壓縮成一幀的Latent表示,所以它不僅在空間維度,同時也在時間維度上對輸入進(jìn)行了壓縮,而這可能在輸入層面帶來進(jìn)一步的信息損失,這種信息損失對于視頻分類來說不是問題,但是對視頻生成來說可能無法接受。
其次,4幀壓成1幀,這說明起碼MAGVIG-v2的Latent編碼是包含了“局部Time”信息的,這對于維護(hù)生成視頻的時間一致性肯定有幫助,但因?yàn)閮H靠CNN很難融入太長的歷史信息,貌似只能融合短期的時間信息,對于維護(hù)“長時一致性”幫助很有限,。
綜合考慮,我個人覺得Sora采用MAGVIT的概率不大。為了能夠生成長達(dá)60秒的視頻,我們希望在VAE編碼階段,就能把長周期的歷史信息融入到VAE編碼里來,這肯定是有很大好處的。
問題是:現(xiàn)在公開的研究里,存在這種模型嗎?
您別說,還真讓我找到一個,就是上圖所展示的TECO模型(可參考:Temporally Consistent Transformers for Video Generation)。上圖展示了TECO和Sora兩位Co-Lead之間的淵源,這是UC Berkeley發(fā)的文章,主要研究如何生成“長時間一致性”的視頻,而兩位Co-Lead都博士畢業(yè)于UC Berkeley,也都研究視頻生成相關(guān)內(nèi)容,所以他們起碼肯定知道這個工作,TECO的主題又比較符合他們把Sora打到60秒長度的技術(shù)需求,所以參考TECO的概率還是較大的。
TECO結(jié)構(gòu)如上圖所示,核心由兩個任務(wù)組成:一個是視頻重建任務(wù),用來訓(xùn)練視頻Encoder-Decoder;一個是使用MaskGit生成離散化的圖像Token,主要用于生成視頻。TECO有兩個主要特點(diǎn):
首先,它在VAE編碼階段對Space和Time信息分別編碼,而且Time編碼引入了極長的Long Time信息。確切點(diǎn)說,是所有歷史信息,比如要生成第i 幀視頻,則Time編碼會把第 1 到第 (i?1) 幀的之前所有歷史信息都融合到第 i 幀的時間編碼里。很明顯這樣做對于維護(hù)長時一致性是很有幫助的。
其次,TECO在生成視頻的長時一致性方面表現(xiàn)確實(shí)很不錯。上圖右下角的效果對比圖測試了長達(dá)500幀的生成視頻,TECO效果比基準(zhǔn)模型要好(也請關(guān)注下里面的紅色曲線模型FDM,后面我們會提到它)。我們可以推斷一下,假設(shè)視頻是電影級流暢度達(dá)24幀/秒,那么500幀圖像對應(yīng)正好20秒時長的生成視頻。(Sora生成的大部分視頻都是長度20秒左右,推斷應(yīng)該也是總長度500幀左右。這是否說明了些什么?)
對Sora來說,如果對TECO適應(yīng)性地改造一下,基本就可以把它能在VAE階段就融合超長歷史的能力吸收進(jìn)來。具體而言,需要做兩項(xiàng)改動:首先,VAE離散化是不必要的,所以可以拿掉;其次,MaskGit部分用于訓(xùn)練模型能夠Token by Token地生成視頻,我們也不需要,只需要保留視頻重建部分即可。
經(jīng)過上述改造,TECO在VAE Encoder階段的基本思想就展示在上圖中了。首先,是對圖片內(nèi)容的空間Latent編碼。首幀單獨(dú)處理,自己成為一組,這就可以支持“圖片和視頻聯(lián)合訓(xùn)練”了;其它幀兩幀一組,比如對于第i 幀,則把前一幀第 (i?1) 幀也和第 i 幀放在一組。這里要注意,盡管也是2幀一組,但是這和MAGVIT 思路是不一樣的,TECO這個2幀一組類似一個滑動窗口,窗口間是有重疊的,所以不存在多幀壓縮成一幀帶來的信息損失問題。TECO思路正好和MAGVIT相反,在Space Latent編碼階段不僅考慮第i幀,還把第 (i?1) 幀的信息也帶進(jìn)來,所以它是通過VAE增加更多信息的思路。
視頻幀分組后,使用CNN 3D卷積可以產(chǎn)生每幀圖片對應(yīng)的“連續(xù)Latent”,這部分是“Space Latent”,主要編碼圖像的空間信息;之后,使用Causal Temporal Transformer對時間信息進(jìn)行編碼,前面提過,對于同一視頻,TECO會把所有歷史內(nèi)容Time信息都融合進(jìn)來。Transformer輸出的時間編碼是線性的,經(jīng)過Reshape后可以形成和“Space Latent”相同大小的高維表示,這部分就是VAE的“Time Latent”。這樣,每幀視頻經(jīng)過TECO編碼后,有一個“Space Latent”一個“Time Latent”,兩者并在一起就是這幀視頻的VAE編碼結(jié)果。這里可以再次看出,TECO的思路是增加信息,而不是以壓縮減少信息為唯一目的的。
使用TECO除了能在VAE編碼階段就引入盡可能長的時間信息,更好維護(hù)生成視頻的一致性外,還有另外一個好處,OpenAI明顯是認(rèn)準(zhǔn)了Transformer的Scale潛力比較大,所以Sora在做Diffusion Model的時候把U-Net換成Transformer。如果采用TECO,則Sora的主體結(jié)構(gòu)基本都基于Transformer了,這明顯是符合OpenAI的模型口味的。
五、Spacetime Latent Patch:Spacetime Latent Patch的含義及NaVIT
我們先介紹單張圖片Patchify的具體含義。本質(zhì)上,Patchify是對VAE壓縮編碼的二次壓縮,在視頻生成模型里很常見。具體做法很簡單,如上圖所示,對于VAE壓縮后的“連續(xù)Latent”平面,可以設(shè)定一個2?2 大小的Patch,不重疊地掃描“連續(xù)Latent”平面,通常是接上一個MLP對 2?2 的小正方形網(wǎng)格輸入做個變換。這樣的話,假設(shè)“連續(xù)Latent”本來大小是 8?8 ,經(jīng)過Patchify操作后,就形成了一個二次壓縮的 4?4 的Patch矩陣,然后可以通過線性化操作把Patch拉成一條直線,這是因?yàn)楹竺娼拥氖荰ransformer,它需要線性的輸入Patch形式。
目前很多視頻生成研究證明了:Patch Size 越小,生成的視頻質(zhì)量越高。所以這里Sora 采取2?2 大小的 Patch Size 基本沒疑問。Patch Size 越小說明壓縮率越低,也說明保留的原始圖片信息越多??梢赃M(jìn)一步推斷,這說明了VAE 階段也好、Patchify階段也好,這種原始信息壓縮階段,應(yīng)該盡量多保留原始信息,不要壓縮太狠,否則對視頻生成質(zhì)量會是負(fù)面效果。當(dāng)然付出的代價是比較消耗計算資源,計算速度會慢很多。目前看很難兼顧,你必須要作出取舍。
了解單張圖片的Patchify 操作后,我們來看一個簡單的視頻 Patch 方法。因?yàn)橐曨l是由多個視頻幀按照時間順序構(gòu)成的有序序列,一個最簡單的方法是不考慮不同幀之間的關(guān)系,每一幀獨(dú)立通過上述的Patchify 操作進(jìn)行二次壓縮,如上圖所示。
之前很多解讀Sora 技術(shù)的文章傾向于認(rèn)為 Sora 在這個階段采用了類似VIVIT 的Tubelet Embedding 的思路。含義如上圖所示:就是除了第一幀,其它視頻幀比如可以2 幀為一組,不僅在空間維度進(jìn)行壓縮,在時間維度也要進(jìn)一步壓縮,從時間維度的 2 幀輸入壓縮為 1 幀 Patch,具體技術(shù)采取CNN 3D 卷積就可以實(shí)現(xiàn)。
我覺得在這里采用類VIVIT 的時間壓縮可能性較小,主要這么操作,在時間維度進(jìn)一步壓縮,輸入側(cè)信息損失太高。VIVIT 搞的是圖像分類任務(wù),屬于比較粗粒度的任務(wù),所以壓縮狠一點(diǎn)問題不大,但是對于視頻生成任務(wù)來說,就像上文提到的,看似在輸入側(cè)要盡可能保留多一些信息,這么狠的壓縮大概會嚴(yán)重影響視頻生成質(zhì)量。目前也有研究(可參考:Latte: Latent Diffusion Transformer for Video Generation)證明,這么做確實(shí)有損害作用,所以在這里,類VIVIT 方案我覺得可以 Pass 掉。
如果假設(shè)Sora 在 VAE 階段采用的是 TECO 的話,則可以如上圖這么做。因?yàn)槊繌垐D片有兩個 Patch 矩陣,一個是Space Latent,保留的主要是空間信息;一是 Time Latent,保留主要是長時歷史信息。所以,我們可以用一個Patch Size=2?2?2 的 Patch,把同一個圖片的Space Latent 和 Time Latent 合并,壓縮為一個Patch 矩陣。在這里若把這張圖片對應(yīng)的 Patch 矩陣叫做“Spacetime Latent Patch”,看著貌似問題不大吧?我猜 Sora 這么做的概率還是比較大的,也很可能是OpenAI 強(qiáng)調(diào)的“Spacetime Latent Patch”的來源之處。當(dāng)然這純屬個人猜測,主觀性較強(qiáng),謹(jǐn)慎參考。
這么做有若干好處。首先,每張圖片對應(yīng)一個Patch 矩陣,融合過程中既包含了空間信息,也包含了 Long Time 時間信息,信息保留非常充分。其次,如果要支持“圖片&&視頻聯(lián)合訓(xùn)練”,那么首幀需要獨(dú)立編碼不能分組,這種方案因?yàn)闆]有視頻幀分組過程,所以自然就支持“圖片&&視頻聯(lián)合訓(xùn)練”。
前文講過,如果要支持不同分辨率視頻,則需要在Patch 階段做些獨(dú)特的工作。之前大家提及率較高的現(xiàn)有技術(shù)是 NaVIT,目前看下來,貌似確實(shí)也沒有比NaVIT(可參考:Patch n’ Pack: NaViT, a Vision Transformer for any Aspect Ratio and Resolution)更合適的方案了。
上圖展示了NaVIT 的基本思路:其實(shí)很簡單,只要我們固定住 Patch Size 的大小,通過掃描不同分辨率的視頻,自然就產(chǎn)生了不同分辨率或長寬比的Patch矩陣,然后把它們線性化即可。
與NaVIT 對應(yīng)的可以支持可變分辨率的方法是 Padding 方案。如上圖右方子圖所示,只要設(shè)定好一個最大圖片大小,其實(shí)不管圖片長寬比如何,只要讓它占據(jù)從左上角開始的一個局部位置即可,其它相對最大圖片大小空出的位置,用無意義的Padding 占位符號占住就行。很明顯這個方法也可以支持不同分辨率視頻。
那么我們應(yīng)該選擇NaVIT 還是 Padding 呢?很明顯應(yīng)該選擇 NaVIT 方案。NaVIT 在提出之初,就是為了改進(jìn) Padding 方法的。Padding 方法有什么問題?就是在訓(xùn)練模型的時候,一個Batch 里被 Padding 這種無意義的占位符號浪費(fèi)的空間太多了,而NaVIT 不需要對每張圖片進(jìn)行 Padding,該是多少 Patch 就是多少 Patch,頂多在 Batch 末尾加少量 Padding 來填充到 Batch 最大長度即可。很明顯 NaViT 方案在一個 Batch 里可以放更多視頻幀,而這能極大增加模型的訓(xùn)練效率。
而且,如果模型能支持的最大分辨率越高,Padding 方法每張圖片 Padding 浪費(fèi)的比例就越高,采用 NaVIT 也就越合算。我們知道,Sora 最大可以支持 2048*2048 的圖片,在這種情況下,基本不可能采用 Padding 方法,貌似也只能用NaVIT 了,起碼我目前還沒有看到更好的方案。
在將Patch 拉成線性結(jié)構(gòu)后,會丟失 Patch 對應(yīng)的位置信息,所以為了能夠支持可變分辨率視頻,對于每個Patch,需要特殊設(shè)計的位置表征。
很明顯使用Patch 的絕對位置(就是按照 Patch 順序編號)是不行的,只要我們使用三維空間里的相對坐標(biāo),并學(xué)習(xí)對應(yīng)的Position Embedding,就可以解決這個問題。上圖展示了同一個視頻的連續(xù)三幀,對于藍(lán)色 Patch 來說,可以看出它對應(yīng)的相對坐標(biāo)位置為:X=2 , Y=3 以及 Z=3 (視頻時間維度的第三幀)。假設(shè)我們在模型訓(xùn)練過程中學(xué)習(xí)每個坐標(biāo)位置對應(yīng)的 embedding,然后把三者的embedding 疊加,就形成了這個 Patch 對應(yīng)的 Position Embedding,這里包含了這個 Patch 對應(yīng)的三維相對坐標(biāo)。對于每個Patch 來說,除了 Patch 表達(dá)圖片內(nèi)容外,對應(yīng)的,每個Patch 再增加一個位置表征即可。
本部分最后,在 Spacetime Latent Patch階段,讓我們歸納下 Sora 可能采取的技術(shù)方案:首先,很可能會對接 TECO 的 VAE 編碼,使用2?2?2 大小的 Patch 來合并每張圖片的 Space Latent 以及 Time Latent,每張圖片被壓成一個Spacetime Latent Patch 矩陣。然后使用 NaVIT 方法來支持可變分辨率視頻,最主要的改動是需要根據(jù)空間維度的兩個坐標(biāo)和時間軸坐標(biāo),來學(xué)習(xí)每個Patch 在空間位置中對應(yīng)三維空間相對位置坐標(biāo)的 Position Embedding。
六、Transformer Diffusion Model:從Diffusion Model原理到Video DiTs模型
本部分我們會先介紹下Diffusion Model基本原理,然后逐步推導(dǎo)Video DiTs模型可能的內(nèi)部結(jié)構(gòu)。
上圖展示了 Diffusion Model 的基本原理,Diffusion Model 由正向加噪和反向去噪過程構(gòu)成。假設(shè)我們有一個很大的圖片庫,可以從中隨機(jī)選擇一張x0 ,正向過程分多次,每次加入不同程度的符合正態(tài)分布的噪音到原始圖片里,直到清晰圖完全轉(zhuǎn)化為純噪音圖 ξ 為止。而反向去噪過程則從轉(zhuǎn)化來的純噪音圖 ξ 開始,訓(xùn)練神經(jīng)網(wǎng)絡(luò)預(yù)測對應(yīng)步驟加入的噪音是什么,然后從純噪音圖 ξ 里減掉預(yù)測的噪音,圖像清晰程度就增加一些,依次反向逐步一點(diǎn)一點(diǎn)去除噪音,就能恢復(fù)出最初的 x0 圖片內(nèi)容。
Diffusion Model 的前向過程是人為可控地對已知圖片逐步加入不同程度噪音的過程,即噪音的逐步“擴(kuò)散”過程。經(jīng)數(shù)學(xué)推導(dǎo),對于第 t 個 Time Step 的加噪音過程可以一步完成,不需要上述的逐漸擴(kuò)散的過程,如上圖所列出公式所示。
給圖片加噪音的具體過程如下:首先,我們從圖片庫中隨機(jī)選擇一張清晰圖x0 ,再隨機(jī)選擇一個滿足正態(tài)分布的完全噪音圖 ε ;然后,隨機(jī)選擇一個 Time Step,并對它進(jìn)行編碼;接下來按照上述公式直接在原始圖片 x0 基礎(chǔ)上融合噪音 ε 來產(chǎn)生混合噪音圖 xt ,加入噪音程度系數(shù) 與 Time Step 有關(guān),原則上,Time Step 越大,則 越小,原始圖片信息融入得越少,噪音程度系數(shù)值 則越大,混合后的噪音圖 xt 噪音程度越高,也就是說混入更高比例的噪音到原始清晰圖 x0 中。這樣就一步形成了某個 time step 下的噪音圖。
當(dāng)人為加入可控噪音后,等于制作出了訓(xùn)練數(shù)據(jù):<構(gòu)造出的混合噪音圖xt ,構(gòu)造這張混合噪音圖時對應(yīng)的 Time Step,被加入的噪音圖 ε >。用這個訓(xùn)練數(shù)據(jù),我們可以來訓(xùn)練一個神經(jīng)網(wǎng)絡(luò)模型 f(θ) ,輸入混合噪音圖 xt 以及噪音圖對應(yīng)的 Time Step 信息,讓 f(θ) 根據(jù)這兩個信息,反向預(yù)測到底加入了怎樣的噪音 ε′ ,而前向過程被加入的噪音圖 ε 就是標(biāo)準(zhǔn)答案。神經(jīng)網(wǎng)絡(luò) f(θ) 當(dāng)前預(yù)測的噪音圖 ε′ 和標(biāo)準(zhǔn)答案 ε 對比,兩者的差異 (ε?ε′) 形成損失(MSE Loss),把預(yù)測差異通過反向傳播去調(diào)整神經(jīng)網(wǎng)絡(luò)的參數(shù),使得神經(jīng)網(wǎng)絡(luò)能夠預(yù)測得越來越準(zhǔn)。這就是訓(xùn)練Diffusion Model 的過程。當(dāng)然,這里為了方便講清楚,我做了一定程度的簡化。
如果經(jīng)過上述過程訓(xùn)練好 Diffusion Model 之后,在使用階段,Diffusion Model 的反向過程如上圖所示,分為兩個階段。第一個階段,我們把需要進(jìn)一步去除噪音的某個混合噪音圖xt ,以及混合噪音圖當(dāng)前對應(yīng)的去噪步數(shù)(Time Step)信息,輸入訓(xùn)好的神經(jīng)網(wǎng)絡(luò) f(θ) ,此時神經(jīng)網(wǎng)絡(luò) f(θ) 會預(yù)測出一個噪音圖 ε′ 。第二個階段,拿到了神經(jīng)網(wǎng)絡(luò)預(yù)測的噪音圖 ε′ 后,混合噪音圖片 xt 減掉預(yù)測的噪音圖 ε′ ,就完成了一步去噪音的過程,圖像包含的噪音就減少一些,變得更清晰一些。去噪過程仍然需要一步一步逐漸完成,不能像加噪過程那樣一步完成。
上面介紹的是無條件約束下的圖像 Diffusion Model 運(yùn)行過程,而像文生圖模型比如Stable Diffusion 這種模型,是在有文本 Prompt 約束下進(jìn)行的,希望模型能生成符合文本描述的圖像。如何將無條件的 Diffusion Model 改造成有條件約束的模型呢?很簡單,我們可以使用比如 CLIP 的文本編碼器,把 Prompt 從文本空間映射到與圖像對齊的參數(shù)空間內(nèi),然后以此作為 Diffusion Model 模型生成圖片的指導(dǎo)條件。類似地,Diffusion Model 預(yù)測的噪音ε′ 會和人為加入的噪音標(biāo)準(zhǔn) ε 進(jìn)行對比,以減小兩者的差異作為學(xué)習(xí)目標(biāo),來更新 Diffusion Model 的參數(shù),這樣能讓神經(jīng)網(wǎng)絡(luò)預(yù)測噪音越來越準(zhǔn),那么去噪效果也就會越來越好。
上面是 Diffusion Model 的基本原理,接下來我們介紹如何推導(dǎo)出Video DiTs 視頻生成模型的結(jié)構(gòu)。首先要明確的是,基于 Transformer的 Diffusion Model 整個工作流程,就是上面介紹的加噪和去噪過程,無非預(yù)測噪音的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),從傳統(tǒng)做Diffusion Model 常用的 U-Net 網(wǎng)絡(luò),換成了Transformer 網(wǎng)絡(luò)結(jié)構(gòu)而已。
大家都猜測 Sora 是基于 DiTs 模型(可參考:Scalable Diffusion Models with Transformers),原因在于 William Peebles作為 Sora 項(xiàng)目的 Co-Lead,也是 DiTS 模型的一做,所以大家推測 Sora 的 Diffusion Model 是基于 DiTs 改的,這個猜測聽著還是蠻合理的。
DiTs 是基于 Transformer的Diffusion Model 圖像生成模型,看著結(jié)構(gòu)比較復(fù)雜,其實(shí)整體結(jié)構(gòu)和上文介紹的標(biāo)準(zhǔn)的有條件Transformer Diffusion Model 生成模型基本一致,上圖在 DiTs 結(jié)構(gòu)圖的對應(yīng)位置標(biāo)注出了相應(yīng)的組件名稱,左右兩圖可以對照著看下。
需要注意的是,DiTs 是生成圖片的模型,直接拿來做視頻模型肯定是不行的。我們至少需要在DiTs 上做兩項(xiàng)改造:首先,需要設(shè)計一定的模型結(jié)構(gòu),用來支持不同長寬比和分辨率的視頻;第二,需要把圖片生成模型改成視頻生成模型。
先來看下第一個改造,用來從Transformer 模型結(jié)構(gòu)層面支持不同長寬比和分辨率的視頻。在 Spacetime Latent Patch 階段我們談到過,經(jīng)過 NaVIT 改造,不同圖片或視頻幀的輸入 Patch 是變長的,所以在 Transformer 階段,我們需要引入 Attention Mask 機(jī)制,保證 Transformer 在做 Local Spatial Attention 的時候,屬于某張圖片的 Patch 只能相互之間看到自己這張圖片內(nèi)的其它Patch,但不能看到其它圖片的內(nèi)容。另外,因?yàn)檫@個引入的 Attention Mask 是針對輸入 Patch 的,所以 Transformer內(nèi)的這個 Local Spatial Attention 模塊一定在 Transformer 內(nèi)部結(jié)構(gòu)的最底層。
經(jīng)過上述推導(dǎo),我們可得出如上圖所示的Transformer 內(nèi)部結(jié)構(gòu),它目前由兩個子模塊構(gòu)成:最底層是 Local Spatial Attention 模塊,主要計算圖片或視頻幀的空間信息,也就是對同一個視頻幀內(nèi)的各個 Patch關(guān)系進(jìn)行建模。在它之上,有一個標(biāo)準(zhǔn)的 MLP 模塊,這個是 Transformer模塊做非線性映射所必需的。
現(xiàn)在的問題是:如果每個視頻幀的Patch 數(shù)是固定的,那么這個 Local Spatial Attention 模塊就很容易設(shè)計,但是我們面對的是變長 Patch,具體采取什么技術(shù)手段才能實(shí)現(xiàn)針對變長Patch 的 Local Spatial Attention 呢?
這里給出一個可能的解決方法,主要思路來自于文獻(xiàn)“Efficient Sequence Packing without Cross-contamination: Accelerating Large Language Models without Impacting Performance”。我們可采用“0/1 Attention Mask 矩陣”來達(dá)成目標(biāo),從上圖可看出思路也很簡潔:如果我們假設(shè) Batch 內(nèi)序列最大長度是8,就可以設(shè)置一個8?8 的 0/1 Attention Mask,只有對角線正方形子Block 位置全是 1,其它地方都設(shè)置成 0。左圖中標(biāo)為綠色的某幀三個 Patch,如果看矩陣前三行,易看出,針對其它幀的Attention Mask 由于都是 0,所以加上 Mask 后就看不到其它圖片,而對于它對應(yīng)的 3?3 都是 1 的 Attention Mask,又可以保證三個 Patch 相互都能看到。其它圖片也是類似的道理。通過設(shè)置Attention Mask,就可以很方便地支持 NaVIT 導(dǎo)致的每幀不同分辨率和長寬比的問題。
接下來進(jìn)行第二項(xiàng)改造,從 DiTs 到 Video DiTs,也就是讓 DiTs 能夠支持視頻生成。這步改進(jìn)比較簡單,因?yàn)榇蠖鄶?shù)視頻生成模型都有這個模塊,就是在我們上一步改造的Transformer 結(jié)構(gòu)里,加入一個 Casual Time Attention 子模塊。Causal Time Attention 模塊的作用是在生成第 i 幀的時候,收集歷史 Time 信息,也就是通過 Attention 讓第 i 幀看到之前的比如 k 幀內(nèi)容,這是用來維護(hù)生成視頻的時間一致性的,做視頻生成肯定需要它。至于它的位置,因?yàn)?Local Spatial Attention 必然在 Transformer 內(nèi)部最下方,所以Causal Time Attention 放在之前引入的兩個子模塊中間,這是個合理選擇。
Local Spatial Attention 和Causal Time Attention 的具體含義,如果按照時間序列展開,則如上圖所示,比較簡單不解釋了。
前面在講Diffusion Model 原理的時候提過,利用 Diffusion Model 來做文本生成視頻,還需要兩個條件變量:Prompt 文本信息,以及 Time Step 信息。如果把這兩個條件引入,一種設(shè)計方案是把兩個條件信息壓縮后,并排放入每一幀的輸入信息里;另外一種思路是可以在Transformer 目前的 3 個子模塊里再引入一個 Condition Attention Block,把輸入條件接入這個模塊,通過 Attention模式工作。目前已有研究(可參考:VDT: General-purpose Video Diffusion Transformers via Mask Modeling)證明,盡管第一種把條件變量塞到輸入部分的做法很簡單,但是效果是很好的,訓(xùn)練起來模型收斂速度也較快?;诖?,我這里就選擇了這種簡潔的方案,思路如上圖所示。
如果歸納下 Video DiTs 的整個邏輯,就如上圖所示。把噪音Patch 線性化后,并入Prompt 和 Time Step 條件,一起作為 Transformer 的輸入。Transformer 內(nèi)部由三個子模塊構(gòu)成:Local Spatial Attention 模塊負(fù)責(zé)收集視頻幀空間信息;Causal Time Attention 模塊負(fù)責(zé)收集歷史時間信息;MLP 模塊負(fù)責(zé)對時間和空間信息通過非線性進(jìn)行融合。疊加比如N 個這種 Transformer 模塊,就可以預(yù)測當(dāng)前 Time Step 加入的噪音,實(shí)現(xiàn)一步去噪音操作。對于 Diffusion Model 的逆向去噪過程,Time Step 可能需要如此反復(fù)迭代 20 到 50 次去噪過程,才能形成清晰的視頻幀。這也是為何 Sora 比較慢的原因之一。
七、Sora的Long Time Consistency可能策略:暴力美學(xué)還是FDM?
如何維護(hù)生成長視頻的內(nèi)容一致性也是一個研究方向,目前一種比較常見的策略是“LLM+Diffusion Model”集成策略,如上圖所示的流程。其基本思想是:可以把長視頻分成多個分鏡場景,對于用戶輸入的Prompt,可以用比如 GPT-4 這種 LLM 模型自動生成多場景各自的拓展 Prompt 描述,然后用視頻生成模型生成對應(yīng)的分場景視頻,就是“分場景拼接”的模式。
但這里有個問題,比如主角可能在各個分場景都會出現(xiàn),如果不做一些特殊的維護(hù)角色一致性處理的話,可能會出現(xiàn)主角形象老在不斷變化的問題,也就是角色不一致的問題。上面這個工作VideoDrafter(可參考:VideoDrafter: Content-Consistent Multi-Scene Video Generation with LLM)是這么處理的:它讓 LLM 產(chǎn)生一個角色的形象描述文字,然后使用比如 Stable Diffusion 文生圖模型,根據(jù)形象描述文字,生成全局固定的角色外觀圖片。在每個分場景內(nèi),都依托這個唯一的角色外觀圖片來生成視頻,這樣可以解決不同分場景的角色一致性問題。
Sora會采取這種策略嗎?我猜可能性不太大,對于很通用的Prompt 描述,明確確定主角或特定角色其實(shí)是不太容易的,這種明確角色、產(chǎn)生全局固定形象的思路,感覺比較適合特定領(lǐng)域的視頻生成。
這里提一種粗暴野蠻但簡單的可能做法,如上圖所示。就是說,在生成第i 幀視頻的時候,把 Time Attention 拉長,讓第i 幀看到前面從第 1 幀到第(i?1) 幀所有的歷史內(nèi)容,這類似 TECO 在做 VAE 時集成 Time信息的做法。這種做法看到的歷史比較長,所以可能在維護(hù)一致性方面有好處,但明顯對算力要求很高。
Sora有可能這么做嗎?并不能排除這種可能性,證據(jù)來自于上圖中Sora 技術(shù)報告的截圖,紅圈標(biāo)出的文字意思是 Sora 為了維持長時一致性,會一次看之前的很多幀。
在 Transformer Diffusion Model 階段維護(hù)“長時一致性”策略方面,感覺FDM(Flexible Diffusion Modeling)方法是種簡潔有效的思路。FDM(可參考:Flexible Diffusion Modeling of Long Videos)提出了兩種 Time Attention 改進(jìn)模型,在維護(hù)長時一致性方面效果不錯。之前我們提到TECO 的評測,右下角的評測圖里,除了 TECO 那條藍(lán)色線,緊接著的紅色線就是FDM 在 500 幀視頻生成的效果。而且很明顯,F(xiàn)DM 這種 Time Attention 和 TECO 這種 VAE 編碼,兩者都出于維護(hù)生成視頻一致性的目的,而在模型中所處的位置不同,所以兩者是有互補(bǔ)性的。
下面介紹下 FDM 的兩種 Time Attention 的思路,在介紹之前,先說明下基準(zhǔn)方法,也就是“自回歸方法“(Autoregressive)。如圖所示,“自回歸”思路很直接,先依次生成若干比如 6 幀視頻幀,然后一次生成后續(xù)3 幀,在生成這 3 幀的時候,Time Attention 會看到之前的最近若干幀,比如 4 幀。也就是說,“自回歸”在生成后續(xù)視頻幀的時候,會參考之前最近的若干幀。容易看出,這是一種“短時”Attention,而非“長時” Attention。
“Long Range”是 FDM 提出的第一種“長時一致性”模型,思路如圖所示。想法很直觀:在生成第i幀視頻的時候,不僅僅參考最近的幾幀,也會在較遠(yuǎn)歷史里固定住若干幀作為參考??梢钥闯觯癓ong Range”既參考短時歷史,也參考長時歷史,不過長時歷史位置是隨機(jī)選的,也是固定的。
“Hierarchy 方法”是 FDM 提出的第二種長時 Attention 策略。它首先從較長歷史里間隔采樣,獲得之前歷史的大致輪廓,在全局歷史視頻幀引導(dǎo)下,先產(chǎn)生后面若干關(guān)鍵位置的視頻幀,比如第一幀、最后一幀以及中間幀。這意思是根據(jù)全局的歷史,來生成全局的未來。之后按順序生成后續(xù)幀,在生成后續(xù)幀的時候,不僅參考最近的歷史,同時也參考第一步生成的未來關(guān)鍵位置視頻幀。所以這是一種先謀劃全局,再斟酌現(xiàn)在的“長遠(yuǎn)與近期相結(jié)合”的層級化的Time Attention。
我無法確定Sora 是否會用類似 FDM 的思路,但是覺得這是維護(hù)長時一致性較為可取的一種方法。
八、Sora的訓(xùn)練過程與技巧:合成數(shù)據(jù)、兩階段訓(xùn)練及雙向生成
需要再次強(qiáng)調(diào)下:所有文生視頻模型,本質(zhì)上都是有監(jiān)督學(xué)習(xí),是需要大量高質(zhì)量標(biāo)注好的<文本,視頻>成對數(shù)據(jù)來訓(xùn)練的,它們不是類似 LLM 的那種自監(jiān)督學(xué)習(xí)那樣,無需標(biāo)注數(shù)據(jù)。
盡管有些開源的帶標(biāo)注視頻數(shù)據(jù),但是無論數(shù)據(jù)量還是質(zhì)量,想要作出類似Sora 這么高質(zhì)量的視頻生成模型,基本上是沒可能的。所以,如果想要復(fù)現(xiàn) Sora,如何自動化地做出大量高質(zhì)量標(biāo)注視頻數(shù)據(jù)可能才是最關(guān)鍵,也是最難的一步。(當(dāng)然,我們可以借鑒LLM 蒸餾 GPT4 的歷史經(jīng)驗(yàn),估計這些 GPT-4V 視頻標(biāo)注蒸餾方案,很快就會出現(xiàn))。
我覺得,Sora 之所以效果這么好,在制作帶標(biāo)注視頻合成數(shù)據(jù)方面的貢獻(xiàn)很可能是最大的。Sora 采用了類似DALLE 3 的方法來制作視頻合成數(shù)據(jù)。上圖左側(cè)展示了 DALLE 3 制作<文本,圖片>合成數(shù)據(jù)的流程。圖片標(biāo)注數(shù)據(jù)網(wǎng)上資源有很多,比如5B 的 LAION 數(shù)據(jù),但是標(biāo)注質(zhì)量有些問題,一方面是太粗略太短沒有細(xì)節(jié)描述,一方面里面有些是錯誤的。
鑒于此,DALLE 3 通過人工標(biāo)注(或者人加 GPT 相結(jié)合?)一些<詳細(xì)文本描述,圖片>數(shù)據(jù),用這個數(shù)據(jù)來訓(xùn)練一個 Image-Caption Model(ICM),就是說 ICM 接受圖片輸入,學(xué)習(xí)根據(jù)圖片內(nèi)容,自動產(chǎn)生圖片的詳細(xì)描述。有了ICM 模型,DALLE 3 用它生成的長文本描述,替換掉原先圖文標(biāo)注數(shù)據(jù)里的短文本描述,就制作出了大批量的高質(zhì)量合成數(shù)據(jù),這對DALLE 3 質(zhì)量提升幫助很大。
Sora的視頻合成數(shù)據(jù)制作過程應(yīng)該是類似的(參考上圖右側(cè))。通過人工標(biāo)注(或人+GPT)一批高質(zhì)量的<視頻,長文本描述>數(shù)據(jù),可以訓(xùn)練一個 Video-Caption Model。VCM 模型訓(xùn)練好后,可以接受視頻,輸出詳細(xì)的文本描述。之后,可以用 VCM 產(chǎn)生的視頻長描述替換掉標(biāo)注視頻數(shù)據(jù)里的簡短文本描述,就產(chǎn)生了高質(zhì)量的視頻合成數(shù)據(jù)。
其實(shí)思路可以再打開,既然我們有了VCM,也可以給沒有標(biāo)注的視頻自動打上長文本描述,沒問題吧?這樣的話,可以挑那些高質(zhì)量視頻,用 VCM 打上詳細(xì)文本描述,這就制作出了大量的、非常高質(zhì)量的視頻標(biāo)注數(shù)據(jù)。
另外,既然Sora 是圖片和視頻聯(lián)合訓(xùn)練,那么很顯然,訓(xùn)練 DALLE 3 的那批圖文合成數(shù)據(jù),那肯定在訓(xùn)練Sora 的時候也用了。
Sora在訓(xùn)練的時候應(yīng)該采取了兩階段訓(xùn)練過程,下面簡述其做法。
一般 VAE 是獨(dú)立訓(xùn)練的,收集大量的圖片或視頻數(shù)據(jù)后,通過圖片或視頻重建的訓(xùn)練目標(biāo),可以得到對應(yīng)的“視覺編碼器-解碼器”。此部分訓(xùn)練是自監(jiān)督學(xué)習(xí),不需要標(biāo)注數(shù)據(jù)。
第二階段是包括 Diffusion Model 在內(nèi)整個模型的訓(xùn)練,這一階段訓(xùn)練過程中,一般前一階段訓(xùn)練好的Encoder-Decoder 會凍結(jié)模型參數(shù),不隨著這步驟的訓(xùn)練數(shù)據(jù)發(fā)生變動,包括 Text Encoder 也是利用現(xiàn)成的比如 CLIP,也會類似地凍結(jié)住模型參數(shù)。所以這部分訓(xùn)練主要涉及Spacetime Latent Patch 對應(yīng)的 Position Embedding,以及預(yù)測噪音的基于 Transformer 的 Diffusion Model 的訓(xùn)練。
另外,Sora 還支持多種方式的視頻生成,比如輸入一張靜態(tài)圖生成完整視頻、生成無限循環(huán)視頻、輸入結(jié)尾幾幀圖片倒著生成完整視頻、給定兩段視頻內(nèi)容生成新內(nèi)容將兩者平滑地連接起來等。
可以推斷,在 Sora 的訓(xùn)練過程中,采用了在輸入側(cè)中間位置加入已知圖片,然后同時按照時間維度的正向生成視頻和反向生成視頻的雙向生成策略。一方面,引入這種雙向生成策略,可以方便地支持上面講的各種靈活的視頻生成類型;另外一方面,其實(shí)如果采取從中間向時間維度兩邊拓展的生成模式,更有利于維護(hù)生成內(nèi)容的連貫性和一致性。因?yàn)橹虚g位置向兩邊拓展,只需要維護(hù)一半時間窗口的內(nèi)容一致性即可,兩邊向中間內(nèi)容靠攏,這看上去是雙向生成策略帶來的額外好處。
比如,之前提到的輸入一張圖片生成完整視頻,從視頻內(nèi)容可知,這個例子是把輸入圖片放在了輸入噪音圖片序列的最后一幀,然后按照時間順序倒著生成的。再比如,生成無限循環(huán)視頻,可以把某一幀視頻圖片,分別插入在中間位置和頭尾位置,然后從中間位置分別向兩邊生成,這樣就會產(chǎn)生一個看上去總在無限循環(huán)的視頻內(nèi)容。
可見,若能方便地在指定輸入位置插入圖片,即可方便地支持雙向訓(xùn)練或靈活的視頻生成方式。那么,如何達(dá)成這一點(diǎn)呢?可以采用掩碼策略(思路可參考:VDT: General-purpose Video Diffusion Transformers via Mask Modeling),如上圖所示。圖右側(cè)M 是 0/1 掩碼矩陣,對應(yīng)矩陣取值要么都是 1 要么都是0,而 C 是引入的掩碼幀序列,可以把已知圖片插入到指定位置,并把它對應(yīng)的掩碼矩陣設(shè)置為1,其它掩碼幀可以是隨機(jī)噪音,對應(yīng)掩碼矩陣設(shè)置為 0。M 和 C 經(jīng)過 Bit級矩陣乘法,獲得掩碼運(yùn)算結(jié)果,對應(yīng) 0 掩碼矩陣內(nèi)容都被清零,而對應(yīng) 1 的掩碼矩陣的內(nèi)容仍然保留,這樣形成掩碼幀。
相應(yīng)地,對Diffusion Model 的輸入噪音序列F 來說,設(shè)置一個反向掩碼矩陣序列 (1?M) ,其 0/1 矩陣取值和對應(yīng)的掩碼幀 0/1 矩陣 M 正好相反,同樣地, ( (1?M) 和 F 進(jìn)行掩碼運(yùn)算后,要插入圖片位置的輸入幀數(shù)據(jù)被清零,其它噪音幀內(nèi)容保持不變。
接下來只要將噪音輸入幀和對應(yīng)的掩碼幀進(jìn)行矩陣加法運(yùn)算,這樣就把已指圖片插入到Diffusion Model的指定位置了。
九、Sora能作為物理世界模擬器嗎
OpenAI宣稱Sora是物理世界模擬器,這個問題的答案非常主觀,每個人都有不同的看法。我覺得以目前的技術(shù)條件來說,單靠Sora本身很難構(gòu)造世界模擬器,更愿意把OpenAI這么講看成是他們對Sora寄托的愿景,而非已經(jīng)成立的事實(shí)。對此更詳盡的個人思考可見:https://zhuanlan.zhihu.com/p/684089478。
本文轉(zhuǎn)載自:??DataFunTalk ??
作者:張俊林
