视频生成


文档摘要

视频生成 本节摘要:图像是 2 维张量,视频是 3 维的。理论相同,算力却难 10-100 倍。OpenAI 的 Sora(2024 年 2 月)证明这可行;到 2026 年,Veo 2、Kling 1.5、Runway Gen-3、Pika 2.0、WAN 2.2 已能从文本生产 1080p 视频,开源栈(CogVideoX、HunyuanVideo、Mochi-1、WAN 2.2)落后约 12 个月。本节讲透视频扩散的三大支柱:3D VAE 把视频压成时空 patch 序列、时空 DiT 用因式分解注意力(空间注意力 + 时间注意力,避免 O(N²) 的全 3D 注意力)建模运动、密集重描述(Sora 用 GPT 把每个片段重标成平均 200 token 的长提示)。

视频生成

本节摘要:图像是 2 维张量,视频是 3 维的。理论相同,算力却难 10-100 倍。OpenAI 的 Sora(2024 年 2 月)证明这可行;到 2026 年,Veo 2、Kling 1.5、Runway Gen-3、Pika 2.0、WAN 2.2 已能从文本生产 1080p 视频,开源栈(CogVideoX、HunyuanVideo、Mochi-1、WAN 2.2)落后约 12 个月。本节讲透视频扩散的三大支柱:3D VAE 把视频压成时空 patch 序列、时空 DiT 用因式分解注意力(空间注意力 + 时间注意力,避免 O(N²) 的全 3D 注意力)建模运动、密集重描述(Sora 用 GPT 把每个片段重标成平均 200 token 的长提示)。我们会推导为什么逐帧独立采样会闪烁、为什么视频训练比图像贵 10-100 倍,以及生产中如何用张量并行 + 帧连续批处理 + 首帧 prefill 缓存来驯服「视频潜变量是内存带宽问题」这一瓶颈。

对应原课程:Phase 08 · Lesson 10 · video-generation(原英文 phases/08-generative-ai/10-video-generation/docs/en.md)。

学习目标

阅读完本节,你应当能够:

  1. 说清视频生成比图像难在哪:10 秒 1080p24fps 视频约 1.5 GB 原始像素,像素空间扩散不可行,需要时空压缩、时间相干性、10-100 倍算力。
  2. 讲透时空 DiT 架构:3D VAE 把视频压成 [T,H,W,C] 潜变量 → 切 patch → DiT 处理 patch 序列,3D 位置编码(时间+y+x),注意力因式分解为空间 + 时间。
  3. 解释为什么逐帧独立采样会闪烁:每帧噪声独立,内容/光照/身份帧间不连贯;视频扩散通过注意力或共享噪声耦合帧。
  4. 说清密集重描述为何比数据量更关键(Sora 用 GPT-4 把片段重标成 ~200 token 长提示)。
  5. 用张量并行 + 帧连续批处理 + 首帧 prefill 缓存,描述生产视频服务如何驯服内存带宽瓶颈。

一、问题与直觉

10 秒 1080p24fps 视频是 240 帧 × 1920×1080×3 像素,约 1.5 GB 原始数据/片段。像素空间扩散不可行。你需要:

  1. 时空压缩:一个编码视频而非帧的 VAE,把视频压成时空 patch 序列。
  2. 时间相干:帧之间需在数秒内共享内容、光照、物体身份。网络必须建模运动。
  3. 算力预算:同等模型规模下,视频训练比图像贵 10-100 倍。
  4. 条件:文本、图像(首帧)、音频或另一段视频。多数生产模型四者都收。

解决这一问题的架构是扩散 Transformer(DiT),应用到时空 patch 上,在巨大的 (提示, 字幕, 视频) 数据集上训练。损失与第 06 节相同。

Patchify:把视频变成 patch 序列

用 3D VAE(学到的时空压缩)编码视频,潜变量形状 [T_latent, H_latent, W_latent, C_latent]。切成 [t_p, h_p, w_p] 大小的 patch。对 Sora 风格模型,t_p = 1(逐帧 patch)或 t_p = 2(每两帧)。10 秒 1080p 视频压成约 2 万到 10 万个 patch

时空 DiT:因式分解注意力是关键

Transformer 处理扁平的 patch 序列。每个 patch 有 3D 位置嵌入(时间 + y + x)。注意力通常因式分解:

  • 空间注意力:在每帧的 patch 内。
  • 时间注意力:跨帧、同一空间位置。
  • 全 3D 注意力:贵 16-100 倍,只在低分辨率或研究里用。

💡 为什么必须因式分解? 全 3D 注意力是 O(N²),而 N 是 patch 总数(几万个)。对 10 秒 1080p,全 3D 注意力是数千亿次操作,直接 OOM。因式分解把 O((T·H·W)²) 拆成 O(T·(H·W)²) + O(H·W·T²),代价大幅下降,而经验上质量损失很小——因为视频的相关性本来就是「空间局部 + 时间局部」可分离的。

文本条件:长提示很重要

用大文本编码器(T5-XXL,Sora 用;CogVideoX-5B 也用 T5-XXL)做交叉注意力。长提示很关键——Sora 的训练集用了 GPT 生成的密集重字幕,平均每个片段 200 token。

二、2026 年生产格局

模型 日期 最大时长 最大分辨率 开源? 特点
Sora(OpenAI) 2024-02 60s 1080p 首个在大规模上展现「世界模拟器」特性的模型
Sora Turbo 2024-12 20s 1080p 生产级 Sora,推理快 5 倍
Veo 2(Google) 2024-12 8s 4K 2025 年质量 + 物理最强
Veo 3 2025 Q3 15s 4K 原生音频 + 更强运镜
Kling 1.5/2.1(快手) 2024-2025 10s 1080p 2025 Q1 人物运动最佳
Runway Gen-3 Alpha 2024-06 10s 768p 上层有专业视频工具
Pika 2.0 2024-10 5s 1080p 角色一致性最强
CogVideoX(THUDM) 2024 10s 720p 是(2B、5B) 首个开源 5B 级视频
HunyuanVideo(腾讯) 2024-12 5s 720p 是(13B) 2024 年末开源 SOTA
Mochi-1(Genmo) 2024-10 5.4s 480p 是(10B) 许可证最宽松
WAN 2.2(阿里) 2025-07 5s 720p 2025 年中最强开源

开源权重正在比图像领域更快地缩小差距:到 2026 年中,HunyuanVideo + WAN 2.2 的 LoRA 已驱动大多数开源工作流。

三、从零实现:一维「视频」上的时空 DiT

code/main.py 模拟时空 DiT 的核心思想:把一个小合成视频 patchify、加每 patch 位置嵌入、用 Transformer 风格的注意力对整个 patch 序列去噪。不用 numpy,纯 Python。我们展示:当相邻帧 patch 共享去噪器与位置嵌入时,即使在 1 维也能涌现时间相干性

步骤 1:patchify 一个合成 1 维「视频」

def make_video(T_frames=8, rng=None): # 一个「视频」是遵循平滑轨迹的 1 维值序列 base = rng.gauss(0, 1) return [base + 0.3 * t + rng.gauss(0, 0.1) for t in range(T_frames)]

步骤 2:每帧位置嵌入

def pos_embed(t, dim): return sinusoidal(t, dim)

步骤 3:去噪器看整个序列

不逐帧独立去噪,我们的小网络拼接所有帧的值 + 位置嵌入,联合预测所有帧的噪声。

步骤 4:时间相干性测试

训练后采样一个视频,测量帧间差分。如果模型学到了时间结构,差分会比逐帧独立采样更小。

四、典型陷阱与修复

  • 逐帧独立采样 = 闪烁:对每帧分别跑图像扩散,输出会闪烁,因为每帧噪声独立。视频扩散通过注意力或共享噪声耦合帧来修复。

  • 朴素 3D 注意力 = OOM:10 秒 1080p 潜变量上跑全 3D 注意力是数千亿次操作。因式分解成空间 + 时间。

  • 数据字幕比数据量更关键:Sora 相对前人工作的主要升级是训练用了约 10 倍更详细的字幕(GPT-4 重标片段)。OpenAI 技术报告对此明确。

  • 首帧条件:多数生产模型也接受图像作为首帧。这是「图生视频」模式;训练包含这一变体。

  • 物理漂移:长片段(>10s)累积细微不一致。滑窗生成 + 关键帧锚定有帮助。

⚠️ 闪烁的根因与修复:逐帧独立采样时,每帧从独立噪声 z_T ~ N(0,I) 出发,帧间毫无关联。视频扩散的修复是让所有帧共享同一个初始噪声(或耦合的初始噪声),再让 DiT 的时间注意力在去噪过程中保持帧间结构一致。这就是为什么 Sora 能产出「同一只猫在 10 秒里连贯走动」而非「10 秒里 240 只不同的猫」。

五、框架对比:2026 年用例

用例 2026 年选择
最高质量文生视频、托管 Veo 3 或 Sora
运镜控制的电影感 Runway Gen-3 + 运动笔刷
跨片段角色一致 Pika 2.0 或 Kling 2.1
开源、快速微调 WAN 2.2 + LoRA
图生视频 WAN 2.2-I2V、Kling 2.1 I2V 或 Runway
音生视频口型同步 Veo 3(原生音频)或专用口型模型
视频编辑 Runway Act-Two、Kling 运动笔刷、Flux-Kontext(静帧)

2024 到 2026 年间,同等质量下每秒视频成本下降了 20 倍

六、生产推理:视频潜变量是内存带宽问题

10 秒 1080p24fps 视频是 240 帧 × 1920 × 1080 × 3 ≈ 1.5 GB 原始像素。经 4× 视频 VAE 压缩(2× 空间 × 2× 时间)后,潜变量约 100 MB/请求。在批大小 1 下用时空 DiT 跑 30 步,每步在 HBM 里移动约 3 GB——内存带宽,而非 FLOPs,是瓶颈

三个生产旋钮,全直出自生产推理文献:

  • 跨 DiT 的张量并行(TP):文生视频模型动辄 ≥10B 参数。TP=4 跨 4 块 H100 是标准;405B 级模型用 PP=2 × TP=2。每步延迟大致随 TP 线性下降,直到撞上 all-reduce 墙。

  • 帧批处理 = 连续批处理:生成时,视频概念上是「由注意力链接的一批帧」。连续批处理(在途调度)适用:如果模型架构允许滑窗生成,在返回第 t−1 帧时就开始渲染第 t+1 帧。

  • 片段级 prefill 缓存:对图生视频,首帧条件化类似 LLM 的提示 prefill——算一次,跨时间解码器轮次复用。这实质上是视频的 KV-cache。

💡 为什么是内存带宽而非 FLOPs? 视频潜变量比图像大几十倍(100 MB vs ~1 MB),而每步 DiT 前向必须把这个潜变量在 HBM 与计算单元之间来回搬运。搬运时间(受带宽限制)超过了计算时间(受 FLOPs 限制)。这就是为什么视频推理特别受益于张量并行——它把带宽压力分摊到多卡,而不仅仅是分摊计算。

七、可复用产物

本节产出一个视频简报技能文件(位于原课程 outputs/skill-video-brief.md)。

  • skill-video-brief.md:输入视频简报(时长、宽高比、风格、运镜方案、主体一致性、音频),输出:模型 + 托管、提示脚手架(运镜语言、主体描述、运动描述符)、种子 + 可复现协议、逐帧 QA 清单。

八、练习

  1. 简单。code/main.py 里比较(a)逐帧独立采样、(b)联合序列采样的帧间差分。报告差分的均值与方差。

  2. 中等。 加首帧条件:把第 0 帧钉在一个给定值,采样其余。测量钉住的值如何传播。

  3. 困难。 用 HuggingFace diffusers 在本地 GPU 上跑 CogVideoX-2B。对 720p、6 秒片段计时 20 步推理。分析时空注意力找出瓶颈。

本节要点回顾

  1. 视频是 3D 张量:10 秒 1080p24fps ≈ 1.5 GB 原始像素,像素空间扩散不可行;需时空压缩、时间相干、10-100 倍算力。
  2. 时空 DiT 三件套:3D VAE 把视频压成 [T,H,W,C] 潜变量 → 切 patch(2-10 万个)→ DiT 处理 patch 序列,3D 位置编码 + 因式分解注意力(空间 + 时间,避免全 3D 的 O(N²))。
  3. 逐帧独立采样 = 闪烁:每帧噪声独立;视频扩散用共享噪声 + 时间注意力耦合帧。
  4. 密集重描述 > 数据量:Sora 用 GPT-4 把片段重标成 ~200 token 长提示,这是它相对前人的主要升级。
  5. 长片段物理漂移:>10s 累积不一致,用滑窗 + 关键帧锚定。
  6. 生产瓶颈是内存带宽:视频潜变量 ~100MB/请求,每步在 HBM 移动 ~3GB;用 TP 跨 DiT、帧连续批处理、首帧 prefill 缓存(视频的 KV-cache)驯服。
  7. 2024-2026 每秒视频成本降 20 倍;开源(HunyuanVideo、WAN 2.2)正比图像更快缩小差距。

下一节,我们把生成从视觉扩展到听觉——音频生成:用 Encodec 把波形压成离散 token,再用 Transformer(自回归)或扩散/流匹配建模,产出语音、音乐与音效。


发布者: 作者: Rohit Gupta 转发
评论区 (0)
U