Tutorial de ControlNet: Uso de ControlNet en ComfyUI para generación precisa de imágenes controladas
En el proceso de generación de imágenes con IA, controlar con precisión la generación de imágenes no es una tarea sencilla. Normalmente requiere numerosos intentos para generar una imagen satisfactoria, pero con la aparición de ControlNet, este problema se ha resuelto eficazmente.
ControlNet ofrece más de una docena de modelos de redes de control, permitiéndonos controlar aspectos como el estilo, los detalles, las poses de los personajes, la estructura de la imagen y más. Estas condiciones hacen que la generación de imágenes con IA sea más controlable, y durante el proceso de dibujo se pueden utilizar varios modelos ControlNet simultáneamente para lograr mejores resultados.
Puedes entender ControlNet como un asistente traductor que convierte nuestra imagen de referencia en instrucciones que la IA puede comprender, transmitiéndolas al modelo de IA para generar imágenes que cumplan con nuestros requisitos.
Por ejemplo, en esta imagen, ingresando una imagen de una persona, extrayendo las condiciones de control de la persona a través del preprocesador, y luego aplicando el modelo ControlNet, se generó una imagen de persona con la misma postura.
Este tutorial cubrirá:
- Introducción básica a ControlNet
- Flujo de trabajo de ControlNet en ComfyUI
- Recursos relacionados con ControlNet
- Composición de un flujo de trabajo típico de ControlNet en ComfyUI
Luego, en otros artículos relacionados con ControlNet en ComfyUI-Wiki, explicaremos específicamente cómo utilizar modelos ControlNet individuales con ejemplos relevantes.
Breve introducción a ControlNet
ControlNet es un modelo de generación controlada por condiciones basado en modelos de difusión (como Stable Diffusion), propuesto inicialmente por Lvmin Zhang, Maneesh Agrawala y otros en 2023. Este modelo mejora significativamente la controlabilidad y la capacidad de restauración de detalles en la generación de imágenes mediante la introducción de condiciones de entrada multimodales (como detección de bordes, mapas de profundidad, puntos clave de postura, etc.).
Aquí hay algunos enlaces relacionados con ControlNet:
- Página del autor: lllyasviel
- ControlNet 1.0: ControlNet
- ControlNet-v1-1-nightly: ControlNet-v1-1-nightly
- Hugging Face: ControlNet-v1-1
- Paper: ControlNext-to-Image Diffusion Models
Tipos comunes de control en ControlNet
Con el desarrollo de ControlNet en los últimos años y las contribuciones de la comunidad, actualmente ControlNet admite más de una docena de tipos de control. A continuación, se presentan algunos tipos comunes, cada uno adecuado para diferentes escenarios.
1. Control de líneas
- Canny: Genera líneas detalladas mediante detección de bordes, ideal para imitar con precisión la estructura original.
- MLSD: Solo detecta líneas rectas, adecuado para arquitectura, diseño de interiores, etc.
- Lineart: Reconocimiento de líneas de nueva generación, más refinado que Canny, compatible con extracción de líneas de anime.
- SoftEdge: Detección de bordes suaves, prioriza las líneas de contorno grandes, adecuado para escenarios que no requieren imitación precisa.
- Scribble/Sketch: Control de garabatos, admite reconocimiento de contornos aproximados o generación de imágenes a partir de bocetos dibujados a mano.
2. Profundidad y estructura
- Depth: Distingue la relación de profundidad entre el primer plano y el fondo mediante el brillo, las áreas blancas están más cerca, las negras más lejos.
- NormalMap: Mapa de normales, controla la textura de superficie de los objetos (como efectos de ventanas hundidas).
- OpenPose: Reconocimiento de postura esquelética, puede detectar automáticamente o editar manualmente la postura humana.
3. Semántica y segmentación
- Segmentation: Segmentación semántica, genera imágenes basadas en colores correspondientes a categorías de objetos (como el azul para el cielo).
- Inpaint/redibujado local: Modifica partes específicas de la imagen manteniendo la coherencia con el estilo original.
4. Estilo y color
- Shuffle: Mezcla aleatoria, reorganiza elementos semánticos de la imagen de referencia para generar escenas diversas.
- Recolor: Recolorización de imágenes en blanco y negro, compatible con definición automática o por palabras clave de los colores.
- IP-Adapter: Imitación de estilo/rostro, mantiene la consistencia en la imagen generada.
5. Extensiones funcionales
- InstructP2P: Modifica imágenes mediante instrucciones de texto (como hacer que una casa “esté en llamas”).
- Instant_ID: Cambio de rostro con IA, mantiene la consistencia facial y admite fusión de múltiples imágenes.
- Tile/Blur: Mejora de alta definición y detalles en imágenes borrosas.
No es compatible con procesadores especializados para rostros/manos OpenPose y algunos preprocesadores de segmentación semántica.
Flujo de trabajo de ControlNet en ComfyUI
En ComfyUI, ControlNet funciona como un controlador de condiciones que generalmente involucra los siguientes pasos de procesamiento. Debido a que actualmente existen muchas versiones de modelos ControlNet en ComfyUI, el proceso específico puede variar. Aquí explicaremos utilizando el modelo ControlNet V1.1 como ejemplo, y añadiremos flujos de trabajo específicos en tutoriales posteriores.
- Preprocesamiento de imágenes
Necesitamos cargar una imagen de referencia, y el preprocesador de ControlNet extraerá características clave (como contornos, líneas, posturas). Por ejemplo, la imagen de la persona al principio de este artículo se convierte en condiciones de control de Openpose.
- Inyección de condiciones
ControlNet transforma las características extraídas en “señales de condición” que se transmiten al muestreador (como el muestreador K). Estas señales indican a la IA: “Al generar la imagen, intenta ajustarte a las líneas/posturas/estructuras de la imagen de referencia”.
- Generación de imágenes por el muestreador
El muestreador (como el muestreador K), durante el proceso de eliminación de ruido para generar la imagen, considerará las señales de condición proporcionadas por ControlNet, produciendo finalmente una imagen que cumple tanto con la descripción textual como con las características de la imagen de referencia.
Flujo de trabajo de ControlNet
Flujo de trabajo de ControlNet sin preprocesador
Esta sección presentará un flujo de trabajo típico de ControlNet para SD1.5, sin depender de plugins de terceros.
1. Preparación de archivos de modelo
Para utilizar este flujo de trabajo, asegúrate de tener instalado lo siguiente:
- Descarga Dreamshaper 8 y guárdalo en el directorio
ComfyUI/models/checkpoints/
- Descarga control_v11p_sd15_openpose.pth y guárdalo en el directorio
ComfyUI/models/controlnet/
En ComfyUI, los modelos ControlNet para diferentes versiones de modelos de dibujo no son compatibles entre sí. Por ejemplo, los modelos ControlNet para SD1.5 no pueden utilizarse con modelos Flux, y viceversa. Por lo tanto, recomiendo crear carpetas específicas al guardar modelos para identificar la versión, facilitando la selección:
ComfyUI/models/checkpoints/sd1.5
ComfyUI/models/controlnet/sd1.5
2. Flujo de trabajo y materiales relacionados
Haz clic en el botón a continuación para descargar el flujo de trabajo correspondiente, luego arrástralo a la interfaz de ComfyUI o usa el menú Workflows
-> Open(Ctrl+O)
para cargarlo.
La siguiente imagen servirá como referencia, por favor descárgala y guárdala:
3. Ejecución del flujo de trabajo
Siguiendo los números en la imagen, completa las operaciones correspondientes para completar este flujo de trabajo de ControlNet.
- Asegúrate de que el nodo
Load Checkpoint
haya cargado el modelo SD1.5 - Asegúrate de que el modelo
control_v11p_sd15_openpose.pth
pueda ser reconocido y cargado en el nodoLoad ControlNet Model
- Carga la imagen de referencia proporcionada anteriormente en el nodo
Load Image
- Después de completar los pasos anteriores, haz clic en el botón
Queue
o usa el atajoCtrl(cmd) + Enter
para generar la imagen
Intenta ajustar diferentes parámetros en el nodo Apply ControlNet y genera imágenes para observar cómo diferentes intensidades (Strength) y diferentes porcentajes de inicio (start_percent) y fin (end_percent) afectan el resultado generado.
4. Explicación del flujo de trabajo
En el flujo anterior, si comparamos con nuestro flujo de trabajo de texto a imagen:
Notarás que la principal diferencia es que en el flujo de texto a imagen original, ahora ingresamos las condiciones correspondientes al nodo Apply ControlNet
, añadiendo las condiciones de control correspondientes a través de este nodo, y luego enviamos las condiciones de salida resultantes a la entrada de condición del nodo KSampler
.
Puedes ver que el personaje se generó correctamente, y además, los errores comunes de extremidades en los modelos SD1.5 no aparecen en este flujo de trabajo.
Después de completar los pasos anteriores, puedes intentar modificar el tamaño del nodo Empty Latent Image
, por ejemplo, configurándolo a 512x512
, y generar de nuevo para observar las diferencias entre la imagen generada y la imagen de referencia.
Deberías poder ver que la imagen final generada solo utiliza el área central de la imagen de referencia. Además, diferentes tipos de imágenes de referencia requieren diferentes tipos de modelos ControlNet. Por ejemplo, Openpose necesita el modelo control_v11p_sd15_openpose.pth, mientras que una imagen Canny necesita el modelo control_v11p_sd15_canny.pth.
En el flujo de trabajo anterior, podríamos tener una pregunta: la imagen de referencia que usamos (Openpose) no es tan común, ¿podríamos usar otras imágenes de referencia más comunes para generar imágenes correspondientes? Aquí es donde necesitamos usar preprocesadores. Continuemos con un flujo de trabajo que utiliza preprocesadores en la siguiente sección.
Flujo de trabajo de ControlNet con preprocesador
¿Qué es un preprocesador?
Por ejemplo, en la siguiente imagen, utilizamos el preprocesador Canny de ComfyUI, que extrae las características de contorno y bordes de la imagen.
Este es el propósito de un preprocesador: convierte nuestra imagen de referencia (como una foto, un dibujo lineal, un garabato, etc.) en un mapa de características estructurado para que el modelo ControlNet pueda entenderlo y guiar el resultado generado.
Hay muchos tipos comunes de preprocesadores, como:
- Preprocesadores de dibujo lineal (como canny, lineart): extraen los contornos de los bordes de la imagen, generando dibujos lineales en blanco y negro.
- Preprocesadores de mapa de profundidad (como depth_midas): calculan los niveles de distancia de los objetos en la imagen, generando un mapa de profundidad en escala de grises.
- Preprocesadores de postura (como openpose): reconocen puntos clave del esqueleto humano, generando imágenes de esqueletos tipo “palitos”.
Sin embargo, en ComfyUI, solo existe el preprocesador Canny, por lo que necesitamos depender de otros plugins para realizar el trabajo de preprocesamiento de imágenes. A continuación, abordaremos el contenido del flujo de trabajo correspondiente.
1. Instalación de plugins relacionados
Este tutorial requiere el plugin ComfyUI ControlNet Auxiliary Preprocessors.
Para la instalación de plugins, puedes consultar el Tutorial de instalación de plugins para ComfyUI.
2. Preparación de archivos de modelo
En este ejemplo, podemos mantener los mismos archivos de modelo que en la sección anterior:
- Descarga Dreamshaper 8 y guárdalo en el directorio
ComfyUI/models/checkpoints/
- Descarga control_v11p_sd15_openpose.pth y guárdalo en el directorio
ComfyUI/models/controlnet/
3. Flujo de trabajo y material de imagen de entrada
Descarga el siguiente archivo de flujo de trabajo:
Después de ejecutar ComfyUI, arrastra el flujo de trabajo o usa el atajo Ctrl+O
de ComfyUI para abrir este archivo.
Por favor, descarga la siguiente imagen y cárgala en el nodo Load Image:
- Carga la imagen de entrada en el nodo Load Image
1
- Selecciona tu modelo instalado en el nodo Load Checkpoint
2
- Selecciona el modelo
control_v11f1p_sd15_openpose.pth
en el nodo Apply ControlNet3
- Usa Queue o el atajo
Ctrl+Enter
para ejecutar el flujo de trabajo y generar la imagen
4. Explicación del flujo de trabajo
Este flujo de trabajo, comparado con el anterior, solo añade un paso adicional de preprocesamiento de imagen. Ingresamos la imagen correspondiente al nodo OpenPose Pose
proporcionado por ComfyUI ControlNet Auxiliary Preprocessors, completando el preprocesamiento de la imagen.
Con esto concluye la introducción básica a ControlNet en ComfyUI. En tutoriales posteriores relacionados con ControlNet, continuaremos presentando más modelos ControlNet y proporcionaremos ejemplos correspondientes.