🚀 Controlnet - Canny版本
ControlNet是一種神經網絡結構,可通過添加額外條件來控制擴散模型。此檢查點對應於基於Canny邊緣的ControlNet,可與Stable Diffusion結合使用。
🚀 快速開始
本項目的ControlNet模型可與Stable Diffusion結合使用,以下是使用該模型生成圖像的快速開始步驟:
- 安裝必要的依賴庫,如
opencv
、diffusers
等。
- 運行示例代碼,即可根據輸入的圖像和提示詞生成圖像。
✨ 主要特性
- 條件控制:ControlNet能夠為預訓練的大型擴散模型添加額外的輸入條件,如邊緣圖、分割圖、關鍵點等,從而實現對圖像生成過程的精細控制。
- 高效訓練:訓練ControlNet的速度與微調擴散模型相當,即使在小數據集(少於50k)上也能實現穩健學習,並且可以在個人設備上進行訓練。
- 多模型適配:該模型可以與多種擴散模型結合使用,如Stable Diffusion,具有良好的通用性和擴展性。
📦 安裝指南
若要使用本模型,需要安裝一些外部依賴庫:
- 安裝
opencv
:
$ pip install opencv-contrib-python
- 安裝
diffusers
及相關包:
$ pip install diffusers transformers accelerate
💻 使用示例
基礎用法
import cv2
from PIL import Image
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler
import torch
import numpy as np
from diffusers.utils import load_image
image = load_image("https://huggingface.co/lllyasviel/sd-controlnet-hed/resolve/main/images/bird.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)
image = Image.fromarray(image)
controlnet = ControlNetModel.from_pretrained(
"lllyasviel/sd-controlnet-canny", 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("bird", image, num_inference_steps=20).images[0]
image.save('images/bird_canny_out.png')
高級用法
示例代碼展示瞭如何使用Canny邊緣檢測生成圖像,你可以根據需要調整輸入圖像、提示詞和模型參數,以實現不同的圖像生成效果。
📚 詳細文檔
模型詳情
@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進行增強,以支持邊緣圖、分割圖、關鍵點等條件輸入。這可能會豐富控制大型擴散模型的方法,並進一步推動相關應用的發展。
發佈的檢查點
作者發佈了8種不同的檢查點,每種檢查點都基於 Stable Diffusion v1-5 在不同類型的條件下進行訓練:
訓練信息
Canny邊緣模型在300萬個邊緣圖像-標題對的數據集上進行訓練。該模型以Stable Diffusion 1.5為基礎模型,使用Nvidia A100 80G GPU進行了600小時的訓練。
博客文章
如需瞭解更多信息,請查看 ControlNet官方博客文章。
🔧 技術細節
本項目的Canny邊緣模型基於Stable Diffusion 1.5進行訓練,通過添加額外的ControlNet結構,實現對圖像生成過程的條件控制。模型在訓練過程中使用了大量的邊緣圖像-標題對數據,以學習不同邊緣特徵與圖像生成之間的關係。在推理階段,模型可以根據輸入的圖像和提示詞,生成具有特定邊緣特徵的圖像。
📄 許可證
本項目使用 The CreativeML OpenRAIL M license 許可證,有關許可證的詳細信息,請參閱 關於BLOOM Open RAIL許可證的文章。