簡介
VACE是阿里新開源的視頻編輯/生成框架,號稱能夠執行任意的視頻編輯/生成。總體而言,該模型在整體結構上并沒有太大改變,僅僅是在原Wan2.1模型的基礎上,加了一個接受mask和視頻輸入的controlnet而已。但是這篇文章認為,所有的圖片編輯/生成任務,可以通過一個統一的框架完成。筆者認為,這種思想才是本文的價值所在。這里需要特別注意,VACE框架,在模型層面上,接受的輸入有三個:文本prompt、視頻、mask,且這三者均是必需的。
模型結構
我們先來大致看一眼模型結構:
改圖直接從原始論文中截取,左側的灰色方塊表示了采用的transformer結構,其中a只是例子。實際上采用的是b,文章中將其描述為上下文適配器微調。實際上就是一個controlnet的結構。右側的黃色塊則表示了該controlnet結構,或者說上下文適配器,的輸入輸出:
輸入:
- reactive frame(反應幀,需要修改的像素)
- inactivate frame (非活動幀,不需要修改的像素)
- mask
可以看到前兩者是相反的概念,只需要原始視頻和mask即可得到。實際調用的時候也是只需要輸入原始視頻和mask。
輸出:
上下文編碼
輸出很簡單,就是上下文編碼,實際上就是把該模塊的所有輸入編碼到了一起。
其余流程與正常的視頻生成模型的流程一致,此處不再展開。
統一的視頻編輯/生成架構
文章認為,所有的視頻編輯/生成任務都可以歸類于以下4種任務或其組合:
- t2v 文本到視頻
- r2v 參考到視頻,即給定參考圖,根據參考圖生成視頻,參考圖可以是背景也可以是前景
- v2v 視頻到視頻,例如黑白視頻上色,風格遷移等
- mv2v(mask video to video)局部編輯,例如框選出視頻中的貓,將其換成狗
其他任務,如根據參考圖進行局部編輯,可以視作是r2v和mv2v這兩種基本任務的組合。
也就是說,僅需要用一個框架定義好以上4種任務如何執行,便可以實現任意視頻生成/編輯任務。
那么,這個框架需要如何定義呢?作者給出了如下表格:
此處對該表格做個簡單的介紹,但是在此之前請記住VACE框架,在模型層面上,接受的輸入有三個:文本prompt、視頻、mask,且這三者均是必需的。
- 如果是t2v,文生視頻任務,那么只需要將原始視頻全部初始化為0,并將mask設為全白(即每一幀都需要完全重畫)
- 如果是r2v,參考到視頻任務,那么只需要把參考圖拼在0初始化的視頻開頭,mask設置為參考圖所在的那幾幀全黑(完全不重畫),后續的所有幀全白(全部重畫)
- 如果是v2v,視頻到視頻,那就直接輸入參考視頻,然后將mask設置為全白(每一幀都要重畫)
- 如果是mv2v,只需要在v2v的基礎上,將全白的mask修改為正常的mask即可
那么,其他任務怎么通過這些任務的組合來完成呢?就拿前面提到的根據參考圖進行局部編輯為例,只需要把參考圖拼在視頻開頭,然后原本的mask視頻前面拼接上幾個全黑的幀即可。
性能評價
文中規定的這幾個任務表現還不錯,但是組合起來之后可能需要一定程度上的微調。如果是根據參考圖進行局部編輯,模型對參考圖的跟隨能力比較弱。
速度請參考官方文檔,我個人認為1.3B的速度還是相當快的,內存占用也不算高。
視頻長度方面,模型默認處理81幀,不過筆者目前將其拓展為153幀,看起來質量沒有明顯下滑。