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\. > >10%\)> |
|
| 模糊检测 | 内部训练的回归模型 | 过滤视觉上不清晰的内容 | |
| 时长/分辨率 | / | 过滤时长不超过4s的视频;在不同训练阶段会过滤掉过低分辨率的图像与视频 | |
| 视觉质量 | 聚类\&打分 | / | 使用视觉质量对数据进行过滤 1. 将数据分为100个簇; 2. 每个簇中挑选一部分数据进行人工打分(1-5),训练分类器; 3. 使用分类器对所有数据进行打分。 |
| 运动质量 | 质量分类 | ? | - 最佳:显著的运动、视角、幅度变化,干净、平滑的运动; - 中等:明显的运动,但可能存在多个主体/部分遮挡;可以在预训练中使用,帮助模型理解时空关系; - 静态:聊天/访谈类风格,运动少,但质量较高;需要使用,但降低采样比例; - 相机驱动:主体运动少,相机驱动画面运动(如航拍);大幅降低采样比例; - 低质量运动:过多主体的严重遮挡,模糊主体(如拥挤的街道);过滤; - 抖动:业余拍摄的带明显抖动的画面,导致运动模糊/前背景区分不明确;过滤; |
| 视觉文本数据 | 数据构造 | / | 提高文字渲染的真实性 - 在纯白色背景上渲染汉字,生成几亿张图片; - 真实图片/视频里用OCR识别->Qwen2-VL生成自然语言描述 |

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。
三阶段训练:
冻结ViT与LLM,仅训练MLP(1e-3);
全量数据,同时训练所有模块(LLM/MLP 1e-5,ViT 1e-6);
高质量数据上训练(LLM/MLP 1e-5,ViT 1e-6)。
评估:基于CAPability开发评估流水线,与Gemini Pro 1.5比较。在视频事件、相机角度与运动、风格和物体方面表现更好。

Model: architecture, training, evaluation
Wan-VAE
模型结构:

给定一个$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
三阶段训练:
在图像数据上训练一个2D图像VAE
将训练好的2D VAE用来初始化Wan的3D Causal VAE,使用低分辨率(128*128)与小帧数(5帧)的视频进行训练;损失:L1重构损失,KL损失,LPIPS感知损失。
在不同分辨率和帧数的高质量视频上对模型进行微调,合并一个来自3D判别器的GAN损失。
缓存机制:(假设t维度卷积核大小为3)如果t维度不压缩,缓存前2帧;如果t维度2倍压缩,缓存前1帧。



Model training
基本信息
模型架构:Wan-VAE,DiT,文本编码器。
DiT编码器有三个模块:Patchify,transformer block,unpatchify。其中额外有一个MLP+SiLU层用来处理time embedding。



文本编码器使用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作为重写模型。
在训练数据构造时,每张图片或者视频都配有多条描述(长/中/短x正式/非正式/诗意);
LLM prompt准则:不改变原始语义情况下增加细节;包含自然运动属性(添加动作);视频风格->内容摘要->详细描述。

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


Wan Application
重点讲TI2V一系列,从I作为ref,到加入v,到VCU范式;以及实时视频生成。其他的工作不是非常solid,只介绍整体结构。
T2I
因为模型在图像和视频上进行了联合训练,Wan天生就有生成高质量图片的能力(模型在图像数据上的训练量几乎是视频数据量的10倍)。

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的每一层。

这个方法(noise+condition+mask)可以扩展到其他的可控生成任务,例如首/尾帧控制、视频续写(Wan-animate核心机制之一)、随机帧插值。只需要设置不同的mask来引导模型即可。
训练数据:
图像到视频:使用SigLIP保留第一帧与视频内容相似性较大的视频;
视频续写:使用前1.5s与后3.5s的SigLIP相似度大于阈值的视频;
首尾帧变换:使用首帧与尾帧之间存在显著转移的数据样本比例。



Bonus: Wan-animate (TIV2V)
Wan-animate在Wan-I2V基础上构建。给定一张参考图片与一个参考视频,Wan-animate有两种animation和replacement两种模式。
Animation:让参考图片里的人物像视频里一样动起来;
Replacement:把参考视频里的人物替换成参考图片中的人物。

要实现这样的目标,有两个问题:
除了I2V基本要素之外,要额外关注什么:需要让模型关注到参考视频中的动作变化。以及,如果有必要,需要让模型额外关注到参考视频中的脸型/口型变化。
如何关注:可以在DiT前面拼接,可以在DiT中间使用cross attention,分别代表了信号需要“关注”的强度。

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。

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


训练模式:
只输入pose信号,不输入面部信号,针对Animation模式进行训练;
训练Face adapter:加入人脸控制信号,增加头部、眼睛、嘴区域的损失权重;
将模块与主模型结合,联合训练;
同时训练Animation模式与Replacement模式;
训练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,有两种方式可以加入到预训练好的模型中:
在channel维度拼接到noise latent上(类似wan-animate),然后全量微调模型的参数;
使用一个外部的context block注入到模型中,此时只需要训练外部context block的参数。
怎么获得条件上下文C:



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


Camera motion controllability

Real-time video generation
预训练的Wan模型指定了输出时间长度是5s或是10s,而实时视频生成要求生成无限长的视频,需要将模型从batch改成streaming;
模型需要进一步加速。
流式模型
主要思路:使用一个Streamer,使用预训练好的DiT模型初始化。将注意力计算集中在某个固定长度的窗口内,以队列的形式处理视频token,在指定的降噪步骤之后,最左侧的token被移出队列,在最右侧加入一个新的token。通常设置窗口大小为T,即降噪总步数。
在训练时,采样数量为2w的视频token,其中w是滑动窗口的大小。前面w个token用于预热模型,只计算后面w个token的损失。在推理时,最开始生成的w个token被丢弃。
速度变快,还是只是为了无限长?
模型加速与压缩
一致性模型蒸馏(CFG蒸馏),变为4步,允许以8-16fps速率渲染;
注意力与全连接层使用int8,其他使用TensorRT量化,允许在单个4090上实现8fps的性能。

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