Stable Diffusionの推論を高速化する手法として、Turbo、Lightning, LCM, Hyperの4種類があると思います。
これらのモデルをLoRA化したものを使うことが多いと思うのですが、どれを使うか迷ったので使い方や生成結果を整理してみます。
Turbo
Turboモデルの概要
stabilityai/sdxl-turbo · Hugging Face
[2311.17042] Adversarial Diffusion Distillation
- 2023年11月にstability.aiから発表された論文
- 拡散モデルの生成精度とGANの高速生成を組み合わせたいという思想
- Adversarial Diffusion Distillationという蒸留方法を用いることで、denoiseの効率を上げている
- 具体的には、学習済拡散モデルを教師モデルとし、GANの仕組みを利用して生徒拡散モデルにスコア蒸留している
- このとき生徒モデルの重みも学習済みモデルの重みで初期化する。
Turbo-LoRAの使い方
- CFG: 1 ~ 2.5
- Steps: 4 ~
- Sampler: lcm
例えば以下からダウンロードできます。
Turbo-LoRAの生成結果(SDXL)
インストラクション通り
- CFG: 1.5
- Steps: 4
- sampler: lcm
- scheduler: sgm_uniform
- model: Animagine XL
- lora-strength: 1
- prompt: 1 girl, running, smiling, mouth open, semi side view
明らかに異常が多い
パラメータ調整後
- CFG: 1.5
- Steps: 6
- sampler: euler
- scheduler: sgm_uniform
- model: Animagine XL
- lora-strength: 0.6
- prompt: 1 girl, running, smiling, mouth open, semi side view
調整しても異常が出やすいのは変わらず
Lightning
Lightningモデルの概要
ByteDance/SDXL-Lightning · Hugging Face
[2402.13929] SDXL-Lightning: Progressive Adversarial Diffusion Distillation
- 2024年2月にByteDanceから発表された論文
- Adversarial DistillationとProgressive Distillationを組み合わせたもの
- 教師モデルが複数ステップで推論した結果を、生徒モデルが1ステップで直接推論できるように訓練する
- 最初はMSE損失を使用して基礎的なトレーニングを行い、その後に敵対的損失を追加することで画質を向上させる
Lightning-LoRAの使い方
- CFG: 1~3?
- Steps: 1, 2, 4, 8
- Sampler: euler
例えば以下からダウンロードできます。
Lightning-LoRAの生成結果(SDXL, 4step)
- CFG: 2
- Steps: 4
- sampler: euler
- scheduler: sgm_uniform
- model: Animagine XL
- lora-strength: 1.0
- prompt: 1 girl, running, smiling, mouth open, semi side view
割と良い感じ
LCM
LCMモデルの概要
[2310.04378] Latent Consistency Models: Synthesizing High-Resolution Images with Few-Step Inference
[2311.05556] LCM-LoRA: A Universal Stable-Diffusion Acceleration Module
- 2023年10月に発表された論文
- 内部の拡散プロセスを確率フロー常微分方程式(PF-ODE)の解を予測する形式に変換し、反復回数を大幅に削減している
- 逆拡散プロセスを数値的に効率的に行えるので、少ないステップで画像生成が可能
- LCM-LoRAについての論文も2023年11月に発表されている
- LCM-LoRAの場合はLoRAの低ランク行列がPF-ODEのソルバーとしての役割を持つ
LCM-LoRAの使い方
- CFG: ~ 1.5
- Steps: 3 ~
例えば以下から入手できます
LCM-LoRAの生成結果(SDXL)
- CFG: 1.5
- Steps: 6
- sampler: lcm
- scheduler: sgm_uniform
- model: DreamShaper XL
- lora-strength: 1.0
- prompt: 1 girl, running, smiling, mouth open, semi side view, anime style
Animagineだとうまく生成されないため、DreamShaper XLを使用しています。
LCM-LoRAの生成結果(SD1.5)
- CFG: 1.5
- Steps: 6
- sampler: lcm
- scheduler: sgm_uniform
- model: Mistoon_Anime
- lora-strength: 1.0
- prompt: 1 girl, running, smiling, mouth open, semi side view
Hyper
Hyperの概要
ByteDance/Hyper-SD · Hugging Face
[2404.13686] Hyper-SD: Trajectory Segmented Consistency Model for Efficient Image Synthesis
- 2024年4月にByteDanceから発表された論文
- Trajectory Segmented Consistency Distillation(3-1章)
- 学習プロセスをステップごとに細かく分割し、それぞれの分割毎で蒸留を行う、とのこと
- 分割ごとに正確に画像を生成できるように訓練し、徐々に分割を減らしていく
- 最終的には、少ないステップでも高品質な画像を生成できるようになる
- human feedback learning(3-2章)
- モデルの性能を人間の好みに基づいて向上させるための手法
- 人間のフィードバックデータを使用して報酬モデルを訓練
- 学習時はこの報酬モデルを損失関数として利用
- ↑の説明はあんまり自信ないので、本気で理解したかったら元の論文を読んだ方が良いです。
Hyper-LoRAの使い方
- CFG: 小さめ(cfg-loraの場合は8とかでも行けるらしい)
- Steps: 1, 2, 4, 8, 12(ダウンロードしたLoRAのファイル名に従う)
以下から入手できます。
Hyper-LoRAの生成結果(SDXL, 4step)
- CFG: 1.5
- Steps: 4
- sampler: euler
- scheduler: normal
- model: DreamShaper XL
- lora-strength: 1.0
- prompt: 1 girl, running, smiling, mouth open, semi side view, anime style
4stepのLoRAを使用しましたが、4stepだと少し厳しかったので6stepで生成しています。
Hyper-LoRAの生成結果(SDXL, 8step, cfg preserved)
- CFG: 8
- Steps: 8
- sampler: euler
- scheduler: normal
- model: DreamShaper XL
- lora-strength: 1.0
- prompt: 1 girl, running, smiling, mouth open, semi side view, anime style
Hyper-LoRAの生成結果(SD1.5, 4step)
- CFG: 1.5
- Steps: 6
- sampler: euler
- scheduler: normal
- model: Mistoon_Anime
- lora-strength: 1.0
- prompt: 1 girl, running, smiling, mouth open, semi side view, anime style
Hyper-LoRAの生成結果(SD1.5, 8step, cfg preserved)
- CFG: 8
- Steps: 8
- sampler: euler
- scheduler: normal
- model: flat2DAnimerge
- lora-strength: 1.0
- prompt: 1 girl, running, smiling, mouth open, semi side view, anime style
最後に
比較というほどではないですが、それぞれ試してみたところ自分的には↓の感想
- Turboは選択肢から外す
- SD1.5はLCMが安定
- SDXLはHyper/Lightning/LCMのどれでも良いが、雰囲気Hyperが良さげ
- 通常のLoRAと同様に、ベースモデルとの相性の良し悪しがあるのでうまく生成できない場合は他を試す
- 全体的に精度はあまりよくないので、主にパラメータ調整用途とかで一時的に入れる感じになりそう