深入文本到视频模型

文本到视频生成是一项新兴的计算机视觉任务,它根据文本描述创建图像序列,同时保持空间和时间的一致性。虽然它遵循与文本到图像生成相似的演进路径,但由于需要跨帧的长期依赖,复杂度显著更高。

文本到视频生成的挑战

从文本生成视频比生成静态图像更困难,因为它需要在时间上保持一致性。主要障碍包括:

  • 计算成本: 确保跨帧的时间和空间一致性会产生长期依赖,使得训练在计算上成本高昂,往往超出许多研究者的负担。
  • 数据稀缺: 高质量的多模态数据集,包含配对的视频和文本,十分稀少且常常标注稀疏,这阻碍了模型学习复杂运动语义的能力。
  • 字幕歧义: 描述视频比描述单张图像更为复杂。有效的视频生成通常需要一系列提示或叙事故事,而不是单一的简短文本提示。

模型架构的演进

文本到视频模型已经经历了三大主要的架构浪潮:

1. 基于 GAN 与 VAE 的方法

早期研究利用生成对抗网络(GAN)和变分自编码器(VAE)对帧进行自回归生成,依据字幕进行生成。示例包括 Text2FilterTGANs-C。这些早期模型受限于低分辨率、短时长以及简单、孤立的运动。

2. 基于 Transformer 的框架

在 GPT-3 和 DALL-E 成功之后,研究者采用 Transformer 架构来处理更长的序列。值得注意的模型包括:

  • Phenaki: 能够在一系列提示(情节)条件下生成任意长度的视频。
  • NUWA-Infinity: 使用自回归之上再自回归的机制合成无限高清质量的视频。
  • 其他框架: CogVideo、VideoGPT 和 Make-A-Video 也采用基于 Transformer 的方法,而 TATS 将 VQGAN 与时间敏感的 Transformer 模块相结合。

3. 基于扩散的架构

当前的研究浪潮聚焦于扩散模型,以实现超写实且语境丰富的结果。关键进展包括:

  • Video Diffusion Models (VDM): 将扩散模型扩展到视频领域的先驱。
  • MagicVideo: 在低维潜空间中生成视频片段,相比 VDM 提高了效率。
  • Text2Video-Zero: 一个零-shot 框架,将可训练的运动动力学模块与预训练的 Stable Diffusion 模型相结合,无需配对的文本-视频数据。
  • NUWA-XL: 采用“扩散之上再扩散”的方法,在 3,376 帧上进行训练,以缩小滑动窗口自回归生成中出现的上下文差距。
  • Tune-a-Video: 使用单个文本-视频配对对预训练的文本到图像模型进行微调,以改变内容同时保留运动。

视频-文本数据集

模型性能在很大程度上取决于配对视频-文本数据集的质量。当前的策略包括使用大规模数据集或结合不同的数据类型:

  • WebVid: 一个常用数据集,包含 1070 万文本-视频配对(52K 小时视频),但其中噪声和不相关描述较多。
  • Howto100M: 专注于逐步教学视频(烹饪、园艺等),拥有 1.36 亿剪辑。
  • QuerYD: 专注于事件定位,提供关于对象和动作相对位置的详细字幕。
  • CelebV-Text: 大规模人脸数据集,拥有超过 7 万视频,用于生成逼真的面孔、情感和手势。

一些模型,如 Make-a-Video,尝试通过使用文本-图像配对学习视觉外观,并利用单模态视频数据无监督学习时空依赖,以绕过数据稀缺问题。

实现与开源资源

许多文本到视频模型现已通过 diffusers 库集成到 Hugging Face 生态系统中。用户可以运行和微调模型,如 Text2Video-ZeroModelScope(来自阿里巴巴 / DAMO Vision Intelligence Lab)。

实际应用

用户可以使用以下实现模式部署 ModelScope 模型:

import torch
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
from diffusers.utils import export_to_video

pipe = DiffusionPipeline.from_pretrained("damo-vilab/text-to-video-ms-1.7b", torch_dtype=torch.float16, variant="fp16")
pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
pipe.enable_model_cpu_offload()

prompt = "Spiderman is surfing"
video_frames = pipe(prompt, num_inference_steps=25).frames
video_path = export_to_video(video_frames)

社区生态系统

除了官方集成,社区还通过贡献者如 Phil Wang (lucidrains) 开发了多个关键论文(包括 Imagen、Phenaki 和 NUWA)的非官方实现,并提供了如 ExponentialML 提供的微调框架。

Sources