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

🚀 クイックスタート
このモデルを使用するには、まずdiffusers
と関連パッケージをインストールします。
$ pip install diffusers transformers accelerate
次に、以下のコードを実行します。
from PIL import Image
from transformers import pipeline
import numpy as np
import cv2
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler
import torch
from diffusers.utils import load_image
image = load_image("https://huggingface.co/lllyasviel/sd-controlnet-normal/resolve/main/images/toy.png").convert("RGB")
depth_estimator = pipeline("depth-estimation", model ="Intel/dpt-hybrid-midas" )
image = depth_estimator(image)['predicted_depth'][0]
image = image.numpy()
image_depth = image.copy()
image_depth -= np.min(image_depth)
image_depth /= np.max(image_depth)
bg_threhold = 0.4
x = cv2.Sobel(image, cv2.CV_32F, 1, 0, ksize=3)
x[image_depth < bg_threhold] = 0
y = cv2.Sobel(image, cv2.CV_32F, 0, 1, ksize=3)
y[image_depth < bg_threhold] = 0
z = np.ones_like(x) * np.pi * 2.0
image = np.stack([x, y, z], axis=2)
image /= np.sum(image ** 2.0, axis=2, keepdims=True) ** 0.5
image = (image * 127.5 + 127.5).clip(0, 255).astype(np.uint8)
image = Image.fromarray(image)
controlnet = ControlNetModel.from_pretrained(
"fusing/stable-diffusion-v1-5-controlnet-normal", 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("cute toy", image, num_inference_steps=20).images[0]
image.save('images/toy_normal_out.png')



✨ 主な機能
ControlNetは、追加の条件を加えることで拡散モデルを制御することができます。このチェックポイントは、法線マップ推定を条件としたControlNetに対応しています。
📚 ドキュメント
モデルの詳細
導入
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つの異なるチェックポイントを公開しました。
トレーニング
通常のモデルは、初期モデルから学習され、さらに拡張モデルが学習されました。
初期の通常モデルは、DIODEからの25,452の法線画像とキャプションのペアで学習されました。画像のキャプションはBLIPによって生成されました。モデルは、Stable Diffusion 1.5をベースモデルとして、Nvidia A100 80Gを使用して100 GPU時間学習されました。
拡張された通常モデルは、初期の通常モデルを「粗い」法線マップでさらに学習しました。粗い法線マップは、Midasを使用して深度マップを計算し、次に距離から法線を計算することで生成されました。モデルは、初期の通常モデルをベースモデルとして、Nvidia A100 80Gを使用して200 GPU時間学習されました。
ブログ記事
詳細情報については、公式ControlNetブログ記事 も参照してください。
📄 ライセンス
このモデルは The CreativeML OpenRAIL M license の下で提供されています。