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ウェイト」は、次のとおりです。
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
関連
この記事が気に入ったらサポートをしてみませんか?