← 返回目录 | 第11章 / 共14章 | 下一章 → |
视频生成是扩散模型面临的最具挑战性的任务之一。与静态图像不同,视频需要在时间维度上保持连贯性,同时处理更高维度的数据。本章将深入探讨视频扩散模型的核心技术,从时序建模的基本原理到3D架构设计,再到运动动力学的建模。您将学习如何处理时间一致性、运动模糊、长程依赖等视频特有的挑战,并掌握设计高效视频生成系统的关键技术。通过本章的学习,您将理解Sora、Runway等前沿视频生成模型背后的技术原理。
视频生成代表着生成模型的前沿挑战。不同于静态图像,视频需要在空间和时间两个维度上同时建模复杂的模式。当我们观看一段自然流畅的视频时,大脑会无意识地处理大量的视觉信息:物体的运动轨迹、光影的变化、场景的转换,以及这些元素之间错综复杂的相互作用。对于机器学习模型而言,重现这种自然性是一项艰巨的任务。
视频生成的核心挑战是保持时间上的连贯性。这种连贯性体现在多个层面,每个层面都有其独特的技术难点。
1. 对象持续性
在真实世界中,物体具有持续的身份标识。一个红色的球从画面左边滚到右边,它始终是同一个球。这看似简单的事实,对生成模型来说却充满挑战:
物体身份在帧间保持一致:模型需要理解什么是”同一个物体”。这不仅仅是外观的相似性,更涉及到语义层面的理解。例如,一个人转身后,虽然看到的是背影,但仍然是同一个人。扩散模型需要在潜在空间中编码这种身份信息,并确保在去噪过程中保持稳定。
外观特征(颜色、纹理)稳定:真实物体的颜色和纹理不会随机变化。然而,独立生成每一帧时,模型可能会产生微小的颜色偏差或纹理变化,累积起来就会造成明显的闪烁。这需要在训练时引入专门的损失函数,惩罚帧间的不必要变化。
形状变化符合物理规律:物体的形变应该是连续和合理的。例如,一个弹跳的球在压缩和恢复时应该遵循弹性形变的规律。这要求模型隐式地学习物理世界的约束,或者显式地引入物理先验。
2. 运动连续性
运动是视频的灵魂。流畅自然的运动需要满足多重约束:
轨迹平滑自然:物体的运动路径应该是连续可微的。突然的方向改变或位置跳跃会立即被人眼察觉。在扩散模型中,这通常通过在时间维度上应用平滑性约束来实现。例如,可以使用光流估计来计算相邻帧之间的运动场,并鼓励运动场的平滑性。
速度和加速度合理:不同类型的物体有不同的运动特性。一片羽毛的飘落和一块石头的下落遵循完全不同的动力学规律。模型需要学习这些隐含的物理规律,这可以通过大规模的视频数据训练获得,也可以通过引入物理仿真作为先验知识。
遮挡关系正确:当多个物体相互遮挡时,需要正确处理深度关系和可见性。被遮挡的部分应该在适当的时候消失和重现,且重现时的外观应该与消失前保持一致。这需要模型具有某种形式的3D理解能力。
3. 光照一致性
光照的变化为视频增添了真实感,但也带来了额外的复杂性:
阴影随物体移动:阴影是物体存在的重要视觉线索。当物体移动时,其投射的阴影也应该相应地改变位置和形状。这需要模型理解光源的位置和物体的3D结构。
反射和高光稳定:镜面反射和高光点应该随着视角和物体位置的改变而合理地移动。例如,金属球表面的高光点应该始终指向光源方向。
环境光照渐变:场景中的整体光照可能会缓慢变化(如日落时分),这种变化应该是渐进和全局一致的。所有物体都应该受到相同的光照变化影响。
为了量化这些一致性要求,研究者们设计了各种度量指标。例如,时序稳定性可以通过计算相邻帧之间的感知距离来衡量:
\[\mathcal{L}_{\text{temporal}} = \sum_{t=1}^{T-1} \|\phi(x_t) - \phi(x_{t+1})\|^2\]其中$\phi$是预训练的特征提取器(如VGG网络)。这个损失函数鼓励相邻帧在感知特征空间中保持接近。
💡 关键洞察:时序正则化的重要性
单纯的帧级损失会导致闪烁。必须显式地鼓励时序平滑性,但过度平滑会失去运动细节。平衡是关键。研究表明,结合多尺度的时序损失(像素级、特征级、语义级)能够获得最佳效果。
视频数据的高维特性带来的计算挑战远超静态图像。这不仅仅是简单的线性增长,而是涉及到存储、计算和优化等多个方面的复合难题。
维度爆炸
当我们从图像扩展到视频时,数据维度的增长是惊人的:
[B, C, H, W]
→ 4D张量(批次、通道、高度、宽度)[B, T, C, H, W]
→ 5D张量(增加了时间维度T)让我们通过具体数字来理解这种爆炸性增长。一个256×256的RGB图像需要约200KB存储空间。而一个相同分辨率、持续1秒(24帧)的视频片段则需要约4.8MB。如果我们要生成一个10秒的高清视频(1920×1080),仅原始数据就需要约1.5GB的内存。这还没有考虑模型的中间激活值,后者通常是原始数据的数十倍。
计算复杂度分析
视频扩散模型的计算复杂度在多个层面上超越图像模型:
当T=16(半秒视频)时,时空注意力的计算量是空间注意力的256倍!这使得直接应用全局注意力变得不可行。
3D卷积在时间维度上增加了额外的计算,使得每层的计算量增加k倍(k为时间核大小)。
内存管理策略
面对这些挑战,研究者们开发了多种内存优化技术:
梯度检查点(Gradient Checkpointing): 通过选择性地存储激活值,在前向传播时丢弃部分中间结果,反向传播时重新计算。这可以将内存需求从$O(T)$降低到$O(\sqrt{T})$,代价是增加约30%的计算时间。
混合精度训练: 使用FP16进行大部分计算,仅在必要时使用FP32。这不仅减少50%的内存使用,还能利用现代GPU的Tensor Core加速计算。关键是要正确处理数值稳定性问题。
时间分片处理: 将长视频分割成重叠的短片段,分别处理后融合。例如,将32帧的视频分成4个11帧的片段(3帧重叠),可以显著降低峰值内存使用。
激活值重计算: 对于某些计算密集但内存友好的操作(如LayerNorm),可以选择不存储激活值,而是在反向传播时重新计算。
计算效率优化
除了内存管理,计算效率的优化同样重要:
因子化架构: 将时空建模分解为”空间建模→时间建模→空间建模”的序列。虽然表达能力有所降低,但计算效率提升显著。
🔬 研究线索:高效时空表示
如何设计更高效的时空表示?当前的研究方向包括:
这些方向都在积极探索中,有望在未来实现数量级的效率提升。
运动是区分视频和图像序列的关键要素。有效地表示和建模运动不仅是技术挑战,更触及视觉感知的本质。人类视觉系统对运动极其敏感——我们能够轻易察觉不自然的运动,这使得运动建模成为视频生成的核心难题。
运动的多尺度特性
运动在视频中以多种尺度和形式存在,每种都需要不同的建模策略:
像素级运动:光流与形变场
在最细粒度上,运动表现为像素的位移。光流(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)。
对象级运动:轨迹与变换
真实世界中,我们更多地感知对象而非像素的运动。对象级运动建模需要首先进行实例分割,然后跟踪每个对象的运动轨迹。
对象运动可以分解为几个组成部分:
这种分解允许我们使用参数化模型来紧凑地表示复杂运动。例如,一个弹跳球的运动可以用抛物线轨迹加上周期性的压缩-恢复形变来描述。
场景级运动:相机运动与全局变换
当相机移动时,整个场景会发生协调一致的运动。这种全局运动模式包括:
理解和分离相机运动与对象运动是视频理解的关键挑战。这通常通过估计基础矩阵(Fundamental Matrix)或单应性矩阵(Homography Matrix)来实现。
运动表示方法
不同的应用场景需要不同的运动表示方法:
显式运动表示
直接编码运动信息,如光流场或轨迹:
\[\mathbf{M} = \{\mathbf{v}_{x,y,t} | \mathbf{v} = (u, v) \text{ 是位置 } (x,y) \text{ 在时刻 } t \text{ 的运动向量}\}\]优点:
缺点:
隐式运动表示
通过神经网络学习运动的潜在表示:
\[\mathbf{z}_{\text{motion}} = f_{\text{encode}}(\mathbf{x}_{t-k:t+k})\]其中$f_{\text{encode}}$是一个神经网络,从时间窗口中提取运动特征。
优点:
缺点:
混合表示
结合显式和隐式方法的优点:
\[\mathbf{M}_{\text{hybrid}} = \mathbf{M}_{\text{explicit}} + g(\mathbf{z}_{\text{residual}})\]其中$\mathbf{M}{\text{explicit}}$是估计的光流或轨迹,$g(\mathbf{z}{\text{residual}})$是神经网络预测的残差运动。
运动先验与约束
有效的运动建模需要合适的先验知识:
平滑性先验:自然运动通常是平滑的 \(\mathcal{L}_{\text{smooth}} = \sum_{x,y} \|\nabla u\|^2 + \|\nabla v\|^2\)
刚性约束:刚体的运动保持形状不变 \(\mathcal{L}_{\text{rigid}} = \sum_{i,j} (d_{ij}^{t+1} - d_{ij}^t)^2\) 其中$d_{ij}$是点$i$和$j$之间的距离。
高质量的数据集和合理的评估指标是推动视频生成技术发展的基石。与图像生成相比,视频数据集的构建面临着独特的挑战:数据量巨大、标注困难、质量参差不齐。同时,如何全面评估生成视频的质量也是一个开放的研究问题。
主要数据集概览
视频生成领域的数据集经历了从小规模、特定领域到大规模、通用领域的演进:
数据集 | 规模 | 分辨率 | 特点 | 应用场景 |
---|---|---|---|---|
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 | 变化 | 教学视频 | 程序性视频生成 |
数据集的深度剖析
UCF-101:视频生成的MNIST
尽管规模较小,UCF-101仍然是评估新方法的重要基准。它包含101类人类动作,每类约100个视频。其价值在于:
Kinetics系列:规模与多样性的平衡
Kinetics-400/600/700提供了更大规模和更高多样性:
挑战:视频质量不一,需要仔细的预处理。
WebVid-10M:文本监督的突破
第一个大规模文本-视频数据集,开启了文本到视频生成的新纪元:
局限:文本描述质量参差,常常过于简短或不准确。
HD-VILA-100M:质量的新标准
专门为高质量视频生成设计:
数据预处理的艺术
原始视频数据需要经过精心的预处理才能用于训练:
评估指标的多维度视角
评估生成视频的质量需要从多个角度考虑:
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的时序扩展: 传统图像质量指标的帧平均版本,提供像素级的质量评估。
2. 运动质量指标
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: 使用预训练的动作识别模型评估生成视频的动作可识别性。
3. 语义一致性指标
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: 使用视频问答模型评估生成内容的语义正确性。
4. 人类评估
尽管自动指标很有用,人类评估仍然是金标准:
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)的表示能否直接用于生成?如何设计既能理解又能生成的统一架构?
主要技术路线对比:
混合方法: 结合多种方法的优势,根据不同阶段使用不同策略:
关键帧生成 + 插值:先生成稀疏的关键帧,然后通过插值或条件生成填充中间帧。这种方法可以确保长程一致性,同时降低计算负担。
低分辨率时序 + 高分辨率空间:在低分辨率下建模完整的时序动态,然后通过超分辨率网络提升每帧的质量。这利用了运动信息主要存在于低频的特性。
潜在动态 + 像素细化:在压缩的潜在空间中建模视频的主要动态,然后通过解码器恢复像素级细节。这种方法特别适合长视频生成。
选择合适的技术路线需要考虑:
接下来,我们将深入探讨具体的模型架构设计…
将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卷积的特点:
在实现时,通常使用torch.nn.Conv3d
,并配合适当的padding策略保持时空维度。
因子化卷积(更高效):
为了减少参数量和计算成本,可以将3D卷积分解为空间卷积和时间卷积的组合:
\[\text{Factorized3D} = \text{Conv2D}_{\text{spatial}} \circ \text{Conv1D}_{\text{temporal}}\]具体来说:
首先应用2D空间卷积:对每个时间步独立处理 \(h_t = \text{Conv2D}(x_t), \quad \forall t \in [1, T]\)
然后应用1D时间卷积:沿时间轴聚合信息 \(y_{t,h,w} = \sum_{t'=-k_t}^{k_t} w_{t'} \cdot h_{t+t',h,w}\)
这种分解的优势:
伪3D卷积(Pseudo-3D):
伪3D(P3D)进一步优化了因子化策略,通过残差连接保持信息流:
\[\text{P3D}(x) = \text{Conv1D}_t(\text{Conv2D}_s(x)) + \text{Conv2D}_s(x)\]这种设计的核心思想是:
变体包括:
💡 设计权衡:计算效率 vs 表达能力
注意力在视频模型中至关重要,但需要精心设计以控制复杂度:
全时空注意力(计算密集):
全时空注意力将所有时空位置视为一个序列,计算每个位置与所有其他位置的注意力:
\[\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V\]其中序列长度为$L = T \times H \times W$。具体步骤:
展平时空维度:将输入从$[B, T, C, H, W]$重塑为$[B, T \times H \times W, C]$
计算复杂度为$O(L^2 \cdot d) = O((THW)^2 \cdot d)$,对于典型的视频尺寸(如16×256×256)是不可行的。
分解的时空注意力(高效):
将时空注意力分解为独立的空间注意力和时间注意力,大幅降低计算复杂度:
空间注意力(在每个时间步内): \(\text{SpatialAttn}(x_t) = \text{Attention}(x_t, x_t, x_t)\) 其中$x_t \in \mathbb{R}^{H \times W \times C}$是第$t$帧
时间注意力(跨时间步): \(\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)$的时间序列
组合策略:
计算复杂度降低到$O(T \cdot (HW)^2 + HW \cdot T^2)$,当$T \ll HW$时效率显著提升。
分块时空注意力(内存友好):
将视频分成不重叠或部分重叠的时空块,在块内计算注意力:
块内注意力: \(\text{BlockAttn}(x_{\text{block}}) = \text{Attention}(x_{\text{block}}, x_{\text{block}}, x_{\text{block}})\)
优势:
🔬 研究方向:自适应注意力模式
能否学习数据相关的注意力模式?例如,快速运动区域使用密集时间注意力,静态区域使用稀疏注意力。
确保信息在帧间有效流动是关键:
循环连接:
循环神经网络(RNN)风格的连接可以有效地传播时序信息:
前向循环: \(h_t = f(x_t, h_{t-1})\) 其中$h_t$是时刻$t$的隐藏状态,$f$是循环单元(如LSTM、GRU或简单的线性层)
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$表示逐元素乘法
时序残差连接: \(h_t = x_t + \alpha \cdot g(h_{t-1})\) 其中$\alpha$是可学习的门控参数,$g$是变换函数
双向传播:
双向处理可以利用未来帧的信息,提高生成质量:
不同时间尺度需要不同的处理策略。视频中的运动存在天然的层次结构:快速的局部运动(如树叶摆动)、中等速度的对象运动(如人行走)、缓慢的全局变化(如光照变化)。有效建模这种多尺度时序结构是视频生成的关键。
多尺度时间分解
视频的时序信息可以在多个尺度上分解和建模:
金字塔时序结构: 在不同的网络深度使用不同的时间分辨率。底层处理高时间分辨率捕获细节运动,高层处理低时间分辨率建模长程依赖。
典型的金字塔结构:
这种设计的优势:
时间频率分解: 使用时间域的傅里叶变换或小波变换,将视频分解为不同频率成分:
\[x(t) = \sum_{k} a_k \cos(2\pi f_k t) + b_k \sin(2\pi f_k t)\]不同频率成分可以用不同的网络容量建模,实现计算资源的优化分配。
层次化时间注意力: 设计多个注意力头,每个关注不同的时间尺度:
通过学习的门控机制自适应地组合不同尺度的信息: \(h = \sum_{s \in \{local, medium, global\}} g_s \cdot h_s\) 其中$g_s$是可学习的门控权重。
时序递归与跳跃连接
为了有效传播不同时间尺度的信息,需要设计合适的连接模式:
多尺度跳跃连接: 不仅在相邻时间步之间传递信息,还建立跨越多个时间步的直接连接:
\[h_t = f(x_t, h_{t-1}, h_{t-2}, h_{t-4}, h_{t-8})\]这种设计允许:
时序残差网络: 在时间维度上应用残差连接,类似于ResNet在空间维度的设计:
\[h_t = x_t + F(x_t, \{h_{t-k}\}_{k=1}^K)\]其中$F$是时序变换函数,$K$是时间窗口大小。
门控时序传播: 使用门控机制控制信息在时间维度的流动:
\[\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}\]门控机制允许模型自适应地决定保留多少历史信息。
自适应时间采样
不是所有视频片段都需要相同的时间分辨率。自适应采样可以提高效率:
基于运动强度的采样: 计算相邻帧之间的运动强度(如光流幅度),在运动剧烈的区域使用更密集的采样:
\[p(t) = \frac{\exp(\alpha \cdot m_t)}{\sum_{t'} \exp(\alpha \cdot m_{t'})}\]其中$m_t$是时刻$t$的运动强度,$p(t)$是采样概率。
学习式采样: 训练一个轻量级网络预测每个时间位置的重要性分数,基于分数进行采样。这可以通过强化学习或可微分采样实现。
内容感知的时间聚合: 对于静态或缓慢变化的区域,可以在时间维度上共享计算:
\[h_{t:t+k} = f_{shared}(x_{t:t+k}) \quad \text{if } \text{motion}(t:t+k) < \theta\]时间一致性保证
分层建模需要特别注意保持时间一致性:
多尺度时序损失: 在不同时间尺度上计算一致性损失:
\[\mathcal{L}_{temporal} = \sum_{s \in scales} \lambda_s \sum_{t} \|f_s(x_t) - f_s(x_{t+s})\|^2\]其中$f_s$是在尺度$s$上的特征提取器。
层次化正则化: 对不同层施加不同强度的时序正则化,底层强调局部平滑,高层强调全局一致。
跨尺度特征对齐: 确保不同时间尺度提取的特征在语义上一致,通过特征对齐损失实现:
\[\mathcal{L}_{align} = \sum_{s_1, s_2} \|\mathbb{E}[f_{s_1}(x)] - \mathbb{E}[f_{s_2}(x)]\|^2\]将DiT扩展到视频领域代表了视频生成的最新发展方向。Video DiT继承了DiT在图像生成中展现的优异扩展性,同时需要解决视频特有的时序建模挑战。
从DiT到Video DiT的演进
DiT(Diffusion Transformer)在图像生成中的成功启发了视频领域的探索。关键的适配包括:
时空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策略:
位置编码的扩展: Video DiT需要同时编码空间和时间位置:
\[PE(t, h, w) = PE_{temporal}(t) + PE_{spatial}(h, w)\]时间位置编码通常使用:
注意力机制的适配: 全时空注意力的计算复杂度是$O((T \cdot H \cdot W)^2)$,实际中需要优化:
Video DiT的核心组件
时空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}\]这种设计允许模型分别处理空间和时间关系,同时保持计算效率。
条件机制: 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)\)
时间感知的前馈网络: 标准的FFN可以扩展为时间感知版本:
\[\text{T-FFN}(x) = W_2 \cdot \text{GELU}(W_1 \cdot x + b_1) + b_2\]其中权重$W_1, W_2$可以是时间相关的,允许不同时间步使用不同的变换。
架构变体与优化
分层Video DiT: 使用不同分辨率的特征图,类似U-Net的设计:
混合架构: 结合CNN和Transformer的优势:
稀疏Video DiT: 通过稀疏化减少计算量:
扩展性分析
Video DiT的一个关键优势是其优异的扩展性:
模型规模扩展: 研究表明,Video DiT遵循类似图像DiT的扩展定律:
\[\text{Loss} \propto C^{-\alpha} \cdot N^{-\beta} \cdot D^{-\gamma}\]其中$C$是计算量,$N$是参数量,$D$是数据量,$\alpha, \beta, \gamma$是扩展指数。
性能优化技术
Flash Attention适配: 将Flash Attention扩展到3D注意力,显著减少内存使用:
\[\text{Memory} = O(\sqrt{N}) \text{ instead of } O(N)\]🌟 前沿探索:视频生成的扩展定律
DiT证明了图像生成的扩展定律。视频生成是否有类似规律?时间维度如何影响扩展?这是开放的研究问题。
对于实时或移动应用,需要更轻量的设计。轻量级视频架构的目标是在保持生成质量的同时,大幅降低计算和内存需求,使视频生成能够在资源受限的环境中运行。
设计原则与权衡
轻量级架构设计需要在多个维度上进行权衡:
核心轻量化技术
深度可分离时空卷积: 将标准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}$
时间池化与上采样: 在时间维度进行下采样处理,然后恢复:
编码阶段:时间池化降低帧率 \(x_{pooled} = \text{MaxPool1D}(x, \text{kernel}=2, \text{stride}=2)\)
处理阶段:在低帧率下进行主要计算
解码阶段:时间上采样恢复帧率 \(x_{upsampled} = \text{Interpolate}(x, \text{scale}=2, \text{mode}='linear')\)
动态稀疏计算: 根据内容自适应地分配计算资源:
运动检测:识别静态和动态区域 \(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}\)
自适应精度:动态区域使用高精度,静态区域使用低精度
高效架构设计
共享Backbone + 轻量时间模块:
架构组成:
优势:
渐进式生成:
分阶段生成策略:
计算分配:
模型压缩技术:
量化:将权重和激活从FP32降到INT8或更低 \(w_{quantized} = \text{round}(w \cdot s) / s\) 其中$s$是量化尺度
移动端优化
神经架构搜索(NAS): 自动搜索适合特定硬件的架构:
算子融合: 将多个操作融合为单个kernel:
边缘-云协同:
混合计算架构:
基准测试与评估
轻量级模型需要全面的评估:
💡 实践建议:架构选择指南
文本条件是视频生成最重要的控制方式:
时序感知的文本编码:
传统的文本编码器(如CLIP)主要为静态图像设计,缺乏对时序信息的理解。为了有效地指导视频生成,需要增强文本编码器的时序感知能力:
时序标记增强: 在文本序列中引入特殊的时序标记,帮助模型理解时间关系:
\[\text{Input: "A cat [FIRST] sits, [THEN] stands up, [FINALLY] walks away"}\]这些标记通过专门的embedding层编码,提供明确的时序锚点。
动作感知的注意力机制: 设计专门的注意力头关注动词和时序修饰词:
\[\alpha_{verb} = \text{softmax}(\frac{Q_{verb} \cdot K^T}{\sqrt{d}})\]其中$Q_{verb}$是专门提取动词特征的查询向量。
时间锚定编码: 将文本中的时间信息映射到视频的具体时间段:
\(t_{anchor} = f_{time}(\text{"in the beginning"}) \rightarrow [0, 0.3T]\) \(t_{anchor} = f_{time}(\text{"halfway through"}) \rightarrow [0.4T, 0.6T]\)
这种映射通过学习的时间解析网络实现。
动作词提取与对齐:
动作词是视频生成的核心,需要精确提取并与视频时序对齐:
动作词识别: 使用预训练的语言模型或词性标注器识别动作词:
动作时序建模: 每个动作词关联一个时间分布:
\[p(t|\text{action}) = \mathcal{N}(\mu_{action}, \sigma_{action}^2)\]其中$\mu_{action}$表示动作的中心时刻,$\sigma_{action}$表示持续时间。
动作转换序列: 多个动作之间的转换通过转移概率建模:
\[P(a_2|a_1) = \text{TransitionNet}(\text{embed}(a_1), \text{embed}(a_2))\]这帮助生成流畅的动作序列。
动作强度调制: 修饰词调整动作的执行方式:
💡 关键技巧:时序提示工程
有效的视频生成提示需要包含:
将静态图像转换为动态视频:
图像编码与运动预测:
从单张图像生成视频需要推断可能的运动模式。这涉及理解图像内容并预测合理的动态:
深度感知编码: 提取图像的多层次特征,包括:
对象级特征:使用预训练的检测器(如DETR)识别可动对象 \(\mathbf{f}_{obj} = \text{ObjectEncoder}(\text{image})\)
场景级特征:理解整体场景类型(室内/室外、静态/动态) \(\mathbf{f}_{scene} = \text{SceneEncoder}(\text{image})\)
纹理级特征:捕获可能暗示运动的视觉线索(如模糊、方向性纹理) \(\mathbf{f}_{texture} = \text{TextureEncoder}(\text{image})\)
运动可能性预测: 基于图像内容预测可能的运动类型:
\[P(\text{motion}|\text{image}) = \text{softmax}(\text{MLP}([\mathbf{f}_{obj}; \mathbf{f}_{scene}; \mathbf{f}_{texture}]))\]运动类型包括:
初始运动场估计: 生成第一帧到第二帧的运动场:
\[\mathbf{v}_{init} = \text{FlowDecoder}(\mathbf{f}_{image}, \mathbf{z}_{motion})\]其中$\mathbf{z}_{motion}$是采样的运动潜变量,引入随机性。
运动类型分解:
将复杂运动分解为基本组件,便于控制和生成:
全局运动(相机运动): 相机运动影响整个场景:
\[\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$是运动参数。
局部对象运动: 每个对象的独立运动:
\[\mathbf{v}_{local}^{(i)} = \mathbf{v}_{translate}^{(i)} + \mathbf{v}_{rotate}^{(i)} + \mathbf{v}_{deform}^{(i)}\]精细纹理运动: 小尺度的动态细节:
这些通过程序化生成或学习的纹理动画网络实现。
运动合成: 将不同层次的运动组合:
\[\mathbf{v}_{final} = \mathbf{v}_{global} + \sum_i M^{(i)} \odot \mathbf{v}_{local}^{(i)} + \lambda \cdot \mathbf{v}_{texture}\]其中$M^{(i)}$是第$i$个对象的掩码,$\lambda$控制纹理运动的强度。
🔬 研究挑战:运动的歧义性
同一张图像可能对应多种合理的运动。如何处理这种多模态性?可以使用变分方法或条件流匹配来建模运动分布。
精确控制视频中的运动路径:
轨迹表示与编码:
运动轨迹提供了直观而精确的视频控制方式。有效的轨迹表示需要平衡灵活性和计算效率:
参数化轨迹表示: 使用数学曲线描述运动路径:
贝塞尔曲线:灵活的曲线表示 \(\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)]\)
离散点序列表示: 直接指定关键时刻的位置:
\[\mathcal{T} = \{(t_i, \mathbf{p}_i) | i = 1, ..., K\}\]其中$t_i$是时间戳,$\mathbf{p}_i = (x_i, y_i)$是位置。
优势:
轨迹编码网络: 将轨迹信息融入扩散模型:
\[\mathbf{h}_{traj} = \text{TrajectoryEncoder}(\mathcal{T})\]编码器设计:
稀疏控制点插值:
用户通常只提供少量关键点,需要智能插值生成完整轨迹:
物理感知插值: 考虑物理约束的插值方法:
最小加速度路径:最小化加速度变化 \(\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$是势能函数
学习式插值: 使用神经网络预测中间点:
\[\mathbf{p}_{interp} = \text{InterpolationNet}(\mathbf{p}_{before}, \mathbf{p}_{after}, t_{relative}, \mathbf{c}_{context})\]其中:
多对象轨迹协调: 处理多个对象的轨迹交互:
碰撞避免: \(\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}\) 模拟鸟群、鱼群等集体运动
轨迹引导的扩散: 在扩散过程中施加轨迹约束:
\[\mathbf{x}_t = \text{Denoise}(\mathbf{x}_{t+1}, t, \mathbf{c}_{text}) + \lambda_t \nabla_{\mathbf{x}} \log p(\mathcal{T}|\mathbf{x})\]其中第二项是轨迹一致性的梯度引导。
分离视频的内容(什么)和风格(如何):
内容-风格分离的动机:
视频中的内容和风格解耦允许更灵活的创作和编辑。内容指“发生了什么”(对象、动作、场景),风格指“看起来怎么样”(视觉美学、色彩、纹理)。
双分支编码器架构:
内容编码器: 提取与风格无关的结构信息:
\[\mathbf{z}_{content} = E_{content}(\mathbf{x})\]内容编码器关注:
风格编码器: 提取视觉风格特征:
\[\mathbf{z}_{style} = E_{style}(\mathbf{x})\]风格编码器关注:
解耦训练策略:
对抗性解耦: 使用领域判别器确保内容编码不包含风格信息:
\[\mathcal{L}_{adv} = -\log D_{style}(\mathbf{z}_{content})\]其中$D_{style}$试图从内容编码中预测风格标签。
交叉重建: 交换不同视频的内容和风格:
\[\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}\)
循环一致性: 确保解耦-重组的可逆性:
\[\mathcal{L}_{cycle} = \|G(E_{content}(\mathbf{x}), E_{style}(\mathbf{x})) - \mathbf{x}\|\]时序一致的风格迁移:
视频风格迁移面临的最大挑战是保持时间一致性:
帧间一致性约束: 防止风格在帧间闪烁:
\[\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}$是风格化后的视频。
长程风格一致性: 使用全局风格编码确保整体一致:
\[\mathbf{z}_{style}^{global} = \text{Aggregate}(\{\mathbf{z}_{style}^t\}_{t=1}^T)\]聚合方式包括:
运动保持风格化: 保持原始运动同时改变视觉风格:
\[\mathbf{y}_t = \mathcal{S}(\mathbf{x}_t, \mathbf{z}_{style}) + \lambda \cdot (\mathbf{x}_t - \mathbf{x}_{t-1})\]其中$\mathcal{S}$是风格化函数,第二项保持运动信息。
多尺度风格融合: 在不同空间尺度应用风格:
应用场景:
控制视频的特定属性:
属性控制的层次结构:
视频生成中的细粒度控制需要在多个层次上操作,从全局属性到局部细节:
全局属性控制: 影响整个视频的属性:
速度控制:调整整体播放速度 \(\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)\)
对象级属性: 针对特定对象的控制:
通过对象掩码$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\)
局部属性编辑: 细粒度的空间-时间区域控制:
属性解耦表示:
为了实现独立的属性控制,需要学习解耦的表示:
变分属性编码: 使用VAE框架学习解耦表示:
\[q(\mathbf{z}|\mathbf{x}) = \prod_k q(\mathbf{z}_k|\mathbf{x})\]其中每个$\mathbf{z}_k$对应一个可控属性(速度、颜色、形状等)。
信息瓶颈: 通过信息论约束促进解耦:
\[\mathcal{L}_{IB} = \beta \cdot I(\mathbf{z}_k; \mathbf{x}) - I(\mathbf{z}_k; \mathbf{y}_k)\]最小化与输入的互信息,最大化与目标属性的互信息。
属性特定的损失函数: 为每个属性设计专门的损失:
交互式属性调整:
提供直观的用户界面进行实时调整:
滑块控制: 连续属性的实时调整(速度、大小、亮度)
\[\mathbf{x}'_t = G(\mathbf{z}_{content}, \{\alpha_k \cdot \mathbf{z}_k\}_{k=1}^K)\]其中$\alpha_k \in [0, 2]$是用户控制的缩放因子。
时间曲线编辑: 属性随时间的变化曲线:
语义属性映射: 将高级语义映射到低级控制:
🌟 前沿方向:可组合的视频控制
如何设计一个统一框架,支持任意组合的控制信号(文本+轨迹+风格+属性)?这需要解决控制信号的对齐、融合和冲突解决。
确保生成的运动符合物理规律:
物理约束的重要性:
真实感的视频生成需要遵循物理规律。违反物理直觉的运动会立即被观察者察觉,破坏沉浸感。将物理约束集成到扩散模型中是提高生成质量的关键。
基础物理定律的建模:
牛顿运动定律: 物体的运动应遵循基本力学原理:
惯性定律:物体保持匀速直线运动或静止 \(\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\)
重力影响: 所有物体都受重力影响:
\[\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²是重力加速度。
不同物体的下落特性:
碰撞与反弹: 物体碰撞时的行为:
弹性碰撞:能量守恒 \(e = \frac{v'_{separation}}{v_{approach}}\) 其中$e$是恢复系数(0=完全非弹性,1=完全弹性)
摩擦力:影响滑动和滚动 \(\mathbf{F}_{friction} = -\mu \cdot N \cdot \frac{\mathbf{v}}{|\mathbf{v}|}\)
软体与流体动力学:
弹性形变: 软体物体的形变遵循胡克定律:
\[\mathbf{F} = -k \cdot \Delta \mathbf{x}\]应用场景:
流体运动: 液体和气体的运动遵循纳维-斯托克斯方程(简化版):
\[\frac{\partial \mathbf{v}}{\partial t} + (\mathbf{v} \cdot \nabla)\mathbf{v} = -\frac{1}{\rho}\nabla p + \nu \nabla^2 \mathbf{v} + \mathbf{f}\]在实践中,使用简化的涡流模型:
物理感知的损失函数:
运动平滑性损失: 惩罚不自然的加速度变化:
\[\mathcal{L}_{smooth} = \sum_t \|\mathbf{a}_{t+1} - \mathbf{a}_t\|^2\]能量守恒损失: 确保系统总能量合理:
\[\mathcal{L}_{energy} = \left| E_{t+1} - E_t - W_{external} \right|\]其中$E = E_{kinetic} + E_{potential}$,$W_{external}$是外力做功。
接触约束损失: 防止物体穿透:
\[\mathcal{L}_{contact} = \sum_{i,j} \max(0, d_{min} - \|\mathbf{p}_i - \mathbf{p}_j\|)\]其中$d_{min}$是最小允许距离。
物理引导的采样:
在扩散过程中施加物理约束:
梯度引导: 在每个去噪步骤添加物理梯度:
\[\mathbf{x}_{t-1} = \mu_\theta(\mathbf{x}_t, t) + \lambda \nabla_{\mathbf{x}} \log p_{physics}(\mathbf{x}_t)\]其中$p_{physics}$是物理合理性的概率模型。
投影方法: 将生成的运动投影到物理可行空间:
\[\mathbf{x}'_t = \text{Project}_{physics}(\mathbf{x}_t)\]投影操作包括:
多步预测-修正: 交替进行扩散步骤和物理修正:
学习隐式物理:
除了显式约束,模型可以从数据中学习隐式物理:
通过这些条件控制机制和物理约束,视频扩散模型可以生成高度可控和真实的动态内容。下一节将探讨如何高效地训练和部署这些模型。