Cuando buscamos generar una imagen con un modelo como stable diffusion nos solemos enfocar principalmente en la descripción del prompt como herramienta de edición, pero no debemos olvidar que existen otros parámetros a tener en cuenta para poder exprimir al máximo la generación de imágenes.
Los principales parámetros que determinan el resultado de un modelo de generación de imágenes son la escala CFG y los parámetros steps y seed. En el último post sobre stable diffusion ya cubrimos la escala CFG, y continuando en esta línea, hoy nos centraremos en explicar la importancia y utilidad de la variable steps y el valor seed en este proceso de generación.
¿Qué ocurre en un “Step”?
Stable Diffusion genera imágenes comenzando con random noise, y luego, utilizando tu prompt como guía, elimina gradualmente el ruido de la imagen (trata el ruido aleatorio inicial como si fuera realmente una imagen muy ruidosa, y trata de recuperar la supuesta imagen original utilizando tu descripción de texto para guiarlo).
En la ilustración de abajo, la imagen de la izquierda es nuestro initial noise, y la imagen de la derecha es el resultado final. Esta generación se realizó en 25 steps; la ilustración central muestra el estado de la imagen en cada step, y puedes ver cómo la imagen se va limpiando gradualmente.
No importa cuántos steps uses, el proceso siempre comienza y termina de la misma manera; comienzas con random noise y terminas con una imagen sin ruido.
Lo que la configuración de “steps” realmente controla es en cuántos steps dividimos este proceso. Por lo tanto, un número mayor divide el proceso en más steps, y cada step hará un pequeño cambio a la imagen.
Si usas un número bajo de steps, descubrirás que las imágenes tienden a ser menos detalladas y contienen más defectos.
En los ejemplos de abajo, el resultado para 5 steps es un completo desastre; en los ejemplos con 10 y 15 steps los iris son desiguales.
Parece haber alguna correlación entre el número de steps y la cantidad de detalle, pero se podría argumentar que más allá de cierto punto, realmente solo estás obteniendo diferentes variaciones.
También parece que puedes pasarte. En este ejemplo, parece que las imágenes con 100 y 150 steps comienzan a reintroducir algunos problemas o pierden algunos detalles.
Conceptos erróneos comunes
Debido al uso de explicaciones demasiado simplificadas, hay un par de conceptos malentendidos sobre el efecto generado por el número de steps.
El primer concepto erróneo es que aumentar los steps significa “continuar refinando la imagen por más tiempo”.
Podrías ejecutar durante 10 steps, mirar el resultado y pensar: “Me gusta eso, pero me gustaría verlo más refinado, así que voy a intentar ejecutarlo durante 5 steps más ajustando el conteo de steps a 15.”
En realidad, si miras el ejemplo anterior y comparas 10 steps vs 20 steps, es bastante claro que 20 steps no es solo una versión “más refinada” de 10 steps. ¡Son imágenes diferentes!
Recuerda, siempre empezamos con ruido y acabamos con una imagen limpia, el conteo de steps indica solo en cuántos intervalos divides el proceso. Las diferentes subdivisiones harán que el modelo siga diferentes caminos con resultados ligeramente distintos.
El segundo concepto erróneo es que conteos de steps más altos siempre producirán resultados de mayor calidad, y hemos visto cómo ese no es el caso en nuestro ejemplo de 50, 100 y 150 steps.
Steps y el coste de computación
El conteo de steps también tiene un impacto más práctico: afecta cuánto tiempo lleva la generación de la imagen; más steps significará que tendrás que esperar más tiempo para ver tu resultado.
El modelo de Stable Diffusion es una Red Neuronal muy grande. Para aquellos familiarizados con el concepto, contiene aproximadamente 1 billion parámetros. ¡El número de operaciones matemáticas necesarias para ejecutar un solo step es del orden de billions!
Herramientas como DreamStudio ejecutan el modelo para ti con “GPUs”: la tarjeta gráfica que normalmente usas para jugar a videojuegos.
Sin embargo, las GPUs que suelen utilizar están diseñadas para este tipo de computación científica (com la línia de GPUs “Tesla” de Nvidia). Y estas GPUs especializadas son exageradamente caras.
Cuando usas una herramienta de pago como DreamStudio, te van a cobrar (usando un sistema de “créditos”) basado en la cantidad de steps que ejecutes. El coste de computación también está directamente relacionado con el tamaño de la imagen que deseas generar, por lo que resoluciones de imagen más altas costarán más créditos.
Previsualizar imágenes usando pocos steps
Dado el mayor tiempo de espera y el mayor costo de ejecutar más steps, una estrategia que algunas personas utilizan es primero generar imágenes con un conteo de steps bajo, solo para obtener una idea general de cada una de las imágenes. Luego, para cualquier resultado que parezca prometedor, vuelven y re-ejecutan ese exacto input usando un conteo de steps mayor para obtener una versión de mayor calidad.
La forma de “re-ejecutar” una imagen en particular es usando algo llamado el valor “seed”, que veremos a continuación.
Valor Seed
El valor “seed” es un número como 145391 que, si lo especificas en Stable Diffusion, siempre generará la misma imagen exacta (siempre que mantengas el resto de parámetros iguales).
Esto te permite intentar ajustar una imagen que te guste. Puedes, por ejemplo, hacer pequeños cambios en el prompt, o cambiar el número de steps de inferencia, y obtener resultados que parezcan variaciones de tu resultado “base”.
Por ejemplo, para generar las imágenes de ejemplo anteriores que demuestran el efecto del conteo de steps, se ha usado el mismo seed y prompt, variando solo el parámetro steps.
Cabe destacar que no hay ninguna relación entre cuán cercanos estén los números seed y cuán similares serán las imágenes. Si cambias el número de semilla por 1, obtendrás un resultado completamente diferente. Por ejemplo, las imágenes a continuación tienen semillas que difieren en 1 (…201, …202 y …203).
Tienen cierta similitud, por supuesto, porque todas utilizaron le mismo prompt.
Algunos valores seed han sido identificados por la comunidad de usuarios de Stable Diffusion como aquellos con mayor probabilidad de producir imágenes con paletas de colores o composiciones específicas.
El usuario /u/wonderflex realizó algunos experimentos muy detallados sobre cómo diferentes semillas afectan las imágenes generadas a partir de la misma indicación describiendo a Katy Perry. Puedes ver la descripción completa de su metodología y resultados, pero aquí hay un resumen de sus conclusiones:
- Cuando se utilizan exactamente el mismo prompt y parámetros, pero se cambia el número de seed, puedes obtener imágenes de salida que se ven muy diferentes.
- Si mantienes el mismo número de seed pero cambias el prompt de texto agregando un modificador de una sola palabra, puedes alterar las imágenes de salida sin cambiar significativamente su apariencia general o paleta de colores.
¿Cómo funcionan los Seeds?
Para los curiosos…
En los ordenadores, los random number generators no son verdaderamente aleatorios. Para un punto de inicio (“seed”) dado, el generador siempre dará la misma secuencia exacta de números “aleatorios”.
Crear el ruido inicial aleatorio implica establecer diferentes píxeles con valores aleatorios. ¡Pero mientras el seed sea el mismo, la imagen de ruido será idéntica!
Una cosa más… Con Stable Diffusion, si especificas “-1”, este elegirá un seed/seeds de manera aleatoria para ti… ¡utilizando otro random number generator para seleccionar los valores de seed!
Entonces, ¿Cómo nos aseguramos de que ese generador nos dé un seed aleatorio?
Cuando no proporcionas un seed, el generador basará el seed en algo que siempre será único, como la fecha y hora actuales.
Cómo encontrar Seeds
Hay muchas imágenes generadas por IA que ahora están disponibles gratuitamente con sus seeds, publicados por usuarios de las comunidades de Stable Diffusion en Reddit, Discord y otros foros. Una de las formas más fáciles y eficientes de buscar imágenes para encontrar seeds es a través de Lexica. En su página principal, simplemente haz clic en el botón circular negro de Filtro a la derecha de la barra de búsqueda y selecciona Stable Diffusion 1.5, escribe una descripción del tipo de imágenes generadas por IA que estás buscando y pulsa el botón de Búsqueda.
NOTA: Si no cambias el filtro de búsqueda de Lexica a Stable Diffusion 1.5, entonces la opción predeterminada es Lexica Aperature, cuyos resultados no incluirán el número de seed.
Selecciona una imagen en los resultados de búsqueda. Aparecerá una ventana emergente mostrando el prompt de texto que el usuario utilizó para obtener esa imagen y sus parámetros. Si seleccionaste Stable Diffusion 1.5 en los ajustes del filtro de búsqueda, entonces esta ventana también proporcionará el número de seed para esa imagen.
Estableciendo el Seed
Concluiré señalando dónde ubicar y configurar el valor de seed en las herramientas de generación de imágenes más populares.
En DreamStudio, si pasas el cursor sobre la imagen, verás el valor del seed aquí:
Para realmente establecer el valor del seed en DreamStudio, debes establecer el número de imágenes en 1. De lo contrario, el campo del seed está oculto a la vista.
En Automatic1111, es más directo:
Puedes encontrar el seed utilizado para generar una imagen en Auto1111 mirando la ventana de salida, o el nombre del archivo, o abriendo la imagen en la pestaña “PNG Info”.