ControlNet
Diffusion · Lvmin Zhang · 2023
VRAM по точности
| Точность | VRAM | Качество | Рекомендация |
|---|---|---|---|
| FP16 | 6 ГБ | Максимальное | Для продакшена |
| INT8 | 4 ГБ | Хорошее |
Совместимые GPU
| GPU | VRAM | Поддерживает | |
|---|---|---|---|
|
Рек.
NVIDIA RTX 4090
|
24 ГБ | FP16, INT8 | Арендовать |
| 24 ГБ | FP16, INT8 | Арендовать |
Рекомендуемые фреймворки
Характеристики модели
Технические параметры
- Разработчик
- Lvmin Zhang
- Год выпуска
- 2023
- Архитектура
- Diffusion
- Лицензия
- Apache-2.0
- Разрешение
- 512x512
- Формат вывода
- PNG
Применение
ControlNet — семейство дополнительных сетей условий к Stable Diffusion: вы подаёте структурированный сигнал (канни, глубина, openpose, скетч и т.д.), а базовая модель «подстраивает» картинку под него. Это не отдельный генератор сам по себе — обычно пара SD 1.5 / SDXL + конкретный вес ControlNet. Главная выгода — предсказуемая геометрия и композиция без ручной ретуши десятков seed’ов.
Запуск на cloudcompute.ru
Шаг 1 — Арендуйте GPU
Память складывается из базовой модели + ControlNet; для связки SD 1.5 + один контроллер часто достаточно RTX 3090. Перейдите в каталог GPU.
Шаг 2 — Запустите ComfyUI
docker run --gpus all -p 8188:8188 \
-v comfyui-data:/root \
ghcr.io/ai-dock/comfyui:latest
Откройте http://localhost:8188. В ComfyUI удобнее всего собирать граф с нодами ControlNet: выберите базовый checkpoint (SD 1.5 или SDXL) и совместимый с ним вес контроллера (canny, depth, openpose…).
Шаг 3 — Сгенерируйте изображение
Минимальный пример в Diffusers (Canny + SD 1.5; нужен opencv-python-headless):
import torch
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
from diffusers.utils import load_image
from PIL import Image
import cv2
import numpy as np
base = "runwayml/stable-diffusion-v1-5"
canny_id = "lllyasviel/sd-controlnet-canny"
image = load_image("https://huggingface.co/lllyasviel/sd-controlnet-canny/resolve/main/images/human_line.png")
image = np.array(image)
canny = cv2.Canny(image, 100, 200)
canny = Image.fromarray(canny)
controlnet = ControlNetModel.from_pretrained(canny_id, torch_dtype=torch.float16)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
base, controlnet=controlnet, torch_dtype=torch.float16
)
pipe = pipe.to("cuda")
out = pipe("a man dancing, full body, studio lighting", image=canny).images[0]
out.save("output.png")
Оптимизация
- Подбирайте
controlnet_conditioning_scale: слишком высокий — «жёсткая» копия контура, слишком низкий — слабый контроль. - Для SDXL используйте SDXL-совместимые веса ControlNet, а не чекпоинты от SD 1.5.