目錄
一、文本生成圖片的流程
1. 潛在的擴散模型
2. Transformer架構
二、Sora 生成視訊的流程
1. 視訊壓縮網路
2. 空間時間修補程式
3. Diffusion Transformer
三、從訓練到生成視訊全流程
1. 視訊標註與訓練
2. 視訊生成與處理
OpenAI 釋出的視訊生成模型 Sora(https://openai.com/sora),能根據文本生成長達一分鐘的高品質視訊,理論上支持任意分辨率,如 1920x1080 、1080x1920 ,生成能力遠超此前只能生成 25 幀 576x1024 影像的頂尖視訊生成模型 Stable Video Diffusion。
一起公布的,還有一篇非常簡短的技術報告,報告大致介紹了 Sora 的架構及套用場景,並未對模型的原理做過多的介紹。技術報告連結:https://openai.com/research/video-generation-models-as-world-simulators
筆者參考了大量的資料,試著深入理解 Sora 的技術原理,最終將 Sora 生成視訊的原理總結成以下大致的步驟:
透過收集大量不同分辨率不同時長的視訊,並對視訊進行降維處理得到視訊的潛在空間數據,並在潛在空間中進行文本標註與訓練。
使用 DALLE3 的重標註技術,對人工標註的文本進行訓練,生成能更加詳細描述視訊的標註資訊。
視訊生成時,獲取隨機雜訊視訊,透過訓練的視訊壓縮網路,將雜訊視訊壓縮成低維度的潛在空間數據,以便更好的處理視訊數據。
將壓縮後的潛在空間數據分解成空間時間修補程式 Patches,這些修補程式包含了視訊中空間和時間的關系,並將這些修補程式轉為一維的 Tokens 數據。
將Tokens數據送出給經過擴散模型訓練後的Transformer(DiT),利用 Transformer 的註意力機制,時刻關註文本提示詞中的關鍵資訊,結合擴散模型(Diffusion Model)對 Tokens 數據進行去雜訊,並迴圈采樣觀察去噪音後的結果數據是否符合提示詞的要求。
將去除噪音後的結果數據,利用視訊解碼器進行解碼,將低維潛在空間數據還原成原始視訊數據,這裏可以實作不同分辨率的視訊解碼。
如果你不想檢視冗余的細節,看到這裏就可以結束了,如果你還希望了解相關的細節,可以繼續往下看,可能有理解不全面的地方歡迎大家補充交流。
一
文本生成圖片的流程
在理解文本生成視訊的原理之前,我們可以先回顧下文本生成圖片的原理,筆者的另一篇文章有做過相關介紹: AIGC 文生圖原理與實踐分享
本文我們不討論傳統的透過對抗網路生成圖片的方式,我們主要討論的是基於擴散模型生成圖片的方式,開源的 Stable Diffusion 就是基於 LDM,即 Latent Diffusion Model(潛在的擴充套件模型)實作的,另外 Stable Diffusion 透過引入 Transformer 架構實作了對提示詞的支持,能夠在去除圖片噪音的過程中進行精確的控制。
潛在的擴散模型
Stable Diffusion 背後的技術方案被稱為 Latent Diffusion Model,即潛在的擴散模型,此外 Stable Diffusion 模型在原始的 UNet 模型中加入了 Transformer 結構,這麽做可謂一舉兩得,因為 Transformer 結構不但能提升雜訊去除效果,還是實作 Prompt 控制影像內容的關鍵技術。
在深度學習領域中,潛在空間(Latent Space)是指模型學習到的表示數據的抽象空間。這個潛在空間通常是一個低維的向量空間,其中每個點(向量)代表著模型對輸入數據的一種表示或特征。潛在空間的概念在各種生成模型和表示學習方法中被廣泛套用。
以下是潛在空間對模型的作用:
數據的抽象表示 :
潛在空間可以被視為對輸入數據的一種抽象表示。透過學習到的潛在空間可以更好地捕捉輸入數據的特征和結構,有助於模型更高效地學習和生成數據。
降維和去噪 :
潛在空間通常是一個低維空間,相比原始數據空間具有更低的維度。透過將數據對映到潛在空間,可以實作數據的降維和去噪,將數據的主要特征和模式表示在更緊湊的空間中。
生成和重建 :
在生成模型中,潛在空間扮演著重要角色,可以在潛在空間中生成新的數據樣本。模型可以從潛在空間中采樣並解碼生成具有逼真特征的數據樣本,這種生成過程通常透過解碼器(Decoder)實作。
插值和操作 :
在潛在空間中,向量表示不同的數據特征或內容,可以透過向量之間的插值或操作來探索數據空間中的變化和關系。例如,透過在潛在空間中沿著不同方向移動向量,可以觀察到在數據生成過程中對應的變化。
擴散模型的一個大概的過程可以描述為:對原始圖片不斷的加噪音可以得到一張雜訊圖,然後再對雜訊圖不斷的去除噪音的同時再添加其他資訊,就可以得到一張新圖片。
Stable Diffusion 生成圖片的大致流程如下:
Stable Diffusion 使用一個新穎的文本編碼器(OpenCLIP),將文本輸入轉換為一個向量表示。這個向量表示可以捕捉文本的語意資訊,並與影像空間對齊。
Stable Diffusion 使用一個擴散模型(Diffusion Model),將一個隨機雜訊影像逐漸變換為目標影像。擴散模型是一種生成模型,可以從訓練數據中學習出一個機率分布,並從中采樣出新的數據。
在擴散過程中,Stable Diffusion 利用文本向量和雜訊影像作為條件輸入,給出每一步變換的機率分布。這樣,Stable Diffusion 可以根據文本指導雜訊影像向目標影像收斂,並保持影像的解析度和連貫性。
最後,Stable Diffusion 使用一個超分辨率放大器(Upscaler Diffusion Model),將生成的低分辨率影像放大到更高的分辨率。超分辨率放大器也是一個擴散模型,可以從低分辨率影像中恢復出細節資訊,並增強影像品質。
以下是 Latent Diffusion 模型的技術架構:
Latent Diffusion Models 整體框架如圖,首先需要訓練好一個自編碼模型(AutoEncoder,包括一個編碼器 ε 和一個解碼器 δ )。這樣一來,我們就可以利用編碼器對圖片進行壓縮,然後在潛在表示空間上做 Diffusion 操作,最後我們再用解碼器恢復到原始像素空間即可,論文將這個方法稱之為感知壓縮(Perceptual Compression)。個人認為這種將高維特征壓縮到低維,然後在低維空間上進行操作的方法具有普適性,可以很容易推廣到文本、音訊、視訊等領域。
在潛在表示空間上做 Diffusion 操作其主要過程和標準的擴散模型沒有太大的區別,所用到的擴散模型的具體實作為 Time-Conditional UNet。但是有一個重要的地方是論文為 Diffusion 操作引入了條件機制(Conditioning Mechanisms),透過 Cross-Attention 的方式來實作多模態訓練,使得條件圖片生成任務也可以實作。
https://github.com/CompVis/latent-diffusion
Transformer架構
Transformer 架構是 2017 年 6 月由 Google 提出的,是一種基於自註意力機制(Self-Attention)的模型,它有效解決了 RNN 類方法的平行計算和長時依賴兩大痛點。
原本研究的重點是轉譯任務,隨後推出了幾個有影響力的模型,以下是 Transformer 模型簡短歷史中的一些關鍵節點:
Transformer 的架構設計如下圖所示:
左邊的這張圖是 Transformers 架構的一個簡單表示形式,右邊的這張圖是 Transformers 架構的一個完整表示形式,其中有一個重要的 Multi-Head Attention元件,稱為註意力層。
Transformer 模型的一個關鍵特性是 註意力層 。事實上,谷歌在釋出 Transformer 架構的論文時,文章的標題就是 「註意力就是你所需要的」 。註意力層將告訴模型在處理每個單詞的表示時,要特別重視傳遞給它的句子中的某些單詞,也可以是或多或少地忽略其他單詞。透過註意力層,模型可以不斷修正自己處理的結果,以符合輸入的文本的意圖。
總結來說 Transformer 透過註意力層,來理解並觀察輸入文本的上下文,在 Decoder 的過程中,透過多頭註意力層來控制結果的輸出是符合上下文語境的。
可以參考下面這篇文章,更詳細的了解 Transformer 的實作原理:
https://jalammar.github.io/illustrated-transformer/
在回顧完 Stable Diffusion 的原理後,我們可以想象下,對於視訊的生成該怎麽做呢?
是否可以嘗試把預訓練 Stable Diffusion 拓展成視訊生成模型呢。例如在拓展時,將視訊的每一幀都單獨輸入進 Stable Diffusion 的自編碼器,再重新構成一個壓縮過的影像序列。這就是 VideoLDM 嘗試解決的問題,然而經過 VideoLDM 研究發現直接對視訊使用之前的影像自編碼器,會令輸出視訊出現閃爍的現象。為此,該工作對自編碼器的解碼器進行了微調,加入了一些能夠處理時間維度的模組,使之能一次性處理整段壓縮視訊,並輸出連貫的真實視訊。
二
Sora生成視訊的流程
那 Sora 是怎麽做的呢?接下來我們透過一張圖來了解下 Sora 的工作流程,大概可以簡化為三個部份:
簡單來說,Sora 就是依賴了兩個模型 Latent Diffusion Model (LDM) 加上 Diffusion Transformer (DiT)。我們先簡要回顧一下這兩種模型架構。
LDM 就是 Stable Diffusion 使用的模型架構。擴散模型的一大問題是計算需求大,難以擬合高分辨率影像。為了解決這一問題,實作 LDM 時,會先訓練一個幾乎能無失真壓縮影像的自編碼器,能把 512x512 的真實影像壓縮成 64x64 的壓縮影像並還原。接著,再訓練一個擴散模型去擬合分辨率更低的壓縮影像。這樣,僅需少量計算資源就能訓練出高分辨率的影像生成模型。
LDM 的擴散模型使用的模型是 U-Net。而根據其他深度學習任務中的經驗,相比 U-Net,Transformer 架構的參數可拓展性強,即隨著參數量的增加,Transformer 架構的效能提升會更加明顯。這也是為什麽大模型普遍都采用了 Transformer 架構。從這一動機出發,DiT 應運而生。DiT 在 LDM 的基礎上,把 U-Net 換成了 Transformer。
總結來說 Sora 是一個視訊版的 DiT 模型,讓我們看一下 Sora 在 DiT 上做了哪些改進。
視訊壓縮網路
首先,Sora 透過一個叫做「視訊壓縮網路」的技術,將輸入的圖片或視訊壓縮成一個更低維度的數據,即潛在空間數據,為了實作視訊壓縮,Sora 從頭訓練了一套能直接壓縮視訊的自編碼器。
相比之前的工作,Sora 的自編碼器不僅能在空間上壓縮影像,還能在時間上壓縮視訊長度。
輸入的視訊在經過 Sora 的自編碼器後,會被轉換成一段空間和時間維度上都變小的壓縮視訊。這段壓縮視訊就是 Sora 的 DiT 的擬合物件。
這一過程類似於將不同尺寸和分辨率的照片「標準化」,便於處理和儲存,但壓縮並不意味著忽略原始數據的獨特性,而是將它們轉換成一個對 Sora 來說更容易理解和操作的格式。
報告中反復提及,Sora 在訓練和生成時使用的視訊可以是任何分辨率(在 1920x1080 以內)、任何長寬比、任何時長的,這意味著視訊訓練數據不需要做縮放、裁剪等預處理,因為 Sora 會把這些視訊進行壓縮以獲得符合模型訓練的數據。
空間時間修補程式
接下來,Sora 將這些壓縮後的數據進一步分解為「空間時間修補程式」(Spacetime Patches),這些修補程式可以看作是視覺內容的基本構建塊,例如照片可以分解為包含獨特景觀、顏色和紋理的小片段。
這樣不管原始視訊的長度、分辨率或風格如何,Sora 都可以將它們處理成一致的格式。
有了空間時間修補程式之後,還需要將這些修補程式轉換成一維的數據序列,以便提供給 Transformer 模型進行處理,因為 Transformer 只能處理一維序列數據。
Sora 的這種性質還是得益於 Transformer 架構。雖然 Transformer 的計算與輸入順序無關,但必須用位置編碼來指明每個數據的位置。盡管報告沒有提及,我覺得 Sora 的 DiT 使用了類似於 (x,y,t) 的位置編碼來表示一個圖塊的時空位置。這樣不管輸入的視訊的大小如何,長度如何,只要給每個圖塊都分配一個位置編碼,DiT 就能分清圖塊間的相對關系了。
Diffusion Transformer
最後,Sora 擴充套件了 Transformer 模型,以便適用於視訊生成,這裏的視訊就是一幀幀的靜態圖片加上了時間維度的資訊,所以只需要用 Transformer 模型來生成攜帶時間維度資訊的圖片。
需要註意的是,Transformer 本來是用於文本任務的,它只能處理一維的序列數據。為了讓 Transformer 處理二維影像,通常會把輸入影像先切成邊長為 p 的圖塊,再把每個圖塊整理成一維數據。也就是說,原來邊長為 I 的正方形圖片,經圖塊化後,變成了長度為 (I/p)² 的一維序列數據。
DiT 在處理輸入圖塊(也就是空間時間修補程式)時,因為每個視訊圖塊被編上了類似 (x,y,t) 這樣的位置編碼,輸入視訊可以是任何分辨率、任何長度。將每個空間時間修補程式輸入 Transformer,作為輸入的 Token,接著 Transformer 會完成每個空間時間修補程式的雜訊去除,最後所有的空間時間修補程式都完成雜訊去除後,再透過解碼器將 Transformer 處理後的張量數據還原成視訊數據。
下圖展示了 DiT 的架構,左:我們訓練調節的潛 DiT 模型。輸入潛變量被分解成幾個 Patch 並由幾個 DiT 塊處理。右:DiT 塊的細節。我們對標準 Transformer 的變體進行了實驗,這些變體透過自適應層歸一化、交叉註意力和額外的輸入 Token 做調節。自適應層歸一化效果最好。
假設輸入是一張 256x256x3 的圖片,對圖片做 Patch 後經過投影得到每個 Patch 的 Token,得到 32x32x4 的 Latent 潛在空間(在推理時輸入直接是 32x32x4 的雜訊)。結合當前的 Step t, 將 Label y 作為輸入, 經過 N 個 DiT Block 處理,處理中透過 MLP 進行控制輸出,得到輸出的雜訊以及對應的共變異數矩陣,經過 T 個 Step 采樣,得到 32x32x4 的降噪後的 Latent。
得到處理後的 Latent 之後,透過 Visual Decoder 對 Latent 進行解碼,最終得到生成的視訊。
三
從訓練到生成視訊全流程
視訊標註與訓練
收集視訊及其文本標註
初始步驟是收集大量視訊數據,並獲取或建立這些視訊對應的文本標註。這些文本簡要描述了視訊內容,是訓練模型理解視訊主題的關鍵。
預處理視訊數據
對視訊進行預處理,包括調整分辨率、格式轉換、裁剪長度等,以確保數據格式統一,適合模型處理。
生成高度描述性的文本標註
使用 DALLE3 的技術,首先訓練一個模型,這個模型專門用於為視訊內容生成高度描述性的文本標註。這一步是為了提升文本標註的品質,讓其更加詳細和具體。對訓練集中的所有視訊套用這個模型,產生新的、更加詳細的文本標註。
之前大部份文生圖擴散模型都是在人工標註的圖片-文字數據集上訓練的。後來大家發現,人工標註的圖片描述品質較低,紛紛提出了各種提升標註品質的方法。Sora 復用了自家 DALL·E 3 的重標註技術,用一個訓練的能生成詳細描述的標註器來重新為訓練視訊生成標註。這種做法不僅解決了視訊缺乏標註的問題,且相比人工標註品質更高。Sora 的部份結果展示了其強大了抽象理解能力(如理解人和貓之間的互動),這多半是因為視訊標註模型足夠強大,視訊生成模型學到了視訊標註模型的知識。但同樣,視訊標註模型的相關細節完全沒有公開。
擴散模型訓練
Sora 作為一個擴散模型,透過預測從含雜訊修補程式到原始清晰修補程式的轉換過程進行訓練。這個過程涉及到大量的叠代,逐步提高生成視訊的品質。
視訊生成與處理
視訊壓縮和空間時間修補程式生成
開發並訓練一個視訊壓縮網路,將高維的視訊資料壓縮到一個低維的潛在空間,簡化後的數據表示更容易被模型處理。將壓縮後的視訊表示分解成空間時間修補程式,這些修補程式既包含空間上的資訊也包含隨時間變化的資訊。
利用 Transformer 架構處理時空關系
基於 Transformer 架構,處理這些空間時間修補程式。由於 Transformer 架構在處理序列數據(如文本)方面的強大能力,這裏用於捕獲視訊修補程式之間復雜的時空關系。
透過 GPT 模型理解並最佳化提示詞
類似於 DALLE3,Sora 在處理使用者提供的文本提示時,也可以利用 GPT 模型來擴充套件或最佳化這些提示。GPT 模型可以將簡短的使用者提示轉化成更詳細、更富有描述性的文本,這有助於 Sora 更準確地理解並生成符合使用者意圖的視訊。
利用擴散模型生成視訊
使用者提供一個文本提示,Sora 根據這個提示在潛在空間中初始化視訊的生成過程。利用訓練好的擴散模型,Sora 從這些初始化的空間時間修補程式開始,逐步生成清晰的視訊內容。
視訊解碼與處理
使用與視訊壓縮相對應的解碼器將潛在空間中的視訊轉換回原始像素視訊。
對生成的視訊進行可能的後處理,如調整分辨率、裁剪等,以滿足釋出或展示的需求。
參考文件:
https://openai.com/research/video-generation-models-as-world-simulators
https://zhuanlan.zhihu.com/p/583124756
https://mp.weixin.qq.com/s/Prn1G_EpXvnM4me9a_SPBw
https://mp.weixin.qq.com/s/KUnXlDlg-Rs_6D5RFpQbnQ
往期回顧
*文/逅弈