SDXL 1.0 (Stable Diffusion XL 1.0) の派生モデルが公開され始めています。 CounterfeitXL というモデルを Diffusers から使ってみました。

はじめに

SDXL 1.0の基本的な使い方はこちらを参照して下さい。
touch-sp.hatenablog.com

環境

Windows 11
CUDA 11.7
Python 3.10

「omegaconf」が必要になります。

pip install torch==2.0.1+cu117 --index-url https://download.pytorch.org/whl/cu117
pip install diffusers[torch]
pip install invisible_watermark transformers omegaconf

モデルのダウンロード

こちらから「CounterfeitXL_α.safetensors」をダウンロードしました。

名前に「α」がついているのでまだ正式版ではないのでしょう。

Pythonスクリプトと結果

リファイナーなし、ありで比較しています。SDXLのリファイナーを使いましたがそれが正しいのかどうかはわかりません。

リファイナーなし

from diffusers import StableDiffusionXLPipeline
import torch

pipe = StableDiffusionXLPipeline.from_single_file(
    "model/CounterfeitXL_α.safetensors",
    load_safety_checker=False,
    extract_ema=True,
    torch_dtype=torch.float16 
    ).to("cuda")

prompt = "absurdres, highres, ultra detailed, super fine illustration, japanese anime style, solo, 1girl, 18yo, an extremely cute and beautiful girl, highly detailed beautiful face and eyes,thigh up, fountain background, from side"
negative_prompt = "worst quality, low quality, zombie, sketch, interlocked fingers, comic"

seed = 20000
generator = torch.Generator(device="cuda").manual_seed(seed)
image = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    generator=generator).images[0]

image.save("no_refiner.png")


リファイナーあり

from diffusers import DiffusionPipeline, StableDiffusionXLPipeline
import torch

pipe = StableDiffusionXLPipeline.from_single_file(
    "model/CounterfeitXL.safetensors",
    load_safety_checker=False,
    extract_ema=True,
    torch_dtype=torch.float16 
    ).to("cuda")

refiner = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-refiner-1.0",
    text_encoder_2=pipe.text_encoder_2,
    vae=pipe.vae,
    torch_dtype=torch.float16,
    use_safetensors=True,
    variant="fp16"
)
refiner.to("cuda")

prompt = "absurdres, highres, ultra detailed, super fine illustration, japanese anime style, solo, 1girl, 18yo, an extremely cute and beautiful girl, highly detailed beautiful face and eyes,thigh up, fountain background, from side"
negative_prompt = "worst quality, low quality, zombie, sketch, interlocked fingers, comic"

seed = 20000
generator = torch.Generator(device="cuda").manual_seed(seed)
image = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    generator=generator,
    output_type="latent").images[0]
image = refiner(
    prompt=prompt,
    image=image[None, :]).images[0]

image.save("with_refiner.png")


結果の比較

左がリファイナーなし、右がありです。

微妙な違いですが鼻や目にすこし変化があります。
どちらがいいかは好みの問題です。
必ずしもリファイナーは必要ないと思いました。

その他

「negativeXL」というembeddingsも同時に公開されています。使い方はこちらになります。
touch-sp.hatenablog.com



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