動画生成 SOTA

Wan2.2 技術詳細解説

Diffusion Transformer (DiT)をベースに、Flow MatchingMixture-of-Experts (MoE)を統合した次世代動画生成モデル。

アーキテクチャ概要

Wan2.2はエンドツーエンドの動画生成システムです。従来のU-Netを捨て、DiTアーキテクチャを採用して長シーケンスの動画トークンを処理します。パラメータ数は27Bに達しますが、MoEの疎な活性化メカニズムにより、推論時のVRAM使用量は14Bモデル相当です。

統一入力表現 (VCU)

テキスト、フレーム、マスクを統一的にエンコード。

効率的な時空間圧縮

Wan-VAEは4×8×8の圧縮率を実現し、情報圧縮倍率は256倍に達します。

多言語理解

umT5エンコーダーを採用し、中英バイリンガルプロンプトをネイティブサポート。

データフローパイプライン

動画入力
テキストプロンプト
Wan-VAE エンコーダー
3D Causal Conv
umT5 エンコーダー
Text Embedding
DiT コア
フローマッチング
MoE 切り替え
Wan-VAE デコーダー
Reconstruction

時空間 VAE:圧縮の芸術

動画データには高い冗長性が含まれています。Wan-VAEは3D畳み込みにより、空間と時間の次元で同時に圧縮を実現しました。
->

主要な技術詳細:

  • 因果的3D畳み込み (Causal 3D Conv): フレームのエンコードが前のフレームのみに依存することを保証。
  • 混合損失関数: L1、KL、LPIPS、GAN損失の組み合わせ。
  • 特徴キャッシュ: 前のタイムステップの特徴をキャッシュし、無限長の動画生成をサポート。

Flow Matching 原理

可視化比較:Flow Matching vs. 従来の拡散

Wan2.2はフローマッチング(Flow Matching)を採用しており、その生成軌跡は直線(Optimal Transport Path)です。従来の拡散モデルの「ランダムウォーク」パスに比べ、効率が高く、トレーニングが安定しています。

入力 Noise
出力 Video
Flow Matching (直線)
従来の拡散 (ランダム)

トレーニング目標式:

モデルは速度ベクトルを直接予測します。

なぜFlow Matchingなのか?

従来の拡散モデル(DDPM)は確率微分方程式(SDE)をシミュレートし、パスは曲がっています。Flow Matchingはノイズからデータへの決定論的常微分方程式(ODE)を構築します。直線パスにより、大きなステップサイズ(20-50ステップ)が可能です。

数学的定義

  • 1. 補間パス:
  • 2. ベクトル場:
  • 3. 損失関数:

Mixture-of-Experts (MoE) アーキテクチャ

Wan2.2のMoEは語彙を増やすためではなく、ノイズ除去プロセスの時間次元に特化しています。動画生成の初期(構図)と後期(詳細)では、全く異なる能力が必要です。

インタラクティブデモ:MoE 動的切り替え

総パラメータ: 27B | アクティブ: 14B
純粋ノイズ (Input) 生成動画 (Output)
初期ノイズ除去 (High Noise) 詳細化段階 (Low Noise)
現在のタイムステップ 1.00

アクティブモデル

高ノイズエキスパート

フォーカスタスク

全体レイアウトと構造

切り替え閾値
t

全体レイアウトと構造

エキスパート分担表

コンポーネント高ノイズエキスパート低ノイズエキスパート
活性化条件低 SNR (初期)高 SNR (後期)
主な役割大きな動き、シーンレイアウトテクスチャ、光と影の詳細
学習戦略ゼロから学習Wan2.1に基づいて微調整

コード実装

以下のコードは、Hugging Face `diffusers` ライブラリを使用してWan2.2モデルをロードし、動画を生成する方法を示しています。MoEの重み切り替えは内部で自動的に処理されます。

Python 推論コード (Diffusers)
import torch
from diffusers import WanPipeline
from diffusers.utils import export_to_video

# 1. モデルをロード (MoE重みを自動ロード)
# 以下のコードは、Hugging Face `diffusers` ライブラリを使用してWan2.2モデルをロードし、動画を生成する方法を示しています。MoEの重み切り替えは内部で自動的に処理されます。
pipe = WanPipeline.from_pretrained(
    "Wan-AI/Wan2.2-T2V-A14B-Diffusers",
    torch_dtype=torch.bfloat16
)

# 2. VRAM節約のためCPUオフロードを有効化
pipe.enable_model_cpu_offload()

# 3. 動画生成 (Flow Matchingは約50ステップ)
prompt = "A cinematic drone shot of a futuristic city with flying cars, neon lights, 4k, high quality."
output = pipe(
    prompt=prompt,
    height=720,
    width=1280,
    num_inference_steps=50,
    guidance_scale=5.0
).frames[0]

# 4. 結果を保存
export_to_video(output, "wan_futuristic_city.mp4")