はじめに
以前から「Depth」の ControlNet は公開されていました。touch-sp.hatenablog.com
新たに「 Zoe-Depth」の ControlNet が公開されたので使ってみました。
元画像
こちらで作成した画像を使用しました。「girl.png」として保存しています。Zoe-Depth画像の作成
このようにしました。timmのインストールが必要です。
pip install timm==0.6.7
import torch import numpy as np from PIL import Image from diffusers.utils import load_image torch.hub.help( "intel-isl/MiDaS", "DPT_BEiT_L_384", force_reload=True ) model_zoe_n = torch.hub.load( "isl-org/ZoeDepth", "ZoeD_NK", pretrained=True ).to("cuda") image = load_image("girl.png") depth_numpy = model_zoe_n.infer_pil(image) # return: numpy.ndarray from zoedepth.utils.misc import colorize colored = colorize(depth_numpy) # numpy.ndarray => numpy.ndarray # gamma correction img = colored / 255 img = np.power(img, 2.2) img = (img * 255).astype(np.uint8) Image.fromarray(img).save("zoe_depth.png")
実行
from diffusers import ControlNetModel, StableDiffusionXLControlNetPipeline from diffusers.utils import load_image import torch controlnet = ControlNetModel.from_pretrained( "diffusers/controlnet-zoe-depth-sdxl-1.0", use_safetensors=True, torch_dtype=torch.float16, ).to("cuda") pipe = StableDiffusionXLControlNetPipeline.from_pretrained( "stabilityai/stable-diffusion-xl-base-1.0", controlnet=controlnet, variant="fp16", use_safetensors=True, torch_dtype=torch.float16, ).to("cuda") prompt = "anime style, ultra detailed, super fine illustration, pretty girl, fountain background" negative_prompt = "worst quality, low quality" controlnet_conditioning_scale = 0.55 depth_image = load_image("zoe_depth.png") for i in range(20): seed = 10000 * (i + 1) generator = torch.manual_seed(seed) image = pipe( prompt=prompt, negative_prompt=negative_prompt, image=depth_image, num_inference_steps=30, controlnet_conditioning_scale=controlnet_conditioning_scale, generator=generator ).images[0] image.save(f"seed{seed}.png")