この投稿はKDDIテクノロジーアドベントカレンダーの7日目の記事となります。
前回の記事に引き続きGoogleColabo上でLCM LoRAを試します。
LCM LoRA(Latent Consistency LoRAs)とは?
SDXL in 4 steps with Latent Consistency LoRAsによると
Latent Consistency Models (LCM) are a way to decrease the number of steps required to generate an image with Stable Diffusion (or SDXL) ~
「Latent Consistency Models(LCM)は、Stable Diffusion(またはSDXL)を使って画像を生成するために必要なステップ数を減らす手法です」とのことです。
今回はこの手法を使って画像生成の高速化を図ります。
実行手順
※前回の記事にある「実行手順」項の④まで進めてください。
⑤下記コマンドを実行し日本語版SDXLをダウンロードする。
model_id = "stabilityai/japanese-stable-diffusion-xl"
lcm_lora_id = "latent-consistency/lcm-lora-sdxl"
pipeline = DiffusionPipeline.from_pretrained(model_id, trust_remote_code=True, variant="fp16")
pipeline.load_lora_weights(lcm_lora_id)
pipeline.scheduler = LCMScheduler.from_config(pipeline.scheduler.config)
pipeline.to(device="cuda", dtype=torch.float16)
※HTTPError: 401となり「OSError: Cannot load model stabilityai/japanese-stable-diffusion-xl: model is not cached locally and an error occured while trying to fetch metadata from the Hub. Please check out the root cause in the stacktrace above.」と出た場合はHuggingFace Hubにログイン出来ていないため再度前回記事の④にあるHuggingFace Hubへのログインコマンドを実行すること。
⑥下記コマンドを実行し画像を出力する。
※promptの部分を出力したい任意の文字列に変更する。
prompt = "水たまり 写真"
image = pipeline(prompt=prompt).images[0]
image
実行結果
LCM LoRAを使った場合と使っていない場合で比較します。
結果の比較には実行手順⑥に示したコードの代わりに以下のコードを使用しています。
prompt = "水たまり 写真"
images = []
for steps in range(0, 16, 5):
generator = torch.Generator(device=pipeline.device).manual_seed(2345)
image = pipeline(
prompt=prompt,
num_inference_steps=steps+1,
guidance_scale=1,
generator=generator,
).images[0]
images.append(image)
images[15]
# 数字はStep数を指します。
# 低Step時の挙動が見たい場合はimages[0]、images[5]、images[10]に置き換えて実行してください。
◎LCM LoRAを使っていない場合
◎LCM LoRAを使った場合
使っていない場合はそもそも水たまりが生成されないので比較出来ないですが、
使った場合はStep5辺りから鮮明な画像が生成されており高速生成に成功しているであろうことが確認出来ました。
以上です。