SDXL 1.0 (Stable Diffusion XL 1.0) 派生モデルとControlNetを組み合わせる

はじめに

CIVITAIなどからSDXL派生モデルをダウンロードすると、ほとんどの場合「**.safetensors」というファイルです。

今回は「**.safetensors」ファイルをDiffusersフォーマットに変換して使用しています。
その方法はこちらに書きました。
touch-sp.hatenablog.com


直接「**.safetensors」を使用することも可能です。

from diffusers import StableDiffusionXLControlNetPipeline, ControlNetModel
import torch 

controlnet = ControlNetModel.from_pretrained(
    "diffusers/controlnet-canny-sdxl-1.0",
    torch_dtype=torch.float16)

pipe = StableDiffusionXLControlNetPipeline.from_single_file(
    "**.safetensors",
    controlnet=controlnet,
    torch_dtype=torch.float16)

ただし、バージョンの古いDiffusersだと「**.safetensors」を読み込もうとすると以下のエラーが出ます。

AttributeError: type object 'StableDiffusionXLControlNetPipeline' has no attribute 'from_single_file'

本題

実行

CIVITAIから「copaxTimelessxlSDXL1_colorfulV2.safetensors」というモデルをダウンロードさせて頂きました。

それをDiffusersフォーマットに変換して「colorfulV2」としました。

こちらから以下のCanny画像を使わせて頂きます。「couple.png」という名前で保存しています。




後は以下を実行すればいいだけです。

from diffusers import DiffusionPipeline, StableDiffusionXLControlNetPipeline, ControlNetModel
import torch 
from diffusers.utils import load_image

controlnet = ControlNetModel.from_pretrained(
    "diffusers/controlnet-canny-sdxl-1.0",
    torch_dtype=torch.float16)

pipe = StableDiffusionXLControlNetPipeline.from_pretrained(
    "model/colorfulV2",
    controlnet=controlnet,
    torch_dtype=torch.float16).to("cuda")

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

canny_image = load_image("couple.png")

prompt = "colorful, a couple watching a romantic sunset, 4k photo"

seed = 30000
generator = torch.manual_seed(seed)

image = pipe(
        prompt=prompt,
        controlnet_conditioning_scale=0.5,
        image=canny_image,
        generator=generator,
        output_type="latent").images[0]

del pipe

image = refiner(
    prompt=prompt,
    image=image[None, :]).images[0]

image.save(f"controlnet_{seed}.png")

結果


狙った通りのカラフルな画像ができました。

他のモデルとの比較

original SDXL

prompt: 「a couple watching a romantic sunset, 4k photo」

DreamShaper XL1.0 alpha2

prompt: 「a couple watching a romantic sunset, 4k photo」

CounterfeitXL beta

prompt: 「a couple watching a romantic sunset, 4k photo」

niji-diffusion-xl-base-1.0 v1.1

prompt: 「anime style, a couple watching a romantic sunset, 4k photo」

niji-diffusion-xl-base-1.0 v2.0

prompt: 「anime style, a couple watching a romantic sunset, 4k photo」

niji-diffusion-xl-base-1.0 v2.3

prompt: 「anime style, a couple watching a romantic sunset, 4k photo」

Animagine XL

prompt: 「anime style, a couple watching a romantic sunset, 4k photo」

Mysterious - SDXL Version v3.0

prompt: 「mysterious, anime, a couple watching a romantic sunset, 4k photo」

Mysterious - SDXL Version v3.15

prompt: 「mysterious, anime, a couple watching a romantic sunset, 4k photo」

BreakDomainXL v02g

prompt: 「anime style, a couple watching a romantic sunset, 4k photo」




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