【 SDXL-Turbo 】num_inference_steps=1 で画像が生成できてしまう SDXL-Turbo を紹介します

はじめに

LCM-RoLAが短い時間で画像が生成できると話題になっていますが、それを上回るかもしれない SDXL-Turbo というのが Stable Diffusion を開発している Stability AI から公開されました。

試しに使ってみました。

また、LCM-LoRA と比較してみました。

Pythonスクリプト

from diffusers import AutoPipelineForText2Image
import torch
import os
import time

pipe = AutoPipelineForText2Image.from_pretrained(
    #"stabilityai/sdxl-turbo",
    "model/sdxl-turbo-fp16",
    torch_dtype=torch.float16,
    variant="fp16"
).to("cuda")

prompt = "A cinematic shot of a baby racoon wearing an intricate italian priest robe."

os.makedirs("turbo-result", exist_ok=True)

start = time.time()
for i in range(20):
    seed = 100000 + 2000 * (i + 1)
    generator = torch.manual_seed(seed)
    image = pipe(
        prompt=prompt,
        num_inference_steps=1,
        guidance_scale=1.0,
        generator=generator,
    ).images[0]
    image.save(os.path.join("turbo-result", f"result_{seed}.png"))

end = time.time()
print(f"time: {end - start:.3f}sec")

結果

20枚の画像を一気に作成しました。

かかった時間はなんと11秒。

time: 11.270sec

RTX 3080 Laptopを使っています。こちらのPCです。


LCM-LoRAとの比較

SDXL-Truboは名前にSDXLが入っていますがデフォルトで作成される画像のサイズは512x512です。

Stable Diffusion 1.5 + LCM-LoRAと作成時間を比較してみました。

Pythonスクリプト

from diffusers import AutoPipelineForText2Image, LCMScheduler
import torch
import os
import time

pipe = AutoPipelineForText2Image.from_pretrained(
    "model/stable-diffusion-v1-5",
    torch_dtype=torch.float16 
)

pipe.load_lora_weights("lcm-lora-sdv1-5/pytorch_lora_weights.safetensors")
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

pipe.to("cuda")

prompt = "A cinematic shot of a baby racoon wearing an intricate italian priest robe."
    
os.makedirs("lora-result", exist_ok=True)

start = time.time()
for i in range(20):
    seed = 100000 + 2000 * (i + 1)
    generator = torch.manual_seed(seed)
    image = pipe(
        prompt=prompt,
        num_inference_steps=4,
        guidance_scale=1.0,
        generator=generator,
    ).images[0]
    image.save(os.path.join("lora-result", f"result_{seed}.png"))

end = time.time()
print(f"time: {end - start:.3f}sec")

結果

Stable Diffusion 1.5 + LCM-LoRAでかかった時間は18秒でした。

time: 17.923sec




SDXL-Turbo は LCM-LoRAを上回る質と速度でした。

ただし LCM-LoRA にはどのモデルにも適応できるというメリットがありますが SDXL-Turbo は単一のモデルです。

今後 SDXL-Turbo 派生のモデルがどんどん公開されたら面白いことになりそうです。



このエントリーをはてなブックマークに追加