見出し画像

HuggingFace Diffusers v0.23.0の新機能

「Diffusers v0.23.0」の新機能についてまとめました。

前回


1. Diffusers v0.23.0 のリリースノート

情報元となる「Diffusers 0.23.0」のリリースノートは、以下で参照できます。

2. LCM LoRA

「LCM」(Latent Consistency Model) は、超高速推論を可能にすることで、「Stable Diffusion」のコミュニティで大きな注目を集めました。LCM作者の @luosiallen は、@patil-suraj および @dg845 と協力して、「Stable Diffusion XL」(SDXL) の LCM サポートを拡張し、すべてを LoRA に詰め込むことに成功しました。

このアプローチは「LCM LoRA」と呼ばれます。

以下は、わずか4つの推論ステップを実行する「LCM LoRA」の使用例です。

from diffusers import DiffusionPipeline, LCMScheduler
import torch

model_id = "stabilityai/stable-diffusion-xl-base-1.0"
lcm_lora_id = "latent-consistency/lcm-lora-sdxl"

pipe = DiffusionPipeline.from_pretrained(model_id, variant="fp16", torch_dtype=torch.float16).to("cuda")

pipe.load_lora_weights(lcm_lora_id)
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

prompt = "close-up photography of old man standing 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]

LoRA を Img2Img、Inpaint、ControlNet などと組み合わせることができます。

詳しくは、ドキュメントを参照。

3. LCM SDXL

「LCM」 (Latent Consistency Models) の作業を継続して、このアプローチを 「SDXL」にも適用し、「SSD-1B」および「SDXL」のファインチューニングされたチェックポイントを提供します。

from diffusers import DiffusionPipeline, UNet2DConditionModel, LCMScheduler
import torch

unet = UNet2DConditionModel.from_pretrained(
    "latent-consistency/lcm-sdxl",
    torch_dtype=torch.float16,
    variant="fp16",
)
pipe = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", unet=unet, torch_dtype=torch.float16
).to("cuda")
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

prompt = "Self-portrait oil painting, a beautiful cyborg with golden hair, 8k"

generator = torch.manual_seed(0)
image = pipe(
    prompt=prompt, num_inference_steps=4, generator=generator, guidance_scale=1.0
).images[0]

詳しくは、ドキュメントを参照。

4. Consistency Decoder

OpenAI は、「DALL-E 3」で使用される「Consistency Decoder」をオープンソース化しました。これにより、「Stable Diffusion v1」ファミリーのモデルのデコードが改善されます。

import torch
from diffusers import DiffusionPipeline, ConsistencyDecoderVAE

vae = ConsistencyDecoderVAE.from_pretrained("openai/consistency-decoder", torch_dtype=pipe.torch_dtype)
pipe = StableDiffusionPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5", vae=vae, torch_dtype=torch.float16
).to("cuda")

pipe("horse", generator=torch.manual_seed(0)).images

詳しくは、ドキュメントを参照。

次回



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