見出し画像

Google Colab で LCM LoRA を試す

Google Colab で LCM LoRA を試したので、まとめました。

1. LCM LoRA

LCM」 (Latent Consistency Model) は、元モデルを別モデルに蒸留することで、画像生成に必要なステップ数を減らす手法です。25~50ステップかかっていた処理を4~8ステップで可能にします。

2. LCM LoRA の LoRAウェイト

提供されている「LCM LoRA」の「LoRAウェイト」は、次のとおりです。

latent-consistency/lcm-lora-sdxl : SDXL 1.0用ののLCM LoRA
latent-consistency/lcm-lora-sdv1-5 : Stable Diffusion 1.5用のLCM LoRA
latent-consistency/lcm-lora-ssd-1b : SSD-1B用のLCM LoRA

3. LCM LoRA の Text-to-Image

「LCM LoRA」の「Text-to-Image」の手順は、次のとおりです。

(1) パッケージのインストール。

# パッケージのインストール
!pip install diffusers omegaconf

(2) モデルのダウンロード。
今回は、「Counterfeit-V3.0」を使います。

# モデルのダウンロード
!wget https://huggingface.co/gsdf/Counterfeit-V3.0/resolve/main/Counterfeit-V3.0_fix_fp16.safetensors

(3) パイプラインの準備。

from diffusers import StableDiffusionPipeline, LCMScheduler
import torch

# パイプラインの準備
pipe = StableDiffusionPipeline.from_single_file(
    "Counterfeit-V3.0_fix_fp16.safetensors",
    variant="fp16",
    torch_dtype=torch.float16,
).to("cuda")

# LoRAウェイトの準備
pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5")

# スケジューラの準備
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

「LCM LoRA」を使用するには、パイプラインにLCMの「LoRAウェイト」と「スケジューラ」を設定します。

(3) 画像生成。
瞬時 (T4で910ms) に画像生成されました。

%%time

# プロンプトの準備
prompt = "cute cat ear maid"

# 画像生成
image = pipe(
    prompt=prompt,
    num_inference_steps=4,
    guidance_scale=0,  # guide_scaleの無効化
    generator=torch.Generator("cpu").manual_seed(19),
).images[0]

# 画像の確認
image.save("image.png")
image

guide_scale=0」(無効)を設定することが推奨されます。ただし、ネガティブプロンプトを使用する場合は、1.0〜2.0を指定します。

4. LCM LoRA の Image-to-Image

「LCM LoRA」の「Image-to-Image」の手順は、次のとおりです。

(1) パイプラインの準備。
「Image-to-Image」には、「StableDiffusionImg2ImgPipeline」(SDXLはStableDiffusionXLImg2ImgPipeline)を使います。

from diffusers import StableDiffusionImg2ImgPipeline, LCMScheduler
import torch

# パイプラインの準備
pipe = StableDiffusionImg2ImgPipeline.from_single_file(
    "Counterfeit-V3.0_fix_fp16.safetensors",
    variant="fp16",
    torch_dtype=torch.float16
).to("cuda")

# LoRAウェイトの準備
pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5")

# スケジューラの準備
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

(3) 画像生成。
瞬時 (T4で1.1s) に画像生成されました。

%%time

from diffusers.utils import load_image
from PIL import Image

# プロンプトと画像の準備
prompt = "cute cat ear maid with red ribbon"
image = Image.open("image.png")

# 画像生成
image = pipe(
    prompt=prompt,
    image=image,
    num_inference_steps=4,
    guidance_scale=0,  # guide_scaleの無効化
    generator=torch.Generator("cpu").manual_seed(19),
).images[0]

# 画像の確認
image.save("image2.png")
image

関連



この記事が気に入ったらサポートをしてみませんか?