🚀 Controlnet - M-LSD直線版本
ControlNet是一種神經網絡結構,通過添加額外條件來控制擴散模型。此檢查點對應於基於M-LSD直線檢測的ControlNet,可與Stable Diffusion結合使用。

🚀 快速開始
若要使用此模型,可按以下步驟操作:
- 安裝https://github.com/patrickvonplaten/controlnet_aux
$ pip install controlnet_aux
- 安裝
diffusers
及相關包:
$ pip pip install diffusers transformers accelerate
- 運行代碼:
from PIL import Image
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler
import torch
from controlnet_aux import MLSDdetector
from diffusers.utils import load_image
mlsd = MLSDdetector.from_pretrained('lllyasviel/ControlNet')
image = load_image("https://huggingface.co/lllyasviel/sd-controlnet-mlsd/resolve/main/images/room.png")
image = mlsd(image)
controlnet = ControlNetModel.from_pretrained(
"lllyasviel/sd-controlnet-mlsd", 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("room", image, num_inference_steps=20).images[0]
image.save('images/room_mlsd_out.png')



✨ 主要特性
- 條件控制:ControlNet可通過添加額外條件來控制擴散模型,實現如邊緣圖、分割圖、關鍵點等條件輸入。
- 多類型檢查點:作者發佈了8種不同的檢查點,每種都基於不同類型的條件進行訓練。
📦 安裝指南
安裝依賴
$ pip install controlnet_aux
$ pip pip install diffusers transformers accelerate
💻 使用示例
基礎用法
from PIL import Image
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler
import torch
from controlnet_aux import MLSDdetector
from diffusers.utils import load_image
mlsd = MLSDdetector.from_pretrained('lllyasviel/ControlNet')
image = load_image("https://huggingface.co/lllyasviel/sd-controlnet-mlsd/resolve/main/images/room.png")
image = mlsd(image)
controlnet = ControlNetModel.from_pretrained(
"lllyasviel/sd-controlnet-mlsd", 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("room", image, num_inference_steps=20).images[0]
image.save('images/room_mlsd_out.png')
📚 詳細文檔
模型詳情
發佈的檢查點
作者發佈了8種不同的檢查點,每種都基於Stable Diffusion v1-5在不同類型的條件下進行訓練:
訓練
霍夫線模型在60萬個邊緣圖像 - 標題對上進行訓練。該數據集由Places2生成,使用BLIP生成文本標題,使用深度霍夫變換生成邊緣圖像。模型以Canny模型為基礎模型,使用Nvidia A100 80G進行了160個GPU小時的訓練。
博客文章
更多信息請查看ControlNet官方博客文章。
🔧 技術細節
ControlNet由Lvmin Zhang和Maneesh Agrawala在論文Adding Conditional Control to Text-to-Image Diffusion Models中提出。其摘要如下:
我們提出了一種神經網絡結構ControlNet,用於控制預訓練的大型擴散模型以支持額外的輸入條件。ControlNet以端到端的方式學習特定任務的條件,即使訓練數據集較小(< 50k),學習過程也很穩健。此外,訓練ControlNet的速度與微調擴散模型一樣快,並且可以在個人設備上進行訓練。或者,如果有強大的計算集群,模型可以擴展到大量(數百萬到數十億)的數據。我們發現,像Stable Diffusion這樣的大型擴散模型可以通過ControlNet進行增強,以實現如邊緣圖、分割圖、關鍵點等條件輸入。這可能會豐富控制大型擴散模型的方法,並進一步促進相關應用的發展。
📄 許可證
本項目採用CreativeML OpenRAIL M許可證。