🚀 Controlnet - v1.1 - Canny版本
Controlnet v1.1是一款強大的圖像生成控制模型,它通過添加額外條件來控制擴散模型,能與Stable Diffusion結合,實現如邊緣圖、分割圖等條件輸入,為圖像生成帶來更多可能性。
🚀 快速開始
Controlnet v1.1是Controlnet v1.0的後續模型,由Lvmin Zhang在lllyasviel/ControlNet-v1-1中發佈。此檢查點是將原始檢查點轉換為diffusers
格式,可與Stable Diffusion(如runwayml/stable-diffusion-v1-5)結合使用。
更多詳情請查看🧨 Diffusers文檔。
ControlNet是一種神經網絡結構,通過添加額外條件來控制擴散模型。

此檢查點對應基於Canny邊緣的ControlNet。
✨ 主要特性
- 靈活控制:能控制預訓練的大型擴散模型,支持額外輸入條件,如邊緣圖、分割圖、關鍵點等。
- 高效訓練:學習特定任務條件時端到端,即使訓練數據集小(< 50k)也很穩健,訓練速度快,可在個人設備上進行。
- 可擴展性強:若有強大計算集群,可處理大量(數百萬到數十億)數據。
📦 安裝指南
若要處理圖像以創建輔助條件,需要安裝以下外部依賴:
- 安裝opencv:
$ pip install opencv-contrib-python
- 安裝
diffusers
及相關包:
$ pip install diffusers transformers accelerate
💻 使用示例
基礎用法
import torch
import os
from huggingface_hub import HfApi
from pathlib import Path
from diffusers.utils import load_image
import numpy as np
import cv2
from PIL import Image
from diffusers import (
ControlNetModel,
StableDiffusionControlNetPipeline,
UniPCMultistepScheduler,
)
checkpoint = "lllyasviel/control_v11p_sd15_canny"
image = load_image(
"https://huggingface.co/lllyasviel/control_v11p_sd15_canny/resolve/main/images/input.png"
)
image = np.array(image)
low_threshold = 100
high_threshold = 200
image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
control_image = Image.fromarray(image)
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(33)
image = pipe("a blue paradise bird in the jungle", num_inference_steps=20, generator=generator, image=control_image).images[0]
image.save('images/image_out.png')
高級用法
建議將此檢查點與Stable Diffusion v1-5配合使用,因為該檢查點是基於此訓練的。實驗表明,此檢查點也可與其他擴散模型(如經過微調的Stable Diffusion)結合使用。



📚 詳細文檔
模型詳情
模型介紹
Controlnet由Lvmin Zhang和Maneesh Agrawala在Adding Conditional Control to Text-to-Image Diffusion Models中提出。
摘要如下:
我們提出了一種神經網絡結構ControlNet,用於控制預訓練的大型擴散模型,以支持額外輸入條件。ControlNet以端到端的方式學習特定任務條件,即使訓練數據集小(< 50k),學習過程也很穩健。此外,訓練ControlNet的速度與微調擴散模型相當,且可在個人設備上進行訓練。或者,若有強大的計算集群,模型可處理大量(數百萬到數十億)數據。我們發現,像Stable Diffusion這樣的大型擴散模型可以與ControlNets結合,實現如邊緣圖、分割圖、關鍵點等條件輸入。這可能會豐富控制大型擴散模型的方法,並進一步推動相關應用的發展。
其他發佈的檢查點v1 - 1
作者發佈了14種不同的檢查點,每種都基於Stable Diffusion v1 - 5在不同類型的條件下進行訓練:
Canny 1.1的改進
- 數據集優化:之前的cnet 1.0訓練數據集存在一些問題,包括(1)一小部分灰度人體圖像被重複了數千次,導致之前的模型有些容易生成灰度人體圖像;(2)一些圖像質量低、非常模糊或有明顯的JPEG偽影;(3)一小部分圖像由於數據處理腳本的錯誤而存在錯誤的配對提示。新模型解決了訓練數據集的所有問題,在很多情況下應該更加合理。
- 強大訓練資源:由於Canny模型是最重要(可能是最常用)的ControlNet之一,我們投入資金在一臺配備8個Nvidia A100 80G的機器上以批量大小8×32 = 256訓練了3天,花費了72×30 = 2160美元(8個A100 80G,每小時30美元)。該模型是在Canny 1.0的基礎上繼續訓練的。
- 數據增強:在訓練中應用了一些合理的數據增強方法,如隨機左右翻轉。
- 性能提升:雖然很難評估一個ControlNet,但我們發現Canny 1.1比Canny 1.0更穩健,視覺質量也略高。
更多信息
更多信息請查看Diffusers ControlNet博客文章和官方文檔。
📄 許可證
本項目採用CreativeML OpenRAIL M許可證。