モデル概要
モデル特徴
モデル能力
使用事例
🚀 Controlnet - v1.1 - seg Version
ControlNetは、追加の条件を加えることで拡散モデルを制御するニューラルネットワーク構造です。このモデルは、Stable Diffusionなどの拡散モデルと組み合わせて使用することができ、画像生成の制御性を高めます。
🚀 クイックスタート
Controlnet v1.1はControlnet v1.0の後継モデルで、Lvmin Zhangによってlllyasviel/ControlNet-v1-1で公開されました。
このチェックポイントは、元のチェックポイントをdiffusers
形式に変換したものです。runwayml/stable-diffusion-v1-5などのStable Diffusionと組み合わせて使用することができます。
詳細については、🧨 Diffusers docsも参照してください。
✨ 主な機能
ControlNetは、追加の入力条件をサポートするために事前学習された大規模拡散モデルを制御するニューラルネットワーク構造です。このモデルは、タスク固有の条件をエンドツーエンドで学習し、訓練データセットが小さい場合でもロバストな学習が可能です。
このチェックポイントは、セグメンテーション画像を条件としたControlNetに対応しています。
📚 ドキュメント
モデルの詳細
属性 | 详情 |
---|---|
開発者 | Lvmin Zhang, Maneesh Agrawala |
モデルタイプ | 拡散ベースのテキストから画像への生成モデル |
言語 | 英語 |
ライセンス | The CreativeML OpenRAIL M licenseは、Open RAIL M licenseであり、BigScienceとthe RAIL Initiativeが共同で行っている責任あるAIライセンスの分野での作業から適応されています。詳細は、the article about the BLOOM Open RAIL licenseも参照してください。 |
詳細情報のリソース | GitHub Repository, Paper |
引用 | @misc{zhang2023adding, title={Adding Conditional Control to Text-to-Image Diffusion Models}, author={Lvmin Zhang and Maneesh Agrawala}, year={2023}, eprint={2302.05543}, archivePrefix={arXiv}, primaryClass={cs.CV} } |
概要
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で訓練されているため、同じモデルと組み合わせて使用することをお勧めします。ただし、実験的にはdreamboothed stable diffusionなどの他の拡散モデルとも使用することができます。
注意: 画像を処理して補助条件を作成する場合は、以下に示すように外部依存関係が必要です。
diffusers
と関連パッケージをインストールしましょう。
$ pip install diffusers transformers accelerate
- 後で必要になるカラーテーブルを定義しましょう。
import numpy as np
ada_palette = np.asarray([
[0, 0, 0],
[120, 120, 120],
[180, 120, 120],
[6, 230, 230],
[80, 50, 50],
[4, 200, 3],
[120, 120, 80],
[140, 140, 140],
[204, 5, 255],
[230, 230, 230],
[4, 250, 7],
[224, 5, 255],
[235, 255, 7],
[150, 5, 61],
[120, 120, 70],
[8, 255, 51],
[255, 6, 82],
[143, 255, 140],
[204, 255, 4],
[255, 51, 7],
[204, 70, 3],
[0, 102, 200],
[61, 230, 250],
[255, 6, 51],
[11, 102, 255],
[255, 7, 71],
[255, 9, 224],
[9, 7, 230],
[220, 220, 220],
[255, 9, 92],
[112, 9, 255],
[8, 255, 214],
[7, 255, 224],
[255, 184, 6],
[10, 255, 71],
[255, 41, 10],
[7, 255, 255],
[224, 255, 8],
[102, 8, 255],
[255, 61, 6],
[255, 194, 7],
[255, 122, 8],
[0, 255, 20],
[255, 8, 41],
[255, 5, 153],
[6, 51, 255],
[235, 12, 255],
[160, 150, 20],
[0, 163, 255],
[140, 140, 140],
[250, 10, 15],
[20, 255, 0],
[31, 255, 0],
[255, 31, 0],
[255, 224, 0],
[153, 255, 0],
[0, 0, 255],
[255, 71, 0],
[0, 235, 255],
[0, 173, 255],
[31, 0, 255],
[11, 200, 200],
[255, 82, 0],
[0, 255, 245],
[0, 61, 255],
[0, 255, 112],
[0, 255, 133],
[255, 0, 0],
[255, 163, 0],
[255, 102, 0],
[194, 255, 0],
[0, 143, 255],
[51, 255, 0],
[0, 82, 255],
[0, 255, 41],
[0, 255, 173],
[10, 0, 255],
[173, 255, 0],
[0, 255, 153],
[255, 92, 0],
[255, 0, 255],
[255, 0, 245],
[255, 0, 102],
[255, 173, 0],
[255, 0, 20],
[255, 184, 184],
[0, 31, 255],
[0, 255, 61],
[0, 71, 255],
[255, 0, 204],
[0, 255, 194],
[0, 255, 82],
[0, 10, 255],
[0, 112, 255],
[51, 0, 255],
[0, 194, 255],
[0, 122, 255],
[0, 255, 163],
[255, 153, 0],
[0, 255, 10],
[255, 112, 0],
[143, 255, 0],
[82, 0, 255],
[163, 255, 0],
[255, 235, 0],
[8, 184, 170],
[133, 0, 255],
[0, 255, 92],
[184, 0, 255],
[255, 0, 31],
[0, 184, 255],
[0, 214, 255],
[255, 0, 112],
[92, 255, 0],
[0, 224, 255],
[112, 224, 255],
[70, 184, 160],
[163, 0, 255],
[153, 0, 255],
[71, 255, 0],
[255, 0, 163],
[255, 204, 0],
[255, 0, 143],
[0, 255, 235],
[133, 255, 0],
[255, 0, 235],
[245, 0, 255],
[255, 0, 122],
[255, 245, 0],
[10, 190, 212],
[214, 255, 0],
[0, 204, 255],
[20, 0, 255],
[255, 255, 0],
[0, 153, 255],
[0, 41, 255],
[0, 255, 204],
[41, 0, 255],
[41, 255, 0],
[173, 0, 255],
[0, 245, 255],
[71, 0, 255],
[122, 0, 255],
[0, 255, 184],
[0, 92, 255],
[184, 255, 0],
[0, 133, 255],
[255, 214, 0],
[25, 194, 194],
[102, 255, 0],
[92, 0, 255],
])
- コードを実行しましょう。
import torch
import os
from huggingface_hub import HfApi
from pathlib import Path
from diffusers.utils import load_image
from PIL import Image
import numpy as np
from transformers import AutoImageProcessor, UperNetForSemanticSegmentation
from diffusers import (
ControlNetModel,
StableDiffusionControlNetPipeline,
UniPCMultistepScheduler,
)
image_processor = AutoImageProcessor.from_pretrained("openmmlab/upernet-convnext-small")
image_segmentor = UperNetForSemanticSegmentation.from_pretrained("openmmlab/upernet-convnext-small")
checkpoint = "lllyasviel/control_v11p_sd15_seg"
image = load_image(
"https://huggingface.co/lllyasviel/control_v11p_sd15_seg/resolve/main/images/input.png"
)
prompt = "old house in stormy weather with rain and wind"
pixel_values = image_processor(image, return_tensors="pt").pixel_values
with torch.no_grad():
outputs = image_segmentor(pixel_values)
seg = image_processor.post_process_semantic_segmentation(outputs, target_sizes=[image.size[::-1]])[0]
color_seg = np.zeros((seg.shape[0], seg.shape[1], 3), dtype=np.uint8) # height, width, 3
for label, color in enumerate(ada_palette):
color_seg[seg == label, :] = color
color_seg = color_seg.astype(np.uint8)
control_image = Image.fromarray(color_seg)
control_image.save("./images/control.png")
controlnet = ControlNetModel.from_pretrained(checkpoint, torch_dtype=torch.float16)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5", controlnet=controlnet, torch_dtype=torch.float16
)
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
pipe.enable_model_cpu_offload()
generator = torch.manual_seed(0)
image = pipe(prompt, num_inference_steps=30, generator=generator, image=control_image).images[0]
image.save('images/image_out.png')
その他の公開チェックポイント v1-1
著者らは、14種類の異なるチェックポイントを公開しています。それぞれがStable Diffusion v1-5を異なるタイプの条件付きで訓練したものです。
モデル名 | 制御画像の概要 | 条件画像 | 制御画像の例 | 生成画像の例 |
---|---|---|---|---|
lllyasviel/control_v11p_sd15_canny |
キャニーエッジ検出で訓練 | 黒い背景に白いエッジがあるモノクロ画像。 | ![]() |
![]() |
lllyasviel/control_v11e_sd15_ip2p |
ピクセルからピクセルへの指示で訓練 | 条件なし。 | ![]() |
![]() |
lllyasviel/control_v11p_sd15_inpaint |
画像インペイントで訓練 | 条件なし。 | ![]() |
![]() |
lllyasviel/control_v11p_sd15_mlsd |
多レベル線分検出で訓練 | 注釈付きの線分がある画像。 | ![]() |
![]() |
lllyasviel/control_v11f1p_sd15_depth |
深度推定で訓練 | 深度情報がある画像(通常はグレースケール画像で表される)。 | ![]() |
![]() |
lllyasviel/control_v11p_sd15_normalbae |
表面法線推定で訓練 | 表面法線情報がある画像(通常は色分けされた画像で表される)。 | ![]() |
![]() |
lllyasviel/control_v11p_sd15_seg |
画像セグメンテーションで訓練 | セグメント化された領域がある画像(通常は色分けされた画像で表される)。 | ![]() |
![]() |
lllyasviel/control_v11p_sd15_lineart |
ラインアート生成で訓練 | ラインアートがある画像(通常は白い背景に黒い線)。 | ![]() |
![]() |
lllyasviel/control_v11p_sd15s2_lineart_anime |
アニメラインアート生成で訓練 | アニメスタイルのラインアートがある画像。 | ... | ... |
📄 ライセンス
このモデルはThe CreativeML OpenRAIL M licenseの下で提供されています。これはOpen RAIL M licenseであり、BigScienceとthe RAIL Initiativeが共同で行っている責任あるAIライセンスの分野での作業から適応されています。

