# 2-3 ControlNet

## ¿Qué es ControlNet?

ControlNet es un complemento que se utiliza para controlar la generación de imágenes por IA. Utiliza una tecnología conocida como “Redes Generativas Antagonistas Condicionales” para generar imágenes. A diferencia de las redes generativas adversarias tradicionales, ControlNet permite a los usuarios controlar finamente las imágenes generadas, como cargar bocetos lineales para que la IA los coloree, controlar la postura de personajes, generar dibujos lineales, etc.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/WRqowRpf6hBblk7CmDTC/Rainbow%20%C3%97%20SeaArt%20AI.png" alt="Four examples of AI images processed by different models"><figcaption></figcaption></figure>

A diferencia de los modelos de dibujo tradicionales, un ControlNet completo consta de dos partes: un <mark style="background-color:yellow;">Modelo de Preprocesamiento</mark> y un <mark style="background-color:yellow;">ControlNet</mark>.

* Modelo de preprocesamiento: extrae la información semántica espacial de la imagen original y la convierte en una vista previa visual, como bocetos lineales, mapas de profundidad, etc.
* ControlNet: procesa información estructural más fundamental como las líneas y la profundidad de campo.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/9ZXcyWzfDjYhNs3KzffC/1.png" alt="The process of generating an AI girl image using ControlNet"><figcaption></figcaption></figure>

### **Canny**

El modelo Canny identifica principalmente la información de bordes en las imágenes de entrada, siendo capaz de extraer dibujos lineales precisos de las imágenes cargadas. Luego genera nuevas escenas que coinciden con la composición de la imagen original según los prompts especificados.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/VVaI8Br8XwGeGz6c3r7x/26df399a-12dd-4eeb-a352-ffdbcd5a3b84.png" alt="Before and after comparison of using the Canny model to process a 3d cartoon image" width="563"><figcaption><p>Original / Preprocessing</p></figcaption></figure>

Preprocesador:

* **Canny**: detección de bordes nítidos.
* **Invert**: invierte los colores a líneas negras sobre fondo blanco, cambiando el esquema de color del boceto.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/StUhOgJZa3rWjLgVZYbo/54f8a769-fde5-4b77-9400-9020d4163d0f.png" alt="Before and after comparison of using the Canny model to process a sketch image" width="563"><figcaption><p>Original / invert</p></figcaption></figure>

La opción de Invert no es exclusiva de Canny y puedes utilizarlo junto con la mayoría de los modelos de dibujo lineal. Cuando selecciona tipos ControINet como Line Art o MLSD, la inversión estará disponible.

**Modo de funcionamiento**

<mark style="background-color:yellow;">Flujo de trabajo: Cargar la imagen - Seleccionar el modelo - Seleccionar tipo de ControlNet - Ingresar los prompts - Generar</mark>

El análisis inteligente infiere automáticamente prompts y modelos según la imagen. Si se desea un estilo diferente al de la imagen original, se recomienda desactivar el análisis inteligente.

**Configuración de parámetros**

<mark style="background-color:yellow;">Resolución de preprocesamiento:</mark>

La resolución de preprocesamiento afecta a la resolución de salida de la imagen de previsualización. Como la relación de aspecto de la imagen es fija, y la salida por defecto es una imagen 1x, el ajuste de resolución determina esencialmente el tamaño horizontal de la imagen de previsualización. Por ejemplo, si el tamaño de la imagen original y el de la imagen de destino son 512x768, al ajustar la resolución de preprocesado a 128, 256, 512, 1024, el tamaño de la imagen preprocesada cambiará a 128x192 (0.25x original), 256x384 (0.5x original), 512x768 (original), y 1024x1536 (2x original), respectivamente.

<mark style="color:red;">En general, cuanto mayor sea la resolución, más ricos serán los detalles generados.</mark>

\*A veces, cuando la imagen de detección del preprocesado y <mark style="background-color:yellow;">el tamaño de la imagen final</mark> son incoherentes, es posible que las imágenes dibujadas resulten dañadas, con un claro pixelado en los bordes de las figuras en el dibujo final.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/H7hxtg8EJlu5UoxHRyNL/Rainbow%20%C3%97%20SeaArt%20AI%20(1).png" alt="Examples of images processed by the Canny model with different resolution"><figcaption></figcaption></figure>

<mark style="background-color:yellow;">Peso de control</mark>

Determina la intensidad del ControINet. Cuanto mayor sea la intensidad, más pronunciado será el efecto de control sobre la imagen y más se parecerá la imagen generada a la original.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/COdnjRjBqm0SnNcSzySf/%E6%8E%A7%E5%88%B6%E6%9D%83%E9%87%8D.png" alt="Examples of superman images processed by the Canny model with different weight" width="506"><figcaption></figcaption></figure>

<mark style="background-color:yellow;">Mode de control</mark>

Se usa para cambiar la proporción de peso entre ControlNet y los prompts. El valor predeterminado es Balanced.

● Prioridad a las indicaciones: Se debilitará el efecto del diagrama de control.

● Prioridad a la imagen de preprocesamiento: Se potenciará el efecto del diagrama de control.

<mark style="background-color:yellow;">Resultados de generación</mark>

En los resultados generados, puedes notar que la composición básica es exactamente la misma que la de la imagen original, pero los detalles son completamente diferentes. Si necesitas imágenes con otros cambios, como el color del pelo, los detalles faciales, la ropa, etc., puedes ajustar las palabras clave y los parámetros para conseguir los efectos deseados.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/SGDlSywYvHxrNyFIEfAY/ca%E7%BB%93%E6%9E%9C.png" alt="Four examples of AI-generated superman images with different models"><figcaption></figcaption></figure>

### **OpenPose Full**

OpenPose Full permite <mark style="background-color:yellow;">controlar con precisión los movimientos del cuerpo humano y los rasgos de expresión facial</mark>. Es capaz no solo de generar poses para una sola persona, sino también para varias.

OpenPose Full puede identificar puntos estructurales clave del cuerpo humano, como la cabeza, los hombros, los codos, las rodillas, etc., al tiempo que ignora los detalles de la ropa, los peinados y los fondos, lo que garantiza la reproducción fiel de poses y expresiones.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/LisQDM1b9fqkHGqTP15U/image.png" alt=""><figcaption></figcaption></figure>

**Preprocesador**

<mark style="background-color:yellow;">Reconocimiento de poses humanas</mark>

Los procesadores por defecto son de la serie openpose, incluyendo openpose, face, faceonly, full, hand. Estos cinco preprocesadores se utilizan para detectar, respectivamente, rasgos faciales, extremidades, manos y otras estructuras del cuerpo humano.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/PVCcv2qZC1qtjhiaGK8l/6fc1233f-2751-4eea-9c00-7c84f5d46ee5.png" alt="Human pose recognition using preprocessors"><figcaption></figcaption></figure>

<mark style="background-color:yellow;">Reconocimiento de pose animal</mark>

Es recomendable utilizar el procesador animal\_openpose, que puede utilizarse junto con modelos de preprocesamiento especializados, como control\_sd15\_animal\_openpose\_fp16.En general, utilizar el preprocesador estándar openpose\_full es suficiente.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/Z0ku6GqSQTSx8NjRJGgQ/fba2887e-6a5a-46e4-a6cb-832db9277bde.png" alt="Animal pose recognition" width="563"><figcaption></figcaption></figure>

En general, es suficiente utilizar el preprocesador por defecto openpose\_full.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/bkYzTDYQmk3xOC7RtQvg/%E4%BA%BA2.png" alt="Different examples of AI images with one pose"><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/uYtUF9yIqC6EBWMtDpmf/%E4%BA%BA1.png" alt=""><figcaption></figcaption></figure>

### **Line Art**

Line Art también extrae arte lineal de los bordes de las imágenes, pero sus casos de uso son más específicos, incluyendo enfoques realistas y estilo anime.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/Qn25udVX09X23kiyhbUv/image.png" alt=""><figcaption></figcaption></figure>

**Preprocesador**

Line Art

Más adecuado para imágenes realistas, el arte lineal extraído es más restaurador, retiene más detalles de los bordes durante la detección, por lo que el efecto de control es más significativo.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/JH43xeuLUe1lBoJdNX2Q/9be98c35-b03c-4324-904d-81e62c392fae.png" alt="Examples of AI images with different line art styles"><figcaption></figcaption></figure>

Diferencia entre Line Art y Canny

Canny: Líneas rectas y duras, espesor uniforme.

Line Art: Trazos de pincel evidentes, similares a los dibujos a mano reales, que permiten observar claramente la transición de grosor bajo distintos bordes.

El Line Art conserva <mark style="background-color:yellow;">más detalles</mark>, lo que da lugar a una imagen relativamente más suave, y es más adecuado para las funciones de coloreado de line art.

Canny es <mark style="background-color:yellow;">más preciso</mark> y simplifica el contenido de la imagen.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/STlm9DBK6kN7K6OZwld9/49362eb0-b1de-455d-a870-7ff7c87c445f.png" alt="Comparison of images processed by Line Art and Canny"><figcaption></figcaption></figure>

<mark style="color:red;">\*Line Art se puede utilizar para colorear imágenes en borrador, siguiendo totalmente el borrador.</mark>

### **Depth**

Depth, también conocida como imágenes de distancia, refleja intuitivamente la información de profundidad tridimensional de los objetos de una escena. La profundidad se muestra en blanco y negro; cuanto más cerca esté un objeto de la cámara, más claro (blanco) será su color; por el contrario, cuanto más lejos esté, más oscuro (negro) será su color.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/3JsQMytPildpAbTA8ksQ/25cfc1a4-9c25-4290-8596-d11eb4657188.png" alt="Comparison of the original image and the image processed with Depth"><figcaption><p>Original / Depth</p></figcaption></figure>

Depth puede extraer la relación entre el primer plano y el fondo de los objetos de una imagen, crear un mapa de profundidad y aplicarlo al dibujo de imágenes. Por lo tanto, cuando es necesario aclarar la relación jerárquica de los objetos en una escena, la detección de profundidad puede servir como una potente herramienta auxiliar.

Se recomienda utilizar el preprocesador depth\_midas para obtener mejores resultados en la salida de imágenes.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/BUG8FOGPTTCoraltYBXr/e673e27a-5c5a-4dbe-8bd3-12dc046d21bb.png" alt="Comparison of the original image, depth image and result image"><figcaption><p>Original / Depth / Result</p></figcaption></figure>

### **Normal Bae**

**Basic Information**

Normal Bae consiste en generar un mapa de normales basado en la información de luces y sombras de la escena, simulando así los detalles de la textura de la superficie del objeto y restaurando con precisión la disposición del contenido de la escena. Por lo tanto, el reconocimiento de modelos se utiliza a menudo para reflejar detalles más realistas de luces y sombras en las superficies de los objetos. En el ejemplo siguiente, puede ver una mejora significativa en los efectos de iluminación y sombras de la escena después de dibujar con reconocimiento de modelo.

Al utilizarlo, es recomendable seleccionar el preprocesador <mark style="background-color:red;">normal\_bae</mark> para obtener una mejora más notable en los efectos de iluminación y sombras.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/z7rtynnvxh3I5SYE6oK7/8d40f66d-90e1-4aee-9f10-d8802578e682.png" alt="Comparison of the original image, Normal Bae image and result image"><figcaption><p>Original / Normal Bae / Result</p></figcaption></figure>

### **Segmentation**

La segmentación puede dividir la escena en diferentes bloques al <mark style="background-color:yellow;">detectar los contornos del contenido</mark>, y asignar anotaciones semánticas a estos bloques, logrando así un control más preciso de la imagen.

Observando la imagen inferior, podemos ver que la imagen tras la detección de la segmentación semántica incluye bloques de diferentes colores. A los distintos contenidos de la escena se les asignan colores diferentes, como los personajes marcados en rojo, el suelo en marrón, los carteles en rosa, etc. Al generar imágenes, el modelo producirá objetos específicos dentro de la gama de bloques de color correspondiente, consiguiendo así una restauración de contenidos más precisa.

Al utilizarlo, es recomendable seleccionar el preprocesador <mark style="background-color:red;">seg\_ufade20k</mark> por defecto. Los usuarios también pueden modificar el contenido de la imagen rellenando bloques de color en la imagen preprocesada.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/DsUd0uHDYBeIBJj5FS2M/17ee3ab3-bd91-47f4-8818-5b10e3dd9bbf.png" alt="Comparison of the original image, Segmentation image and result image"><figcaption><p>Original / Segmentation / Result</p></figcaption></figure>

### **Tile Resample**

Tile Resample puede convertir imágenes de baja resolución en versiones de mayor resolución, minimizando la pérdida de calidad.

Tres preprocesadores: tile\_resample, tile\_colorfix, y tile\_colorfixsharp.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/cv4oI5ckegnzgZRFm8NM/%E8%B6%85%E6%B8%85%E9%87%8D%E7%BB%98.png" alt="Examples of AI cartoon wolf images processed with different preprocessors"><figcaption></figcaption></figure>

<mark style="color:red;">\*En comparación, el resample por defecto ofrece más flexibilidad en el dibujo, y el contenido no diferirá significativamente de la imagen original.</mark>

### **MLSD**

**Basic Information**

El reconocimiento MLSD extrae líneas de borde rectas de la escena, por lo que resulta especialmente útil para delinear los límites geométricos lineales de los objetos. Las aplicaciones más típicas se encuentran en los campos de la arquitectura geométrica, el diseño de interiores y áreas similares.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/pQzdVbkvkCksbjT0E2BI/14cafd36-78c6-448f-9cd7-1b9b58b87565.png" alt="Comparison of the original image and the image after MLSD recognition"><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/wocGl9SjcF0TGJwmtf7G/26c049a8-4c7f-4658-8444-4ba7f0d66c57.png" alt="Comparison of the original image, MLSD recognition image, and result image"><figcaption></figcaption></figure>

### **Scribble HED**

**Basic Information**

Scribble HED se asemeja a los dibujos lineales con garabatos de lápices de colores, ofreciendo más libertad a la hora de controlar el efecto de la imagen.

Preprocesadores: HED, PiDiNet, XDoG y t2ia\_sketch\_pidi.

Como puedes ver en las imágenes siguientes, los dos primeros preprocesadores producen contornos más gruesos, más acordes con el efecto de dibujo a mano de los garabatos, mientras que los dos últimos producen líneas más finas, adecuadas para estilos realistas.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/8fBC2eclwPbbR6enF5qr/8de12ec6-c494-4212-8779-2f057876bfc5.png" alt="Examples of images processed with different Scribble HED preprocessors"><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/nCtbY1zy0ctXpTNIX2qh/c6ef967a-281a-4727-97fc-12318d6e6f0f.png" alt="Comparison of the original image, Scribble HED processed image, and the result image" width="563"><figcaption></figcaption></figure>

<mark style="color:red;">\*Es posible utilizarlo para colorear borradores de imágenes, con un cierto grado de aleatoriedad.</mark>

**HED**

HED <mark style="background-color:yellow;">crea límites claros y precisos alrededor de los objetos</mark>, con un resultado similar al de Canny. Su eficacia radica en la capacidad de <mark style="background-color:yellow;">capturar detalles y contornos complejos</mark>, conservando al mismo tiempo rasgos detallados (expresiones faciales, pelo, dedos, etc.). El preprocesador HED permite modificar el estilo y el color de una imagen.

En comparación con Canny, HED produce <mark style="background-color:yellow;">líneas más suaves y conserva más detalles</mark>. Puedes elegir el preprocesador adecuado en función de tus necesidades reales.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/HWp2fVZHSRC1Bh9R20me/hed%E5%92%8Ccanny.png" alt="Comparison - original vs HED and original vs Canny"><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/b8h4nIpP7Bn6iYxirW4w/hed%E6%95%88%E6%9E%9C%E5%9B%BE.png" alt="Four examples of AI-generated girl images processed with Scribble HED" width="563"><figcaption><p>HED</p></figcaption></figure>

### **Color\_grid**

A través del uso de preprocesadores, puedes obtener resultados del procesamiento de bloques de color, donde las imágenes generadas se redibujarán basándose en los colores originales.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/Qms2Wyxcf7TRRpkXMh19/aab08da7-d86f-41d0-b842-6fc78baff3e4.png" alt="Comparison of original vs color_grid vs result" width="563"><figcaption></figcaption></figure>

### **Shuffle**

Al barajar aleatoriamente todas las características de información de la imagen de referencia y recombinarlas después, la imagen generada puede diferir de la original en estructura, contenido, etc., pero aún se puede observar un indicio de correlación estilística.

El uso de la recombinación de contenidos no está muy extendido debido a su relativamente escasa estabilidad de control. Sin embargo, utilizarla para obtener inspiración puede ser una buena opción.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/Cm5eHYkZDRcPuzF1igmy/1c1f5598-fb07-41ff-833b-b4c0cee7ea5e.png" alt="Comparison of original vs shuffle vs result" width="563"><figcaption></figcaption></figure>

### Generación de referencia

**Basic Information**

Para generar una nueva imagen basada en el original de referencia, se recomienda utilizar el preprocesador "solo" por defecto.

**Peso de control**: Cuanto mayor sea el valor, mayor será la estabilidad de la imagen y más evidentes se conservarán las huellas del estilo de la imagen original.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/FdpAi8hQ1yY4w4Ma14QV/%E5%8F%82%E8%80%83%E7%94%9F%E6%88%90.png" alt="Different reference images generated based on the cartoon fox image"><figcaption></figcaption></figure>

### **Recolor**

Filling in colors for images is very suitable for repairing some black-and-white old photos. However, it cannot guarantee that colors appear accurately in specific positions, and there might be cases of color contamination.

**Preprocessors:** "intensity" and "luminance", with <mark style="background-color:red;">"luminance"</mark> is recommended.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/cMAs6XS4X3BwUa3H0xKX/d857536d-c629-4fc7-b1c8-b8158b54ac9d.png" alt="Comparison - original vs recolor_luminance vs recolor_intensity"><figcaption></figcaption></figure>

### **Ip\_adapter**

Convertir una imagen cargada en imágenes de referencia te permite reconocer el estilo artístico y el contenido de la imagen de referencia y, a continuación, generar obras similares. También puedes utilizarlo junto con otros ControINet.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/539NcFqe73ipIOtWLjIr/3f9ee50e-8c2b-45ff-80cc-f64f96375759.png" alt="apply ip_adapter to an image to genrated a new one"><figcaption></figcaption></figure>

**Método de uso:**

1. Sube la imagen original A que necesitas generar, y selecciona las opciones de ControINet como Canny, openpose, Depth, etc.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/sUbQ6GRXSFE7b3Q4AIMp/image.png" alt=""><figcaption></figcaption></figure>

2. Añade un nuevo ControINet, ip\_adapter, sube la imagen de estilo B que quieres heredar, y finalmente haz clic en Generar.

<figure><img src="https://content.gitbook.com/content/1y3zrHPB2l8reoeyLIjC/blobs/lDDYhR2VmB549Bf8AX7t/image.png" alt=""><figcaption></figcaption></figure>

<mark style="background-color:red;">Resultado: Imagen A con el estilo de B.</mark>
