はじめに
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