Otama's Playground

AIで遊んだ結果などをつらつら載せていきます。

Stable Diffusionの高速化:Turbo、Lightning、LCM、HyperのLoRA使用ガイド

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

例えば以下からダウンロードできます。

civitai.com

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

明らかに異常が多い

Turbo-LoRA生成結果

パラメータ調整後

  • 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

調整しても異常が出やすいのは変わらず

Turbo-LoRA生成結果(パラメータ調整後)

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

例えば以下からダウンロードできます。

huggingface.co

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

割と良い感じ

Lightning-LoRA生成結果

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 ~

例えば以下から入手できます

civitai.com

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生成結果(SDXL)

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

LCM-LoRAの生成結果(SD1.5)

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のファイル名に従う)

以下から入手できます。

huggingface.co

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, 4step)

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生成結果(SDXL, 8step, cfg preserved)

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, 4step)

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

Hyper-LoRAの生成結果(SD1.5, 8step, cfg preserved)

最後に

比較というほどではないですが、それぞれ試してみたところ自分的には↓の感想

  • Turboは選択肢から外す
  • SD1.5はLCMが安定
  • SDXLはHyper/Lightning/LCMのどれでも良いが、雰囲気Hyperが良さげ
  • 通常のLoRAと同様に、ベースモデルとの相性の良し悪しがあるのでうまく生成できない場合は他を試す
  • 全体的に精度はあまりよくないので、主にパラメータ調整用途とかで一時的に入れる感じになりそう