选自Lil’Log
作者:Lilian Weng
机器之心编译
编辑:Panda
过去几年来,扩散模型强大的图像合成能力已经得到充分证明。研究社区现在正在攻克一个更困难的任务:视频生成。近日,OpenAI 安全系统(Safety Systems)负责人 Lilian Weng 写了一篇关于视频生成的扩散模型的博客。
Lilian Weng
机器之心对这篇博客进行了不改变原意的编译、整理,以下是博客原文:
视频生成任务本身是图像合成的超集,因为图像就是单帧视频。视频合成的难度要大得多,原因是:
1. 视频合成还需要不同帧之间保持时间一致性,很自然,这需要将更多世界知识编码到模型之中。
2. 相比于文本或图像,收集大量高质量、高维度的视频数据要更为困难,更罔论配对的文本 - 视频数据了。
如果你想了解扩散模型在图像生成方面的应用,可参读本文作者 Lilian Weng 之前发布的博文《What are Diffusion Models?》链接:https://lilianweng.github.io/posts/2021-07-11-diffusion-models/
从头建模视频生成
首先,我们先来看看如何从头设计和训练扩散视频模型,也就是说不使用已经预训练好的图像生成器。
参数化和采样
图 1:以角坐标形式展示扩散更新步骤的工作方式,其中 DDIM 通过让 z_{𝜙_𝑠} 沿 的方向移动而使其不断演进。
模型架构:3D U-Net 和 DiT
类似于文生图扩散模型,U-Net 和 Transformer 依然是常用的架构选择。谷歌基于 U-net 架构开发了一系列扩散视频建模论文,OpenAI 近期的 Sora 模型则是利用了 Transformer 架构。
VDM 采用了标准的扩散模型设置,但对架构进行了一些修改,使之更适合视频建模任务。它对 2D U-net 进行了扩展,使其能处理 3D 数据,其中每个特征图(feature map)都表示一个 4D 张量:帧数 x 高度 x 宽度 x 通道数。这个 3D U-net 是在空间和时间上进行分解,也就是说每一层都仅会操作空间或时间一个维度,而不会同时操作两者。
图 2:3D U-net 架构。该网络的输入是有噪声视频 z_𝑡、条件信息 c 和对数信噪比(log-SNR)λ_𝑡。通道乘数 M_1,...,M_𝐾 表示各层的通道数量。
Ho, et al. 在 2022 年提出的 Imagen Video 基于一组级联的扩散模型,其能提升视频生成的质量,并将输出升级成 24 帧率的 1280x768 分辨率视频。Imagen Video 架构由以下组件构成,总计 7 个扩散模型。
图 3:Imagen Video 的级联式采样流程。在实践中,文本嵌入会被注入到所有组件中,而不只是基础模型中。
基础去噪模型使用共享的参数同时在所有帧上执行空间操作,然后时间层将各帧的激活混合起来,以更好地实现时间一致性;事实证明这种方法的效果优于帧自回归方法。
图 4:Imagen Video 扩散模型中一个空间 - 时间可分离模块的架构。
SSR 和 TSR 模型都基于在通道方面连接了有噪声数据 𝐳_𝑡 的上采样的输入。SSR 是通过双线性大小调整来上采样,而 TSR 则是通过重复帧或填充空白帧来上采样。
Imagen Video 还应用了渐进式蒸馏来加速采样,每次蒸馏迭代都可以将所需的采样步骤减少一半。在实验中,他们能够将所有 7 个视频扩散模型蒸馏为每个模型仅 8 个采样步骤,同时不会对感知质量造成任何明显损失。
为了更好地扩大模型规模,Sora 采用了 DiT(扩散 Transformer)架构,其操作的是视频和图像隐代码的时空块(spacetime patch)。其会将视觉输入表示成一个时空块序列,并将这些时空块用作 Transformer 输入 token。
图 5:Sora 是一个扩散 Transformer 模型。
调整图像模型来生成视频
在扩散视频建模方面,另一种重要方法是通过插入时间层来「扩增」预训练的文生图扩散模型,然后就可以选择仅在视频上对新的层进行微调或完全避免进行额外的训练。这个新模型会继承文本 - 图像对的先验知识,由此可以帮助缓解对文本 - 视频对数据的需求。
在视频数据上进行微调
Singer et al. 在 2022 年提出的 Make-A-Video 是在一个预训练扩散图像模型的基础上扩展一个时间维度,其包含三个关键组件:
1. 一个在文本 - 图像对数据上训练的基础文生图模型。
2. 时空卷积和注意力层,使网络覆盖时间维度。
3. 一个帧插值网络,用于高帧率生成。
图 6:Make-A-Video 工作流程示意图。
最终的视频推理方案的数学形式可以写成这样:
时空超分辨率层包含伪 3D 卷积层和伪 3D 注意力层:
图 7:伪 3D 卷积(左)和注意力(右)层的工作方式。
它们可以表示成:
图 8:Tune-A-Video 架构概况。在采样阶段之前,它首先在单个视频上运行一个轻量加权的微调阶段。请注意整个时间自注意力(T-Attn)层都会得到微调,因为它们是新加入的,但在微调阶段,ST-Attn 和 Cross-Attn 中只有查询投射会被更新,以保留先验的文生图知识。ST-Attn 能提升时空一致性,Cross-Attn 能优化文本 - 视频的对齐。
图 9:Gen-1 模型的训练流程概况。
图 10:一个用于图像合成的预训练 LDM 被扩展成一个视频生成器。B、𝑇、𝐶、𝐻、𝑊 分别是批量大小、序列长度、通道数、高度和宽度。𝐜_S 是一个可选的条件 / 上下文帧。
但是,LDM 的预训练自动编码器依然还有问题:它只能看见图像,永远看不见视频。直接使用它来生成视频会产生闪动的伪影,这样的时间一致性就很差。因此 Video LDM 向解码器添加了额外的时间层,并使用一个用 3D 卷积构建的逐块时间判别器在视频数据进行微调,同时编码器保持不变,这样就依然还能复用预训练的 LDM。在时间解码器微调期间,冻结的编码器会独立地处理视频中每一帧,并使用一个视频感知型判别器强制在帧之间实现在时间上一致的重建。
图 11:视频隐扩散模型中自动编码器的训练工作流程。其中编码器的微调目标是通过新的跨帧判别器获得时间一致性,而编码器保持不变。
类似于 Video LDM,Blattmann et al. 在 2023 年提出的 Stable Video Diffusion(SVD)的架构设计也是基于 LDM,其中每一个空间卷积和注意力层之后都插入时间层,但 SVD 是在整个模型层面上执行微调。训练视频 LDM 分为三个阶段:
1. 文生图预训练很重要,有助于提升质量以及遵从 prompt 的能力。
2. 将视频预训练分开是有利的,理想情况下应当在更大规模的经过整编的数据集上进行。
3. 使用一段更小的、高视觉保真度的预先标注了字幕的视频进行高质量视频微调。
SVD 专门强调了数据集整编对模型性能的关键作用。他们使用了一个剪辑检测流程来从每段视频获得更多剪辑,然后对其使用三个不同的字幕标注器模型:(1) 用于中间帧的 CoCa,(2) 用于视频字幕的 V-BLIP,(3) 基于前两个标注使用 LLM 来进行标注。然后他们还能继续提升视频数据集,其做法包括移除运动更少的视频片段(通过以 2 fps 速度计算低光流分数进行过滤)、清除过多的文本(使用光学字符识别来识别具有大量文本的视频)、清除看起来不够美的视频(使用 CLIP 嵌入标注每段视频的第一帧、中间帧和最后帧并计算美学分数和文本 - 图像相似度)。实验表明,使用经过过滤的更高质量的数据集能得到更好的模型质量,即便这个数据集要小得多。
对于首先生成远距离关键帧然后再使用时间超分辨率进行插值的方法,其中的关键挑战是如何维持高质量的时间一致性。Bar-Tal et al. 在 2024 年提出的 Lumiere 则是采用了一种时空 U-Net(STUNet)架构,其可在单次通过中一次性生成整段时间上持续的视频,这样就无需依赖 TSR(时间超分辨率)组件了。STUNet 会在时间和空间维度上对视频进行下采样,因此会在一个紧凑的时间 - 空间隐空间内具备很高的计算成本。
图 12:Lumiere 无需 TSR(时间超分辨率)模型。由于内存限制,经过扩展的 SSR 网络可以仅使用视频的短片段,因此 SSR 模型可以使用较短但重叠的视频片段集。
STUNet 在预训练文生图 U-Net 上扩展之后能够同时在时间和空间维度上对视频进行下采样和上采样。基于卷积的模块由预训练的文生图层构成,之后是分解的时空卷积。而在最粗粒度 U-Net 层面上的基于注意力的模块包含这个预训练文生图模块,之后是时间注意力。只有新添加的层需要进一步训练。
图 13:架构示意图:(a) 时空 U-Net(STUNet)、(b) 基于卷积的模块、(c) 基于注意力的模块。
无训练适应
也有可能不使用任何训练就让预训练的文生图模型输出视频,这多少有点让人惊讶。
如果我们直接简单地随机采样一个隐含代码的序列,然后用解码出来的对应图像构建一段视频,那么无法保证物体和语义在时间上的一致性。Khachatryan et al. 在 2023 年提出的 Text2Video-Zero 可实现零样本无训练的视频生成,其做法是让预训练的图像扩散模型具备用于时间一致性的两个关键机制。
1. 采样具有运动动态的隐含代码序列,以保证全局场景和背景的时间一致性。
2. 使用一个新的跨帧注意力(每一帧在第一帧上的注意力)重新编程帧层面的自注意力,以保证前景事物的上下文、外观和身份信息的一致性。
图 14:Text2Video-Zero 工作流程示意图。
图 15:ControlVideo 概览。
原文链接:https://lilianweng.github.io/posts/2024-04-12-diffusion-video/