🚀 Controlnet - Depth Version
ControlNetは、追加の条件を加えることで拡散モデルを制御するニューラルネットワーク構造です。このチェックポイントは、深度推定を条件としたControlNetに対応しています。Stable Diffusionと組み合わせて使用することができます。

📚 ドキュメント
モデルの詳細
概要
Controlnetは、Lvmin ZhangとManeesh Agrawalaによる Adding Conditional Control to Text-to-Image Diffusion Models で提案されました。
概要は以下の通りです。
私たちは、事前学習された大規模拡散モデルを制御して追加の入力条件をサポートするニューラルネットワーク構造であるControlNetを提案します。ControlNetは、タスク固有の条件をエンドツーエンドで学習し、学習データセットが小さい場合(< 50k)でも学習は堅牢です。さらに、ControlNetの学習は拡散モデルの微調整と同じくらい速く、モデルは個人用デバイスで学習することができます。あるいは、強力な計算クラスターが利用可能な場合、モデルは大量(数百万から数十億)のデータに拡張することができます。Stable Diffusionのような大規模拡散モデルは、ControlNetを用いてエッジマップ、セグメンテーションマップ、キーポイントなどの条件付き入力を可能にすることができることを報告します。これにより、大規模拡散モデルを制御する方法が豊富になり、関連するアプリケーションがさらに促進される可能性があります。
公開されたチェックポイント
著者らは、Stable Diffusion v1-5 をベースに、異なるタイプの条件付きで学習された8つの異なるチェックポイントを公開しています。
💻 使用例
基本的な使用法
このチェックポイントは Stable Diffusion v1-5 で学習されているため、同モデルと組み合わせて使用することをおすすめします。実験的には、dreamboothed stable diffusionなどの他の拡散モデルとも使用できます。
diffusers
と関連パッケージをインストールしましょう。
$ pip install diffusers transformers accelerate
- コードを実行します。
from transformers import pipeline
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler
from PIL import Image
import numpy as np
import torch
from diffusers.utils import load_image
depth_estimator = pipeline('depth-estimation')
image = load_image("https://huggingface.co/lllyasviel/sd-controlnet-depth/resolve/main/images/stormtrooper.png")
image = depth_estimator(image)['depth']
image = np.array(image)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
image = Image.fromarray(image)
controlnet = ControlNetModel.from_pretrained(
"lllyasviel/sd-controlnet-depth", torch_dtype=torch.float16
)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5", controlnet=controlnet, safety_checker=None, torch_dtype=torch.float16
)
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
pipe.enable_xformers_memory_efficient_attention()
pipe.enable_model_cpu_offload()
image = pipe("Stormtrooper's lecture", image, num_inference_steps=20).images[0]
image.save('./images/stormtrooper_depth_out.png')



学習
深度モデルは、300万の深度画像とキャプションのペアで学習されました。深度画像はMidasで生成されました。このモデルは、Stable Diffusion 1.5をベースモデルとして、Nvidia A100 80Gを使用して500GPU時間学習されました。
ブログ記事
詳細については、公式ControlNetブログ記事 も参照してください。
📄 ライセンス
本モデルのライセンスは OpenRAIL です。