多模態(tài)MLLM都是怎么實現(xiàn)的—如何保持text2video的連續(xù)一致性
如果你玩過開源的Text2video,也就是文生視頻,也會感慨AI越來越能整活兒了,但是如果你好奇去各大平臺看一圈,基本上視頻最大就是在8-10秒左右,甚至有3-5秒的。(sora能到20秒)
當然有兄弟說是算力的問題,這個確實是一個問題,生成視頻diffusion的算力確實要比純text多,但是這個如果有錢也不是問題(后文我們發(fā)現(xiàn)其實就算有錢也是問題),但是現(xiàn)在我們談?wù)摰氖清X解決不了的問題,一致性。這個一致性指的是多幀一致性
比如這個視頻,兵馬俑大戰(zhàn)美軍,打著打著,兵馬俑就突然叛變變成美軍了。
造成這個問題的原因是什么?
首先Diffusion網(wǎng)絡(luò)是沒時間概念的,如果是生圖可能還行,我們以一個簡單的生圖的流程來看。
這就是一個典型的SD生圖流程,通過對比訓練的clip embeddding能力,讓text的輸入隱式包含很多圖像的相似性,很好的配合vae編碼的latent,這時latent 相當于Q,被clip embedding的text相當于kv,latent再不斷去噪聲的過程,把text當作參照,也就是按著prompt的指令來生成相應(yīng)圖片位置的object。
上圖的backbone從SD早期的unet一直演化到sd3的Dit,除了擴展性和網(wǎng)絡(luò)架構(gòu)變了以外,但是本質(zhì)并沒有改變,文生圖的領(lǐng)域是不需要時序信息的。
上圖由halomate.ai,通過prompt直出,但是這個網(wǎng)絡(luò)面對生視頻怎么辦呢?
視頻的構(gòu)成是一系列連續(xù)的幀,每一幀之間的動作差距很小,但是一致性是要求強一致的,這就要求網(wǎng)絡(luò)能感知幀的序列關(guān)聯(lián)性,也可以延伸認為是時許關(guān)聯(lián)性。
可是傳統(tǒng)的difussion解決方案,從vae到backbone這兩部分的網(wǎng)路都沒有時間模塊
于是人們考慮先從VAE動手。
簡單的思路
Uniform frame sampling
- 原始視頻數(shù)據(jù) (Top Row): 視頻由一系列按時間順序排列的幀組成(時間軸 T 從左到右)。圖中展示了視頻中的三幀,但實際上視頻包含更多幀。
- 幀采樣 (Implicit Step): 雖然沒有明確畫出“丟棄”的幀,但“Uniform Frame Sampling”這個名字意味著我們不是使用視頻中的所有幀。而是按照一個固定的時間間隔(比如每隔 k 幀取一幀,或者每秒取 f 幀)來選擇一部分幀。圖中展示的第一幀和最后一幀(包含 x1, x2 和 xj, xj+1 的那兩幀)就是被采樣出來的幀,中間的那幀可能就被跳過了(或者它也是被采樣出來的,只是沒有突出顯示其 patch 而已,但均勻采樣的核心在于選擇幀的間隔是固定的)。
- 空間分塊 (Spatial Patching): 對于每一個被采樣出來的幀,將其在空間上分割成 H x W 個不重疊的小塊 (patches)。這與 Vision Transformer (ViT) 處理圖像的方式類似。圖中的 x1, x2, xj, xj+1 就代表這些從對應(yīng)采樣幀中提取出的小塊。
- 序列化/展平 (Flattening into Sequence - Bottom Row): 將所有采樣幀提取出的空間小塊,按照時間和空間的順序(通常是先時間,再空間,即第一幀的所有塊,然后第二幀的所有塊...)拼接成一個一維的序列。這個序列 x1, x2, ..., xj, xj+1, ... 就是最終輸入給 Transformer 模型的 token 序列。
總結(jié)就是個幀采樣,然后按著時間順序給展平稱一維的向量了。
成熟的思路
Tubelet embedding
不同于uniform frame sampling,tubelet embedding可是實打?qū)嵉拿恳粠冀o利用上
令牌基礎(chǔ): 令牌 (x1, x2, ...) 是從視頻中提取的三維時空塊 (3D spatio-temporal patch),通常稱為 "Tubelet"。
- 時間處理:
- 將視頻看作一個 3D 數(shù)據(jù)體(高度 H x 寬度 W x 時間 T)。
- 同時在空間(H, W)和時間(T)維度上進行分塊。
- 因此,每個 Tubelet (x1, x2) 本身就跨越了多個連續(xù)的幀,并覆蓋了一個特定的空間區(qū)域。
- 時間信息不僅體現(xiàn)在令牌的順序上,還內(nèi)嵌在每個令牌內(nèi)部,因為它直接捕捉了短時間窗口內(nèi)的變化。
信息單元: 每個令牌攜帶的是一個短時間段內(nèi)(Tubelet 的時間深度),某個空間區(qū)域的時空視覺信息。它能直接編碼局部運動或變化,又因為它是全量的信息,不是采樣的,所以效果好。
但是光靠vae能就能解決時序問題嗎?那顯然不是啊,因為vae它只管把視頻(其實是序列幀,比如clip1,clip2,clip3,每個clip比如15幀,實際上我們訓練視頻模型也都是把視頻切好序列幀喂給模型的)給編解碼,它不管加噪去噪啊,這個操作都在backbone來做(目前基本都是DIT變種)
所以backbone必須有時序感知能力,這是通過什么體現(xiàn)出來的?
圖片由halomate.ai生成
上圖是一個基于 Latent Diffusion Model 思想,并采用 Spatiotemporal Transformer (類似 DiT) 作為核心 Backbone 的文生視頻網(wǎng)絡(luò)架構(gòu)。
1. 核心思想:Latent Diffusion for Video
與 Stable Diffusion (文生圖) 類似,我們在潛在空間 (Latent Space) 中進行擴散和去噪過程,以大幅降低計算復雜度。
首先需要一個 Video VAE (Variational Autoencoder用我剛才講的兩種編碼方式都可以,但是現(xiàn)在大部分都用tubelet的方式),它能將視頻幀序列壓縮成低維的潛在表示 (Latent Video),并能從潛在表示中解碼回視頻幀。這個 VAE 需要在大量視頻數(shù)據(jù)上預訓練。
2. 輸入處理:
Text Prompt: 輸入的文本描述通過一個強大的 Text Encoder (如 CLIP 或 T5 的變體,高端的模型來做指令跟隨基本都用T5來替代clip了) 轉(zhuǎn)換成文本嵌入 (Text Embeddings)。這些嵌入包含了文本的語義信息,將用于指導視頻內(nèi)容的生成。
Noisy Latent Video (z\_t): 在擴散過程的每一步 `t`,輸入是加了噪聲的潛在視頻 `z_t`。在生成開始時 (t=T),這是一個純高斯噪聲,其形狀與 VAE 輸出的潛在視頻一致 (`NumFrames x LatentHeight x LatentWidth x LatentChannels`,也就是我剛才說的tubelet,然后再加個RGB通道)。
Time Step Embedding: 當前的時間步 `t` 被編碼成一個嵌入向量,告知網(wǎng)絡(luò)當前的噪聲水平。
3. 核心 Backbone: Spatiotemporal Transformer (DiT-like)
關(guān)鍵區(qū)別: 與處理靜態(tài)圖像的 Backbone (如標準 U-Net 或 ViT/DiT) 不同,視頻 Backbone 必須同時處理空間信息 (每幀的內(nèi)容) 和時間信息 (幀之間的變化和連貫性)。
Patchify 和 Embed: 將輸入的潛在視頻 `z_t` (T x H' x W' x C') 分割成一系列 時空塊 (Spatiotemporal Patches)。例如,每個 Patch 可以是 `p x p` 空間區(qū)域跨越 `k` 幀。
Embeddings:
1- 為每個 Patch 添加Spatiotemporal Positional Embeddings 來編碼每個 Patch 在原始視頻中的空間位置 和 時間位置。這是捕捉時空結(jié)構(gòu)的關(guān)鍵。
2- Time Step Embedding: 告知網(wǎng)絡(luò)當前去噪階段,在這就和時序基本徹底關(guān)聯(lián)上了。
Spatiotemporal Transformer Blocks部分:
1) Spatiotemporal Self-Attention: 這是核心。注意力機制作用于所有時空 Patch 序列。這使得模型能夠同時關(guān)注:
同一幀內(nèi)不同空間區(qū)域的關(guān)系 (Spatial Context)。
同一空間區(qū)域在不同時間幀的關(guān)系 (Temporal Dynamics)。
不同空間區(qū)域在不同時間幀的關(guān)系 (Complex Motion & Interactions)。
2) Cross-Attention: 將 Text Embeddings 通過交叉注意力機制注入到 Transformer 塊中,使得模型能夠根據(jù)文本描述生成內(nèi)容和動態(tài)。
3)FFN: 這沒啥可說的了,就特征轉(zhuǎn)換用的。
4)Output: Backbone 輸出預測的噪聲 `ε_θ`,其形狀與輸入的 `z_t` 相同。
4. 去噪過程與輸出:
使用預測的噪聲 `ε_θ` 和當前的噪聲潛在視頻 `z_t`,通過擴散模型的采樣算法(如 DDPM, DDIM)計算出稍微去噪的潛在視頻 `z_{t-1}`。
重復這個過程 T 步,從純噪聲 `z_T` 開始,逐步去噪得到最終的清晰潛在視頻 `z_0`。
Video VAE Decoder: 將最終的潛在視頻 `z_0` 輸入預訓練好的 VAE 解碼器,重建出像素空間的視頻幀序列,即生成的視頻。
5. 處理時間維度: Spatiotemporal Transformer 通過其自注意力機制能夠顯式地建模長距離的時空依賴關(guān)系,對于生成連貫、動態(tài)符合描述的視頻至關(guān)重要。當然 也可以使用基于 3D U-Net 的 Backbone,其中卷積層替換為 3D 卷積(同時處理空間和時間維度),并可能加入 Temporal Attention 模塊。但目前 Transformer 在建模長距離依賴和可擴展性方面展現(xiàn)出更強的潛力,而且沒人用3D unet來做視頻,我們也就不解釋了。
好了現(xiàn)在一個正常的文生視頻的流程我們就講完了,其實以前我也講過,相當于在讓大家復習一遍。
那我們今天講的論文有什么過人之處呢?
最大的不同是,它能生成一分鐘的視頻,同時這個視頻有著豐富的情節(jié)變化,不想現(xiàn)在的視頻,即使10秒20秒也是相對簡單的動作和拍攝視角的變化。
但是這個論文的視頻我是看過的,非常驚艷就根一個普通的動畫片沒有任何區(qū)別,角色的多幀運動和串場的一致性上,是基本現(xiàn)在所有的模型都無法做到的。
我們剛才講了在一個現(xiàn)在大部分的text2video的實現(xiàn)方案中,是擴展了self-attention層,讓它有時空感知能力也就是所說的Spatiotemporal Transformer Blocks。
它這個論文里的網(wǎng)絡(luò)相當于另辟蹊徑,是這樣實現(xiàn)的。
解釋一下這個圖
- 標準 Transformer 結(jié)構(gòu): 通常包含交替的attention層+MLP(叫FFN頁性)。
- 一個典型的序列建模塊大致是:輸入 ?
?X?
? -> LayerNorm -> Self-Attention -> 輸出 ??X'?
? -> 殘差連接 (??X' + X?
?) -> 輸出 ??Y_attn?
?。 - 一個典型的 MLP 塊大致是:輸入 ?
?Y_attn?
? -> LayerNorm -> FFN -> 輸出 ??Y_ffn'?
? -> 殘差連接 (??Y_ffn' + Y_attn?
?) -> 輸出 ??Y_final?
?。
- 論文把架構(gòu)給改了,從attn層出來以后不給MLP,中間差了一個類似bi-lstm的rnn
- 輸入 ?
?X?
? - ?
?X' = self_attn(LN(X))?
? (自注意力層的輸出,注意這里已經(jīng)包含了 LayerNorm)
- ?
?Z = gate(TTT, X'; α)?
? (前向 TTT 層處理 ?
?X'?
?)- ?
?Z' = gate(TTT', Z; β)?
? (反向 TTT 層處理 ?
?Z?
?)- ?
?Y = Z' + X?
? (最終的殘差連接,注意是 TTT 的輸出 ?
?Z'?
? 與塊的原始輸入 ??X?
? 相加)
這個雙向RNN就是TTT層:
這張圖展示了 測試時訓練 (Test-Time Training, TTT) 層 的核心工作原理,并將其與通用 RNN(循環(huán)神經(jīng)網(wǎng)絡(luò))的概念聯(lián)系起來。
- 基本結(jié)構(gòu): 圖示了一個按時間步處理序列的過程(從 ?
?t=1?
? 到 ??t?
?)。它有三個主要部分:
- Input tokens (輸入標記): ?
?x_1?
?, ..., ??x_{t-1}?
?, ??x_t?
?,代表按順序輸入的序列元素。 - Hidden state (隱藏狀態(tài)): ?
?W_0?
?, ??W_1?
?, ..., ??W_{t-1}?
?, ??W_t?
?,代表在每個時間步傳遞的“記憶”或狀態(tài)。??W_0?
? 是初始狀態(tài)。 - Output tokens (輸出標記): ?
?z_1?
?, ..., ??z_{t-1}?
?, ??z_t?
?,代表在每個時間步生成的輸出。
- 與 RNN 的相似之處: 像所有 RNN 一樣,當前隱藏狀態(tài) ?
?W_t?
? 依賴于前一個隱藏狀態(tài) ??W_{t-1}?
? 和當前輸入 ??x_t?
?。當前輸出 ??z_t?
? 則由當前隱藏狀態(tài) ??W_t?
? (可能也結(jié)合 ??x_t?
?) 決定。 - TTT 的核心創(chuàng)新 (關(guān)鍵區(qū)別):
- ?
?W_{t-1}?
?
上一步的模型權(quán)重(即上一個隱藏狀態(tài))。
- ?
?η?
?
學習率。
- ?
???(W_{t-1}; x_t)?
?
這是一個 梯度。它是根據(jù)當前輸入 ??x_t?
? 計算的一個 自監(jiān)督損失函數(shù) ????
? (self-supervised loss),然后對 上一步的權(quán)重 ??W_{t-1}?
? 求導得到的。
- 隱藏狀態(tài)是模型權(quán)重 (Hidden state is model weights)
TTT 層最關(guān)鍵的思想是,這里的隱藏狀態(tài) ??W_t?
? 不再僅僅是一個狀態(tài)向量,而是代表了一個內(nèi)部神經(jīng)網(wǎng)絡(luò)模型 ??f?
? 的權(quán)重 (weights)。這就是為什么用 ??W?
? (通常代表權(quán)重) 而不是 ??h?
? (通常代表隱藏狀態(tài)向量) 來表示。
- 更新規(guī)則是梯度下降 (Update rule is gradient descent)
隱藏狀態(tài)的更新方式 ??W_t = W_{t-1} - η ??(W_{t-1}; x_t)?
? 不是 傳統(tǒng) RNN 的矩陣運算和激活函數(shù),而是 一步梯度下降。
- 輸出規(guī)則 (Output rule)
輸出 ??z_t = f(x_t; W_t)?
? 是使用 剛剛更新過的模型 ??f?
? (其權(quán)重為 ??W_t?
?) 對當前輸入 ??x_t?
? 進行預測(或處理)得到的結(jié)果。
所有 RNN 層都可以看作是一個根據(jù)更新規(guī)則進行轉(zhuǎn)換的隱藏狀態(tài)。
TTT 的關(guān)鍵思想是:讓隱藏狀態(tài)本身成為一個帶有權(quán)重 ??W?
? 的模型 ???f??
?,并且 更新規(guī)則是在自監(jiān)督損失 ????
? 上進行的一步梯度下降。
因此,在一個測試序列上更新隱藏狀態(tài),就 等同于在測試時訓練模型 ??f?
?。
這個過程被稱為 測試時訓練 (Test-Time Training, TTT),并被編程到 TTT 層中。
與標準 Transformer 的全局注意力(一次性看到所有輸入)或局部注意力(只看到一小段)不同,TTT 層像 RNN 一樣,按順序處理輸入序列的各個部分。它一步一步地“讀”過整個視頻序列。所以對時序建模理論上比傳統(tǒng)transformer更有優(yōu)勢,RNN本身對時序感知尤其上下文理解就有優(yōu)勢,只是長程依賴的理解比較差,再加上訓不大,所以退出了歷史舞臺,現(xiàn)在頁有RWKV和mamba給rnn招魂,所以TTT不是第一個也不是最后一個,畢竟RNN有自己的時序優(yōu)勢,transformer不成。
另外一個非常重要的因素,就說到我們開頭聊的算力的問題
核心區(qū)別:如何處理長序列(長上下文)
- 我上文之前描述的架構(gòu) (理想化的時空 Transformer):機制依賴于 全局的時空自注意力 (Global Spatiotemporal Self-Attention)。這意味著整個視頻序列中的每一個時空塊(Token)都可以直接關(guān)注(Attend to)所有其他的時空塊。優(yōu)點理論上能夠完美地捕捉所有時空依賴關(guān)系。缺點 (致命) 標準自注意力的計算復雜度與序列長度 N 呈 平方關(guān)系 (O(N2))。對于一分鐘的視頻(論文提到可能超過 30 萬個 Token),這種平方復雜度的計算成本對于目前的硬件來說是難以承受的,無論是訓練還是推理都過于緩慢且消耗內(nèi)存,基本就不太實現(xiàn),其實再有卡你也要考慮是否可商用。
- 論文中的架構(gòu) (TTT 增強的 Transformer)局部自注意力(Local Self-Attention)
預訓練 Transformer (CogVideo-X) 中的標準自注意力機制被限制 在視頻的短的、獨立的 3 秒片段 內(nèi)運行。這使得每個注意力計算的序列長度可控,避免了全局注意力帶來的平方復雜度爆炸。
全局測試時訓練 (TTT) 層
在局部注意力層之后 插入了新的 TTT 層。這些 TTT 層作用于 整個 由 3 秒片段拼接而成的 完整序列。關(guān)鍵在于,TTT 層的功能類似于高級的 RNN,其計算復雜度與序列長度 N 呈 線性關(guān)系 (O(N)),這和memba的思路也差不多。所以它可以利用rnn的這部分優(yōu)勢,節(jié)省計算復雜度,可以生成更長的視頻。
這么寫大家可能有歧義,這不和現(xiàn)在市面上生成的3秒一個視頻然后拼接20個視頻成1分鐘沒區(qū)別嗎?當然不是,處理/生成片段 1 (0-3秒),模型處理(或開始生成)第一個 3 秒片段。在這個過程中,局部注意力處理片段內(nèi)部細節(jié),同時TTT 層開始建立它的內(nèi)部狀態(tài) W_0(可以想象成對這 3 秒內(nèi)容的“總結(jié)”或“模型理解”)。處理/生成片段 2 (3-6秒),模型接著處理(或生成)第二個 3 秒片段。 它不是獨立進行的。局部注意力處理片段 2 的內(nèi)部細節(jié),但 TTT 層接收了來自片段 1 的狀態(tài) W_0,并結(jié)合片段 2 的信息,通過自監(jiān)督學習更新其狀態(tài),得到 W_1 (W_1 = W_0 - η ?_{W_0} ?(X_2; W_0))。這意味著,處理片段 2 時,模型“知道”片段 1 發(fā)生了什么,這個“知道”就編碼在狀態(tài) W_0 里,并影響著 W_1 的形成以及片段 2 的生成/處理。以此類推,就能實現(xiàn)了局部一致性和全局一致性的完美統(tǒng)一。
優(yōu)勢:時序一致性:因為信息(通過 TTT 層的狀態(tài) W)在片段間傳遞,模型被強制要求保持連貫性。它會傾向于讓物體、背景、風格等在片段過渡時保持一致或平滑變化,有記憶: TTT 層提供了跨片段的“記憶”。
類比:就像你寫一個故事,寫第二段時,你會記得第一段寫了什么,并在此基礎(chǔ)上繼續(xù)寫,確保情節(jié)連貫。或者一個動畫師一幀一幀地畫,確保動作流暢、人物狀態(tài)一致。
到此,在transformer層加入了TTT層,對文生視頻一致性增強的能力解釋,基本就告一段落了。
本文轉(zhuǎn)載自???熵減AI???,作者:周博洋
