今天小編分享的科技經驗:視頻生成無損提速:删除多餘token,訓練時間減少30%,幀率越高效果越好,歡迎閲讀。
Don ’ t look twice!
把連續相同的影像塊合并成一個 token,就能讓 Transformer 的視頻生成速度大幅提升。
卡内基梅隆大學提出了視頻生成模型加速方法Run-Length Tokenization(RLT),被 NeurIPS 2024 選為 Spotlight 論文。
在精度幾乎沒有損失的前提下,RLT 可以讓模型訓練和推理速度雙雙提升。
一般情況下,利用 RLT,Transformer 視頻模型的訓練時間可縮短 30%,推理階段提速率提升更是可達 67%。
對于高幀率和長視頻,RLT 的效果更加明顯,30fps 視頻的訓練速度可提升 1 倍,長視頻訓練 token 減少 80%。
相比于傳統的剪枝方法,RLT 能用更小的精度損失實現更好的加速效果。
有人想到了電視劇中的評論,認為這項研究找到了在壓縮空間中進行搜索的方法。
DeepMind 科學家 Sander Dieleman 則評價稱,這項研究是一種 " 非主流 "(Off-the-grid)的創新方法,但比起其他復雜的非主流研究,又顯得非常簡潔。
重復影像塊合為一個 token
RLT 的核心原理,是利用視頻中存在大量時間上重復的影像塊這一特點,将重復的影像塊合并為一個 token 表示。
這種情況下,還需要用一個位置編碼來表示這個 token 的長度,但 RLT 總體上減少了輸入的 token 數量。
要想完成重復 token 的修剪,首先要對視頻進行分塊。
具體來説,視頻在空間和時間維度上會被劃抽成固定大小的影像塊,每個影像塊的大小為 C × D_x × D_y × D_t,每個影像塊都對應一個空間 - 時間位置。
(其中 C 是通道數,D_x 和 D_y 是空間維度大小,D_t 是時間維度大小。)
劃分完成之後,需要比較時間上相鄰的影像塊,判斷它們是否相似,也就是是否需要合并。
對于時間位置相差 1 的兩個影像塊 P_1 和 P_2,取 P_1 的第一幀和 P_2 的最後一幀,計算它們的 L1 距離。
如果距離小于一個預設的阈值 τ,就認為 P_1 和 P_2 是靜态重復的(阈值 τ 表示允許多大程度的相似性,設定與具體數據集無關)。
完成判别之後,重復的影像塊會被移除。
對于一串連續的、兩兩之間都是靜态重復的影像塊,RLT 只保留第一個塊對應的 token。
這一步是在 patch embedding 之前完成的,因此移除 token 不需要改動模型結構。
經過這一步,輸入的 token 數量從 N_P 降低到了 N_P ’(N_P ’≤ N_P)。
為了讓合并後的 token 仍然能夠反映完整的視頻信息,接下來要給每個 token 加上長度編碼。
對于一個保留下來的 token,系統會計算它所代表的原始 token 的長度 l_i,也就是它到下一個沒有被移除的 token 的距離。
長度信息 l_i 與 token 的空間 - 時間位置 ( x,y,t ) 一起,用一個可學習的長度編碼矩陣映射成一個 d 維的 embedding 向量,與 patch embedding 相加,作為輸入 token 的最終表示。
最後只需要将處理後的 token 序列輸入到視頻 Transformer 中,進行常規的訓練或推理過程。
不過需要注意的是,由于每個視頻樣本計算出的 token 數量 N_P ’不盡相同,樣本之間可能有較大差異。
然而标準的 Transformer 是按批次處理固定長度的序列的。
為了能在一個批次中處理多個長度不一的視頻,RLT 采用了一種稱為 "example packing" 的方法,将這一批中所有視頻樣本的 token 序列首尾相連,拼成一個超長的序列,作為 Transformer 的輸入。
這樣的話,Transformer 實際上是在處理一個批次大小為 1、長度為所有樣本 token 數量之和的序列。
通過以上步驟,RLT 能夠去除視頻中的許多冗餘 token,在幾乎不損失精度的情況下,大幅降低内存占用和計算量,加速視頻 Transformer 的訓練和推理。
訓練時長下降 30%
在訓練階段,RLT 對 ViT-B 和 ViT-L 兩種規模的模型都有很好的加速效果。
在 Kinetics-400 上,ViT-BRLT 和 ViT-L 訓練時間分别從 14.4 小時和 21.6 小時,降低到 10.2 小時和 15.4 小時,降幅均接近 30% 左右,精度損失不超過 0.1 個百分點;
在 SSv2 上,兩者的訓練時間分别從 10.1 和 15.2 小時,降低到 7.2 和 10.8 小時,降幅也接近 30%,精度同樣僅下降 0.1 個百分點。
相比之下,傳統的剪枝方法 Token Merging 在精度下降 0.1-0.5 個百分點的情況下,加速只有 10-20%。
在推理階段,也不需要額外的訓練,就可以将 RLT 作為現成的 tokenizer,達到很好的加速效果。
具體來説,RLT 能在幾乎不犧牲精度的情況下(不超過 0.5 個百分點),将推理階段的計算量和延遲降低 30-60%。
同樣在 Kinetics-400 和 SSv2 上,對于 ViT-B 和 ViT-L,RLT 都能帶來 60% 以上的推理加速。
對于更大的 ViT-H,在 Kinetics-400 上,RLT 也能實現 45% 的加速效果。
特别地,作者還針對高幀率和長時長視頻數據集進行了測試,發現 RLT 帶來的 token 下降幅度比在普通數據集中更高。
同時在高幀率數據集當中,RLT 能夠在精度損失同樣低的情況下,實現更好的加速效果。
而且幀率越高效果也越明顯,對于 30fps 的視頻,加速可達 100%。
論文地址:
https://arxiv.org/abs/2411.05222
代碼:
https://github.com/rccchoudhury/rlt