はじめに
こちらにSDXL専用と思われるVAEが公開されていたので使ってみました。huggingface.co
SDXL 1.0の基本的な使い方はこちらを参照して下さい。
touch-sp.hatenablog.com
Pythonスクリプト
from diffusers import DiffusionPipeline, AutoencoderKL import torch vae = AutoencoderKL.from_pretrained( "madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16) base = DiffusionPipeline.from_pretrained( "stabilityai/stable-diffusion-xl-base-1.0", vae=vae, torch_dtype=torch.float16, variant="fp16", use_safetensors=True ) base.to("cuda") refiner = DiffusionPipeline.from_pretrained( "stabilityai/stable-diffusion-xl-refiner-1.0", text_encoder_2=base.text_encoder_2, vae=vae, torch_dtype=torch.float16, use_safetensors=True, variant="fp16" ) refiner.to("cuda") prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" seed = 20000 generator = torch.Generator(device="cuda").manual_seed(seed) image = base( prompt=prompt, output_type="latent", generator=generator ).images[0] image = refiner( prompt=prompt, image=image[None, :]).images[0] image.save("result_2_with_vae.png")
結果
左がデフォルトVAE、右が今回紹介したVAEを使用した画像です。違いがわかりにくいですがよく見ると左腕の部分とかが異なります。
必ずしも使用しなければいけないというものでもなさそうです。