模型概述
模型特點
模型能力
使用案例
🚀 Controlnet - 法線貼圖版本
ControlNet 是一種神經網絡結構,通過添加額外條件來控制擴散模型。此檢查點對應於基於法線貼圖估計的 ControlNet。它可與 Stable Diffusion 結合使用。
🚀 快速開始
本模型建議與 Stable Diffusion v1 - 5 結合使用,因為該檢查點是基於此模型訓練的。實驗表明,該檢查點也可與其他擴散模型(如經過微調的 Stable Diffusion)一起使用。
安裝依賴
$ 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)
# Remove if you do not have xformers installed
# see https://huggingface.co/docs/diffusers/v0.13.0/en/optimization/xformers#installing-xformers
# for installation instructions
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 作為一種神經網絡結構,能夠通過添加額外條件來控制擴散模型,為文本到圖像的生成提供更多的控制維度。
- 端到端學習:可以端到端地學習特定任務的條件,即使在訓練數據集較小(少於 50k)的情況下,學習效果依然穩健。
- 訓練高效:訓練速度與微調擴散模型相當,既可以在個人設備上進行訓練,也可以利用強大的計算集群處理大量數據。
- 多類型條件支持:可以與 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)
# Remove if you do not have xformers installed
# see https://huggingface.co/docs/diffusers/v0.13.0/en/optimization/xformers#installing-xformers
# for installation instructions
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')
📚 詳細文檔
模型詳情
屬性 | 詳情 |
---|---|
開發者 | Lvmin Zhang, Maneesh Agrawala |
模型類型 | 基於擴散的文本到圖像生成模型 |
語言 | 英文 |
許可證 | The CreativeML OpenRAIL M license 是一種 Open RAIL M license,改編自 BigScience 和 the RAIL Initiative 在負責任的人工智能許可領域的聯合工作。有關我們許可證所基於的 BLOOM Open RAIL license 的文章,請參閱相關鏈接。 |
更多信息資源 | GitHub 倉庫,論文 |
引用方式 | @misc{zhang2023adding, |
模型介紹
Controlnet 由 Lvmin Zhang 和 Maneesh Agrawala 在論文 Adding Conditional Control to Text-to-Image Diffusion Models 中提出。論文摘要如下:
我們提出了一種神經網絡結構 ControlNet,用於控制預訓練的大型擴散模型,以支持額外的輸入條件。ControlNet 以端到端的方式學習特定任務的條件,即使訓練數據集較小(少於 50k),學習過程也很穩健。此外,訓練 ControlNet 的速度與微調擴散模型相當,並且可以在個人設備上進行訓練。或者,如果有強大的計算集群,模型可以處理大量(數百萬到數十億)的數據。我們發現,像 Stable Diffusion 這樣的大型擴散模型可以通過 ControlNets 進行增強,以支持邊緣圖、分割圖、關鍵點等條件輸入。這可能會豐富控制大型擴散模型的方法,並進一步促進相關應用的發展。
發佈的檢查點
作者發佈了 8 種不同的檢查點,每種檢查點都基於 Stable Diffusion v1 - 5 在不同類型的條件下進行訓練:
模型名稱 | 控制圖像概述 | 控制圖像示例 | 生成圖像示例 |
---|---|---|---|
lllyasviel/sd-controlnet-canny 基於 Canny 邊緣檢測訓練 |
黑色背景上帶有白色邊緣的單色圖像。 | ![]() |
![]() |
lllyasviel/sd-controlnet-depth 基於 Midas 深度估計訓練 |
黑色代表深區域,白色代表淺區域的灰度圖像。 | ![]() |
![]() |
lllyasviel/sd-controlnet-hed 基於 HED 邊緣檢測(軟邊緣)訓練 |
黑色背景上帶有白色軟邊緣的單色圖像。 | ![]() |
![]() |
lllyasviel/sd-controlnet-mlsd 基於 M - LSD 線檢測訓練 |
黑色背景上僅由白色直線組成的單色圖像。 | ![]() |
![]() |
lllyasviel/sd-controlnet-normal 基於法線貼圖訓練 |
法線貼圖 圖像。 | ![]() |
![]() |
lllyasviel/sd-controlnet_openpose 基於 OpenPose 骨骼圖像訓練 |
OpenPose 骨骼 圖像。 | ![]() |
![]() |
lllyasviel/sd-controlnet_scribble 基於人工塗鴉訓練 |
黑色背景上帶有白色輪廓的手繪單色圖像。 | ![]() |
![]() |
lllyasviel/sd-controlnet_seg 基於語義分割訓練 |
ADE20K 的分割協議圖像。 | ![]() |
![]() |
訓練過程
法線模型的訓練分為初始模型訓練和擴展模型訓練兩個階段:
- 初始法線模型訓練:基於 DIODE 中的 25,452 對法線圖像和標題對進行訓練,圖像標題由 BLIP 生成。以 Stable Diffusion 1.5 為基礎模型,使用 Nvidia A100 80G 進行了 100 GPU 小時的訓練。
- 擴展法線模型訓練:在初始法線模型的基礎上,進一步在“粗略”法線貼圖上進行訓練。這些粗略法線貼圖是通過 Midas 計算深度圖,然後從距離計算法線得到的。使用初始法線模型作為基礎模型,使用 Nvidia A100 80G 進行了 200 GPU 小時的訓練。
博客文章
更多信息請參考 ControlNet 官方博客文章。
🔧 技術細節
ControlNet 通過添加額外的條件輸入,對預訓練的擴散模型進行控制。在訓練過程中,它能夠端到端地學習特定任務的條件,使得即使在訓練數據較少的情況下,也能實現穩健的學習。在本項目中,法線模型的訓練分為兩個階段,初始模型基於特定的法線圖像和標題對進行訓練,擴展模型則在粗略法線貼圖上進一步優化。在推理階段,通過結合 Stable Diffusion 模型和 ControlNet 模型,根據輸入的條件圖像和文本提示生成相應的圖像。
📄 許可證
本項目採用 The CreativeML OpenRAIL M license,這是一種 Open RAIL M license,改編自 BigScience 和 the RAIL Initiative 在負責任的人工智能許可領域的聯合工作。有關我們許可證所基於的 BLOOM Open RAIL license 的文章,請參閱相關鏈接。

