前回の記事では LCM (Latent Consistency Model) を使ってみました。
v0.22.0 の時点では、 DiffusionPipeline に指定するモデルが LCM 対応のモデルとなっていました。
恐らくこれでは、LCMに対応したモデルしか使えず、既存モデルは使えないと思っています。
しかし v0.23.0 で、LCM が LoRA として設定が可能になりました。
これにより、Pipeline に指定するモデルは好きなものを使えるはず!
ちなみに AnimateLCM では、LoRA を使い LCM を適用していたので Pipeline のモデルは好きなものを使えました。
本来の時系列では、v0.23.0 以降に AnimateLCM が登場したのかな?
それでは、使ってみます。
まずはリリースノート通りに行きます
モデルのロード等(stable-diffusion-xl-base-1.0, lcm-lora-sdxl, LCMScheduler)
from diffusers import DiffusionPipeline, LCMScheduler import torch # SDモデルのロード pipe = DiffusionPipeline.from_pretrained( "stabilityai/stable-diffusion-xl-base-1.0", variant="fp16", torch_dtype=torch.float16 ).to("cuda") # LCM LoRA のロード pipe.load_lora_weights("latent-consistency/lcm-lora-sdxl") # スケジューラーの設定(LCMScheduler) pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
パイプライン実行
prompt = "close-up photography of cat in the rain at night, in a street lit by lamps, leica 35mm summilux" image = pipe( prompt=prompt, num_inference_steps=4, guidance_scale=1, ).images[0] image
ステップ数は4!
4/4 [00:02<00:00, 1.81it/s]
2秒です。メチャメチャ高速!
4/4 [00:02<00:00, 1.81it/s]
2秒です。メチャメチャ高速!
にゃーん
PaperCut LoRA とやらも使ってみよう
準備
!wget -O lora.safetensors "https://civitai.com/api/download/models/133503"
モデルのロード等 (stable-diffusion-xl-base-1.0, lcm-lora-sdxl, Papercut SDXL)
from diffusers import DiffusionPipeline, LCMScheduler import torch # SDモデルのロード pipe = DiffusionPipeline.from_pretrained( "stabilityai/stable-diffusion-xl-base-1.0", variant="fp16", torch_dtype=torch.float16 ).to("cuda") # LoRA のロード(LCM, PaperCut) pipe.load_lora_weights("latent-consistency/lcm-lora-sdxl", adapter_name="lcm-lora") pipe.load_lora_weights(".", weight_name="lora.safetensors", adapter_name="papercut-lora") pipe.set_adapters(["lcm-lora", "papercut-lora"], adapter_weights=[1.0, 1.0]) # スケジューラーの設定(LCMScheduler) pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
パイプライン実行
# プロンプト実行 prompt = "papercut an cat made of cherry blossoms in moonlight with a circular border" image = pipe( prompt=prompt, num_inference_steps=4, guidance_scale=1, ).images[0] image
お、これは良いにゃんこ
SDXL 以外は???
lcm-lora-sdxl のページ を見てみると書いてありました。
どうやら こちらのページ のようです。
lcm-lora-sdv1-5 を使ってみる
モデルのロード等 (MeinaMix, lcm-lora-sdv1-5)
from diffusers import DiffusionPipeline, LCMScheduler import torch # SDモデルのロード pipe = DiffusionPipeline.from_pretrained( "Meina/MeinaMix_V11", custom_pipeline="lpw_stable_diffusion", torch_dtype=torch.float16 ).to("cuda") # LCM LoRA のロード pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5") # スケジューラの設定(LCMScheduler) pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
パイプライン実行
# プロンプト実行 prompt = "realistic, 1girl, white hair, purple eyes, bikini, beach, light particles, light rays, wallpaper" negative_prompt = "(worst quality, low quality:1.4), monochrome, zombie, (interlocked fingers:1.2)" image = pipe( prompt=prompt, negative_prompt=negative_prompt, num_inference_steps=4, guidance_scale=1 ).images[0]
ちょっと青み掛かり過ぎだけど。。。
というか、早すぎるんですけど!
4/4 [00:00<00:00, 7.20it/s]
というか、早すぎるんですけど!
4/4 [00:00<00:00, 7.20it/s]
まとめ
ステップ数4 で、この品質は凄いです。