论文阅读VACE: All-in-One Video Creation and Editing

发布于:2025-04-18 ⋅ 阅读:(22) ⋅ 点赞:(0)

code:https://github.com/ali-vilab/VACE

核心

在这里插入图片描述

  • 单个模型同时处理多种视频生成和视频编辑任务
  • 通过VCU(视频条件单元)进行实现

方法

视频任务

所有的视频相关任务可以分为4类
在这里插入图片描述
文本生视频
参考图片生视频
视频生视频
视频+mask生视频

VCU

对上述4个任务,制定一个统一的输入范式。text,frame以及mask。
在这里插入图片描述
对于每一个不同的任务,text不用变,主要变化F以及M。对于参考图+视频,无非是多了l个参考图的输入。mask对应设置如下表所示。
这样就统一了不同类型任务的输入。
在这里插入图片描述

结构

在这里插入图片描述

重构了DiT模型用于VACE

Context Tokenization

在这里插入图片描述

  • 概念解耦。主要是将视频分为了2部分,一部分是和mask有交互的,需要重新生成;一部分和mask无交互的,需要保持不变。
  • Context Latent Encoding.解藕的两部分以及原始视频、mask分别encoder到latent空间,shape保持一致
  • Context Embedder 将上述3个concat一起输入到transformer中
    代码如下:
def vace_encode_frames(self, frames, ref_images, masks=None):
    if ref_images is None:
        ref_images = [None] * len(frames)
    else:
        assert len(frames) == len(ref_images)

    if masks is None:
        latents = self.vae.encode(frames)
    else:
        inactive = [i * (1 - m) + 0 * m for i, m in zip(frames, masks)]
        reactive = [i * m + 0 * (1 - m) for i, m in zip(frames, masks)]
        inactive = self.vae.encode(inactive)
        reactive = self.vae.encode(reactive)
        latents = [torch.cat((u, c), dim=0) for u, c in zip(inactive, reactive)]

    cat_latents = []
    for latent, refs in zip(latents, ref_images):
        if refs is not None:
            if masks is None:
                ref_latent = self.vae.encode(refs)
            else:
                ref_latent = self.vae.encode(refs)
                ref_latent = [torch.cat((u, torch.zeros_like(u)), dim=0) for u in ref_latent]
            assert all([x.shape[1] == 1 for x in ref_latent])
            latent = torch.cat([*ref_latent, latent], dim=1)
        cat_latents.append(latent)
    return cat_latents
3.3.2. Fully Fine-Tuning and Context Adapter Tuning

在这里插入图片描述作者设计了两种训练方式。

  • 全训练。直接将video tokens和context tokens相加,然后训练整个DiT
  • Context Adapter Tuning。直训练context Block和context Embed。DiT不动,cotext作为一个控制信号注入到DiT。参考了Res-tuning,也有点controlnet到结构。
    后文也有提到Context Adapter Tuning的效果更好,所以关注这个就可以。

结果

作者自己构建了一个新的数据集,用于评估多类视频任务。

定量

多个任务上的性能超过了sota,特别是在视频质量和视频一致性方面。例如,在图像到视频(I2V)任务中,VACE在多个指标上优于I2VGenXL、CogVideoX-I2V和LTX-Video-I2V等方法。
但是在R2V任务上,keling更胜一筹
在这里插入图片描述

定性

在这里插入图片描述

消融实验

在这里插入图片描述

  • Context Adapter Tuning的训练方式更好
  • 超参数设置Uniform最好
  • Context Adapter设置所有layers最好
  • Concept 解耦更好一点

局限(C.1. Limitations)

  • 生成的质量和风格受基础模型的影响。小模型快,但是质量和连贯性不好。例如身份一致性差,对输入的控制能力较弱。大模型慢,质量高。
  • VACE的训练数据不足,训练时间不足
  • 用户使用起来更复杂一些(对比单一任务模型)

细节

基础模型

在LTX-Video-2B和WAN-T2V-14B两个模型基础上训练
训练卡数:16张A100/128张A100

训练分为3个阶段
  • 基础任务训练,作为构建更复杂任务的基石。具体任务为视频修复和视频扩展
  • 任务扩展训练,扩展模型的能力。包括单输入参考帧到多输入参考帧和单一任务到组合任务
  • 质量提升训练,提升模型生成视频的质量,特别是在高分辨率和长视频序列上的表现。
训练参数

在这里插入图片描述

总结

主要是统一了多个不同的视频任务,使得单一模型拥有复杂的能力。创新点注意围绕着接口设计、训练设计。模型核心结构未变。


网站公告

今日签到

点亮在社区的每一天
去签到