ジャコ Lab

プログラミング関連のメモ帳的ブログです

ControlNet の Instruct pix2pix を使ってみる

huggingface.co

今回は ControlNet の Instruct pix2pix を使ってみます!

Instruct pix2pix

Image-to-Image みたいな感じでしょうか?

投入画像の準備

from diffusers.utils import load_image

# 投入画像の準備
init_image_url = "https://huggingface.co/lllyasviel/control_v11e_sd15_ip2p/resolve/main/images/input.png"
init_image = load_image(init_image_url

今回は、変換等はいらず、インプット画像だけあれば良いみたいです。

投入画像

ControlNetModel, Pipeline の準備

# ControlNet の準備
controlnet = ControlNetModel.from_pretrained(
    "lllyasviel/control_v11e_sd15_ip2p",
    torch_dtype=torch.float16
)

# パイプラインの準備
pipe = StableDiffusionControlNetPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    controlnet=controlnet,
    torch_dtype=torch.float16
).to("cuda")
pipe.enable_model_cpu_offload()

# スケジューラの設定
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)

パイプライン実行

prompt = "make it on fire"
image = pipe(
    prompt,
    num_inference_steps=30,
    generator=torch.Generator(device="cuda").manual_seed(0),
    image=init_image
).images[0]
image

ControlNet の Instruct pix2pix で生成した画像

make it on fire のプロンプトだけで、インプット画像の家が燃えました!

普通の Image-to-Image でやったらどうなる?

これはこれで良い

コード全文 (折りたたみ)

import torch
from diffusers import AutoPipelineForImage2Image, UniPCMultistepScheduler
from diffusers.utils import load_image

# 投入画像の準備
init_image_url = "https://huggingface.co/lllyasviel/control_v11e_sd15_ip2p/resolve/main/images/input.png"
init_image = load_image(init_image_url)

# パイプラインの準備
pipe = AutoPipelineForImage2Image.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    torch_dtype=torch.float16
).to("cuda")
pipe.enable_model_cpu_offload()

# スケジューラの設定
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)

# パイプライン実行
prompt = "make it on fire"
image = pipe(
    prompt,
    num_inference_steps=30,
    generator=torch.Generator(device="cuda").manual_seed(0),
    image=init_image
).images[0]
image

まとめ

zako-lab929.hatenablog.com

上記の記事で Image-to-Image をしたときは、Prompt がしっかりしていたので Text-to-Image でもそれっぽい猫様が生まれてしまいましたが、こちらの make it on fire に関しては、Image-to-Image の強さがわかる気がしました!