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.