简介:本文解释基于扩散模型的视频生成系统如何把文本或图像条件转为时序连贯的视频与音频,覆盖去噪过程、时空潜空间压缩、双流注意力、自适应算力分配和多镜头一致性,并分析速度、画质与显存之间的权衡。
本文讨论的是一类以扩散模型为核心的视频生成技术。系统接收文本描述、参考图像或镜头参数等条件,输出一段包含画面,并可能同时包含音频的视频。这类系统要同时解决三个问题:单帧画质要足够高,相邻帧之间的运动要连续,多个镜头之间的角色、环境和光线要保持一致。理解这些问题如何被解决,是判断一个视频生成方案能力边界的基础。
本文的分析基于通用的扩散模型与Transformer原理。原文描述的某些能力,例如按场景复杂度分配算力,只给出了效果层面的说明,没有公开完整实现细节,因此文中会以通用机制的方式解释其可能的实现逻辑,并标注这一点。
视频是按时间排列的图像序列。以10秒、每秒24帧、1920×1080分辨率计算,一段视频包含240帧,每帧约两百万像素,每个像素含三个颜色通道。若直接在像素空间建模,数据量和计算量都非常大,主要带来以下问题。
上述三个问题直接决定了系统的结构选择:先压缩数据量,再用注意力建模时空关系,再通过条件机制控制内容。
理解整个流程前,需要先掌握以下概念。
扩散模型(Diffusion Model):训练时,系统对真实数据逐步加入高斯噪声,直到数据接近纯噪声。模型学习的是反向过程,即在每一步根据当前带噪数据预测噪声或干净数据。生成时,系统从随机噪声出发,反复执行去噪,最终得到清晰样本。
潜空间(Latent Space):直接在像素上去噪成本过高,因此系统通常先用编码器把视频压缩到低维潜表示,去噪过程在潜空间完成,最后再用解码器还原为像素。压缩比例越大,计算越省,但细节损失的风险也越高。
时空patch(Spacetime Patch):潜表示是三维张量,包含时间、高度和宽度。系统把它切成小块,每块展平成一个token,形成序列,交给Transformer处理。
条件引导(Conditioning and Guidance):文本、参考图像等条件先经过编码器转为向量,再通过交叉注意力或拼接方式注入模型。无分类器引导(Classifier-free Guidance)是常用的增强手段。它同时计算有条件和无条件两次预测,再按引导系数放大两者的差异,使输出更贴近条件。代价是每一步的模型调用次数大约翻倍。
采样步数与调度器:采样步数指去噪迭代的次数,调度器决定每一步噪声水平如何下降。步数越少,生成越快,但误差累积越明显。
| 模块 | 主要职责 | 设计关注点 |
|---|---|---|
| 条件编码模块 | 将文本、参考图像转为语义向量 | 语义对齐的准确性 |
| 视频编解码器 | 压缩视频为潜表示,并还原为像素 | 压缩率决定计算量与细节上限 |
| 去噪主干(扩散Transformer) | 在每个时间步预测噪声 | 注意力结构决定时空建模能力 |
| 音频分支 | 生成与视频对齐的音频潜表示 | 与视频分支的信息交换方式 |
| 调度与采样控制 | 管理噪声水平、步数与引导强度 | 步数与生成延迟直接相关 |
| 编码封装与服务层 | 输出文件、记录状态、处理鉴权与限流 | 稳定性、安全与成本控制 |
各模块之间的分工可以概括为:编码模块负责“要生成什么”,编解码器负责“在什么表示空间中生成”,去噪主干负责“如何逐步得到内容”,服务层负责“如何安全、稳定地交付结果”。
一次完整的生成请求通常经过以下步骤。
下面的伪代码展示了去噪主循环的通用结构。
function generate(request):validate(request) # 校验时长、分辨率、镜头数cond = encode_condition(request.prompt, request.refs)null_cond = encode_condition("", []) # 无条件分支z = sample_gaussian_noise(shape_from(request)) # 视频与音频潜表示steps = build_noise_schedule(request.steps)for t in steps:eps_cond = model(z, t, cond)eps_uncond = model(z, t, null_cond)eps = eps_uncond + guidance_scale * (eps_cond - eps_uncond)z = scheduler_step(z, eps, t)frames, audio = decode(z)return package(frames, audio)
从伪代码可以看出,去噪循环的耗时主要来自模型调用次数,即步数乘以每步的调用次数。这也是后文讨论加速手段的出发点。
假设空间方向下采样8倍,时间方向下采样4倍,再做2×2的空间patch划分。以10秒、24帧每秒、1920×1080的视频为例:
注意力的计算量与token数的平方相关,486,000个token直接做全局注意力在工程上难以承受。这说明为什么实际系统必须同时采用多种手段:更高的压缩率、局部窗口注意力、分块计算、稀疏注意力或分层结构。压缩是一种有损操作,细小纹理、文字和手部等高频细节最容易在这一步损失。
视频和音频的时间尺度与信息密度差异很大。一秒视频可能是24帧,而一秒音频常常包含数万个采样点。因此常见做法是为两种模态分别设计独立的处