今回は ControlNet の MLSD を使ってみます!
雰囲気的には Canny に似てます!
MLSD
MLSDは、線分検出アルゴリズムの一つで、画像中の線分を効果的に検出するために使用されます。
インプット画像から直線を検出したものを使う ControlNet のようです
controlnet_aux モジュールをインストール
ここでは controlnet_aux から MLSDdetector というものを使用しますので、pip module をインストールしておきます
!pip install -U controlnet_aux
投入画像の準備
from controlnet_aux import MLSDdetector from diffusers.utils import load_image # 投入画像の準備 init_image_url = "https://huggingface.co/lllyasviel/control_v11p_sd15_mlsd/resolve/main/images/input.png" init_image = load_image(init_image_url) processor = MLSDdetector.from_pretrained('lllyasviel/ControlNet') control_image = processor(init_image)
ControlNet, Pipeline の準備
# ControlNet, Pipeline の準備 controlnet = ControlNetModel.from_pretrained( "lllyasviel/control_v11p_sd15_mlsd", torch_dtype=torch.float16 ) pipe = StableDiffusionControlNetPipeline.from_pretrained( "runwayml/stable-diffusion-v1-5", controlnet=controlnet, torch_dtype=torch.float16 ) 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.Generator(device="cuda").manual_seed(0), image=control_image ).images[0] image
おお。。。ロイヤル。。。
まとめ
Canny に続き、MLSD という検出アルゴリズムを使用した ControlNet でした