diffusers/controlnet-canny-sdxl-1.0-mid
diffusers
Texto a imagen
ControlNet experimental y ligero para Stable Diffusion XL que usa mapas de bordes Canny como condicionamiento. Está entrenado sobre stabilityai/stable-diffusion-xl-base-1.0 y ofrece pesos aproximadamente 5 veces más pequeños que el checkpoint XL ControlNet original, con buena generalización usando una escala de condicionamiento recomendada de 0.5.
Como usar
Instalación básica con Diffusers:
pip install -U diffusers transformers accelerate
from diffusers import ControlNetModel, StableDiffusionControlNetPipeline
controlnet = ControlNetModel.from_pretrained("diffusers/controlnet-canny-sdxl-1.0-mid")
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
controlnet=controlnet
)
Ejemplo completo de uso con SDXL, VAE FP16 y detección Canny con OpenCV:
pip install accelerate transformers safetensors opencv-python diffusers
from diffusers import ControlNetModel, StableDiffusionXLControlNetPipeline, AutoencoderKL
from diffusers.utils import load_image
from PIL import Image
import torch
import numpy as np
import cv2
prompt = "aerial view, a futuristic research complex in a bright foggy jungle, hard lighting"
negative_prompt = "low quality, bad quality, sketches"
image = load_image("https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd_controlnet/hf-logo.png")
controlnet_conditioning_scale = 0.5
controlnet = ControlNetModel.from_pretrained(
"diffusers/controlnet-canny-sdxl-1.0-mid",
torch_dtype=torch.float16
)
vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16)
pipe = StableDiffusionXLControlNetPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
controlnet=controlnet,
vae=vae,
torch_dtype=torch.float16,
)
pipe.enable_model_cpu_offload()
image = np.array(image)
image = cv2.Canny(image, 100, 200)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
image = Image.fromarray(image)
images = pipe(
prompt,
negative_prompt=negative_prompt,
image=image,
controlnet_conditioning_scale=controlnet_conditioning_scale,
).images
images[0].save(f"hug_lab.png")
El autor recomienda experimentar con controlnet_conditioning_scale y guidance_scale para mejorar la calidad. El checkpoint se marca como experimental y puede rendir peor que checkpoints más grandes en condicionamientos complejos.
Funcionalidades
- Adaptador ControlNet para generación texto-a-imagen con Stable Diffusion XL.
- Condicionamiento mediante bordes Canny extraídos de una imagen de entrada.
- Checkpoint pequeño, unas 5 veces más ligero que el ControlNet XL original.
- Compatible con Diffusers y formato Safetensors.
- Entrenado sin destilación, inicializado desde el UNet de SDXL y sin bloques de atención.
- Entrenado con 3 millones de imágenes de LAION aesthetic 6 plus, batch size 256, 50.000 pasos, learning rate constante 3e-5.
- Pensado para FP16; el cómputo reportado fue una máquina 8xA100.
Casos de uso
- Generar imágenes SDXL siguiendo la estructura de bordes de una imagen de referencia.
- Crear variaciones visuales guiadas por contornos Canny con prompts de texto.
- Prototipar flujos ControlNet más ligeros cuando el tamaño del checkpoint importa.
- Experimentar con composición, poses, siluetas o geometría aproximada usando mapas de borde.
- Investigación y mejora comunitaria de ControlNets compactos para SDXL.