← 返回目录 | 第11章 / 共14章 | 下一章 →

第11章:视频扩散模型

视频生成是扩散模型面临的最具挑战性的任务之一。与静态图像不同,视频需要在时间维度上保持连贯性,同时处理更高维度的数据。本章将深入探讨视频扩散模型的核心技术,从时序建模的基本原理到3D架构设计,再到运动动力学的建模。您将学习如何处理时间一致性、运动模糊、长程依赖等视频特有的挑战,并掌握设计高效视频生成系统的关键技术。通过本章的学习,您将理解Sora、Runway等前沿视频生成模型背后的技术原理。

章节大纲

11.1 视频生成的挑战与机遇

  • 时序一致性要求
  • 计算和内存瓶颈
  • 运动表示与建模
  • 数据集与评估指标

11.2 时序扩散模型架构

  • 3D U-Net与因子化卷积
  • 时空注意力机制
  • 帧间信息传播
  • 分层时序建模

11.3 条件控制与运动引导

  • 文本到视频生成
  • 图像动画化
  • 运动轨迹控制
  • 风格与内容解耦

11.4 高效训练与推理策略

  • 视频压缩与潜在空间
  • 级联生成框架
  • 帧插值与超分辨率
  • 分布式训练技术

11.5 应用案例与未来方向

  • 视频编辑与修复
  • 虚拟现实内容生成
  • 实时视频合成
  • 多模态视频理解

11.1 视频生成的挑战与机遇

视频生成代表着生成模型的前沿挑战。不同于静态图像,视频需要在空间和时间两个维度上同时建模复杂的模式。当我们观看一段自然流畅的视频时,大脑会无意识地处理大量的视觉信息:物体的运动轨迹、光影的变化、场景的转换,以及这些元素之间错综复杂的相互作用。对于机器学习模型而言,重现这种自然性是一项艰巨的任务。

11.1.1 时序一致性要求

视频生成的核心挑战是保持时间上的连贯性。这种连贯性体现在多个层面,每个层面都有其独特的技术难点。

  1. 对象持续性

在真实世界中,物体具有持续的身份标识。一个红色的球从画面左边滚到右边,它始终是同一个球。这看似简单的事实,对生成模型来说却充满挑战:

  • 物体身份在帧间保持一致:模型需要理解什么是"同一个物体"。这不仅仅是外观的相似性,更涉及到语义层面的理解。例如,一个人转身后,虽然看到的是背影,但仍然是同一个人。扩散模型需要在潜在空间中编码这种身份信息,并确保在去噪过程中保持稳定。

  • 外观特征(颜色、纹理)稳定:真实物体的颜色和纹理不会随机变化。然而,独立生成每一帧时,模型可能会产生微小的颜色偏差或纹理变化,累积起来就会造成明显的闪烁。这需要在训练时引入专门的损失函数,惩罚帧间的不必要变化。

  • 形状变化符合物理规律:物体的形变应该是连续和合理的。例如,一个弹跳的球在压缩和恢复时应该遵循弹性形变的规律。这要求模型隐式地学习物理世界的约束,或者显式地引入物理先验。

  1. 运动连续性

运动是视频的灵魂。流畅自然的运动需要满足多重约束:

  • 轨迹平滑自然:物体的运动路径应该是连续可微的。突然的方向改变或位置跳跃会立即被人眼察觉。在扩散模型中,这通常通过在时间维度上应用平滑性约束来实现。例如,可以使用光流估计来计算相邻帧之间的运动场,并鼓励运动场的平滑性。

  • 速度和加速度合理:不同类型的物体有不同的运动特性。一片羽毛的飘落和一块石头的下落遵循完全不同的动力学规律。模型需要学习这些隐含的物理规律,这可以通过大规模的视频数据训练获得,也可以通过引入物理仿真作为先验知识。

  • 遮挡关系正确:当多个物体相互遮挡时,需要正确处理深度关系和可见性。被遮挡的部分应该在适当的时候消失和重现,且重现时的外观应该与消失前保持一致。这需要模型具有某种形式的3D理解能力。

  1. 光照一致性

光照的变化为视频增添了真实感,但也带来了额外的复杂性:

  • 阴影随物体移动:阴影是物体存在的重要视觉线索。当物体移动时,其投射的阴影也应该相应地改变位置和形状。这需要模型理解光源的位置和物体的3D结构。

  • 反射和高光稳定:镜面反射和高光点应该随着视角和物体位置的改变而合理地移动。例如,金属球表面的高光点应该始终指向光源方向。

  • 环境光照渐变:场景中的整体光照可能会缓慢变化(如日落时分),这种变化应该是渐进和全局一致的。所有物体都应该受到相同的光照变化影响。

为了量化这些一致性要求,研究者们设计了各种度量指标。例如,时序稳定性可以通过计算相邻帧之间的感知距离来衡量:

$$\mathcal{L}_{\text{temporal}} = \sum_{t=1}^{T-1} |\phi(x_t) - \phi(x_{t+1})|^2$$ 其中$\phi$是预训练的特征提取器(如VGG网络)。这个损失函数鼓励相邻帧在感知特征空间中保持接近。

💡 关键洞察:时序正则化的重要性
单纯的帧级损失会导致闪烁。必须显式地鼓励时序平滑性,但过度平滑会失去运动细节。平衡是关键。研究表明,结合多尺度的时序损失(像素级、特征级、语义级)能够获得最佳效果。

11.1.2 计算和内存瓶颈

视频数据的高维特性带来的计算挑战远超静态图像。这不仅仅是简单的线性增长,而是涉及到存储、计算和优化等多个方面的复合难题。

维度爆炸

当我们从图像扩展到视频时,数据维度的增长是惊人的:

  • 图像:[B, C, H, W] → 4D张量(批次、通道、高度、宽度)
  • 视频:[B, T, C, H, W] → 5D张量(增加了时间维度T)
  • 内存需求:理论上是T倍增长,但实际情况更复杂

让我们通过具体数字来理解这种爆炸性增长。一个256×256的RGB图像需要约200KB存储空间。而一个相同分辨率、持续1秒(24帧)的视频片段则需要约4.8MB。如果我们要生成一个10秒的高清视频(1920×1080),仅原始数据就需要约1.5GB的内存。这还没有考虑模型的中间激活值,后者通常是原始数据的数十倍。

计算复杂度分析

视频扩散模型的计算复杂度在多个层面上超越图像模型:

  1. 注意力机制的复杂度: - 空间注意力:$O(B \cdot T \cdot (H \cdot W)^2 \cdot C)$ - 时空注意力:$O(B \cdot (T \cdot H \cdot W)^2 \cdot C)$

当T=16(半秒视频)时,时空注意力的计算量是空间注意力的256倍!这使得直接应用全局注意力变得不可行。

  1. 卷积操作的复杂度: - 2D卷积:$O(B \cdot T \cdot C_{in} \cdot C_{out} \cdot H \cdot W \cdot k^2)$ - 3D卷积:$O(B \cdot C_{in} \cdot C_{out} \cdot T \cdot H \cdot W \cdot k^3)$

3D卷积在时间维度上增加了额外的计算,使得每层的计算量增加k倍(k为时间核大小)。

  1. 梯度累积问题: 视频的长序列特性导致反向传播时需要存储大量的中间梯度。对于T帧的视频,梯度存储需求也近似线性增长。这在实践中常常导致GPU内存溢出。

内存管理策略

面对这些挑战,研究者们开发了多种内存优化技术:

  1. 梯度检查点(Gradient Checkpointing): 通过选择性地存储激活值,在前向传播时丢弃部分中间结果,反向传播时重新计算。这可以将内存需求从$O(T)$降低到$O(\sqrt{T})$,代价是增加约30%的计算时间。

  2. 混合精度训练: 使用FP16进行大部分计算,仅在必要时使用FP32。这不仅减少50%的内存使用,还能利用现代GPU的Tensor Core加速计算。关键是要正确处理数值稳定性问题。

  3. 时间分片处理: 将长视频分割成重叠的短片段,分别处理后融合。例如,将32帧的视频分成4个11帧的片段(3帧重叠),可以显著降低峰值内存使用。

  4. 激活值重计算: 对于某些计算密集但内存友好的操作(如LayerNorm),可以选择不存储激活值,而是在反向传播时重新计算。

计算效率优化

除了内存管理,计算效率的优化同样重要:

  1. 稀疏注意力模式: - 局部时间窗口:每帧只关注前后k帧 - 分层注意力:不同层使用不同的时间感受野 - 学习式稀疏:通过元学习确定哪些帧对需要关注

  2. 因子化架构: 将时空建模分解为"空间建模→时间建模→空间建模"的序列。虽然表达能力有所降低,但计算效率提升显著。

  3. 知识蒸馏: 训练一个大型教师模型,然后蒸馏到更小的学生模型。学生模型可以使用更激进的架构简化。

🔬 研究线索:高效时空表示
如何设计更高效的时空表示?当前的研究方向包括:

  • 神经场表示:使用隐式神经表示编码视频,可以实现极高的压缩率
  • 层次化表示:在不同时间尺度上使用不同的表示粒度
  • 运动补偿预测:只存储关键帧和运动信息,大幅减少冗余
  • 可学习的视频编码器:端到端学习最适合扩散模型的视频表示

这些方向都在积极探索中,有望在未来实现数量级的效率提升。

11.1.3 运动表示与建模

运动是区分视频和图像序列的关键要素。有效地表示和建模运动不仅是技术挑战,更触及视觉感知的本质。人类视觉系统对运动极其敏感——我们能够轻易察觉不自然的运动,这使得运动建模成为视频生成的核心难题。

运动的多尺度特性

运动在视频中以多种尺度和形式存在,每种都需要不同的建模策略:

  1. 像素级运动:光流与形变场

在最细粒度上,运动表现为像素的位移。光流(Optical Flow)是描述这种运动的经典方法,它为每个像素分配一个2D运动向量$(u, v)$,表示该像素在连续帧之间的位移。

光流的基本假设是亮度恒定性: $$I(x, y, t) = I(x + u, y + v, t + 1)$$ 然而,真实世界的运动远比简单的平移复杂。物体可能发生旋转、缩放、剪切等形变。这时需要更一般的形变场表示: $$\mathbf{p}' = \mathbf{A}\mathbf{p} + \mathbf{t}$$ 其中$\mathbf{A}$是仿射变换矩阵,$\mathbf{t}$是平移向量。对于非刚性形变,则需要使用更复杂的变换模型,如薄板样条(Thin Plate Spline)或自由形变(Free Form Deformation)。

  1. 对象级运动:轨迹与变换

真实世界中,我们更多地感知对象而非像素的运动。对象级运动建模需要首先进行实例分割,然后跟踪每个对象的运动轨迹。

对象运动可以分解为几个组成部分:

  • 平移轨迹:对象中心在空间中的路径
  • 旋转运动:围绕自身轴的旋转(如车轮转动)
  • 缩放变化:由于透视效应或真实大小改变
  • 形变运动:非刚性物体的形状变化(如行人的肢体运动)

这种分解允许我们使用参数化模型来紧凑地表示复杂运动。例如,一个弹跳球的运动可以用抛物线轨迹加上周期性的压缩-恢复形变来描述。

  1. 场景级运动:相机运动与全局变换

当相机移动时,整个场景会发生协调一致的运动。这种全局运动模式包括:

  • 平移(Pan):相机水平或垂直移动
  • 缩放(Zoom):相机接近或远离场景
  • 旋转(Rotation):相机围绕光轴旋转
  • 透视变换:更复杂的3D相机运动

理解和分离相机运动与对象运动是视频理解的关键挑战。这通常通过估计基础矩阵(Fundamental Matrix)或单应性矩阵(Homography Matrix)来实现。

运动表示方法

不同的应用场景需要不同的运动表示方法:

  1. 显式运动表示

直接编码运动信息,如光流场或轨迹: $$\mathbf{M} = \{\mathbf{v}_{x,y,t} | \mathbf{v} = (u, v) \text{ 是位置 } (x,y) \text{ 在时刻 } t \text{ 的运动向量}\}$$ 优点:

  • 可解释性强
  • 可以直接施加物理约束
  • 易于编辑和控制

缺点:

  • 需要额外的运动估计步骤
  • 对遮挡和大位移处理困难
  • 离散表示可能丢失细节
  1. 隐式运动表示

通过神经网络学习运动的潜在表示: $$\mathbf{z}_{\text{motion}} = f_{\text{encode}}(\mathbf{x}_{t-k:t+k})$$ 其中$f_{\text{encode}}$是一个神经网络,从时间窗口中提取运动特征。

优点:

  • 端到端学习,无需手工特征
  • 可以捕获复杂的运动模式
  • 自然处理遮挡和复杂场景

缺点:

  • 缺乏可解释性
  • 难以施加明确的约束
  • 需要大量数据学习
  1. 混合表示

结合显式和隐式方法的优点: $$\mathbf{M}_{\text{hybrid}} = \mathbf{M}_{\text{explicit}} + g(\mathbf{z}_{\text{residual}})$$ 其中$\mathbf{M}_{\text{explicit}}$是估计的光流或轨迹,$g(\mathbf{z}_{\text{residual}})$是神经网络预测的残差运动。

运动先验与约束

有效的运动建模需要合适的先验知识:

  1. 平滑性先验:自然运动通常是平滑的 $$\mathcal{L}_{\text{smooth}} = \sum_{x,y} |\nabla u|^2 + |\nabla v|^2$$

  2. 刚性约束:刚体的运动保持形状不变 $$\mathcal{L}_{\text{rigid}} = \sum_{i,j} (d_{ij}^{t+1} - d_{ij}^t)^2$$ 其中$d_{ij}$是点$i$和$j$之间的距离。

  3. 物理约束:运动应遵循物理定律 - 重力影响:$a_y = -g$ - 动量守恒:$m_1v_1 + m_2v_2 = \text{const}$ - 能量守恒:$E_{\text{kinetic}} + E_{\text{potential}} = \text{const}$

  4. 因果约束:未来不应影响过去 这在扩散模型中通过掩码注意力机制实现,确保时刻$t$的生成只依赖于$t' \leq t$的信息。

11.1.4 数据集与评估指标

高质量的数据集和合理的评估指标是推动视频生成技术发展的基石。与图像生成相比,视频数据集的构建面临着独特的挑战:数据量巨大、标注困难、质量参差不齐。同时,如何全面评估生成视频的质量也是一个开放的研究问题。

主要数据集概览

视频生成领域的数据集经历了从小规模、特定领域到大规模、通用领域的演进:

| 数据集 | 规模 | 分辨率 | 特点 | 应用场景 |

数据集 规模 分辨率 特点 应用场景
UCF-101 13K videos 240p 人类动作识别 动作条件生成
Kinetics 650K videos 变化 多样化人类动作 通用视频生成
WebVid-10M 10M videos 360p 文本-视频对 文本到视频生成
HD-VILA-100M 100M videos 720p+ 高质量、长视频 高清视频生成
Moments in Time 1M videos 变化 3秒事件片段 短视频生成
HowTo100M 136M clips 变化 教学视频 程序性视频生成

数据集的深度剖析

  1. UCF-101:视频生成的MNIST

尽管规模较小,UCF-101仍然是评估新方法的重要基准。它包含101类人类动作,每类约100个视频。其价值在于:

  • 类别平衡,便于控制实验
  • 动作语义清晰,易于评估
  • 计算需求适中,适合快速迭代
  1. Kinetics系列:规模与多样性的平衡

Kinetics-400/600/700提供了更大规模和更高多样性:

  • 覆盖日常生活的各种动作
  • 包含复杂的人-物交互
  • 视频来源多样(YouTube)

挑战:视频质量不一,需要仔细的预处理。

  1. WebVid-10M:文本监督的突破

第一个大规模文本-视频数据集,开启了文本到视频生成的新纪元:

  • 自动收集的alt-text描述
  • 涵盖广泛的主题和风格
  • 弱监督但规模巨大

局限:文本描述质量参差,常常过于简短或不准确。

  1. HD-VILA-100M:质量的新标准

专门为高质量视频生成设计:

  • 严格的质量筛选(运动平滑性、分辨率、美学)
  • 更长的视频片段(10-60秒)
  • 多模态标注(文本、音频、动作)

数据预处理的艺术

原始视频数据需要经过精心的预处理才能用于训练:

  1. 时间采样策略: - 固定帧率采样:保持时间一致性 - 自适应采样:根据运动强度调整 - 关键帧采样:捕获重要时刻

  2. 空间处理: - 中心裁剪 vs. 随机裁剪 - 保持宽高比 vs. 强制正方形 - 多尺度训练策略

  3. 质量控制: - 场景切换检测和过滤 - 运动模糊和压缩伪影检测 - 美学质量评分

评估指标的多维度视角

评估生成视频的质量需要从多个角度考虑:

  1. 视觉质量指标
  • FVD (Fréchet Video Distance): $$\text{FVD} = |\mu_r - \mu_g|^2 + \text{Tr}(\Sigma_r + \Sigma_g - 2(\Sigma_r\Sigma_g)^{1/2})$$ 其中$\mu_r, \Sigma_r$和$\mu_g, \Sigma_g$分别是真实和生成视频在I3D特征空间中的均值和协方差。FVD是目前最广泛使用的指标,但它主要关注分布层面的相似性。

  • LPIPS-T (Temporal LPIPS): $$\text{LPIPS-T} = \frac{1}{T-1}\sum_{t=1}^{T-1} \text{LPIPS}(x_t, x_{t+1})$$ 衡量时间一致性,值越小表示帧间变化越平滑。

  • PSNR/SSIM的时序扩展: 传统图像质量指标的帧平均版本,提供像素级的质量评估。

  1. 运动质量指标
  • Motion Consistency Score: 通过光流估计评估运动的连贯性: $$\text{MCS} = \exp(-\frac{1}{T-2}\sum_{t=1}^{T-2}|F_{t \to t+1} \circ F_{t+1 \to t+2} - F_{t \to t+2}|)$$ 其中$F_{i \to j}$表示从帧$i$到帧$j$的光流,$\circ$表示光流的复合。

  • Action Recognition Accuracy: 使用预训练的动作识别模型评估生成视频的动作可识别性。

  1. 语义一致性指标
  • CLIP-SIM (时序版本): $$\text{CLIP-SIM} = \frac{1}{T}\sum_{t=1}^{T} \cos(\text{CLIP}_\text{img}(x_t), \text{CLIP}_\text{text}(c))$$ 评估生成视频与文本条件的语义对齐。

  • VQA Score: 使用视频问答模型评估生成内容的语义正确性。

  1. 人类评估

尽管自动指标很有用,人类评估仍然是金标准:

  • MOS (Mean Opinion Score):整体质量评分
  • 时序一致性评分:专门评估时间连贯性
  • 真实度评分:与真实视频的可区分性
  • 条件一致性评分:与输入条件的匹配程度
**练习 11.1:分析视频生成的挑战**

深入理解视频生成的独特挑战。

  1. 时序建模实验: - 实现简单的帧插值基线(如线性插值、光流warp) - 测试不同的时序一致性损失(L2、感知损失、对抗损失) - 分析失败案例(闪烁、漂移、物体消失等) - 提示:使用torch.nn.functional.grid_sample实现光流warp

  2. 内存优化探索: - 比较不同的视频表示(RGB vs 光流 vs 潜在编码) - 实现梯度检查点(torch.utils.checkpoint)减少内存 - 测试混合精度训练效果(torch.cuda.amp) - 量化不同策略的内存使用和训练速度

  3. 运动分析: - 可视化不同类型的运动模式(使用光流可视化) - 实现运动分解(全局运动估计 + 局部运动残差) - 研究运动先验的作用(平滑性、刚性约束等) - 尝试:使用RAFT或FlowNet2估计光流

  4. 数据集构建: - 设计视频质量筛选pipeline(场景切换检测、质量评分) - 实现高效的视频预处理(并行化、缓存策略) - 创建专门的评测基准(定义任务、收集数据、设计指标) - 工具推荐:ffmpeg-pythoncv2decord

11.1.5 视频扩散的独特机遇

1. 强大的时序先验

  • 物理规律(重力、惯性)
  • 因果关系
  • 周期性模式

2. 多模态信息

  • 视觉+音频同步
  • 文本描述的时序结构
  • 动作标签序列

3. 分层表示

视频的分层结构允许我们在不同粒度上建模:

  • 像素级:原始RGB值,最细粒度的表示 $$\mathbf{V}_{\text{pixel}} \in \mathbb{R}^{T \times H \times W \times 3}$$

  • 特征级:通过卷积或Transformer提取的中层特征 $$\mathbf{F} = f_{\text{encoder}}(\mathbf{V}_{\text{pixel}})$$ 其中$f_{\text{encoder}}$可以是预训练的视觉编码器(如CLIP、DINO)

  • 语义级:场景、对象、动作的高层概念 $$\mathbf{S} = \{\text{objects}, \text{actions}, \text{scenes}\}$$ 通过检测器和分类器获得

  • 结构级:视频的叙事结构、事件序列 $$\mathbf{E} = \{e_1 \to e_2 \to ... \to e_n\}$$ 表示视频中的事件流

这种分层表示允许我们在适当的抽象层次上施加约束和进行控制。例如,可以在语义级确保动作的合理性,在特征级保持视觉一致性,在像素级优化细节质量。

🌟 前沿思考:视频理解与生成的统一
视频理解模型(如VideoMAE)的表示能否直接用于生成?如何设计既能理解又能生成的统一架构?

11.1.6 技术路线选择

主要技术路线对比

  1. 直接3D扩散: - 优点:端到端建模 - 缺点:计算量巨大

  2. 级联生成: - 优点:分而治之,易于控制 - 缺点:误差累积

  3. 潜在空间扩散: - 优点:高效 - 缺点:需要好的视频编码器

  4. 混合方法: 结合多种方法的优势,根据不同阶段使用不同策略:

  • 关键帧生成 + 插值:先生成稀疏的关键帧,然后通过插值或条件生成填充中间帧。这种方法可以确保长程一致性,同时降低计算负担。

  • 低分辨率时序 + 高分辨率空间:在低分辨率下建模完整的时序动态,然后通过超分辨率网络提升每帧的质量。这利用了运动信息主要存在于低频的特性。

  • 潜在动态 + 像素细化:在压缩的潜在空间中建模视频的主要动态,然后通过解码器恢复像素级细节。这种方法特别适合长视频生成。

选择合适的技术路线需要考虑:

  • 应用场景:实时 vs 离线,短视频 vs 长视频
  • 质量要求:分辨率、帧率、视觉保真度
  • 计算资源:GPU内存、推理时间限制
  • 控制需求:所需的条件类型和控制粒度

接下来,我们将深入探讨具体的模型架构设计...

11.2 时序扩散模型架构

11.2.1 3D U-Net与因子化卷积

将2D U-Net扩展到3D是最直接的方法,但需要仔细设计以控制参数量:

完整3D卷积

完整的3D卷积同时在空间和时间维度上操作,使用三维卷积核: $$y_{t,h,w} = \sum_{t'=-k_t}^{k_t} \sum_{h'=-k_h}^{k_h} \sum_{w'=-k_w}^{k_w} w_{t',h',w'} \cdot x_{t+t',h+h',w+w'}$$ 其中$(k_t, k_h, k_w)$分别是时间、高度和宽度方向的卷积核大小。典型配置使用$(3, 3, 3)$的卷积核。

3D卷积的特点:

  • 参数量:$C_{in} \times C_{out} \times k_t \times k_h \times k_w$
  • 计算复杂度:$O(T \times H \times W \times C_{in} \times C_{out} \times k_t \times k_h \times k_w)$
  • 感受野:时空同时扩展,能够捕获复杂的时空模式

在实现时,通常使用torch.nn.Conv3d,并配合适当的padding策略保持时空维度。

因子化卷积(更高效)

为了减少参数量和计算成本,可以将3D卷积分解为空间卷积和时间卷积的组合: $$\text{Factorized3D} = \text{Conv2D}_{\text{spatial}} \circ \text{Conv1D}_{\text{temporal}}$$ 具体来说:

  1. 首先应用2D空间卷积:对每个时间步独立处理 $$h_t = \text{Conv2D}(x_t), \quad \forall t \in [1, T]$$

  2. 然后应用1D时间卷积:沿时间轴聚合信息 $$y_{t,h,w} = \sum_{t'=-k_t}^{k_t} w_{t'} \cdot h_{t+t',h,w}$$ 这种分解的优势:

  • 参数量减少:从$O(k_t k_h k_w)$降到$O(k_h k_w + k_t)$
  • 计算效率提升:可以并行处理空间维度
  • 灵活性:可以独立调整空间和时间的建模能力

伪3D卷积(Pseudo-3D)

伪3D(P3D)进一步优化了因子化策略,通过残差连接保持信息流: $$\text{P3D}(x) = \text{Conv1D}_t(\text{Conv2D}_s(x)) + \text{Conv2D}_s(x)$$ 这种设计的核心思想是:

  • 空间路径:保持高分辨率的空间信息
  • 时间路径:建模时序动态
  • 残差连接:允许模型自适应地选择需要的时序建模程度

变体包括:

  • P3D-A:串行结构,先空间后时间
  • P3D-B:并行结构,空间和时间分支独立处理后融合
  • P3D-C:瓶颈结构,使用1×1卷积降维

💡 设计权衡:计算效率 vs 表达能力

  • 完整3D:最强表达力,计算量 O(k³)
  • 因子化:平衡选择,计算量 O(k² + k)
  • 伪3D:最高效,但时空交互受限

11.2.2 时空注意力机制

注意力在视频模型中至关重要,但需要精心设计以控制复杂度:

全时空注意力(计算密集)

全时空注意力将所有时空位置视为一个序列,计算每个位置与所有其他位置的注意力: $$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$ 其中序列长度为$L = T \times H \times W$。具体步骤:

  1. 展平时空维度:将输入从$[B, T, C, H, W]$重塑为$[B, T \times H \times W, C]$

  2. 计算注意力: - Query: $Q = xW_Q$,维度$[B, L, d_k]$ - Key: $K = xW_K$,维度$[B, L, d_k]$
    - Value: $V = xW_V$,维度$[B, L, d_v]$

  3. 注意力权重:$A_{ij} = \frac{\exp(q_i \cdot k_j / \sqrt{d_k})}{\sum_k \exp(q_i \cdot k_k / \sqrt{d_k})}$

计算复杂度为$O(L^2 \cdot d) = O((THW)^2 \cdot d)$,对于典型的视频尺寸(如16×256×256)是不可行的。

分解的时空注意力(高效)

将时空注意力分解为独立的空间注意力和时间注意力,大幅降低计算复杂度:

  1. 空间注意力(在每个时间步内): $$\text{SpatialAttn}(x_t) = \text{Attention}(x_t, x_t, x_t)$$ 其中$x_t \in \mathbb{R}^{H \times W \times C}$是第$t$帧

  2. 时间注意力(跨时间步): $$\text{TemporalAttn}(x_{:,h,w}) = \text{Attention}(x_{:,h,w}, x_{:,h,w}, x_{:,h,w})$$ 其中$x_{:,h,w} \in \mathbb{R}^{T \times C}$是位置$(h,w)$的时间序列

  3. 组合策略: - 串行:$\text{Output} = \text{TemporalAttn}(\text{SpatialAttn}(x))$ - 并行:$\text{Output} = \text{SpatialAttn}(x) + \text{TemporalAttn}(x)$ - 交错:在不同层交替使用空间和时间注意力

计算复杂度降低到$O(T \cdot (HW)^2 + HW \cdot T^2)$,当$T \ll HW$时效率显著提升。

分块时空注意力(内存友好)

将视频分成不重叠或部分重叠的时空块,在块内计算注意力:

  1. 时空分块: - 将视频分成大小为$(T_b, H_b, W_b)$的块 - 块的数量:$N_b = \lceil T/T_b \rceil \times \lceil H/H_b \rceil \times \lceil W/W_b \rceil$

  2. 块内注意力: $$\text{BlockAttn}(x_{\text{block}}) = \text{Attention}(x_{\text{block}}, x_{\text{block}}, x_{\text{block}})$$

  3. 块间信息传递: - 重叠块:相邻块有$(T_o, H_o, W_o)$的重叠区域 - 全局token:每个块额外包含少量全局token用于长程依赖 - 层次化:在不同分辨率上使用不同大小的块

优势:

  • 内存使用从$O(L^2)$降到$O(B_s^2 \times N_b)$,其中$B_s = T_b \times H_b \times W_b$
  • 可以并行处理不同的块
  • 通过调整块大小平衡效率和表达能力

🔬 研究方向:自适应注意力模式
能否学习数据相关的注意力模式?例如,快速运动区域使用密集时间注意力,静态区域使用稀疏注意力。

11.2.3 帧间信息传播

确保信息在帧间有效流动是关键:

循环连接

循环神经网络(RNN)风格的连接可以有效地传播时序信息:

  1. 前向循环: $$h_t = f(x_t, h_{t-1})$$ 其中$h_t$是时刻$t$的隐藏状态,$f$是循环单元(如LSTM、GRU或简单的线性层)

  2. ConvLSTM/ConvGRU: 将循环单元中的全连接操作替换为卷积,保持空间结构:

对于ConvLSTM: $$\begin{align} i_t &= \sigma(W_{xi} * x_t + W_{hi} * h_{t-1} + b_i) \\ f_t &= \sigma(W_{xf} * x_t + W_{hf} * h_{t-1} + b_f) \\ o_t &= \sigma(W_{xo} * x_t + W_{ho} * h_{t-1} + b_o) \\ g_t &= \tanh(W_{xg} * x_t + W_{hg} * h_{t-1} + b_g) \\ c_t &= f_t \odot c_{t-1} + i_t \odot g_t \\ h_t &= o_t \odot \tanh(c_t) \end{align}$$ 其中$*$表示卷积操作,$\odot$表示逐元素乘法

  1. 时序残差连接: $$h_t = x_t + \alpha \cdot g(h_{t-1})$$ 其中$\alpha$是可学习的门控参数,$g$是变换函数

双向传播

双向处理可以利用未来帧的信息,提高生成质量:

  1. 双向RNN结构: - 前向:$\overrightarrow{h}_t = f_{\rightarrow}(x_t, \overrightarrow{h}_{t-1})$ - 后向:$\overleftarrow{h}_t = f_{\leftarrow}(x_t, \overleftarrow{h}_{t+1})$ - 融合:$h_t = g([\overrightarrow{h}_t; \overleftarrow{h}_t])$

  2. 时序自注意力(无方向性): 使用掩码控制信息流向:

  • 因果掩码:只允许访问过去信息
  • 双向掩码:可以访问所有时间步
  • 局部窗口:限制在时间窗口内
  1. 层次化双向传播: - 低层:使用因果连接,保证生成的自回归性 - 高层:使用双向连接,提高全局一致性 - 通过这种设计平衡生成质量和推理效率
**练习 11.2:设计高效的视频架构**

探索不同的架构设计选择。

  1. 架构比较: - 实现3种不同的3D卷积变体 - 比较参数量、FLOPs和内存使用 - 在小数据集上测试性能

  2. 注意力优化: - 实现稀疏注意力模式 - 测试不同的分解策略 - 分析注意力图的时空模式

  3. 信息流分析: - 可视化特征在时间维度的传播 - 测量有效感受野 - 识别信息瓶颈

  4. 混合架构设计: - 结合CNN和Transformer的优势 - 设计自适应的计算分配 - 探索早期融合vs晚期融合

11.2.4 分层时序建模

不同时间尺度需要不同的处理策略。视频中的运动存在天然的层次结构:快速的局部运动(如树叶摆动)、中等速度的对象运动(如人行走)、缓慢的全局变化(如光照变化)。有效建模这种多尺度时序结构是视频生成的关键。

多尺度时间分解

视频的时序信息可以在多个尺度上分解和建模:

  1. 金字塔时序结构: 在不同的网络深度使用不同的时间分辨率。底层处理高时间分辨率捕获细节运动,高层处理低时间分辨率建模长程依赖。

典型的金字塔结构:

  • 第1-2层:全时间分辨率(所有帧)
  • 第3-4层:1/2时间分辨率(隔帧采样)
  • 第5-6层:1/4时间分辨率(每4帧采样)
  • 第7-8层:1/8时间分辨率(每8帧采样)

这种设计的优势:

  • 计算效率:高层的计算量随时间分辨率降低而减少
  • 感受野扩展:在不增加层数的情况下扩大时间感受野
  • 多尺度特征:自然地捕获不同速度的运动模式
  1. 时间频率分解: 使用时间域的傅里叶变换或小波变换,将视频分解为不同频率成分: $$x(t) = \sum_{k} a_k \cos(2\pi f_k t) + b_k \sin(2\pi f_k t)$$
  • 低频成分:对应缓慢的全局变化(场景光照、相机运动)
  • 中频成分:对应主要的对象运动
  • 高频成分:对应快速的局部变化(纹理振动、噪声)

不同频率成分可以用不同的网络容量建模,实现计算资源的优化分配。

  1. 层次化时间注意力: 设计多个注意力头,每个关注不同的时间尺度:
  • 局部头:注意力窗口为3-5帧,捕获短程运动连续性
  • 中程头:注意力窗口为8-16帧,建模动作序列
  • 全局头:覆盖整个视频,维持长程一致性

通过学习的门控机制自适应地组合不同尺度的信息: $$h = \sum_{s \in \{local, medium, global\}} g_s \cdot h_s$$ 其中$g_s$是可学习的门控权重。

时序递归与跳跃连接

为了有效传播不同时间尺度的信息,需要设计合适的连接模式:

  1. 多尺度跳跃连接: 不仅在相邻时间步之间传递信息,还建立跨越多个时间步的直接连接: $$h_t = f(x_t, h_{t-1}, h_{t-2}, h_{t-4}, h_{t-8})$$ 这种设计允许:
  • 快速传播长程信息
  • 减少梯度消失问题
  • 灵活建模不同速度的运动
  1. 时序残差网络: 在时间维度上应用残差连接,类似于ResNet在空间维度的设计: $$h_t = x_t + F(x_t, \{h_{t-k}\}_{k=1}^K)$$ 其中$F$是时序变换函数,$K$是时间窗口大小。

  2. 门控时序传播: 使用门控机制控制信息在时间维度的流动: $$\begin{align} r_t &= \sigma(W_r [x_t, h_{t-1}]) \quad \text{(重置门)} \\ z_t &= \sigma(W_z [x_t, h_{t-1}]) \quad \text{(更新门)} \\ \tilde{h}_t &= \tanh(W_h [x_t, r_t \odot h_{t-1}]) \\ h_t &= z_t \odot h_{t-1} + (1-z_t) \odot \tilde{h}_t \end{align}$$ 门控机制允许模型自适应地决定保留多少历史信息。

自适应时间采样

不是所有视频片段都需要相同的时间分辨率。自适应采样可以提高效率:

  1. 基于运动强度的采样: 计算相邻帧之间的运动强度(如光流幅度),在运动剧烈的区域使用更密集的采样: $$p(t) = \frac{\exp(\alpha \cdot m_t)}{\sum_{t'} \exp(\alpha \cdot m_{t'})}$$ 其中$m_t$是时刻$t$的运动强度,$p(t)$是采样概率。

  2. 学习式采样: 训练一个轻量级网络预测每个时间位置的重要性分数,基于分数进行采样。这可以通过强化学习或可微分采样实现。

  3. 内容感知的时间聚合: 对于静态或缓慢变化的区域,可以在时间维度上共享计算: $$h_{t:t+k} = f_{shared}(x_{t:t+k}) \quad \text{if } \text{motion}(t:t+k) < \theta$$ 时间一致性保证

分层建模需要特别注意保持时间一致性:

  1. 多尺度时序损失: 在不同时间尺度上计算一致性损失: $$\mathcal{L}_{temporal} = \sum_{s \in scales} \lambda_s \sum_{t} |f_s(x_t) - f_s(x_{t+s})|^2$$ 其中$f_s$是在尺度$s$上的特征提取器。

  2. 层次化正则化: 对不同层施加不同强度的时序正则化,底层强调局部平滑,高层强调全局一致。

  3. 跨尺度特征对齐: 确保不同时间尺度提取的特征在语义上一致,通过特征对齐损失实现: $$\mathcal{L}_{align} = \sum_{s_1, s_2} |\mathbb{E}[f_{s_1}(x)] - \mathbb{E}[f_{s_2}(x)]|^2$$

11.2.5 Video DiT架构

将DiT扩展到视频领域代表了视频生成的最新发展方向。Video DiT继承了DiT在图像生成中展现的优异扩展性,同时需要解决视频特有的时序建模挑战。

从DiT到Video DiT的演进

DiT(Diffusion Transformer)在图像生成中的成功启发了视频领域的探索。关键的适配包括:

  1. 时空patch化: 将视频分解为时空patches是Video DiT的基础。不同于图像的2D patches,视频需要3D patches: $$\text{Video} \in \mathbb{R}^{T \times H \times W \times C} \rightarrow \text{Patches} \in \mathbb{R}^{N \times D}$$ 其中$N = \frac{T}{p_t} \times \frac{H}{p_h} \times \frac{W}{p_w}$,$(p_t, p_h, p_w)$是patch大小。

常见的patch策略:

  • 立方体patches:$(p_t, p_h, p_w) = (4, 16, 16)$,每个patch包含4帧
  • 时间分解patches:$(p_t, p_h, p_w) = (1, 16, 16)$,保持时间分辨率
  • 自适应patches:根据运动强度动态调整patch大小
  1. 位置编码的扩展: Video DiT需要同时编码空间和时间位置: $$PE(t, h, w) = PE_{temporal}(t) + PE_{spatial}(h, w)$$ 时间位置编码通常使用:
  • 绝对位置编码:为每个时间步分配固定的编码
  • 相对位置编码:编码时间步之间的相对距离
  • 周期性编码:适合处理循环或周期性运动
  1. 注意力机制的适配: 全时空注意力的计算复杂度是$O((T \cdot H \cdot W)^2)$,实际中需要优化:
  • 因子化注意力:交替进行空间和时间注意力
  • 窗口注意力:在局部时空窗口内计算注意力
  • 轴向注意力:沿着特定轴(时间、高度、宽度)计算

Video DiT的核心组件

  1. 时空Transformer块: 每个块包含多个子层,处理不同方面的信息: $$\begin{align} h^{(1)} &= h^{(0)} + \text{SpatialAttn}(\text{LN}(h^{(0)})) \\ h^{(2)} &= h^{(1)} + \text{TemporalAttn}(\text{LN}(h^{(1)})) \\ h^{(3)} &= h^{(2)} + \text{FFN}(\text{LN}(h^{(2)})) \end{align}$$ 这种设计允许模型分别处理空间和时间关系,同时保持计算效率。

  2. 条件机制: Video DiT通过多种方式注入条件信息:

  • 自适应层归一化(AdaLN):根据时间步和条件调制归一化参数 $$\text{AdaLN}(h, c, t) = \gamma(c, t) \odot \text{Normalize}(h) + \beta(c, t)$$

  • 交叉注意力:与文本或其他条件信息进行交叉注意力 $$h = h + \text{CrossAttn}(h, c_{text})$$

  • 条件偏置:直接将条件信息作为偏置项加入 $$h = h + f_{bias}(c)$$

  1. 时间感知的前馈网络: 标准的FFN可以扩展为时间感知版本: $$\text{T-FFN}(x) = W_2 \cdot \text{GELU}(W_1 \cdot x + b_1) + b_2$$ 其中权重$W_1, W_2$可以是时间相关的,允许不同时间步使用不同的变换。

架构变体与优化

  1. 分层Video DiT: 使用不同分辨率的特征图,类似U-Net的设计:
  • 编码器路径:逐步降低空间分辨率,增加通道数
  • 瓶颈层:在低分辨率下进行主要的时空建模
  • 解码器路径:恢复空间分辨率,保持时间一致性
  1. 混合架构: 结合CNN和Transformer的优势:
  • 底层:使用3D卷积处理局部时空模式
  • 中层:使用Transformer建模长程依赖
  • 顶层:使用轻量级卷积恢复细节
  1. 稀疏Video DiT: 通过稀疏化减少计算量:
  • Token剪枝:动态移除不重要的时空tokens
  • 注意力稀疏化:只计算最相关的注意力连接
  • 混合精度:对不同组件使用不同精度

扩展性分析

Video DiT的一个关键优势是其优异的扩展性:

  1. 模型规模扩展: 研究表明,Video DiT遵循类似图像DiT的扩展定律: $$\text{Loss} \propto C^{-\alpha} \cdot N^{-\beta} \cdot D^{-\gamma}$$ 其中$C$是计算量,$N$是参数量,$D$是数据量,$\alpha, \beta, \gamma$是扩展指数。

  2. 数据扩展: Video DiT可以有效利用大规模视频数据:

  • 从数百万到数十亿视频片段
  • 多样化的视频源(电影、监控、用户生成内容)
  • 多模态数据(视频+文本+音频)
  1. 计算扩展: 通过分布式训练技术扩展到数千个GPU:
  • 数据并行:不同GPU处理不同批次
  • 模型并行:将模型分割到多个GPU
  • 流水线并行:将不同层分配到不同GPU

性能优化技术

  1. Flash Attention适配: 将Flash Attention扩展到3D注意力,显著减少内存使用: $$\text{Memory} = O(\sqrt{N}) \text{ instead of } O(N)$$

  2. 梯度累积与检查点: - 时间维度的梯度累积,减少批次大小需求 - 选择性激活检查点,平衡内存和计算

  3. 混合训练策略: - 先在低分辨率训练,逐步增加分辨率 - 使用知识蒸馏从大模型训练小模型 - 课程学习:从简单到复杂的视频

🌟 前沿探索:视频生成的扩展定律
DiT证明了图像生成的扩展定律。视频生成是否有类似规律?时间维度如何影响扩展?这是开放的研究问题。

11.2.6 轻量级视频架构

对于实时或移动应用,需要更轻量的设计。轻量级视频架构的目标是在保持生成质量的同时,大幅降低计算和内存需求,使视频生成能够在资源受限的环境中运行。

设计原则与权衡

轻量级架构设计需要在多个维度上进行权衡:

  1. 质量vs速度: - 降低模型容量会影响生成质量 - 需要找到最优的质量-效率平衡点 - 通过架构创新而非简单缩放来提升效率

  2. 通用性vs专用性: - 专用模型(如只生成人脸视频)可以更高效 - 通用模型需要更多容量处理多样化内容 - 可以通过模块化设计实现灵活性

  3. 延迟vs吞吐量: - 实时应用关注单帧延迟 - 批处理应用关注整体吞吐量 - 不同优化策略适用于不同场景

核心轻量化技术

  1. 深度可分离时空卷积: 将标准3D卷积分解为深度卷积和逐点卷积: $$\begin{align} \text{Standard 3D Conv}: & \quad O(k_t \cdot k_h \cdot k_w \cdot C_{in} \cdot C_{out}) \\ \text{Depthwise + Pointwise}: & \quad O(k_t \cdot k_h \cdot k_w \cdot C_{in} + C_{in} \cdot C_{out}) \end{align}$$ 参数量减少比例:$\frac{1}{C_{out}} + \frac{1}{k_t \cdot k_h \cdot k_w}$

  2. 时间池化与上采样: 在时间维度进行下采样处理,然后恢复:

  • 编码阶段:时间池化降低帧率 $$x_{pooled} = \text{MaxPool1D}(x, \text{kernel}=2, \text{stride}=2)$$

  • 处理阶段:在低帧率下进行主要计算

  • 解码阶段:时间上采样恢复帧率 $$x_{upsampled} = \text{Interpolate}(x, \text{scale}=2, \text{mode}='linear')$$

  1. 动态稀疏计算: 根据内容自适应地分配计算资源:
  • 运动检测:识别静态和动态区域 $$M_{t,h,w} = |x_{t,h,w} - x_{t-1,h,w}| > \theta$$

  • 稀疏处理:只在动态区域进行完整计算 $$y_{t,h,w} = \begin{cases} f_{full}(x_{t,h,w}) & \text{if } M_{t,h,w} = 1 \\ f_{light}(x_{t,h,w}) & \text{otherwise} \end{cases}$$

  • 自适应精度:动态区域使用高精度,静态区域使用低精度

高效架构设计

  1. 共享Backbone + 轻量时间模块

架构组成:

  • 共享2D Backbone:处理每帧的空间特征,参数在帧间共享
  • 轻量时间模块:只处理时间维度的交互
  • 特征重用:缓存和重用静态区域的特征

优势:

  • 大部分参数(2D backbone)可以重用
  • 时间模块可以很轻量(如1D卷积)
  • 易于从预训练的图像模型初始化
  1. 渐进式生成

分阶段生成策略:

  • 关键帧生成:先生成稀疏的关键帧(如每8帧)
  • 粗粒度插值:快速生成中间帧的低频信息
  • 细节增强:选择性地增强重要区域的细节

计算分配:

  • 关键帧:60%计算资源
  • 插值:30%计算资源
  • 增强:10%计算资源
  1. 模型压缩技术
  • 量化:将权重和激活从FP32降到INT8或更低 $$w_{quantized} = \text{round}(w \cdot s) / s$$ 其中$s$是量化尺度

  • 剪枝:移除不重要的连接或通道

    • 结构化剪枝:移除整个通道或层
    • 非结构化剪枝:移除单个权重
  • 知识蒸馏:从大模型学习 $$\mathcal{L}_{distill} = \alpha \mathcal{L}_{task} + (1-\alpha) \mathcal{L}_{KD}$$ 其中$\mathcal{L}_{KD}$是与教师模型输出的匹配损失

移动端优化

  1. 神经架构搜索(NAS): 自动搜索适合特定硬件的架构:
  • 搜索空间:定义可能的操作和连接
  • 硬件感知:考虑实际延迟而非理论FLOPs
  • 多目标优化:同时优化质量、速度和能耗
  1. 算子融合: 将多个操作融合为单个kernel:
  • Conv-BN-ReLU融合:减少内存访问
  • 注意力融合:将Q、K、V计算融合
  • 自定义CUDA kernel:针对特定模式优化
  1. 边缘-云协同

混合计算架构:

  • 边缘设备:低延迟的轻量处理

    • 运动估计
    • 简单的帧插值
    • 实时预览
  • 云端:高质量的完整生成

    • 复杂的扩散采样
    • 高分辨率细节
    • 多模态融合
  • 自适应切换:根据网络条件和需求动态分配

基准测试与评估

轻量级模型需要全面的评估:

  1. 效率指标: - 实际延迟:在目标硬件上的推理时间 - 内存占用:峰值GPU/内存使用 - 能耗:移动设备上的电池消耗 - 模型大小:存储需求

  2. 质量指标: - FVD degradation:相对于完整模型的质量下降 - 时序一致性:是否保持流畅性 - 用户研究:实际用户的接受度

  3. 应用特定指标: - 首帧延迟:用户等待时间 - 流畅度:帧率稳定性 - 交互响应:用户输入的响应速度

💡 实践建议:架构选择指南

  • 高质量离线生成:使用完整3D架构
  • 实时应用:使用因子化或伪3D
  • 移动设备:使用共享backbone + 轻量时间模块
  • 长视频:使用分层架构避免内存爆炸

11.3 条件控制与运动引导

11.3.1 文本到视频生成

文本条件是视频生成最重要的控制方式:

时序感知的文本编码

传统的文本编码器(如CLIP)主要为静态图像设计,缺乏对时序信息的理解。为了有效地指导视频生成,需要增强文本编码器的时序感知能力:

  1. 时序标记增强: 在文本序列中引入特殊的时序标记,帮助模型理解时间关系: $$\text{Input: "A cat [FIRST] sits, [THEN] stands up, [FINALLY] walks away"}$$ 这些标记通过专门的embedding层编码,提供明确的时序锚点。

  2. 动作感知的注意力机制: 设计专门的注意力头关注动词和时序修饰词: $$\alpha_{verb} = \text{softmax}(\frac{Q_{verb} \cdot K^T}{\sqrt{d}})$$ 其中$Q_{verb}$是专门提取动词特征的查询向量。

  3. 时间锚定编码: 将文本中的时间信息映射到视频的具体时间段: $$t_{anchor} = f_{time}(\text{"in the beginning"}) \rightarrow [0, 0.3T]$$ $$t_{anchor} = f_{time}(\text{"halfway through"}) \rightarrow [0.4T, 0.6T]$$ 这种映射通过学习的时间解析网络实现。

动作词提取与对齐

动作词是视频生成的核心,需要精确提取并与视频时序对齐:

  1. 动作词识别: 使用预训练的语言模型或词性标注器识别动作词:
  • 主要动词:"run", "jump", "dance"
  • 动作短语:"pick up", "sit down", "turn around"
  • 持续性标记:"continuously", "repeatedly", "gradually"
  1. 动作时序建模: 每个动作词关联一个时间分布: $$p(t|\text{action}) = \mathcal{N}(\mu_{action}, \sigma_{action}^2)$$ 其中$\mu_{action}$表示动作的中心时刻,$\sigma_{action}$表示持续时间。

  2. 动作转换序列: 多个动作之间的转换通过转移概率建模: $$P(a_2|a_1) = \text{TransitionNet}(\text{embed}(a_1), \text{embed}(a_2))$$ 这帮助生成流畅的动作序列。

  3. 动作强度调制: 修饰词调整动作的执行方式:

  • "slowly" → 降低运动速度,增加持续时间
  • "violently" → 增加运动幅度,添加抖动
  • "gracefully" → 平滑运动轨迹,减少突变

💡 关键技巧:时序提示工程
有效的视频生成提示需要包含:

  • 明确的时序词汇("首先"、"然后"、"最后")
  • 动作的持续时间("缓慢地"、"快速地")
  • 运动方向("从左到右"、"向上")

11.3.2 图像动画化

将静态图像转换为动态视频:

图像编码与运动预测

从单张图像生成视频需要推断可能的运动模式。这涉及理解图像内容并预测合理的动态:

  1. 深度感知编码: 提取图像的多层次特征,包括:
  • 对象级特征:使用预训练的检测器(如DETR)识别可动对象 $$\mathbf{f}_{obj} = \text{ObjectEncoder}(\text{image})$$

  • 场景级特征:理解整体场景类型(室内/室外、静态/动态) $$\mathbf{f}_{scene} = \text{SceneEncoder}(\text{image})$$

  • 纹理级特征:捕获可能暗示运动的视觉线索(如模糊、方向性纹理) $$\mathbf{f}_{texture} = \text{TextureEncoder}(\text{image})$$

  1. 运动可能性预测: 基于图像内容预测可能的运动类型: $$P(\text{motion}|\text{image}) = \text{softmax}(\text{MLP}([\mathbf{f}_{obj}; \mathbf{f}_{scene}; \mathbf{f}_{texture}]))$$ 运动类型包括:
  • 刚体运动(平移、旋转)
  • 形变运动(弹性、流体)
  • 关节运动(人体、动物)
  • 环境运动(风、水、光照变化)
  1. 初始运动场估计: 生成第一帧到第二帧的运动场: $$\mathbf{v}_{init} = \text{FlowDecoder}(\mathbf{f}_{image}, \mathbf{z}_{motion})$$ 其中$\mathbf{z}_{motion}$是采样的运动潜变量,引入随机性。

运动类型分解

将复杂运动分解为基本组件,便于控制和生成:

  1. 全局运动(相机运动): 相机运动影响整个场景: $$\mathbf{v}_{global} = \begin{cases} \text{pan}: & (u, v) = (\alpha, 0) \\ \text{tilt}: & (u, v) = (0, \beta) \\ \text{zoom}: & (u, v) = \gamma(x - c_x, y - c_y) \\ \text{rotate}: & (u, v) = \omega(-y + c_y, x - c_x) \end{cases}$$ 其中$(c_x, c_y)$是图像中心,$\alpha, \beta, \gamma, \omega$是运动参数。

  2. 局部对象运动: 每个对象的独立运动: $$\mathbf{v}_{local}^{(i)} = \mathbf{v}_{translate}^{(i)} + \mathbf{v}_{rotate}^{(i)} + \mathbf{v}_{deform}^{(i)}$$

  • 平移:对象整体移动
  • 旋转:围绕对象中心旋转
  • 形变:非刚性变化(如布料飘动)
  1. 精细纹理运动: 小尺度的动态细节:
  • 水面涟漪:周期性波动模式
  • 树叶摆动:随机但受约束的运动
  • 火焰闪烁:湍流运动模式

这些通过程序化生成或学习的纹理动画网络实现。

  1. 运动合成: 将不同层次的运动组合: $$\mathbf{v}_{final} = \mathbf{v}_{global} + \sum_i M^{(i)} \odot \mathbf{v}_{local}^{(i)} + \lambda \cdot \mathbf{v}_{texture}$$ 其中$M^{(i)}$是第$i$个对象的掩码,$\lambda$控制纹理运动的强度。

🔬 研究挑战:运动的歧义性
同一张图像可能对应多种合理的运动。如何处理这种多模态性?可以使用变分方法或条件流匹配来建模运动分布。

11.3.3 运动轨迹控制

精确控制视频中的运动路径:

轨迹表示与编码

运动轨迹提供了直观而精确的视频控制方式。有效的轨迹表示需要平衡灵活性和计算效率:

  1. 参数化轨迹表示: 使用数学曲线描述运动路径:
  • 贝塞尔曲线:灵活的曲线表示 $$\mathbf{B}(t) = \sum_{i=0}^n \binom{n}{i} (1-t)^{n-i} t^i \mathbf{P}_i$$ 其中$\mathbf{P}_i$是控制点,$t \in [0,1]$是曲线参数

  • B样条曲线:局部控制的平滑曲线 $$\mathbf{S}(t) = \sum_{i} N_{i,k}(t) \mathbf{P}_i$$ 其中$N_{i,k}$是B样条基函数

  • 傅里叶级数:周期性运动 $$\mathbf{F}(t) = \mathbf{a}_0 + \sum_{k=1}^N [\mathbf{a}_k \cos(k\omega t) + \mathbf{b}_k \sin(k\omega t)]$$

  1. 离散点序列表示: 直接指定关键时刻的位置: $$\mathcal{T} = \{(t_i, \mathbf{p}_i) | i = 1, ..., K\}$$ 其中$t_i$是时间戳,$\mathbf{p}_i = (x_i, y_i)$是位置。

优势:

  • 直观的用户交互(拖拽式编辑)
  • 灵活处理不规则运动
  • 易于施加约束(如避障)
  1. 轨迹编码网络: 将轨迹信息融入扩散模型: $$\mathbf{h}_{traj} = \text{TrajectoryEncoder}(\mathcal{T})$$ 编码器设计:
  • 时间卷积:捕获轨迹的局部模式
  • 注意力机制:建模轨迹点之间的关系
  • 位置编码:保留时序信息

稀疏控制点插值

用户通常只提供少量关键点,需要智能插值生成完整轨迹:

  1. 物理感知插值: 考虑物理约束的插值方法:
  • 最小加速度路径:最小化加速度变化 $$\min \int_0^T |\ddot{\mathbf{p}}(t)|^2 dt$$

  • 能量最小化:模拟自然运动 $$\min \int_0^T [\frac{1}{2}m|\dot{\mathbf{p}}(t)|^2 + V(\mathbf{p}(t))] dt$$ 其中$V$是势能函数

  1. 学习式插值: 使用神经网络预测中间点: $$\mathbf{p}_{interp} = \text{InterpolationNet}(\mathbf{p}_{before}, \mathbf{p}_{after}, t_{relative}, \mathbf{c}_{context})$$ 其中:
  • $\mathbf{p}_{before}, \mathbf{p}_{after}$:前后控制点
  • $t_{relative}$:相对时间位置
  • $\mathbf{c}_{context}$:上下文信息(对象类型、场景等)
  1. 多对象轨迹协调: 处理多个对象的轨迹交互:
  • 碰撞避免: $$\mathcal{L}_{collision} = \sum_{i \neq j} \max(0, r_i + r_j - |\mathbf{p}_i(t) - \mathbf{p}_j(t)|)$$ 其中$r_i, r_j$是对象半径

  • 群体行为: $$\mathbf{v}_i = \mathbf{v}_{desired} + \alpha \mathbf{v}_{separation} + \beta \mathbf{v}_{alignment} + \gamma \mathbf{v}_{cohesion}$$ 模拟鸟群、鱼群等集体运动

  1. 轨迹引导的扩散: 在扩散过程中施加轨迹约束: $$\mathbf{x}_t = \text{Denoise}(\mathbf{x}_{t+1}, t, \mathbf{c}_{text}) + \lambda_t \nabla_{\mathbf{x}} \log p(\mathcal{T}|\mathbf{x})$$ 其中第二项是轨迹一致性的梯度引导。
**练习 11.3:实现交互式视频控制**

设计和实现各种视频控制机制。

  1. 文本控制实验: - 实现时序感知的文本编码器 - 测试不同的动作词对齐策略 - 评估生成视频与文本的一致性

  2. 运动轨迹设计: - 实现基于贝塞尔曲线的轨迹 - 支持多对象独立轨迹 - 处理轨迹冲突和遮挡

  3. 交互式编辑: - 实现拖拽式视频编辑 - 支持局部区域的运动控制 - 保持未编辑区域的稳定性

  4. 多模态控制: - 结合文本、轨迹、参考视频 - 设计控制信号的融合策略 - 处理冲突的控制指令

11.3.4 风格与内容解耦

分离视频的内容(什么)和风格(如何):

内容-风格分离的动机

视频中的内容和风格解耦允许更灵活的创作和编辑。内容指“发生了什么”(对象、动作、场景),风格指“看起来怎么样”(视觉美学、色彩、纹理)。

双分支编码器架构

  1. 内容编码器: 提取与风格无关的结构信息: $$\mathbf{z}_{content} = E_{content}(\mathbf{x})$$ 内容编码器关注:
  • 对象身份和位置
  • 运动模式和轨迹
  • 场景布局和深度
  • 时序关系和因果
  1. 风格编码器: 提取视觉风格特征: $$\mathbf{z}_{style} = E_{style}(\mathbf{x})$$ 风格编码器关注:
  • 颜色分布和调色板
  • 纹理模式和笔触
  • 光照氛围和对比度
  • 艺术风格(写实、卡通、油画等)

解耦训练策略

  1. 对抗性解耦: 使用领域判别器确保内容编码不包含风格信息: $$\mathcal{L}_{adv} = -\log D_{style}(\mathbf{z}_{content})$$ 其中$D_{style}$试图从内容编码中预测风格标签。

  2. 交叉重建: 交换不同视频的内容和风格: $$\mathbf{x}_{AB} = G(\mathbf{z}_{content}^A, \mathbf{z}_{style}^B)$$ 重建损失: $$\mathcal{L}_{cross} = |\mathbf{x}_{AB} - \mathbf{x}_B|_{content} + |\mathbf{x}_{AB} - \mathbf{x}_A|_{style}$$

  3. 循环一致性: 确保解耦-重组的可逆性: $$\mathcal{L}_{cycle} = |G(E_{content}(\mathbf{x}), E_{style}(\mathbf{x})) - \mathbf{x}|$$ 时序一致的风格迁移

视频风格迁移面临的最大挑战是保持时间一致性:

  1. 帧间一致性约束: 防止风格在帧间闪烁: $$\mathcal{L}_{temporal} = \sum_t |\mathcal{W}(\mathbf{y}_t, \mathbf{y}_{t+1}) - \mathcal{W}(\mathbf{x}_t, \mathbf{x}_{t+1})|$$ 其中$\mathcal{W}$是光流弯曲函数,$\mathbf{y}$是风格化后的视频。

  2. 长程风格一致性: 使用全局风格编码确保整体一致: $$\mathbf{z}_{style}^{global} = \text{Aggregate}(\{\mathbf{z}_{style}^t\}_{t=1}^T)$$ 聚合方式包括:

  • 平均池化:简单但有效
  • 注意力池化:自适应加权
  • 时序卷积:捕获风格变化
  1. 运动保持风格化: 保持原始运动同时改变视觉风格: $$\mathbf{y}_t = \mathcal{S}(\mathbf{x}_t, \mathbf{z}_{style}) + \lambda \cdot (\mathbf{x}_t - \mathbf{x}_{t-1})$$ 其中$\mathcal{S}$是风格化函数,第二项保持运动信息。

  2. 多尺度风格融合: 在不同空间尺度应用风格:

  • 全局风格:整体色调、氛围
  • 局部风格:纹理、笔触细节
  • 对象级风格:特定对象的风格化

应用场景

  1. 视频艺术化:将普通视频转换为艺术风格
  2. 风格迁移:在保持动作的情况下改变视觉风格
  3. 域适应:将合成数据转换为真实风格
  4. 创意编辑:混合不同视频的内容和风格

11.3.5 细粒度属性控制

控制视频的特定属性:

属性控制的层次结构

视频生成中的细粒度控制需要在多个层次上操作,从全局属性到局部细节:

  1. 全局属性控制: 影响整个视频的属性:
  • 速度控制:调整整体播放速度 $$\mathbf{x}'_t = \mathbf{x}_{\lfloor \alpha \cdot t \rfloor}$$ 其中$\alpha > 1$加速,$\alpha < 1$减速

  • 亮度/对比度:全局色彩调整 $$\mathbf{x}'_{rgb} = \gamma \cdot (\mathbf{x}_{rgb} - 0.5) + 0.5 + \beta$$ 其中$\gamma$控制对比度,$\beta$控制亮度

  • 运动强度:全局运动幅度缩放 $$\mathbf{v}'(t) = \lambda_{motion} \cdot \mathbf{v}(t)$$

  1. 对象级属性: 针对特定对象的控制:
  • 对象速度:独立调整每个对象的运动速度
  • 对象大小:动态缩放特定对象
  • 对象可见性:控制对象的出现和消失时机

通过对象掩码$M^{(i)}$实现精确控制: $$\mathbf{x}'_t = \sum_i M^{(i)}_t \odot f_i(\mathbf{x}_t, \theta^{(i)}) + (1 - \cup_i M^{(i)}_t) \odot \mathbf{x}_t$$

  1. 局部属性编辑: 细粒度的空间-时间区域控制:
  • 局部运动模糊:在高速运动区域添加模糊
  • 局部色彩变化:特定区域的颜色调整
  • 纹理动画:如水面波纹、火焰闪烁

属性解耦表示

为了实现独立的属性控制,需要学习解耦的表示:

  1. 变分属性编码: 使用VAE框架学习解耦表示: $$q(\mathbf{z}|\mathbf{x}) = \prod_k q(\mathbf{z}_k|\mathbf{x})$$ 其中每个$\mathbf{z}_k$对应一个可控属性(速度、颜色、形状等)。

  2. 信息瓶颈: 通过信息论约束促进解耦: $$\mathcal{L}_{IB} = \beta \cdot I(\mathbf{z}_k; \mathbf{x}) - I(\mathbf{z}_k; \mathbf{y}_k)$$ 最小化与输入的互信息,最大化与目标属性的互信息。

  3. 属性特定的损失函数: 为每个属性设计专门的损失:

  • 运动一致性损失:确保运动属性的改变是平滑的
  • 颜色恒定性损失:保持对象颜色在时间上的稳定
  • 形状保持损失:防止不期望的形变

交互式属性调整

提供直观的用户界面进行实时调整:

  1. 滑块控制: 连续属性的实时调整(速度、大小、亮度) $$\mathbf{x}'_t = G(\mathbf{z}_{content}, \{\alpha_k \cdot \mathbf{z}_k\}_{k=1}^K)$$ 其中$\alpha_k \in [0, 2]$是用户控制的缩放因子。

  2. 时间曲线编辑: 属性随时间的变化曲线:

  • 关键帧插值:在特定时刻设置属性值
  • 贝塞尔曲线:平滑的属性过渡
  • 周期函数:循环变化的属性
  1. 语义属性映射: 将高级语义映射到低级控制:
  • "更快" → 增加速度因子
  • "更亮" → 调整亮度参数
  • "更流畅" → 增强运动平滑性

🌟 前沿方向:可组合的视频控制
如何设计一个统一框架,支持任意组合的控制信号(文本+轨迹+风格+属性)?这需要解决控制信号的对齐、融合和冲突解决。

11.3.6 物理约束与真实感

确保生成的运动符合物理规律:

物理约束的重要性

真实感的视频生成需要遵循物理规律。违反物理直觉的运动会立即被观察者察觉,破坏沉浸感。将物理约束集成到扩散模型中是提高生成质量的关键。

基础物理定律的建模

  1. 牛顿运动定律: 物体的运动应遵循基本力学原理:
  • 惯性定律:物体保持匀速直线运动或静止 $$\mathbf{v}_{t+1} = \mathbf{v}_t \quad \text{(无外力时)}$$

  • 力与加速度:$F = ma$ $$\mathbf{a}_t = \frac{\mathbf{F}_t}{m}$$ $$\mathbf{v}_{t+1} = \mathbf{v}_t + \mathbf{a}_t \cdot \Delta t$$

  • 作用与反作用:碰撞时的动量守恒 $$m_1\mathbf{v}_1 + m_2\mathbf{v}_2 = m_1\mathbf{v}'_1 + m_2\mathbf{v}'_2$$

  1. 重力影响: 所有物体都受重力影响: $$\mathbf{p}_{t+1} = \mathbf{p}_t + \mathbf{v}_t \cdot \Delta t + \frac{1}{2}\mathbf{g} \cdot \Delta t^2$$ 其中$\mathbf{g} = (0, -9.8)$ m/s²是重力加速度。

不同物体的下落特性:

  • 重物:快速下落,轨迹接近抛物线
  • 轻物(羽毛、纸片):受空气阻力影响,飘落
  • 气球:可能上升(浮力大于重力)
  1. 碰撞与反弹: 物体碰撞时的行为:
  • 弹性碰撞:能量守恒 $$e = \frac{v'_{separation}}{v_{approach}}$$ 其中$e$是恢复系数(0=完全非弹性,1=完全弹性)

  • 摩擦力:影响滑动和滚动 $$\mathbf{F}_{friction} = -\mu \cdot N \cdot \frac{\mathbf{v}}{|\mathbf{v}|}$$ 软体与流体动力学

  1. 弹性形变: 软体物体的形变遵循胡克定律: $$\mathbf{F} = -k \cdot \Delta \mathbf{x}$$ 应用场景:
  • 布料模拟:悬垂、飘动、褶皱
  • 弹性物体:橡胶球的压缩和恢复
  • 肌肉运动:人体和动物的自然运动
  1. 流体运动: 液体和气体的运动遵循纳维-斯托克斯方程(简化版): $$\frac{\partial \mathbf{v}}{\partial t} + (\mathbf{v} \cdot \nabla)\mathbf{v} = -\frac{1}{\rho}\nabla p + \nu \nabla^2 \mathbf{v} + \mathbf{f}$$ 在实践中,使用简化的涡流模型:
  • 烟雾:上升并扩散
  • 水流:遵循容器形状
  • 火焰:湍流和闪烁

物理感知的损失函数

  1. 运动平滑性损失: 惩罚不自然的加速度变化: $$\mathcal{L}_{smooth} = \sum_t |\mathbf{a}_{t+1} - \mathbf{a}_t|^2$$

  2. 能量守恒损失: 确保系统总能量合理: $$\mathcal{L}_{energy} = \left| E_{t+1} - E_t - W_{external} \right|$$ 其中$E = E_{kinetic} + E_{potential}$,$W_{external}$是外力做功。

  3. 接触约束损失: 防止物体穿透: $$\mathcal{L}_{contact} = \sum_{i,j} \max(0, d_{min} - |\mathbf{p}_i - \mathbf{p}_j|)$$ 其中$d_{min}$是最小允许距离。

物理引导的采样

在扩散过程中施加物理约束:

  1. 梯度引导: 在每个去噪步骤添加物理梯度: $$\mathbf{x}_{t-1} = \mu_\theta(\mathbf{x}_t, t) + \lambda \nabla_{\mathbf{x}} \log p_{physics}(\mathbf{x}_t)$$ 其中$p_{physics}$是物理合理性的概率模型。

  2. 投影方法: 将生成的运动投影到物理可行空间: $$\mathbf{x}'_t = \text{Project}_{physics}(\mathbf{x}_t)$$

投影操作包括:

  • 速度限制:限制最大速度
  • 位置修正:解决穿透问题
  • 动量调整:保持守恒
  1. 多步预测-修正: 交替进行扩散步骤和物理修正:
  • 预测步:使用扩散模型生成
  • 修正步:应用物理约束
  • 迭代直到收敛

学习隐式物理

除了显式约束,模型可以从数据中学习隐式物理:

  1. 物理增强训练: - 使用物理仿真生成训练数据 - 在真实数据上微调 - 混合真实和仿真数据

  2. 物理感知架构: - 在网络中嵌入物理先验 - 使用图神经网络建模物体交互 - 分离运动学和动力学建模

  3. 自监督物理学习: - 预测未来帧作为物理理解的代理任务 - 从视频中学习物体属性(质量、弹性) - 发现潜在的物理规律

通过这些条件控制机制和物理约束,视频扩散模型可以生成高度可控和真实的动态内容。下一节将探讨如何高效地训练和部署这些模型。