Hugging Face SDXL Dreambooth LoRA 高度トレーニングガイド
Hugging Face は、Stable Diffusion XL (SDXL) Dreambooth LoRA 用の高度なトレーニングスクリプトをリリースしました。これは、Replicate の Cog トレーナーからの Pivotal Tuning 手法と、Kohya トレーナーからの Prodigy オプティマイザを組み合わせたものです。この統合により、最小限の画像で高品質なコンセプト捕捉を実現し、ベース SDXL モデルの美的品質を維持することを目指しています。
コンセプト表現のための Pivotal Tuning
Pivotal Tuning は Textual Inversion と標準的な拡散ファインチューニングを組み合わせ、既存トークンからの意味的干渉を防ぎます。モデルの埋め込み空間に事前の関連がある可能性のある希少トークン(例: "sks")を再利用する代わりに、Pivotal Tuning はテキストエンコーダーに新しいトークンを挿入します。
これらの新しいトークンは新しいコンセプトを表すように最適化されます。トレーニングプロセスは通常、トレーニングエポックの前半で Textual Inversion を実行(--train_text_encoder_ti_frac で制御)し、その後 UNet の最適化に進むという流れです。これにより、重みのファインチューニングを行う前にモデルがコンセプトのクリーンな表現を学習します。
適応型オプティマイザと Prodigy
学習率や weight decay の手動ハイパーパラメータ調整の必要性を減らすため、Hugging Face は適応型オプティマイザを推奨しています。Adafactor も選択肢の一つですが、本ガイドでは Dreambooth LoRA トレーニングに特に有益な Prodigy を強調しています。
Prodigy は過去の勾配に基づいて各パラメータの学習率を動的に調整します。Prodigy を使用する場合、以下の設定が推奨されます:
- Learning Rate:
1.0に設定します。 - Additional Settings:
--prodigy_safeguard_warmupと--prodigy_use_bias_correctionを有効にし、adam_beta2を0.99、adam_weight_decayを0.01に設定します。
高度なトレーニング実践
diffusers のトレーニングスクリプトには、LoRA の品質を向上させるためにいくつかの追加技術が組み込まれています:
独立した学習率
テキストエンコーダーに対して UNet より低い学習率を設定すると、テキストエンコーダーが過度に早くオーバーフィットするのを防げます。ただし、Prodigy のような適応型オプティマイザを使用する場合、オプティマイザは同一の初期学習率から自動的に調整を行います。
カスタムキャプショニング
すべての画像に単一のインスタンスプロンプトを使用するのは最適ではありません。スクリプトは datasets ライブラリを通じたカスタムキャプショニングをサポートしており、各画像に固有のプロンプトを提供できます。これは Hugging Face Hub のデータセットを使用するか、メタデータ付きのローカル ImageFolder を作成することで実現できます。
Min-SNR ガンマ重み付け
Min-SNR ガンマ重み付けは、クランプされた信号対雑音比に基づいて損失重みを調整することで、トレーニング中のタイムステップ間の衝突をバランスさせます。特に大規模データセットで効果的で、推奨値は --snr_gamma=5.0 です。
トレーニングセットのキュレーション
高品質で多様なデータは LoRA の性能にとって重要です。主な推奨事項は以下の通りです:
- Faces: 高解像度の画像を使用し、トレーニングセット内に他の顔が入らないようにし、クローズアップと全身ショットを混在させ、遠距離のショットは避けます。
- Variety: 照明、ポーズ、背景、表情の多様性を確保し、汎化性能を向上させます。
- Prior Preservation Loss: 正則化に実際のポートレート画像を使用(モデル生成画像ではなく)ことで、言語ドリフトを減少させ、リアリズムを維持できることが分かっています。
実験結果とベンチマーク
Hugging Face は、これらの手法を検証するために 3 つのカテゴリで実験を実施しました:
- Style and Character (Huggy LoRA): Pivotal Tuning は、フルテキストエンコーダーのトレーニングと同等かそれ以上の性能があることが判明しました。
snr_gamma=5.0と Prodigy オプティマイザの使用により、AdamW よりも結果が向上しました。 - Style (Y2K Webpage LoRA): この実験では、スタイル LoRA がキャラクタ LoRA よりもオーバーフィットしやすいことが示されました。
max_train_steps、repeats、train_batch_sizeを調整して、コンセプト捕捉と柔軟性のバランスを取る必要がありました。 - Faces (Face LoRA): 実験により、ランク 32 が最適であることが示されました。ランクが高い(例: 64)と、肌の質感がリアルでない「エアブラシ」的な外観になることが多いです。多様なデータセットに対しては、画像枚数の 120 倍のトレーニング倍率が効果的であることが分かりました。
推論と互換性
Pivotal Tuning でトレーニングされたモデルは、LoRA 重み(*.safetensors)とトレーニング済みテキスト埋め込み(*.safetensors)の両方が必要です。
Diffusers 推論
diffusers では、ユーザーはまず pipe.load_textual_inversion を使用して埋め込みを両方のテキストエンコーダー(CLIP ViT-L/14 と CLIP ViT-G/14)にロードし、その後 pipe.load_lora_weights で LoRA 重みをロードする必要があります。
ComfyUI と AUTOMATIC1111
トレーニングスクリプトは WebUI 互換の LoRA と埋め込みを生成します。AUTOMATIC1111 では、ユーザーは埋め込みトークンと LoRA タグ(例: a y2k_emb webpage <lora:y2k:0.9>)を使用してプロンプトできます。ComfyUI では、LoRALoader ノードで LoRA をロードし、埋め込みは models/embeddings ディレクトリに配置します。