diffsers の ControlNet は、残すところあと3つ!
今回は SoftEdge を使ってみます
SoftEdge
SoftEdge もエッジ検出系です。
Canny や LineArt, Scribble に似た感じでしょうか?
投入画像の準備
controlnet_aux の PidiNetDetector を使うので
!pip install -U controlnet_aux
を忘れずに!
from diffusers.utils import load_image from controlnet_aux import PidiNetDetector init_image_url = "https://huggingface.co/lllyasviel/control_v11p_sd15_softedge/resolve/main/images/input.png" init_image = load_image(init_image_url) processor = PidiNetDetector.from_pretrained('lllyasviel/Annotators') control_image = processor(init_image, safe=True)
Model Card のページでは以下のようになっていましたが
HEDdetector
は Scribble の方で使ったものなので今回は不要だと思います!processor = HEDdetector.from_pretrained('lllyasviel/Annotators')
processor = PidiNetDetector.from_pretrained('lllyasviel/Annotators')
Detector には例によってオプションがありました
control_image は
control_image は
safe=False
のパターンも確認しました
ControlNet, Pipeline の準備
import torch from diffusers import ControlNetModel, StableDiffusionControlNetPipeline, UniPCMultistepScheduler # ControlNet の準備 controlnet = ControlNetModel.from_pretrained( "lllyasviel/control_v11p_sd15_softedge", 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 = "royal chamber with fancy bed" image = pipe( prompt, num_inference_steps=30, generator=torch.manual_seed(0), image=control_image ).images[0] image
まとめ
Scribble とあまり違いがないように見えますが、検出アルゴリズムの違い。といった具合でしょうか。