生成模型 / 图像与视频架构 原理笔记进阶 10 分钟阅读 查看源文件 ↗

视频生成的表示与注意力#

本页内容4 个部分

1. 视频生成的核心挑战#

1.1 从图像到视频:多了一个时间轴#

图像生成处理的是 2D 空间 (H,W)(H, W),视频生成要处理 3D 时空 (T,H,W)(T, H, W)。这个额外的时间维度带来了一系列根本性挑战:

挑战 1:时间一致性#

相邻帧之间必须视觉连贯。人的感知对时间闪烁(flickering)极其敏感——即使单帧质量很高,如果帧间不一致,视频看起来也会很差。这要求模型不仅理解"一帧该长什么样",还要理解"下一帧该怎么变"。

挑战 2:计算量爆炸#

具体数字感受

图像 latent:32×32×4=409632 \times 32 \times 4 = 4096 个元素

视频 latent(16帧,无时间压缩):16×32×32×4=6553616 \times 32 \times 32 \times 4 = 65536 个元素 → 16 倍

如果做 full 3D self-attention:O(655362)≈4.3×109O(65536^2) \approx 4.3 \times 10^9 → 比单帧的 O(10242)≈106O(1024^2) \approx 10^6 大了 4000 倍

挑战 3:运动建模#

模型需要学习物理世界的运动规律:物体运动的惯性、遮挡与出现、光影变化、相机运动等。这远比学习静态图像的纹理和构图复杂。

挑战 4:长视频一致性#

2-4 秒的短视频相对容易,但生成 10 秒以上的长视频时,场景一致性、角色身份保持、动作连贯性都会随时间累积退化。

挑战 5:训练数据稀缺#

高质量图像数据集有数十亿张(LAION-5B),但高质量视频-文本配对数据远少于此。且视频标注成本更高(需要描述动态过程,不只是静态内容)。

1.2 维度对比#

维度 图像生成 视频生成
数据形状 H×W×CH \times W \times C T×H×W×CT \times H \times W \times C
Latent 形状 h×w×ch \times w \times c t×h×w×ct \times h \times w \times c
典型大小 32×32×432 \times 32 \times 4 16×32×32×416 \times 32 \times 32 \times 4(短视频)
Token 数(p=2) 256 4096(无时间压缩)
条件信号 文本 文本 + 首帧 + 运动描述
评估维度 FID, CLIP Score FVD, 时间一致性, 运动质量

2. 3D VAE:视频的压缩#

2.1 从 2D VAE 到 3D VAE#

图像生成中,VAE 使用 2D 卷积对空间进行压缩(如 SD 的 VAE 做 8× 空间降采样)。视频生成需要同时压缩空间 + 时间,所以使用 3D 卷积。

压缩率具体计算#

压缩示例

输入视频:16 帧 × 256×256 × 3 通道 = 16×256×256×3=3,145,72816 \times 256 \times 256 \times 3 = 3,145,728 个值

空间压缩 8×:256→32256 \rightarrow 32(每边缩小 8 倍)

时间压缩 4×:16→416 \rightarrow 4(每 4 帧压缩成 1 帧)

通道数:3 → 4(latent 通道)

输出 latent:4×32×32×4=16,3844 \times 32 \times 32 \times 4 = 16,384 个值

总压缩倍数:8×8×4=2568 \times 8 \times 4 = 256 倍!

3D VAE Encoder:RT×H×W×3→RTrt×Hrs×Wrs×c\text{3D VAE Encoder}: \mathbb{R}^{T \times H \times W \times 3} \rightarrow \mathbb{R}^{\frac{T}{r_t} \times \frac{H}{r_s} \times \frac{W}{r_s} \times c}

rtr_t = 时间压缩率,rsr_s = 空间压缩率,cc = latent 通道数

2.2 Causal 3D VAE#

普通 3D 卷积在时间方向上既看过去帧也看未来帧。但在实际应用中(如自回归生成、流式推理),我们希望当前帧的 latent 只依赖当前帧和过去帧。这就是 Causal(因果)3D VAE。

实现方式:在时间方向的卷积使用因果 padding——只在"过去"方向 pad,不在"未来"方向 pad。类似 NLP 中 Causal Attention 的思想。

# Causal 3D 卷积示意
# 普通 3D 卷积 (kernel_t=3): 看 [t-1, t, t+1]
# Causal 3D 卷积 (kernel_t=3): 只看 [t-2, t-1, t]
class CausalConv3d(nn.Module):
    def __init__(self, in_ch, out_ch, kernel_t=3, kernel_s=3):
        super().__init__()
        self.pad_t = kernel_t - 1          # 只在过去方向 pad
        self.pad_s = kernel_s // 2         # 空间方向对称 pad
        self.conv = nn.Conv3d(in_ch, out_ch,
                              kernel_size=(kernel_t, kernel_s, kernel_s),
                              padding=(0, self.pad_s, self.pad_s))

    def forward(self, x):
        # x: [B, C, T, H, W]
        x = F.pad(x, (0,0, 0,0, self.pad_t, 0))  # 时间维只在前面 pad
        return self.conv(x)

2.3 主流视频模型的 3D VAE 设计#

模型 空间压缩 rsr_s 时间压缩 rtr_t Latent 通道 cc Causal
CogVideoX 8 4 16 是
HunyuanVideo 8 4 16 是
Open-Sora 8 4 4 否
Sora(推测) 8 ~4 未公开 未知

**面试关键点:**3D VAE 的核心价值是把视频的计算量从"不可能"降到"可行"。没有 256× 的压缩,在 latent space 做扩散模型是不现实的。Causal 设计则让模型兼容自回归式的长视频生成。

3. 视频 Attention:Full 3D vs Factorized#

3.1 两种方案#

视频 latent 是三维张量 (T,H′,W′)(T, H', W'),对它做 self-attention 有两条路:

方案一:Full 3D Attention(当前主流)#

把所有帧所有位置的 token 展平成一个序列,直接做 self-attention,每个 token 可以 attend 到任意时刻任意位置,时空建模最完整。

Full 3D Attention:O((T⋅H′⋅W′)2)\text{Full 3D Attention}: O\big((T \cdot H' \cdot W')^2\big)

H′=H/p, W′=W/pH' = H/p,\ W' = W/p 为 patchify 后的空间分辨率

为什么现在主流都用 Full 3D?

早期顾虑是计算量太大:假设 16 帧、无时间压缩、每帧 256 个 spatial token,total = 4096,复杂度约 1678 万。但现代 3D VAE 时间压缩 4×、空间压缩 8×,token 数大幅下降。以 CogVideoX 为例(6秒×8fps=48帧,时间压缩4×后 12 帧 latent,spatial ~45×30=1350 tokens/帧):total ≈ 16200,配合 FlashAttention 在现代 GPU 上完全可行。

HunyuanVideo、CogVideoX、Wan2.1 均明确采用 Full 3D Attention,其论文中均指出时空一致性优于 Factorized 方案。

方案二:Factorized Attention(早期/轻量模型)#

将 3D attention 分解为两步交替——先做帧内 Spatial Attention,再做跨帧 Temporal Attention:

Spatial:O(T(H′W′)2)Temporal:O(H′W′⋅T2)\text{Spatial}: O\big(T(H'W')^2\big) \qquad \text{Temporal}: O\big(H'W' \cdot T^2\big)

计算量对比(未压缩:16帧,16×16 spatial tokens)

Full 3D:(16×256)2≈(16 \times 256)^2 \approx 1678 万

Spatial:16×2562≈16 \times 256^2 \approx 105 万  |  Temporal:256×162≈256 \times 16^2 \approx 6.6 万

Factorized 合计:≈ 112 万,省约 15×。3D VAE 压缩率不足时的有效工程妥协,Open-Sora(STDiT)采用此方案。

# Factorized Attention 伪代码(Open-Sora 风格)
# x: [B, T, H', W', D]

# 1. Spatial Attention:每帧独立
x = rearrange(x, 'b t h w d -> (b t) (h w) d')
x = spatial_self_attn(x)
x = rearrange(x, '(b t) (h w) d -> b t h w d')

# 2. Temporal Attention:每个空间位置独立
x = rearrange(x, 'b t h w d -> (b h w) t d')
x = temporal_self_attn(x)
x = rearrange(x, '(b h w) t d -> b t h w d')

3.2 两种方案对比#

Full 3D Attention Factorized Attention
时空建模 完整,任意 token 互相可见 受限,帧间信息需多层传播
视频一致性 更好 略差
计算量 O((TH′W′)2)O((TH'W')^2) O(T(H′W′)2+H′W′T2)O(T(H'W')^2 + H'W'T^2),比例取决于 T 与空间 token 数
前提 需要强力 3D VAE 压缩 token 数 可在较大 token 数下使用
代表模型 HunyuanVideo、CogVideoX、Wan2.1 Open-Sora(STDiT)
趋势 ✅ 当前主流 逐渐退出头部模型

**面试关键点:**Factorized Attention 是早期 3D VAE 压缩率不足时的工程妥协。现代头部模型的 3D VAE 已将 token 数压缩到 Full 3D 可承受范围,因此普遍回归 Full 3D,以获得更好的时空一致性。

类比:Factorized attention 类似"先在每个班级内讨论(spatial),再选代表跨班交流(temporal)",Full 3D attention 是"所有学生一起开大会"。大会虽然信息更全面,但成本太高。

3.3 位置编码的适配#

视频 Transformer 需要同时编码空间和时间位置。常见做法:

  • 分离式:空间位置编码 + 时间位置编码,分别加到 token 上
  • 3D RoPE:将旋转位置编码扩展到 3D。做法是把 Q/K 的 DD 维特征沿 channel 方向切成三段,前段用 tt 驱动旋转、中段用 hh、后段用 ww —— 每段分别套标准 1D RoPE,位置信息写进 Q/K 的不同频道里。注意"三个维度"指的是原视频网格的三个坐标轴,不是在几何空间转方向:每个 token 的 Q/K 仍然是一个 DD 维向量,rotation 只发生在 channel 维的 2D pair 上。HunyuanVideo 和 CogVideoX 都采用了这种方式
  • 3D sinusoidal:对 (t,h,w)(t, h, w) 三个坐标分别做 sinusoidal 编码后拼接

3D RoPE:qi=Rθ(ti)⋅Rϕ(hi)⋅Rψ(wi)⋅Wqxi\text{3D RoPE}: q_i = R_{\theta}(t_i) \cdot R_{\phi}(h_i) \cdot R_{\psi}(w_i) \cdot W_q x_i

Rθ,Rϕ,RψR_\theta, R_\phi, R_\psi 分别作用在 DD 维向量的三个不相交 channel 段上,三个坐标轴各管一段

D → 2D → 3D RoPE 完整推导#

Step 1:1D RoPE(NLP 原版)

对位置 pp 处的 token,把 Q/K 向量的每对维度 (q2i,q2i+1)(q_{2i}, q_{2i+1}) 旋转角度 θi=p/100002i/D\theta_i = p / 10000^{2i/D}。旋转频率随维度索引 ii 单调递减:低维(ii 小)频率高、转得快,对相邻 token 的位置差异敏感,捕捉局部细粒度关系;高维(ii 大)频率低、转得慢,只有相距很远的 token 才产生明显的角度差,捕捉全局粗粒度关系。整体是一种多尺度的位置编码,类似时钟的秒针(低维)和时针(高维)分工合作。

[q2i′q2i+1′]=[cos⁡θi−sin⁡θisin⁡θicos⁡θi][q2iq2i+1]\begin{bmatrix}q_{2i}'\\q_{2i+1}'\end{bmatrix} = \begin{bmatrix}\cos\theta_i & -\sin\theta_i\\\sin\theta_i & \cos\theta_i\end{bmatrix}\begin{bmatrix}q_{2i}\\q_{2i+1}\end{bmatrix}

数值例子:D=4D=4,位置 p=3p=3,q=[1,0,1,0]q=[1,0,1,0]

第 0 对 (q₀,q₁),i=0:θ₀ = 3/10000⁰ = 3 rad
  q₀' = cos(3) ≈ -0.990,  q₁' = sin(3) ≈  0.141

第 1 对 (q₂,q₃),i=1:θ₁ = 3/10000^(2/4) = 0.03 rad
  q₂' = cos(0.03) ≈  0.9996, q₃' = sin(0.03) ≈  0.030

旋转后:q_rope = [-0.990, 0.141, 0.9996, 0.030]

关键性质:点积只依赖相对位置

两个 token 位置 pAp_A、pBp_B,其 Q·K 点积中第 ii 对的贡献为:

q2i′⋅k2i′+q2i+1′⋅k2i+1′=cos⁡((pA−pB)⋅θi)q_{2i}' \cdot k_{2i}' + q_{2i+1}' \cdot k_{2i+1}' = \cos\big((p_A - p_B)\cdot\theta_i\big)

与绝对位置无关,只和相对距离 pA−pBp_A - p_B 有关。

Step 2:2D RoPE(图像/ViT)

图像 token 有两个坐标 (h,w)(h,w),把 DD 维切成两半,分别由 hh 和 ww 负责旋转:

维度 [0, D/2)  ← 由 h 旋转
维度 [D/2, D)  ← 由 w 旋转

数值例子:D=4D=4,token 位置 (h=2,w=3)(h=2, w=3),q=[1,0,1,0]q=[1,0,1,0]

维度 (0,1) ← h=2:θ = 2 rad
  q₀' = cos(2) ≈ -0.416,  q₁' = sin(2) ≈ 0.909

维度 (2,3) ← w=3:θ = 3 rad
  q₂' = cos(3) ≈ -0.990,  q₃' = sin(3) ≈ 0.141

旋转后:q_rope = [-0.416, 0.909, -0.990, 0.141]

验证:token A (h=2,w=3)(h=2,w=3) vs token B (h=2,w=5)(h=2,w=5):

h 段:cos(2-2) = cos(0)  =  1.000  ← 高度相同,满分
w 段:cos(3-5) = cos(-2) ≈ -0.416  ← 宽度相差 2,衰减
Q_A · K_B ≈ 1.000 + (-0.416) = 0.584

Step 3:3D RoPE(视频)

视频 token 有三个坐标 (t,h,w)(t,h,w),把 DD 维切成三段:

维度 [0, D_t)          ← 由 t 旋转
维度 [D_t, D_t+D_h)    ← 由 h 旋转
维度 [D_t+D_h, D)      ← 由 w 旋转

数值例子:D=6D=6,Dt=Dh=Dw=2D_t=D_h=D_w=2,token 位置 (t=1,h=2,w=3)(t=1,h=2,w=3),q=[1,0,1,0,1,0]q=[1,0,1,0,1,0]

维度 (0,1) ← t=1:θ = 1 rad
  q₀' = cos(1) ≈  0.540,  q₁' = sin(1) ≈  0.841

维度 (2,3) ← h=2:θ = 2 rad
  q₂' = cos(2) ≈ -0.416,  q₃' = sin(2) ≈  0.909

维度 (4,5) ← w=3:θ = 3 rad
  q₄' = cos(3) ≈ -0.990,  q₅' = sin(3) ≈  0.141

旋转后:q_rope = [0.540, 0.841, -0.416, 0.909, -0.990, 0.141]

验证:token A (t=1,h=2,w=3)(t=1,h=2,w=3) vs token B (t=1,h=2,w=5)(t=1,h=2,w=5):

t 段:cos(1-1) = cos(0)  =  1.000  ← 时间相同
h 段:cos(2-2) = cos(0)  =  1.000  ← 高度相同
w 段:cos(3-5) = cos(-2) ≈ -0.416  ← 宽度相差 2
Q_A · K_B ≈ 1.000 + 1.000 - 0.416 = 1.584

若 token C 与 A 完全相同位置 (t=1,h=2,w=3):
Q_A · K_C = cos(0)+cos(0)+cos(0) = 3.0  ← 最大值

三者对比

版本 坐标数 维度分割 额外参数
1D RoPE pp 全部 DD 维统一旋转 0
2D RoPE (h,w)(h,w) DD 切两半,各段独立旋转 0
3D RoPE (t,h,w)(t,h,w) DD 切三段,各段独立旋转 0

核心思想不变:不同坐标占据不同维度段,各自独立旋转,Q·K 点积天然反映多维相对位置,且无需任何额外参数。

4. 视频模型:按具体版本比较#

以下保留可以追溯到官方公开模型的架构例子,不把演示时长、后处理分辨率或排行榜宣传当成统一能力上限。显存还取决于 dtype、offload、分辨率、帧数和 batch。

版本 已公开的要点 一手资料
Wan2.1 包含 1.3B / 14B 等版本;配置与任务分别核对 论文
Wan2.2 A14B 高/低噪声专家设计;另有 TI2V-5B,不能混用两者 VAE 与显存规格 官方仓库
HunyuanVideo 1.5 8.3B 参数;不是初代 HunyuanVideo 的 13B 技术报告
CogVideoX 2B / 5B 与 1.5 等版本有不同分辨率、帧率和推理配置 官方仓库

闭源产品没有公开的参数量、训练目标或内部结构,不应由前代报告或行业惯例补全。开源与闭源质量也不能凭单一 VBench 分数概括为“全面追平”;需固定评测版本、提示词、采样设置和人工偏好协议。

4.1 评估指标#

  • FVD (Fréchet Video Distance):类似图像的 FID,用预训练视频模型(如 I3D)提取特征,计算生成视频和真实视频特征分布的距离。越低越好。
  • CLIPSIM:用 CLIP 计算生成视频帧和文本描述的相似度,衡量文本对齐程度。
  • 时间一致性分数:计算相邻帧的 CLIP 特征相似度或光流一致性。
  • 人工评估:目前最可靠的方式,包括视觉质量、运动自然度、文本相关性、时间一致性四个维度。