【Diffusers】「from_single_file」がVAEにも使えるようになったので変換作業が不要になりました

最終更新日:2023年8月3日



左がデフォルト、右が専用VAEです。

はじめに

Diffusersで専用のVAEを使用するためには変換が必要でした。
touch-sp.hatenablog.com
新たに「from_single_file」がVAEにも使えるようになったのでその作業は不要になりました。

使い方

「omegaconf」と「pytorch-lightning」が必要です。

pip install torch==2.0.1+cu117 --index-url https://download.pytorch.org/whl/cu117
pip install diffusers[torch]
pip install transformers compel omegaconf pytorch-lightning 
model_id = "model/Counterfeit-V2.5_pruned.safetensors"
pipe = StableDiffusionPipeline.from_single_file(
    model_id,
    vae=AutoencoderKL.from_single_file("vae/Counterfeit-V2.5.vae.pt"),
    load_safety_checker=False,
    extract_ema=True
    )

使用例

from diffusers import StableDiffusionPipeline, EulerAncestralDiscreteScheduler, AutoencoderKL
import torch
from compel import Compel, DiffusersTextualInversionManager

model_id = "model/Counterfeit-V2.5_pruned.safetensors"
pipe = StableDiffusionPipeline.from_single_file(
    model_id,
    vae=AutoencoderKL.from_single_file("vae/Counterfeit-V2.5.vae.pt"),
    load_safety_checker=False,
    extract_ema=True
    )
pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config)
pipe.load_textual_inversion("embeddings/EasyNegative.safetensors", token="EasyNegative")
pipe.to("cuda")

prompt = "(high resolution)++, 8k+, attractive, highly detailed, pretty girl, short hair"
negative_prompt = "EasyNegative, (Worst Quality)++, (low quality)+"

textual_inversion_manager = DiffusersTextualInversionManager(pipe)
compel_proc = Compel(
    tokenizer=pipe.tokenizer,
    text_encoder=pipe.text_encoder,
    textual_inversion_manager=textual_inversion_manager,
    truncate_long_prompts=False)

prompt_embeds = compel_proc([prompt])
negative_prompt_embeds = compel_proc([negative_prompt])

seed = 20000

generator = torch.Generator(device="cuda").manual_seed(seed)
image = pipe(
    prompt_embeds=prompt_embeds,
    negative_prompt_embeds=negative_prompt_embeds,
    generator=generator,
    num_inference_steps=30,
    guidance_scale=7.0,
    width=768,
    height=768,
    ).images[0]
image.save("result.png")




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