ControlNet es una arquitectura de red neuronal revolucionaria desarrollada por lllyasviel, diseñada para controlar modelos de difusión mediante la adición de condiciones adicionales. Este proyecto es la implementación oficial del artículo "Adding Conditional Control to Text-to-Image Diffusion Models" (Añadiendo Control Condicional a Modelos de Difusión de Texto a Imagen), y aporta una capacidad de control preciso sin precedentes al campo de la generación de texto a imagen.
ControlNet funciona duplicando los pesos de los bloques de la red neuronal en copias "bloqueadas" y copias "entrenables". La idea central de este diseño es:
ControlNet añade una dimensión de control condicional adicional a las indicaciones de texto tradicionales, permitiendo a los usuarios guiar el proceso de generación de imágenes de diversas maneras, incluyendo:
El proyecto soporta múltiples modelos de control pre-entrenados:
# Ejemplos de tipos de control soportados
control_types = [
"canny", # Detección de bordes
"depth", # Estimación de profundidad
"hed", # Detección de bordes suaves
"mlsd", # Detección de líneas
"normal", # Mapa de normales
"openpose", # Detección de pose
"scribble", # Control de garabatos
"seg", # Segmentación semántica
]
El proceso de aprendizaje de ControlNet es de extremo a extremo, e incluso con un conjunto de datos de entrenamiento pequeño (<50k), el proceso de aprendizaje es robusto. Entrenar ControlNet es tan rápido como ajustar un modelo de difusión, e incluso se puede entrenar en dispositivos personales.
La revolución de ControlNet radica en que resuelve el problema de la consistencia espacial, aportando un nivel de control sin precedentes a la generación de imágenes por IA.
Los componentes principales del proyecto incluyen:
ControlNet/
├── models/ # Definiciones de modelos
├── annotator/ # Varios detectores de condiciones
├── tutorials/ # Tutoriales y ejemplos
├── gradio_*.py # Archivos de interfaz Gradio
└── train.py # Script de entrenamiento
# Ejemplo de uso básico
from transformers import pipeline
# Cargar la tubería ControlNet
pipe = pipeline("text-to-image", model="lllyasviel/sd-controlnet-canny")
# Generar imagen
result = pipe(
prompt="a beautiful landscape",
image=control_image, # Imagen de condición de control
num_inference_steps=50
)
En comparación con los modelos tradicionales de texto a imagen, ControlNet proporciona una capacidad de control preciso a nivel de píxel.
Soporta el uso combinado de múltiples condiciones de control, permitiendo satisfacer complejas necesidades de generación de imágenes.
El código del proyecto ya está conectado a 🤗 Hub, y se puede integrar fácilmente en los flujos de trabajo existentes.
El proyecto es completamente de código abierto, con un soporte activo de la comunidad y actualizaciones continuas.
Proporciona una versión nocturna y archivos de modelo mejorados, que incluyen un mejor rendimiento y funcionalidades adicionales.
# Dependencias básicas
pip install torch torchvision
pip install transformers diffusers
pip install controlnet-aux # Paquete de herramientas auxiliares
# Usando la biblioteca Hugging Face Diffusers
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
import torch
# Cargar el modelo ControlNet
controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny")
# Crear la tubería
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
controlnet=controlnet,
torch_dtype=torch.float16
)
ControlNet representa un avance significativo en la tecnología de generación de texto a imagen, no solo resolviendo el problema de la falta de control preciso de los métodos tradicionales, sino también proporcionando una herramienta poderosa para creadores y desarrolladores. A través de su innovador diseño de arquitectura y sus ricas condiciones de control, ControlNet está redefiniendo las posibilidades de la creación asistida por IA.