diffusers/controlnet-canny-sdxl-1.0-small
diffusers
Texto a imagen
ControlNet pequeño para Stable Diffusion XL entrenado con condicionamiento Canny. Está pensado para generación texto-a-imagen guiada por bordes, usando como base `stabilityai/stable-diffusion-xl-base-1.0`. El checkpoint es experimental y aproximadamente 7 veces más pequeño que el ControlNet XL original, por lo que busca reducir tamaño manteniendo utilidad general, aunque puede rendir peor que checkpoints grandes en condicionamientos complejos.
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-small")
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
controlnet=controlnet
)
Ejemplo completo para SDXL con imagen Canny:
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 # recommended for good generalization
controlnet = ControlNetModel.from_pretrained(
"diffusers/controlnet-canny-sdxl-1.0-small",
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")
Funcionalidades
- ControlNet SDXL con condicionamiento por detección de bordes Canny.
- Checkpoint pequeño, unas 7 veces menor que el ControlNet XL original.
- Compatible con Diffusers y `StableDiffusionXLControlNetPipeline`.
- Entrenado sin destilación, inicializado desde el UNet de SDXL y sin bloques de atención.
- Entrenado sobre 3 millones de imágenes del subconjunto LAION aesthetic 6 plus durante 50k pasos.
- Recomienda ajustar `controlnet_conditioning_scale` y `guidance_scale` para mejorar la calidad según el caso.
Casos de uso
- Generar imágenes con SDXL siguiendo la estructura de bordes de una imagen de referencia.
- Prototipar flujos texto-a-imagen controlados por Canny con un checkpoint más ligero que los ControlNet XL grandes.
- Crear variaciones fotorealistas o estilizadas manteniendo composición, contornos o siluetas de entrada.
- Experimentar con pipelines locales de Diffusers que necesiten menor tamaño de modelo.