VAE 不是视频后处理

发布边界:不同模型家族的时间压缩、空间压缩、潜通道和缓存语义必须分别核对;本文不声称已完成作者自有重建或显存实验。

摘要

Video VAE 在主模型之前就决定时空网格、信息损失和 token 数量,在主模型之后又决定解码峰值、分块缓存和最终伪影。本文区分 VAE、VQ-VAE 与 Tokenizer,给出张量计算、责任边界和纯重建验收方法。

关键词

Video VAE、Latent Video、时空压缩、Token Budget、重建评测

目录

  • 核心结论
  • 先把几个名称分开
  • 从五维视频到主模型 Token
  • 为什么时间压缩会影响运动,但不是一条绝对定律
  • 因果、缓存、分块和流式不是同义词
  • 责任边界:谁应为哪类错误负责
  • 必做实验一:纯重建与阶段计时
  • 选型与故障定位清单
  • 结语

核心结论

在潜空间视频生成系统里,Video VAE 不只是把最终结果“解码成画面”的尾端组件。它先决定原始视频以什么时空网格进入主模型、哪些信息在进入生成模型前已经被丢弃、主模型需要处理多少 Token,以及长视频能否按块编码、解码和缓存。因此,更准确的定位是:Video VAE 是像素世界与生成模型之间的表示合同,也是计算预算、时间带宽、重建伪影和流式语义的共同边界。

这并不意味着成片中的一切问题都应归咎于 VAE。主体消失、动作逻辑错误、提示词不遵循,通常更可能来自主模型或条件链路;固定位置的纹理软化、纯重建时就存在的闪烁、分块接缝,则更值得优先检查 VAE。工程上首先要做的是把“表示误差”从“生成误差”中隔离出来,而不是继续调采样器碰运气。

先把三个名称拆开

先把几个名称分开

VAE、VQ-VAE、Autoencoder 和 Tokenizer 经常在视频项目中被混称,但它们不是同一种对象。

[C-P01] 经典 VAE 通过近似后验、重参数化和变分下界学习连续潜变量。重建项如何定义、是否叠加感知损失或对抗损失,决定了它关注的是逐点误差、感知相似性还是两者的组合;所以把 Image VAE 概括为“逐像素复制图片”并不准确。

[C-P02] VQ-VAE 的编码器输出离散码本索引,并学习离散表示及其先验。VideoGPT 就使用带三维卷积和轴向注意力的 VQ-VAE,把原始视频变成下采样后的离散时空码,再用类似 GPT 的模型预测这些码。[C-P03]

[C-P04] Latent Diffusion 选择在预训练自编码器的连续潜空间中执行扩散,目标是在降低计算量与保留细节之间取得折中。今天很多项目仍把这种连续潜空间自编码器统称为 VAE,即使具体实现中的 KL 权重、判别器、感知损失和确定性路径各不相同。

因此,本文使用“Video VAE”作为工程习惯称呼,但具体选型时必须继续追问:潜变量是连续还是离散;训练是否包含 KL、码本、感知或对抗目标;时空压缩因子是多少;编码与解码是否因果;主模型消费的是潜网格、量化索引还是进一步切成的 Patch Token。名称不能替代接口规格。

Token 数由三个压缩轴共同决定

从五维视频到主模型 Token

设输入视频张量为:

[ x\in\mathbb{R}^{B\times T\times 3\times H\times W} ]

Video VAE 编码后得到:

[ z=E(x)\in\mathbb{R}^{B\times T’\times C_z\times H’\times W’} ]

其中空间压缩因子记为 (s_h,s_w),时间压缩因子记为 (s_t)。若实现要求第一帧单独保留,常见形状不是简单的 (T/s_t),而可能是:

[ T’=1+\left\lfloor\frac{T-1}{s_t}\right\rfloor ]

[C-P06] HunyuanVideo 报告的因果三维 VAE 使用空间 8 倍、时间 4 倍压缩,潜通道为 16,并明确采用“首帧加后续时间组”的形状表达。HunyuanVideo 1.5 报告另一套配置:空间 16 倍、时间 4 倍、潜通道 32。[C-P07] 这两个例子已经说明,所谓“Video VAE 的压缩率”不是跨模型常量。

一个带完整假设的网格计算

假设输入是 5 秒、24 fps、720×1280 的视频,为适配“首帧加四帧一组”的实现,取 (T=121) 帧;假设 (s_t=4)、(s_h=s_w=8)、(C_z=16)。则:

  • 时间长度:(T’=1+(121-1)/4=31);
  • 潜空间高度:(H’=720/8=90);
  • 潜空间宽度:(W’=1280/8=160);
  • 潜标量数量:(31\times16\times90\times160=7,142,400)。

原始视频有 (121\times720\times1280\times3=334,540,800) 个通道值。按标量数量粗看,压缩约为 46.84 倍;这个数不等于文件压缩率,也不代表信息量严格减少 46.84 倍,因为像素与浮点潜变量的位宽、统计冗余和语义密度不同。

主模型的 Token 数还取决于潜空间 Patch。继续假设每个 Token 覆盖 (1\times2\times2) 个潜网格位置,则 Token 数为:

[ N=31\times45\times80=111,600 ]

若没有时间压缩而其他条件不变,则为 (121\times45\times80=435,600),约为前者的 3.90 倍,而不是严格 4 倍,因为首帧被单独保留。注意,(C_z=16) 通常进入 Patch Embedding 的特征维,不应再机械乘到 Token 个数上。任何显存或注意力复杂度估算都必须同时写明帧对齐规则、潜通道、Patch 大小、注意力结构和精度。

为什么时间压缩会影响运动,但不是一条绝对定律

空间压缩把局部纹理与几何压入更粗网格;时间压缩则要求编码器把若干帧之间的变化压入较少的潜时间步。高速小物体、短促接触、遮挡后的重现、细小嘴型和光照闪变,都可能在这个阶段变得难以区分。

可以把时间压缩理解为表示层的“时间带宽预算”:压缩越激进,编码器越需要决定哪些变化值得保留。但不能据此写成“时间压缩因子直接决定最大运动速度”。最终表现还受潜通道数、感受野、训练数据运动分布、损失函数、解码器能力、主模型预测质量和输出帧率共同影响。一个高压缩但训练充分的模型,可能优于低压缩却缺乏运动数据的模型。

可验证的表述应是:**在其他条件受控时,提高时间压缩可能增加高频运动、短时事件和边界时刻的重建损失;该影响需要通过纯重建实验测量。**测试集应按光流幅度、加速度、遮挡时长、接触事件持续时间和纹理尺度分桶,观察误差是否随运动频率系统性上升,而不是只看一组平均 PSNR。

四个词不能互相替代

因果、缓存、分块和流式不是同义词

“这是因果 VAE,所以支持无限长流式视频”是常见误推。四个概念必须分别验收。

因果编码要求某个潜时间步只依赖当前及过去帧,不读取未来帧。它决定在线输入是否需要前视窗口。

因果解码要求已经输出的帧不依赖未来潜变量。编码因果不自动推出解码也因果,反之亦然。

缓存是复用历史卷积特征或中间状态的实现机制。没有缓存,因果模型仍可反复重算历史;有缓存,也必须定义缓存初始化、跨段继承、失效和重置语义。

分块处理是显存与长度管理策略。一个非因果模型也可以在块内使用前后文;一个因果模型也可能因块边界、填充或归一化方式不同而产生接缝。重叠区域、融合权重和块对齐都需要单独设计。

[C-R01] Wan2.1 官方实现中的 CausalConv3d 对时间维采用只看过去的填充,并提供特征缓存;其编码路径把首帧与后续帧组分开处理,解码路径也逐个潜时间步复用缓存。这个实现事实说明因果与缓存可以组合,但不能证明所有名为“Causal VAE”的实现都具有相同流式语义。

真正的流式验收至少包括:首块启动需要多少帧;稳态每加入一组帧产生多少潜步;最大前视是多少;任意切块与整段处理是否数值等价;缓存能否跨请求复用;丢帧、跳帧和场景切换时如何重置;编码与解码的峰值内存是否随总长度有界。缺少这些合同,只能说“可分块”或“使用因果算子”,不能直接说“支持生产级流式”。

责任边界:谁应为哪类错误负责

下表是诊断责任表,不是互斥归因。非线性模块会相互放大误差,因此同一现象可能有多个来源。

层级主要输入输出首要责任典型故障证据不应单独承担的责任
表示层/编码器像素视频 → 潜网格信息保留、时空压缩、潜尺度与对齐decode(encode(x)) 已出现闪烁、细节丢失、运动拖影提示词语义、生成内容逻辑
主生成模型条件与噪声/历史潜变量 → 生成潜变量场景、动作、身份、时序和条件遵循真实潜变量可重建良好,但生成潜变量导致主体或运动错误固定的解码纹理、纯重建接缝
解码器潜网格 → 像素视频潜信息的像素展开、颜色与局部时间一致性不同真实视频潜变量在相似区域产生稳定伪影主模型没有生成的物体状态
采样/积分器模型向量场或去噪预测 → 最终潜轨迹步数、离散化误差、随机性与引导强度同一模型改步数/求解器后伪影显著变化纯重建固有损失
后处理与编码原始帧 → 成片文件插帧、超分、色彩、锐化、视频编码未压缩帧正常,封装或插帧后异常潜空间语义与动作规划

可以使用“表示误差、生成误差、采样误差、后处理误差”四段式账本,但不能写成 (E_{total}=E_1+E_2+E_3+E_4) 的严格定理。解码器可能把轻微潜偏差放大为闪烁,后处理也可能遮蔽或放大前级问题;这个分解的用途是控制变量和缩小故障域。

先做纯重建,再调主模型

必做实验一:纯重建与阶段计时

第一组实验完全绕过主生成模型:把真实视频输入编码器,再立即解码,即 (\hat{x}=D(E(x)))。这一步回答“在没有生成误差时,表示层已经损失了什么”。

测试集不能只有慢镜头风景。至少应覆盖:静态细纹理、横移镜头、快速肢体、旋转物体、遮挡再出现、短促接触、字幕与小字、低照度噪声、强光变化、不同长度以及不对齐压缩组边界的帧数。除逐帧 PSNR、SSIM、LPIPS 外,还应记录时间差分误差、区域闪烁、光流一致性、身份特征漂移、边缘稳定性和分块接缝。指标只用于定位,最终仍需定点盲审,因为高 PSNR 不保证运动自然。

实验矩阵应同时比较:整段与分块、无 Tile 与 Tile、不同重叠宽度、冷缓存与热缓存、首帧对齐与非对齐、FP32/BF16/FP16、不同分辨率和时长。若系统声称流式,还要逐块输入并与整段输出逐帧比较,记录首块延迟、稳态吞吐、缓存大小和漂移累积。

第二组是阶段计时。每次运行至少拆分:文件读取与解码、CPU 预处理、Host-to-Device、VAE Encode、主模型条件编码、主模型采样、VAE Decode、后处理、视频编码与写盘。GPU 计时必须在测量边界同步;冷启动、模型加载、首次编译和稳定热运行分开报告;同时给出 p50、p95、p99、峰值显存、输入帧数和硬件环境。只报“总生成耗时”无法判断压缩更激进究竟节省了主模型时间,还是把成本转移到了编解码与分块融合。

一个实用的归因顺序是:

  1. 原视频正常,纯重建异常:先查 VAE、精度、Tile、颜色和帧对齐;
  2. 纯重建正常,真实潜变量经不同解码路径异常:查解码缓存与实现;
  3. 纯重建正常,生成结果异常且随采样器明显变化:查采样与主模型;
  4. 未压缩帧正常,成片异常:查插帧、超分、色彩和编码器;
  5. 只有长视频或块边界异常:优先查缓存重置、重叠融合和位置编码,而不是先改提示词。

故障要按责任层定位

选型与故障定位清单

选 Video VAE 时,不应只比较一张重建图。需要逐项确认:

  • 潜变量类型、潜通道数、空间与时间压缩因子,以及首帧和尾帧对齐公式;
  • 训练目标是否包含 KL、感知、对抗、码本或其他约束,评估指标是否覆盖时间一致性;
  • 编码和解码分别是否因果,是否需要前视,缓存是否公开且可重置;
  • 整段、Tile、Chunk、Stream 四种模式的数值差异、峰值内存和边界伪影;
  • 是否联合训练图片与视频,单帧输入和可变长度输入的语义是否明确;
  • 主模型所需的潜尺度、归一化、Patch 规则和位置编码能否完全匹配;
  • 纯重建在目标分辨率、目标帧率和目标运动分布上的最坏样本,而非只看平均分;
  • Encode/Decode 各自的冷启动、稳态延迟、吞吐和显存;
  • 许可证、权重版本、精度支持和仓库实现是否与论文一致;
  • 失败时能否保存原视频、潜变量、解码帧和阶段日志,形成可复现证据链。

故障定位时,固定模型、提示词、Seed、采样器和后处理,只替换 VAE;随后固定 VAE,只改变采样步数或主模型。若两个实验同时变化,结果没有归因价值。对于 I2V,还要单独比较首帧经过 VAE 往返后的偏差,因为参考图与生成帧若处于不同表示路径,第一帧附近的色彩跳变和细节漂移可能在生成开始前就已经埋下。

结语

Video VAE 的真正价值不是“让视频变小”,而是规定主模型能看见什么、以多细的时空分辨率看见、为这些信息支付多少计算,以及结果如何重新落回像素世界。它既不是所有成片问题的替罪羊,也绝不是可以忽略的末端插件。

工程上最可靠的做法是先锁定表示合同,再训练或部署主模型:明确张量形状、压缩与 Patch 假设;把因果、缓存、分块和流式分别验收;建立纯重建与阶段计时基线;用责任边界表逐层排除。只有这样,Token 预算、运动能力、长视频扩展与伪影定位才会从经验调参变成可复现的系统工程。

FAQ

VAE 能不能跨模型家族替换?

只有形状、缩放、归一化、训练分布和时间语义全部兼容时才可能;不能只看输入输出尺寸。

因果 VAE 就一定支持流式吗?

不一定。因果性只约束依赖方向,流式还需要分块、状态缓存、边界处理和可接受的首段延迟。

端到端成片不好看,为什么先做纯重建?

纯重建把主模型排除在外,能先确认信息是否在进入生成模型前就已丢失。