自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

多模態(tài)MLLM都是怎么實現(xiàn)的—如何保持text2video的連續(xù)一致性

發(fā)布于 2025-4-28 00:07
瀏覽
0收藏

如果你玩過開源的Text2video,也就是文生視頻,也會感慨AI越來越能整活兒了,但是如果你好奇去各大平臺看一圈,基本上視頻最大就是在8-10秒左右,甚至有3-5秒的。(sora能到20秒)

多模態(tài)MLLM都是怎么實現(xiàn)的—如何保持text2video的連續(xù)一致性-AI.x社區(qū)

多模態(tài)MLLM都是怎么實現(xiàn)的—如何保持text2video的連續(xù)一致性-AI.x社區(qū)

當然有兄弟說是算力的問題,這個確實是一個問題,生成視頻diffusion的算力確實要比純text多,但是這個如果有錢也不是問題(后文我們發(fā)現(xiàn)其實就算有錢也是問題),但是現(xiàn)在我們談?wù)摰氖清X解決不了的問題,一致性。這個一致性指的是多幀一致性

多模態(tài)MLLM都是怎么實現(xiàn)的—如何保持text2video的連續(xù)一致性-AI.x社區(qū)

多模態(tài)MLLM都是怎么實現(xiàn)的—如何保持text2video的連續(xù)一致性-AI.x社區(qū)

比如這個視頻,兵馬俑大戰(zhàn)美軍,打著打著,兵馬俑就突然叛變變成美軍了。

造成這個問題的原因是什么?

首先Diffusion網(wǎng)絡(luò)是沒時間概念的,如果是生圖可能還行,我們以一個簡單的生圖的流程來看。

多模態(tài)MLLM都是怎么實現(xiàn)的—如何保持text2video的連續(xù)一致性-AI.x社區(qū)


這就是一個典型的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)域是不需要時序信息的。

多模態(tài)MLLM都是怎么實現(xiàn)的—如何保持text2video的連續(xù)一致性-AI.x社區(qū)

上圖由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

多模態(tài)MLLM都是怎么實現(xiàn)的—如何保持text2video的連續(xù)一致性-AI.x社區(qū)


  1. 原始視頻數(shù)據(jù) (Top Row): 視頻由一系列按時間順序排列的幀組成(時間軸 T 從左到右)。圖中展示了視頻中的三幀,但實際上視頻包含更多幀。
  2. 幀采樣 (Implicit Step): 雖然沒有明確畫出“丟棄”的幀,但“Uniform Frame Sampling”這個名字意味著我們不是使用視頻中的所有幀。而是按照一個固定的時間間隔(比如每隔 k 幀取一幀,或者每秒取 f 幀)來選擇一部分幀。圖中展示的第一幀和最后一幀(包含 x1, x2 和 xj, xj+1 的那兩幀)就是被采樣出來的幀,中間的那幀可能就被跳過了(或者它也是被采樣出來的,只是沒有突出顯示其 patch 而已,但均勻采樣的核心在于選擇幀的間隔是固定的)。
  3. 空間分塊 (Spatial Patching): 對于每一個被采樣出來的幀,將其在空間上分割成 H x W 個不重疊的小塊 (patches)。這與 Vision Transformer (ViT) 處理圖像的方式類似。圖中的 x1, x2, xj, xj+1 就代表這些從對應(yīng)采樣幀中提取出的小塊。
  4. 序列化/展平 (Flattening into Sequence - Bottom Row): 將所有采樣幀提取出的空間小塊,按照時間和空間的順序(通常是先時間,再空間,即第一幀的所有塊,然后第二幀的所有塊...)拼接成一個一維的序列。這個序列 x1, x2, ..., xj, xj+1, ... 就是最終輸入給 Transformer 模型的 token 序列。


總結(jié)就是個幀采樣,然后按著時間順序給展平稱一維的向量了。

成熟的思路

Tubelet embedding

多模態(tài)MLLM都是怎么實現(xiàn)的—如何保持text2video的連續(xù)一致性-AI.x社區(qū)



不同于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)出來的?


多模態(tài)MLLM都是怎么實現(xiàn)的—如何保持text2video的連續(xù)一致性-AI.x社區(qū)

圖片由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)在一個正常的文生視頻的流程我們就講完了,其實以前我也講過,相當于在讓大家復習一遍。

那我們今天講的論文有什么過人之處呢?

多模態(tài)MLLM都是怎么實現(xiàn)的—如何保持text2video的連續(xù)一致性-AI.x社區(qū)

最大的不同是,它能生成一分鐘的視頻,同時這個視頻有著豐富的情節(jié)變化,不想現(xiàn)在的視頻,即使10秒20秒也是相對簡單的動作和拍攝視角的變化。

但是這個論文的視頻我是看過的,非常驚艷就根一個普通的動畫片沒有任何區(qū)別,角色的多幀運動和串場的一致性上,是基本現(xiàn)在所有的模型都無法做到的。

我們剛才講了在一個現(xiàn)在大部分的text2video的實現(xiàn)方案中,是擴展了self-attention層,讓它有時空感知能力也就是所說的Spatiotemporal Transformer Blocks。

它這個論文里的網(wǎng)絡(luò)相當于另辟蹊徑,是這樣實現(xiàn)的。

多模態(tài)MLLM都是怎么實現(xiàn)的—如何保持text2video的連續(xù)一致性-AI.x社區(qū)

解釋一下這個圖

  1. 標準 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??。
  1. 論文把架構(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層:

多模態(tài)MLLM都是怎么實現(xiàn)的—如何保持text2video的連續(xù)一致性-AI.x社區(qū)

這張圖展示了 測試時訓練 (Test-Time Training, TTT) 層 的核心工作原理,并將其與通用 RNN(循環(huán)神經(jīng)網(wǎng)絡(luò))的概念聯(lián)系起來。


  1. 基本結(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??,代表在每個時間步生成的輸出。
  1. 與 RNN 的相似之處: 像所有 RNN 一樣,當前隱藏狀態(tài) ??W_t?? 依賴于前一個隱藏狀態(tài) ??W_{t-1}?? 和當前輸入 ??x_t??。當前輸出 ??z_t?? 則由當前隱藏狀態(tài) ??W_t?? (可能也結(jié)合 ??x_t??) 決定。
  2. 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ū)別:如何處理長序列(長上下文)

  1. 我上文之前描述的架構(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),其實再有卡你也要考慮是否可商用。
  2. 論文中的架構(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???,作者:周博洋

收藏
回復
舉報
回復
相關(guān)推薦