Wan: multimodal training and application

Wan Fundamentation

Data pipeline

Pre-training data

目标:在大量带噪数据中挑选出高质量、高多样性的数据。

数据构成:内部版权数据+公开数据。

数据构造:四阶段数据清洗。

阶段 内容 工具 目的
基础维度 文本检测 轻量级OCR检测器 过滤过多文本元素的视频和图像
审美评估 LAION-5B 过滤低质量数据
NSFW检测 内部安全评估模型 过滤不当内容
水印与标志检测 ? 裁剪图像/视频
黑框检测 启发式检测方法 裁剪黑色边框
过曝检测 内部训练的分类器 过滤异常色调分布的数据
合成图像检测 内部训练的分类器 过滤“污染”图像
> Even minimal contamination (\<10%\) by="" generated="" images="" can="" significantly="" degrade="" the="" performance="" of="" model\.>
>
模糊检测 内部训练的回归模型 过滤视觉上不清晰的内容
时长/分辨率 / 过滤时长不超过4s的视频;在不同训练阶段会过滤掉过低分辨率的图像与视频
视觉质量 聚类\&打分 / 使用视觉质量对数据进行过滤
1. 将数据分为100个簇;
2. 每个簇中挑选一部分数据进行人工打分(1-5),训练分类器;
3. 使用分类器对所有数据进行打分。
运动质量 质量分类 ? - 最佳:显著的运动、视角、幅度变化,干净、平滑的运动;
- 中等:明显的运动,但可能存在多个主体/部分遮挡;可以在预训练中使用,帮助模型理解时空关系;
- 静态:聊天/访谈类风格,运动少,但质量较高;需要使用,但降低采样比例;
- 相机驱动:主体运动少,相机驱动画面运动(如航拍);大幅降低采样比例;
- 低质量运动:过多主体的严重遮挡,模糊主体(如拥挤的街道);过滤;
- 抖动:业余拍摄的带明显抖动的画面,导致运动模糊/前背景区分不明确;过滤;
视觉文本数据 数据构造 / 提高文字渲染的真实性
- 在纯白色背景上渲染汉字,生成几亿张图片;
- 真实图片/视频里用OCR识别->Qwen2-VL生成自然语言描述

image\.png

Post-training data

目标:通过高质量的数据,提高生成视频的视觉保真度以及运动的动态效果。图像数据经过优化以提升视觉质量,视频数据经过专门处理以提升运动质量。

  • 图像处理:使用专家模型预测得分前20%的图像(考虑风格与类别因素保证分布多样性);人工收集高质量图像,填补数据集中的缺失的概念。收集了几百万张图像。

  • 视频处理:视觉质量+运动质量分类器同时过滤,将近千万量级。

Caption (train VL model)

训练一个内部caption模型,给每张图像和视频都生成高度描述性的标注。

训练数据集:

  • 开源:通用标注能力。caption数据集,visual QA数据(动作、QA、OCR),纯文本指令数据;

  • 内部:特定领域的能力。名人、地标、电影角色生成;计数能力;OCR能力;相机角度与运动;细粒度分类;空间关系理解;重标注能力;编辑能力;图像组描述;人工标注的图像和视频caption(高质量数据,用于模型训练的最后阶段)。

训练数据集是怎么构造的?除了开源数据,以及少部分内部数据外,猜测相当一部分都是蒸馏其他模型的数据(we collect/curate/create/gather)。

模型结构:和LLaVa类似,先ViT提取视觉embedding,通过两层MLP变换后输入给Qwen LLM;

  • 对于图像输入,采用动态高分辨率,把一张图片最多分成7个patch,对于每个patch都pooling到12*12的网格表示来减少计算量;

  • 对于视频输入,使用抽帧的方式:每秒采样3帧,最多采样129帧。采用slow-fast encoding策略:每4帧里保留一帧为原清晰度,其他的帧做avg pooling。

三阶段训练:

  1. 冻结ViT与LLM,仅训练MLP(1e-3);

  2. 全量数据,同时训练所有模块(LLM/MLP 1e-5,ViT 1e-6);

  3. 高质量数据上训练(LLM/MLP 1e-5,ViT 1e-6)。

评估:基于CAPability开发评估流水线,与Gemini Pro 1.5比较。在视频事件、相机角度与运动、风格和物体方面表现更好。

截屏2026\-03\-10 14\.53\.06\.png

Model: architecture, training, evaluation

Wan-VAE

模型结构:

image\.png

给定一个$V\in \textbf{R}^{(1+T)\times H\times W \times 3}$,Wan-VAE将其时空维度压缩到$[1+T/4,H/8,W/8]$,将通道数C扩展到16。其中第一帧只进行空间压缩,不进行时序压缩,方便更好的处理图像数据。

时间因果性:确保未来帧不影响过去帧。将Group-norm替换为RMSNorm来保持时间因果性。使用3D Causal卷积,空间维度不设因果限制,时间维度只对过去补零。

Code: https://github\.com/Wan\-Video/Wan2\.1/blob/main/wan/modules/vae\.py

三阶段训练:

  1. 在图像数据上训练一个2D图像VAE

  2. 将训练好的2D VAE用来初始化Wan的3D Causal VAE,使用低分辨率(128*128)与小帧数(5帧)的视频进行训练;损失:L1重构损失,KL损失,LPIPS感知损失。

  3. 在不同分辨率和帧数的高质量视频上对模型进行微调,合并一个来自3D判别器的GAN损失。

缓存机制:(假设t维度卷积核大小为3)如果t维度不压缩,缓存前2帧;如果t维度2倍压缩,缓存前1帧。

image\.png

image\.png

image\.png

Model training

基本信息

模型架构:Wan-VAE,DiT,文本编码器。

DiT编码器有三个模块:Patchify,transformer block,unpatchify。其中额外有一个MLP+SiLU层用来处理time embedding。

image\.png

image\.png

image\.png

文本编码器使用umT5,作者发现umT5具有(1)多语言编码能力强;(2)组合方面基于其他单向注意力机制模型;(3)表现出较好的收敛性。

  • 预训练:损失使用Flow Matching,AdamW优化器,权重衰减系数1e-4,初始学习率1e-4,bf16混合精度。

    • 低分辨率256px文本到图像初始化14B模型参数;

    • 使用256px图像+(192px, 16fps, 5s)视频片段联合训练;

    • 图像和视频分辨率提升到480px;

    • 图像和视频分辨率提升到720px。整个过程中视频长度保持5s不变。

  • 后训练:使用相同的结构和优化器配置,使用后训练数据集在480px和720px下联合训练。

模型缩放与训练效率

【TODO】

提示对齐

目的:将用户的输入提示与训练期间使用的prompt进行格式与风格的对齐,从而提高模型推理的有效性。

使用Qwen2.5-Plus作为重写模型。

  1. 在训练数据构造时,每张图片或者视频都配有多条描述(长/中/短x正式/非正式/诗意);

  2. LLM prompt准则:不改变原始语义情况下增加细节;包含自然运动属性(添加动作);视频风格->内容摘要->详细描述。

image\.png

Evaluation

现有的视频生成提供方法(FVD/FID)和人类体感缺乏一致性。论文提出了Wan-Bench作为评估数据集,包含三个维度:动作质量、图像质量、指令遵循,总计14个细粒度指标。

image\.png

image\.png

Wan Application

重点讲TI2V一系列,从I作为ref,到加入v,到VCU范式;以及实时视频生成。其他的工作不是非常solid,只介绍整体结构。

T2I

因为模型在图像和视频上进行了联合训练,Wan天生就有生成高质量图片的能力(模型在图像数据上的训练量几乎是视频数据量的10倍)。

image\.png

TI2V

做法简述:将condition latent与noise latent在channel维度拼接,并添加mask。

我们假设要生成的视频维度是$V\in R^{C\times T \times H\times W}$,对于输入图片$I \in R^{C\times 1 \times H \times W}$,使用零填充的帧在时间维度进行拼接,将图片也填充到$I’\in R^{C\times T \times H \times W}$。两者过Wan-VAE之后的latent shape相同,都为$c\times t\times h \times w$,其中c=16, t=1+(T-1)/4, h=H/8, w=W/8。

然后初始化mask,用来表示要保留的帧$M\in \{0,1\}^{1\times T\times h \times w}$。将其reshape到$s\times t\times h\times w$,其中$s$是Wan-VAE的时间步幅,在这里值为4。

将噪声latent,条件latent与mask在channel维度拼接,然后通过Wan的DiT模型。此时TI2V的输入在patchify之前是$(2c+s)\times t\times h\times w$,和Wan模型训练时的$c\times t\times h\times w$不一致。由于patchify过程是将t,h,w维度展开到seq_len,所以channel维度的不一致不会影响seq_len,只会影响hidden_dim,所以使用了一个额外的MLP用零初始化来保证训练的稳定性。

图片的信息额外使用CLIP encoder,与text prompt embedding进行交叉注意力之后,再作为一个统一的embedding注入到DiT的每一层。

image\.png

这个方法(noise+condition+mask)可以扩展到其他的可控生成任务,例如首/尾帧控制、视频续写(Wan-animate核心机制之一)、随机帧插值。只需要设置不同的mask来引导模型即可。

训练数据:

  1. 图像到视频:使用SigLIP保留第一帧与视频内容相似性较大的视频;

  2. 视频续写:使用前1.5s与后3.5s的SigLIP相似度大于阈值的视频;

  3. 首尾帧变换:使用首帧与尾帧之间存在显著转移的数据样本比例。

image\.png

image\.png

image\.png

Bonus: Wan-animate (TIV2V)

Wan-animate在Wan-I2V基础上构建。给定一张参考图片与一个参考视频,Wan-animate有两种animation和replacement两种模式。

  • Animation:让参考图片里的人物像视频里一样动起来;

  • Replacement:把参考视频里的人物替换成参考图片中的人物。

image\.png

要实现这样的目标,有两个问题:

  • 除了I2V基本要素之外,要额外关注什么:需要让模型关注到参考视频中的动作变化。以及,如果有必要,需要让模型额外关注到参考视频中的脸型/口型变化。

  • 如何关注:可以在DiT前面拼接,可以在DiT中间使用cross attention,分别代表了信号需要“关注”的强度。

image\.png

Wan-animate探索出来的答案:人物动作通过pose信号注入;脸型/口型需要额外且更强的信号注入,在常规的DiT block中间歇插入Face Block来实现。

关键要素:

  • 注入pose信号:ViTPose进行动作提取,经过Wan-VAE压缩到与latent时空维度相同。在patchify之后直接加和到noise latent中(patchify/add/concat先后顺序似乎与图片中所示不同)。

  • 注入脸部信号:利用ViTPose提取的面部骨骼点裁剪出面部区域。在最终输入之前使用数据增强技术,来消除身份信息,只保留表情信息。在40层的Wan-14B模型中每隔5层插入一个Face-Attention,其只对每一个latent对应位置进行attention。

image\.png

  • 重打光LoRA:角色与环境来自不同光源。使用IC-Light构造标签数据。

image\.png

image\.png

训练模式:

  1. 只输入pose信号,不输入面部信号,针对Animation模式进行训练;

  2. 训练Face adapter:加入人脸控制信号,增加头部、眼睛、嘴区域的损失权重;

  3. 将模块与主模型结合,联合训练;

  4. 同时训练Animation模式与Replacement模式;

  5. 训练Relighting LoRA。

推理模式:对于长视频生成,取前面的1/5帧作为时间引导。


Wan-TI2V沿用的channel维度拼接范式支持用首尾帧、指定位置单帧/多帧,甚至使用一整个视频作为参考条件的后训练,只需要改变不同的mask信号。

Unified video editing

详见VACE:https://arxiv\.org/pdf/2503\.07598

统一视频编辑,整合了视频的repainting, editing, controllable generation, customized generation, frame reference generation, efficient generation, ID-referenced video synthesis.

首先需要对于所有任务,制定统一的输入范式:

$\begin{equation}
V=[T;F;M]
\end{equation}$

其中T是文本表示,F是上下文视频帧序列${u_1,u_2,…,u_n}$,M是掩码${m_1,m_2,…,m_n}$。这里u属于RGB空间且规范化到[-1,1],而m是二进制,1/0代表需要编辑或者不需要编辑的位置。F与M在空间维度都是对齐的。F与M在时空维度都进行了对齐。

假设给定了整体的条件上下文C,有两种方式可以加入到预训练好的模型中:

  1. 在channel维度拼接到noise latent上(类似wan-animate),然后全量微调模型的参数;

  2. 使用一个外部的context block注入到模型中,此时只需要训练外部context block的参数。

怎么获得条件上下文C:

image\.png

image\.png

image\.png

Video personalization

目标:生成特征与用户输入的人物参考图强一致的视频。可以看作是I2V在一致性方向上的进一步探索。

image\.png

image\.png

Camera motion controllability

image\.png

Real-time video generation

  1. 预训练的Wan模型指定了输出时间长度是5s或是10s,而实时视频生成要求生成无限长的视频,需要将模型从batch改成streaming;

  2. 模型需要进一步加速。

流式模型

主要思路:使用一个Streamer,使用预训练好的DiT模型初始化。将注意力计算集中在某个固定长度的窗口内,以队列的形式处理视频token,在指定的降噪步骤之后,最左侧的token被移出队列,在最右侧加入一个新的token。通常设置窗口大小为T,即降噪总步数。

在训练时,采样数量为2w的视频token,其中w是滑动窗口的大小。前面w个token用于预热模型,只计算后面w个token的损失。在推理时,最开始生成的w个token被丢弃。

速度变快,还是只是为了无限长?

模型加速与压缩

  1. 一致性模型蒸馏(CFG蒸馏),变为4步,允许以8-16fps速率渲染;

  2. 注意力与全连接层使用int8,其他使用TensorRT量化,允许在单个4090上实现8fps的性能。

image\.png

Audio generation

V2A,只使用了pipeline中的部分数据,没有使用Wan模型参数。对于人声存在局限性。

image\.png