简介
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帧,看起来质量没有明显下滑。