ジャコ Lab

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

ControlNet の Shuffle を使ってみる

huggingface.co

diffusers の ControlNet 残り2つです!
これが終わったら、次が最後!

今回は Shuffle です

Shuffle

もはや、どんな control_image なのか想像が付きません。
シャッフルとは??

とりあえず Detector で出てきた画像を見るしかない!

投入画像の準備

from diffusers.utils import load_image
from controlnet_aux import ContentShuffleDetector

init_image_url = "https://huggingface.co/lllyasviel/control_v11e_sd15_shuffle/resolve/main/images/input.png"
init_image = load_image(init_image_url)

processor = ContentShuffleDetector()
control_image = processor(init_image)

(左) 投入画像 | (右) ContentShuffleDetector で抽出した画像

ぐにゃーん

ControlNet, Pipeline の準備

import torch
from diffusers import ControlNetModel, StableDiffusionControlNetPipeline, UniPCMultistepScheduler

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

# Pipeline の準備
pipe = StableDiffusionControlNetPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    torch_dtype=torch.float16,
    controlnet=controlnet
)
pipe.enable_model_cpu_offload()

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

パイプライン実行

prompt = "New York"
image = pipe(
    prompt, 
    num_inference_steps=30,
    generator=torch.manual_seed(33),
    image=control_image
).images[0]
image

ControlNet の Shuffle で生成した画像

今回は Model Card 上の記録とは全く違うものになりました

車が一台も無い!

今回はそもそも control_image が違う

(左) ContentShuffleDetector で抽出した control_image | (右) Model Card 上の control_image

どちらにしてもぐにゃーん

ContentShuffleDetector のバージョンのせいですかね~?
10ヶ月前の README ですからね。

Model Card 上の control_image を使って ControlNet の Shuffle で生成した画像

だいぶ近くなりましたねぇ~

まとめ

あの、ぐにゃっとした control_image から、この生成物が何故生まれるのが全然想像が付きません!

旅の扉を通って来た世界かと!