はじめに
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")
結果
狙った通りのカラフルな画像ができました。