Ryuko Matoi 🎬 Wan2.1-T2V-14B

詳細

ファイルをダウンロード

モデル説明

説明

"君の意見なんてどうでもいい。誰が何を言おうと、俺は俺の道を進む。" – 真田竜子

使用方法

トリガー語は「Ryuko-chan」です。

私は特定のプロンプト形式を使っていません(まだ実験中です)。しかし、ほとんどのプロンプトは「High quality 2D art animation.」で始めます。たとえば:

「High quality 2d art animation. Ryuko-chan、長い赤髪と黒いトレンチコートを着て、倒壊した超高層ビルの上に立っている。遠くの都市は燃え、煙が暗い空へと昇っている。風が彼女のコートをはためかせ、彼女は腕を組んでいる。カメラが突然、彼女の決意に満ちた顔にズームインする。彼女はにやりと笑い、少し頭を傾けてウインクする。」

推論には、Kijaiのラッパーを使用しています。残念ながら、Civitaiはこのツールからのメタデータを正しく解析できないようですが、ワークフローは各クリップに埋め込まれています。念のため、JSON形式のワークフローの例を以下に提供します。まだ開発中であり、右側は少しごちゃごちゃしていますが、全体的には完全に機能します。

私が投稿するすべてのクリップはLoRAの生出力です。アップスケーリングやフレーム補間は一切使用していません(これらはLoRAの本当の能力を誤った形で示すことになります)。以下のパラメータはすべてのクリップで共通です:

Sampler: unipc
Steps: 20
Cfg: 6
Shift: 7

私のワークフローを確認すればわかると思いますが、Wan2.1がリリースされて以降、可能なすべての最適化手法を活用しています。Comfyanonymous、Kijai、TeaCacheチーム、そしてその他の多くのソフトウェア開発者・MLエンジニアの皆様には、消費級GPU上でKlingレベルの動画モデルを、品質をほとんど損なうことなく満足のいく速度で実行可能にしてくれたことに、心から感謝したいと思います。

私は最初に「純粋な」FP8 + SDPAから始め、以下に各最適化技術による速度向上の内訳を示します。

参考までに、私の環境は:RTX 3090、64 GB RAM、Win 11、Python 3.11.6、Torch 2.7.0.dev20250311+cu126、Sage Attention 2.1.1、Triton 3.2.0、NVIDIAドライバ 572.16、ComfyUI portable v0.3.26です。

以下に挙げる時間は、ギャラリー内の紹介用クリップのレンダリング時間ではありません。これらの多くは640x480x81で、合計時間に約2分追加されます。しかし、私は普段50〜60個のプロンプトを一度に起動し、数時間後に結果を収集するため、問題ありません。

ただし、私が最も重要視するのは、Wan-14B T2Vのテスト中に異なるLoRAバージョンを比較する際の時間です。この段階では、512x512x65の解像度を使用しています。これらのテストクリップの99%は生成直後にゴミ箱に捨てられますが、LoRAの品質を明確に評価できるため、テスト時の推論速度を可能な限り速くする必要があります。

512x512x65クリップ、20ステップ、UniPCサンプラーの場合:

(DiT推論フェーズのみを対象としています。UMT5によるプロンプトエンコードやVAEによる潜在変数のデコード時間は最適化の影響を受けず、わずか2〜3秒と無視できるほど短いからです。)

  • fp8_e4m3fn + sdpa -> 09:24 (28.24s/it)

  • fp8_e4m3fn + sageattention 2 -> 06:53 (20.70s/it) +36% (1.36x)

  • fp8_e52m + torch.compile + sageattention 2 -> 06:21 (19.08s/it) +48% (1.48x)

  • fp8_e52m + torch.compile + sageattention 2 + teacache (0.250/6) -> 04:29 (13.50s/it) +109% (2.09x)

  • fp8_e52m + torch.compile + sageattention 2 + teacache + fp16_fast -> 03:23 (10.19s/it) +177% (2.77x)

したがって、品質の大幅な低下なしに、ほぼ3倍の速度向上が実現されました(私の用途では)。同じシードで、TeaCache/Sage Attention 2を有効・無効にしたクリップを比較しましたが、品質の明確な低下は確認できませんでした。非常に複雑なプロンプトで大量の動きがある場合、わずかな差異があるかもしれませんが、それらは「素の」状態でもすでに厳しい傾向があります。もし気になりますが、私はEnhance-A-VideoとSLG(レイヤー9、0.2–0.8)を広く活用しており、これらはクリップの品質向上と動きの不自然さの軽減に正の影響を与えているように見えます。

この速度向上は、HVからWanに切り替える大きな理由の一つでした。Wanはより高い品質を提供しますが、私はHVの高速レンダリングに慣れ親しんでいました。Wanでも同程度の速度を実現できたことで、移行が価値あるものとなりました。

学習

私は215枚の画像を使用しました(その多くは『Kill la Kill』の25エピソードから18,461枚のスクリーンキャプチャを手動で選定し、公式アートワークをいくつか加えたものです)。これらはTHUDM/cogvlm2-llama3-chat-19Bを用いて、以下のプロンプトでキャプション付けされました:

"このアートワークを詳細に説明してください。視覚的なスタイル、設定、雰囲気、芸術的技法に焦点を当ててください。暗い髪の女性キャラクターがいる場合、彼女を『Ryuko-chan』と呼んでください。彼女の服、アクセサリー、ポーズに言及してください。しかし、顔の特徴、体型、身体的属性については記述しないでください。具体的なアートスタイルの用語(例:セルシャドウ、ペインターly、水彩、デジタルイラスト)と、美的特徴を定義する視覚的要素を含めてください。照明、色調、構図、注目すべき芸術的影響も説明してください。"

私の目的は、Ryukoの服や髪の色を自由に変更できるようにしながら、その他の外見(顔の特徴、体型など)は原本のまま正確に認識できるようにすることでした。このアプローチはうまく機能し、WanVideoは(私が投稿した例からもわかるように)素晴らしい結果を出してくれました。残念ながら、歯車のような瞳の形状は学習されませんでしたが、データセットに近接ショットが十分に不足していたためです。

Ryuko以外の名前は一切キャプションに含めませんでした。そのため、モデルはSenketsuやハサミの Bladeの視覚的特徴を学習している可能性はありますが、これらを明示的に呼び出しても正しく動作しないかもしれません(まだ十分にテストしていません)。しかし、これは意図的な選択でした——モデルにRyukoと彼女の外見だけを教えるつもりでした。

彼女の衣装や髪の色が明示的に記述されていない場合、基本的にオリジナルの衣装にデフォルトされます。日常シーンでは通常の制服を着ており、戦闘や激しいシーンではSenketsuを好んで着用します。

(当初、スタイルではなくキャラクターローラだけを作成し、リアルなスタイルでもRyukoを描けるようにするつもりでした。しかし、データセットのバイアスが強すぎて、結果としてオリジナルシリーズのスタイルでのみ描画できるようになりました。しかしこれは悪くありません。そのため、正確には「キャラクター+スタイルの混合LoRA」と呼ぶべきです。)

最初のLoRAバージョンは1.3Bモデルでdiffusion-pipeを使って訓練しましたが、結果に満足できませんでした。1.3Bモデルは(私の意見では)品質面でHVと競争できるほど小さすぎます(利点は速度とリソース要件のみ)。2番目のバージョンはai-toolkitで訓練しましたが、これも私の期待したほど良くなかったです(おそらくai-toolkitがキャプションによる訓練をまだサポートしていないためです)。

最終的に、現在の(成功した)バージョンは、musubi-tunerを使って14Bモデルで訓練しました。以下に私が使用したコマンドを示します(musubi-tunerパイプラインを起動するため、.batファイルを作成しているため、訓練コマンドの形式はこの通りです)。簡単な概要として、重要なパラメータのほとんどはデフォルト値と同一ですが、学習率だけを7e-5に変更しました。40エポック(17,630ステップ、エポックごと430ステップ)訓練し、3日間のテストの後、ステップ15,050のチェックポイントを最も成功したと選択しました。モデルはまだ改善の傾向があり、トレーニング損失の動きも好ましかったため、もっとステップを増やしても良かったかもしれません。

  • cache_latents (vae):
python wan_cache_latents.py --dataset_config G:/samples/musubi-tuner/_ryuko_matoi_wan14b_config.toml --vae G:/samples/musubi-tuner/wan14b/vae/wan_2.1_vae.safetensors
  • cache_prompts (t_enc):
python wan_cache_text_encoder_outputs.py --dataset_config G:/samples/musubi-tuner/_ryuko_matoi_wan14b_config.toml --t5 G:/samples/musubi-tuner/wan14b/tenc/models_t5_umt5-xxl-enc-bf16.pth --batch_size 16 
  • データセット設定ファイル(手動で書いたのではなく、画像ファイルのフォルダをスキャンし、各画像のスケーリング解像度を計算して最大辺が720pxを超えないようにし、アスペクト比を保ちながら16で割り切れるように準備しました。物理的なリサイズは行わず、musubi-tunerのバケット機構のために前処理を行っています。その後、同じ解像度の画像をサブフォルダにグループ化し、musubi-tuner用のメタデータYAMLファイルを生成しています):
[general]
caption_extension = ".txt"
batch_size = 1
enable_bucket = true
bucket_no_upscale = false

[[datasets]]
resolution = [528, 768]
image_directory = "H:/datasets/ryuko_matoi_wan_video/1057x1516x1"
cache_directory = "H:/datasets/ryuko_matoi_wan_video/1057x1516x1/cache"
num_repeats = 2

[[datasets]]
resolution = [768, 432]
image_directory = "H:/datasets/ryuko_matoi_wan_video/1280x720x1"
cache_directory = "H:/datasets/ryuko_matoi_wan_video/1280x720x1/cache"
num_repeats = 2

[[datasets]]
resolution = [592, 768]
image_directory = "H:/datasets/ryuko_matoi_wan_video/1600x2033x1"
cache_directory = "H:/datasets/ryuko_matoi_wan_video/1600x2033x1/cache"
num_repeats = 2

[[datasets]]
resolution = [400, 768]
image_directory = "H:/datasets/ryuko_matoi_wan_video/1727x3264x1"
cache_directory = "H:/datasets/ryuko_matoi_wan_video/1727x3264x1/cache"
num_repeats = 2

[[datasets]]
resolution = [720, 768]
image_directory = "H:/datasets/ryuko_matoi_wan_video/1917x2002x1"
cache_directory = "H:/datasets/ryuko_matoi_wan_video/1917x2002x1/cache"
num_repeats = 2

[[datasets]]
resolution = [768, 432]
image_directory = "H:/datasets/ryuko_matoi_wan_video/1920x1080x1"
cache_directory = "H:/datasets/ryuko_matoi_wan_video/1920x1080x1/cache"
num_repeats = 2

[[datasets]]
resolution = [736, 768]
image_directory = "H:/datasets/ryuko_matoi_wan_video/1920x1963x1"
cache_directory = "H:/datasets/ryuko_matoi_wan_video/1920x1963x1/cache"
num_repeats = 2

[[datasets]]
resolution = [480, 768]
image_directory = "H:/datasets/ryuko_matoi_wan_video/1920x3038x1"
cache_directory = "H:/datasets/ryuko_matoi_wan_video/1920x3038x1/cache"
num_repeats = 2

[[datasets]]
resolution = [768, 576]
image_directory = "H:/datasets/ryuko_matoi_wan_video/2363x1813x1"
cache_directory = "H:/datasets/ryuko_matoi_wan_video/2363x1813x1/cache"
num_repeats = 2

[[datasets]]
resolution = [768, 624]
image_directory = "H:/datasets/ryuko_matoi_wan_video/3877x3208x1"
cache_directory = "H:/datasets/ryuko_matoi_wan_video/3877x3208x1/cache"
num_repeats = 2

[[datasets]]
resolution = [640, 768]
image_directory = "H:/datasets/ryuko_matoi_wan_video/690x820x1"
cache_directory = "H:/datasets/ryuko_matoi_wan_video/690x820x1/cache"
num_repeats = 2

[[datasets]]
resolution = [576, 768]
image_directory = "H:/datasets/ryuko_matoi_wan_video/690x920x1"
cache_directory = "H:/datasets/ryuko_matoi_wan_video/690x920x1/cache"
num_repeats = 2

[[datasets]]
resolution = [512, 768]
image_directory = "H:/datasets/ryuko_matoi_wan_video/800x1195x1"
cache_directory = "H:/datasets/ryuko_matoi_wan_video/800x1195x1/cache"
num_repeats = 2

[[datasets]]
resolution = [768, 496]
image_directory = "H:/datasets/ryuko_matoi_wan_video/935x608x1"
cache_directory = "H:/datasets/ryuko_matoi_wan_video/935x608x1/cache"
num_repeats = 2
  • サンプリングファイル:
# prompt 1
Ryuko-chan with blonde hair is walking on the beach, camera zoom out.  --w 384 --h 384 --f 45 --d 7 --s 20

# prompt 2
Ryuko-chan dancing in the bar. --w 384 --h 384 --f 45 --d 7 --s 20
  • 訓練コマンド:
accelerate launch --num_cpu_threads_per_process 1 --mixed_precision bf16 wan_train_network.py ^
    --task t2v-14B ^
    --dit G:/samples/musubi-tuner/wan14b/dit/wan2.1_t2v_14B_bf16.safetensors ^
	--vae G:/samples/musubi-tuner/wan14b/vae/wan_2.1_vae.safetensors ^
	--t5 G:/samples/musubi-tuner/wan14b/tenc/models_t5_umt5-xxl-enc-bf16.pth ^
	--dataset_config G:/samples/musubi-tuner/_ryuko_matoi_wan14b_config.toml ^
	--sdpa ^
	--mixed_precision bf16 ^
	--fp8_base ^
	--fp8_t5 ^
    --optimizer_type adamw8bit ^
	--learning_rate 7e-5 ^
	--gradient_checkpointing ^
    --max_data_loader_n_workers 2 ^
	--persistent_data_loader_workers ^
    --network_module networks.lora_wan ^
	--network_dim 32 ^
	--network_alpha 32 ^
    --timestep_sampling shift ^
	--discrete_flow_shift 3.0 ^
    --max_train_epochs 50 ^
	--save_every_n_epochs 1 ^
	--seed 42 ^
    --output_dir G:/samples/musubi-tuner/output ^
	--output_name ryuko_matoi_wan14b ^
	--log_config ^
	--log_with tensorboard ^
	--logging_dir G:/samples/musubi-tuner/logs ^
	--sample_prompts G:/samples/musubi-tuner/_ryuko_matoi_wan14b_sampling.txt ^
	--save_state ^
	--sample_every_n_epochs 1

訓練中の速度は約4秒/ステップ、VRAM使用量は約21GBでした。--fp8_baseおよび--fp8_t5フラグ以外に、特別な最適化は適用していません。

他のLoRAとの互換性テストは実施しておらず、今後も行う予定はありません。

また、I2Vモデルでのテストも行っていません(実際、まだどれもダウンロードしていません)。

(ちなみに、私はLoRAと同時にデータセットも公開しましたが、特に目立つものはありません。)

結論

これは私がWan Video 2.1-T2V 14B用に作成した最初(かつ成功した)のLoRAです。このモデルにとてもワクワクしています。トレーニングは楽しく、私の現在の限られた経験に基づけば、コンセプトやスタイルを非常に優れた形で理解しています。計画しているすべてのLoRAをトレーニングするのが待ちきれません!これまで、私は生成AIモデルをスタイル用にしかトレーニングしていませんでしたが、今ではスタイルだけでなく、VFX、コンセプト、動きなどにも対応するモデルのトレーニングに非常に熱意を感じています。

このLoRAについて言えば、完璧とは言えませんが、生成した3つのクリップのうち1つは成功(つまり、プロンプトに従い、望ましくないアーティファクトが含まれていない)しました。これは十分な成功だと考えています。この成果は、モデル自体の能力によるものです。私はこのLoRAを画像のみでトレーニングしました(今後のLoRAでは動画クリップも使用する予定です)が、モデルはオリジナルシリーズのアニメーション技術や視覚的特徴について多くのことを学習(あるいはより広く推論)しました。例えば、屋外シーンでの過剰で(常に適切とは限らない xD)レンズフレアの使用、誇張された顔のアニメーションなどが挙げられます。

また、このモデルは多様なデータセット(少なくとも100枚の画像)と低い学習率(1e-4は高すぎます)の恩恵を受けていると思います。次のLoRAでは、学習率を5e-5以下に抑えます。トレーニングステップは増えるかもしれませんが、この方が過学習せずに、すべての細部をよりよく学習できます。

このモデルで生成された画像

画像が見つかりません。