Hablemos de Stable Diffusion.
Y tiene huevos que empecemos por esta y no por, por ejemplo, Midjourney. ¿Por qué? Pues porque Stable Diffusion es la más difícil de manejar.
¿La ventaja?
Que empezamos con la droga dura y, si la aguantas bien de primeras, todo lo demás será cuesta abajo y lo pillarás al momento.
Como ya dije, aquí vamos a usar DreamStudio aunque no sea la mejor solución.
Más de 3000 orangotanes ya reciben mis emails
Suscríbete a la Niusleta de Joseo20.
Yo sí mando spam. Cuando tengo que vender, vendo. El resto de tiempo envío emails con temas que considero interesantes.
Hablo de todo lo que me sale de los cojones, no sólo de marketing o negocios. Hay política, filosofía y otras gilipolleces.
Es probable que después de leerla me odies.
Incluye orangotanes.
¿Por qué DreamStudio?
DreamStudio NO es la mejor solución “profesional” de Stable Diffusion. Si quieres darle caña a esta IA, no es buena idea usar DreamStudio.
Entonces… ¿Por qué la vamos a usar?
Pues porque es la herramienta más fácil (no requiere ninguna instalación ni configuración ni nada) y es suficiente para entender lo básico del Prompt Engineering en Stable Diffusion.
Y, como el objetivo es que pilles bien el tema del Prompt Engineering y no que te conviertas en un frikazo de Stable Diffusion, pues esta es la mejor opción.
Otro motivo es que, como es la herramienta de los propios desarrolladores de Stable Diffusion, pues es la que más se actualiza. Y esto es importante, porque Stable Diffusion cada dos días saca alguna mierda nueva y no todas las herramientas se mantienen al tanto. Esta sí.
Además, si quieres, es gratis.
DreamStudio te pide que te registres y te regala unos cuantos créditos sin que tengas que poner una tarjeta ni nada. Con esos créditos podrás crear uno o dos centenares imágenes, dependiendo de varios factores (soy deliberadamente vago en esto porque no sé si mañana cambiarán los créditos que te dan o cuánto compran dichos créditos).
¿Y qué pasa cuando se te acaban los créditos? Pues que puedes volver a registrarte con otro email y te dan otros cuantos.
La verdad, no es lo más cómodo. Personalmente, recomiendo gastar 10$ y pillar 1000 créditos (unas 5000 imágenes). Pero si vas justo de pasta, esa pequeña gitanada es una opción
Estos son los tres motivos por los que, aquí, vamos a usar DreamStudio. Para profundizar más en la IA y darle más vueltas (por ejemplo, instalando Automatic1111, que ofrece más opciones), tienes otros parques en el Barrio de la Inteligencia Artificial.
Además, ten presente que Stable Diffusion tiene más funcionalidades además de la simple generación de imágenes a partir de prompts.
Como esta es una guía de Prompt Engineering, no vamos a meternos mucho en esas funcionalidades. Si quieres profundizar en ellas, te recomiendo echar un ojo al Parque de Creación de Contenidos con Inteligencia Artificial.
Con todo esto aclarado… ¡Vamos allá!
Más de 3000 orangotanes ya reciben mis emails
Suscríbete a la Niusleta de Joseo20.
Yo sí mando spam. Cuando tengo que vender, vendo. El resto de tiempo envío emails con temas que considero interesantes.
Hablo de todo lo que me sale de los cojones, no sólo de marketing o negocios. Hay política, filosofía y otras gilipolleces.
Es probable que después de leerla me odies.
Incluye orangotanes.
Entendiendo Stable Diffusion y DreamStudio
Empecemos por ver algunas generalidades de Stable Diffusion y DreamStudio y, después, pasamos a ver lo relativo al Prompt Engineering.
Interfaz de DreamStudio
Cuando entres a DreamStudio, te encontrarás con esto:
Pues lo primero que tienes que hacer es hacer clic aquí:
Para llegar, finalmente, aquí:
De esta forma, estaremos en la versión antigua de DreamStudio. ¿Por qué queremos usar la antigua en vez de la nueva?
Porque la interfaz antigua tiene nombres y apariencias menos “user friendly”, que son las que tendrás cuando uses una aplicación de Stable Diffusion más avanzada.
De esta forma, aunque el alcance de este curso sea limitado al respecto, te preparas un poco más para cuando uses otra aplicación de Stable Diffusion.
El único problema que tiene la versión antigua de DreamStudio frente a la nueva es que el uso de prompts negativos no es tan cómodo (y nos limita un poco más por la extensión máxima de los prompts) y que no tiene lo de “Styles” (pero eso nos la suda).
Pero bueno, qué le vamos a hacer.
No se puede tener todo en esta vida.
Como ves, en esta interfaz, tenemos algunas partes importantes:
¿Qué partes son estas?
- Menú: La parte de la izquierda. Ahí tienes la opción de Dream (el generador de imágenes –es la pantalla por defecto), pero también la galería, el FAQ, una guía de prompting, etc. Este menú nos suda los huevos.
- Barra superior: Aquí tenemos el acceso a nuestra cuenta y la calculadora de créditos. Nada destacable. Simplemente, tendremos que prestar atención a los créditos que consumiremos con cada generación para que no se nos vaya la olla.
- Parámetros: La parte de la derecha. Aquí es donde está la miga.
- Parte central: Donde metemos el prompt y se generan las imágenes.
¡Atención! Mucho cuidado con la galería de DreamStudio, porque no guarda las imágenes. Guarda los datos necesarios (semilla, dimensiones, parámetros, etc) para volver a generar esa imagen, pero, si la vuelves a generar, volverás a gastar créditos.
Por eso, cuando generes una imagen que te mole, descárgatela y crea tu propia “galería” en una carpeta de tu ordenador.
Por eso digo que la columna de la izquierda nos suda los huevos.
Vale.
Antes de pasar a los prompts y las generaciones de imágenes, vamos a centrarnos en la columna de la derecha. La de los parámetros. Eso sí que nos interesa.
Parámetros en DreamStudio de Stable Diffusion
Vamos a ver los parámetros que vamos a poder tocar en DreamStudio.
Son los siguientes:
Width y Heigh
Estos dos parámetros nos permitirán determinar las dimensiones de las imágenes generadas.
En otras IAs, como Midjourney, no podemos determinar las dimensiones, sino los aspect ratios. Obviamente, en Stable Diffusion, al poder controlar las dimensiones independientemente, también podemos controlar los aspect ratios.
Ten presente que, cuanto más altos sean estos valores, más cara será la generación de la imagen.
Además, ten en cuenta que, en el caso de Stable Diffusion a pelo (sin funcionalidades externas o trucos), no puedes generar una imagen en pequeño tamaño y luego, con la semilla, generar una igual con mayor resolución.
Si aumentas el tamaño de la imagen, la imagen de puro ruido de partida será diferente y, por tanto, el resultado final también lo será, por mucho que uses el mismo prompt y la misma semilla.
No obstante, puedes hacerlo. No te preocupes. En el apartado de trucos te cuento cómo.
Classifier Free Guidance Scale (CFG Scale)
El CFG Scale es un parámetro que, por decirlo de algún modo, determina cuánto se le va la olla a Stable Diffusion.
Cuanto más alto sea el valor del CFG Scale, más respetará nuestro prompt.
Cuanto menor sea, más se dejará guiar por su estilo por defecto y sus sesgos de entrenamiento. Y, por tanto, más generará algo que, aunque tiene en cuenta tu prompt, no lo respeta demasiado.
Otra forma de verlo que me gustó mucho es como si fuera una linterna. Esta linterna ilumina regiones del Latent Space de la IA. Si el CFG es alto, reduces el tamaño de la linterna, iluminando menos regiones del Latent Space. Al reducirlo, aumentas el tamaño, iluminando más regiones de ese Latent Space. Si pones el CFG a 20, pues tienes un láser. Si lo pones a 0, enciendes la luz de la habitación.
Se entiende, ¿no?
Es similar al parámetro Chaos de Midjourney, pero no al Stylize. Al usar un bajo CFG no estarás dejando que “la IA haga con tu prompt lo que quiera”. Estarás dejando que la IA haga lo que quiera. En general.
Te muestro 3 ejemplos con mismo prompt y mismos parámetros, a excepción del CFG Scale:
anime dwarf character, in a cave, organic, gurren lagann, steam punk, hellscape, male anime character, masterpiece, intricate, highly detailed, sharp, by james mccarthy, by beeple and johfra bosschart, combination in the style ayami kojima, highly detailed, painting, intricate artwork, by tooth wu, wlop
Como ves, cuando el CFG Scale es 0, Stable Diffusion hace lo que le sale de los cojones.
A 10, el resultado es más o menos lo pedido, pero tiene el suficiente margen para innovar como para que el resultado nos sorprenda para bien.
Así que, en general, te recomiendo que, en fase de exploración, pongas un valor de CFG Scale entre 7 y 10.
Una vez tengas un prompt muy bueno y que sepas que genera buenas movidas, súbelo para que Stable Diffusion haga más caso a tu prompt.
Por último, algo obvio pero que quizá se le está escapando a alguien: Si el CFG Scale alto hace que la IA respete más tu prompt, cuanto más bajo sea, más dispares serán las imágenes entre sí y, cuanto más alto sea, más se parecerán.
Lógico, ¿no?
Más de 3000 orangotanes ya reciben mis emails
Suscríbete a la Niusleta de Joseo20.
Yo sí mando spam. Cuando tengo que vender, vendo. El resto de tiempo envío emails con temas que considero interesantes.
Hablo de todo lo que me sale de los cojones, no sólo de marketing o negocios. Hay política, filosofía y otras gilipolleces.
Es probable que después de leerla me odies.
Incluye orangotanes.
Steps
Los Steps son el número de iteraciones que realiza Stable Diffusion sobre la imagen de puro ruido de la que parte para llegar a la generación final.
Como ya debes saber a estas alturas, los modelos de difusión funcionan “quitando ruido” de una imagen de puro ruido en una serie de pasos sucesivos.
En teoría, cuanto mayor sea la cantidad de pasos, mejor será la imagen final, porque con más cuidado podrá ir quitando el ruido y no tendrá que dar grandes saltos de ruido a no-ruido.
Sin embargo, en la práctica, llegado un determinado número de pasos, cada paso adicional no aporta una gran mejora en la imagen.
Y, teniendo en cuenta que nos van a cobrar más cuantos más pasos pongamos, pues mejor que no se nos vaya la olla.
Te pongo un ejemplo usando en todos los casos la misma semilla:
Prompt:
cute girl, dark blue long hair, muted colors, matte print, pastel colors, ornate, digital art, digital painting, fan art, elegant, artstation, by Ilya Kuvshinov
Como ves, la diferencia entre 10 y 150 es brutal. Pero también lo es entre 10 y 50. Y entre 50 y 150 no lo es tanto.
Que sí, que se ve mejor en 150, pero tampoco es una mejora espectacular.
Una regla sencilla es: Pon un número de pasos razonable (entre 15 y 30) y, si generas una imagen que te mola, vuelve a generarla con un mayor número de pasos. Al generar sólo 1, te saldrá razonablemente barato aunque aumentes por mucho el número de pasos.
Ahora bien, quiero que te des cuenta de una cosa: A pesar de que hemos usado la misma semilla, la imagen ha ido cambiando. No es la misma imagen cada vez más nítida. Hay cambios notables en varias de ellas en los sucesivos pasos.
¿Por qué?
No te preocupes. Está hecho a propósito y descubrirás la razón dentro de un par de apartados.
Number of Images
Este parámetro nos permite determinar cuántas imágenes vamos a generar para un único prompt dado.
Obviamente, cuanto mayor sea el valor que pongamos aquí, más créditos nos cobrarán, porque cada imagen generada tiene un coste.
No tiene mucho misterio.
Image
Image es el último parámetro de la lista, pero lo pongo aquí porque quiero dedicar un apartado más especial a los parámetros que quedan, porque son importantes.
La parte de Image nos permite trabajar sobre imágenes concretas, ya sean imágenes que hemos generado con Stable Diffusion en la misma herramienta de DreamStudio o imágenes que subamos nosotros.
Tenemos dos grandes modos de uso de las imágenes en Stable Diffusion:
- Initial Image Mode: Este es el uso que le vamos a dar en esta guía a la parte de las imágenes, puesto que es la parte que nos permite usar una imagen como punto de partida para nuestras generaciones.
- Masking Mode: Este es el modo que permite hacer inpaintings y outpaintings. No lo vamos a tratar en esta guía, porque no está tan relacionado con el Prompt Engineering y sí más con la creación de contenidos (por tanto, para ver cómo usar bien este modo, ve al Parque de Creación de Contenidos con IA).
Pero está bien que sepas que, dentro de la opción de Image, tienes esos dos grandes modos.
Initial Image Mode
En el caso de Stable Diffusion, las imágenes de partida funcionan como img-to-img. La idea aquí no es que el modelo “tome” el estilo de la imagen, sino que se fije en ella para determinar la composición de los elementos de la imagen que va a generar.
Es importante hacer el matiz, porque el uso de una imagen de partida no es el mismo en Stable Diffusion que en, por ejemplo, Midjourney.
En Midjourney sí que usamos la imagen (varias imágenes si queremos, de hecho) para determinar/influenciar el estilo que va a seguir Midjourney al generar nuevas imágenes. Pero Midjourney sudará bastante de usar el input de imagen como una referencia para la composición de la imagen que generará.
Stable Diffusion es al revés. Usará la imagen, fundamentalmente, como referencia para la composición. Es verdad que, inevitablemente, pilla el estilo, especialmente si subes el Image Strength demasiado, pero puedes jugar con ello mucho más que en Midjourney.
Esto es interesante por varios motivos. El principal es que podemos hacer un dibujo de mierda con Paint y esperar que Stable Diffusion genere algo notable manteniendo esa composición.
Por ejemplo, si le paso este dinosaurio escupe-fuego:
Y le meto el mismo prompt de serie que trae Stable Diffusion (pero cambiando el sujeto):
dragon spitting fire, concept art, matte painting, HQ, 4k
Obtengo lo siguiente:
Está guay, ¿eh?
Esto no lo puedes hacer con Midjourney porque no tiene este img-to-img. Pero, bueno, ya hablaremos de eso cuando lleguemos a la lección de Midjourney.
Volviendo al uso concreto en Stable Diffusion, si te fijas, en la parte superior de la imagen aparece “Image Strength”.
Esto es el peso que va a tener la imagen de partida en la generación de la siguiente.
Obviamente, si lo pones al 100%, obtienes la misma que de input.
Si pones 1%, obtienes algo casi 100% creado por la IA y que no toma en cuenta la imagen que has pasado como input. Por ejemplo:
Dependiendo de cuánto quieras que la IA se “inspire” en tu imagen, pues tendrás que poner más o menos Image Strength.
No tiene más misterio.
Sampler, Model y CLIP Guidance
Ok. Ahora llega la miga.
Hasta ahora, los ejemplos que hemos visto han sido con los valores de “Sampler”, “Model” y “CLIP Guidance” por defecto.
Sin embargo, jugar con estos parámetros nos permitirá obtener cosas muy distintas. Básicamente, será “configurar” Stable Diffusion para que actúe de una forma muy distinta.
Y eso afectará a su potencial, capacidades, limitaciones, forma de leer e interpretar el prompt, etc.
Así que vamos allá.
Model
Desde aquí podremos elegir qué versión de Stable Diffusion utilizamos.
¡Cuidado!
Recuerda que, de Stable Diffusion 1.x a 2.x hay un buen salto y, si te acostumbras a trabajar con una de las versiones, luego te cueste utilizar la otra.
No obstante, en general, utilizar la última versión dará mejores resultados que usar una de las primeras.
Pero con un matiz: Puesto que las versiones 1.x han tenido más tiempo para ser testadas, es normal que haya muchos mejores prompts y mucha más gente haciendo cosas guapas en esos modelos.
Pero es una simple cuestión de tiempo. En realidad, las versiones 2.x generan mejores imágenes.
¿Mi recomendación?
Acostúmbrate a trabajar con la última versión, porque las siguientes tendrán un mayor parecido con esta que con las anteriores.
Además, es la que mejores imágenes genera cuando te acostumbras a promptear para ella.
¿El problema?
Es un poco más lenta.
Además, por supuesto, tiene el tema de la censura. Por lo que, si quieres hacer cosas nasis tendrás que usar Stable Diffusion 1.x o un modelo finetuneado de 2.x.
Nosotros, en esta guía y de ahora en adelante (las anteriores imágenes estaban generadas con Stable Diffusion 1.5), vamos a trabajar con la última versión disponible, que es Stable Diffusion v2.2.2-XL Beta.
Esta versión no te recomiendo usarla a ti, porque es más cara (más del doble) y, además, tiene algunas limitaciones (no puedes hacer imágenes de más de 512×512). Pero, ya que ha salido hace poco… Pues vamos a probarla, ¿no?
Sampler
Los Samplers son una ciencia oculta de la que hay poca información por internet.
Así que haré mi mejor esfuerzo por que se entienda qué son y por qué son importantes (y perdón si algún súper friki del tema identifica cosas que no son correctas –si es así, ¡házmelo saber!).
¿Qué es un sampler?
Para entender qué es un sampler hay que entender antes qué es un sample y para entender qué es un sample hay que entender qué es una distribución.
Una distribución es una función con una serie de probabilidades asociadas a cada punto de la función.
La distribución más conocida es la camapa de Gauss, que es la del IQ.
En esta distribución, por ejemplo, +135 IQ (más o menos) tiene una probabilidad asociada de 1%.
Pues bien, un sample es un punto cualquiera en esa distribución. 135, 78, 100 y 121. Lo que sea.
Entendido esto, podemos entender qué es un sampler: Un sampler es un algoritmo que genera samples. Es decir, genera puntos en una determinada función de distribución. En el caso de la campana de IQ, pues genera 100, 121, 135, 78, etc.
Digamos que es como una máquina que lanza dardos a una diana con la forma de la función de probabilidad/distribución que tengamos.
Y lo hace siguiendo las probabilidades de dicha función de distribución.
Es decir, de cada 100 dardos que lance, lo esperable es que sólo caiga 1 en el rango de +135 IQ.
¿Cómo se relaciona esto con los Modelos de Difusión?
Pues bien, en cualquier paso del denoising (es decir, en cualquier momento en el que la IA debe identificar, generar y sustraer ruido) la IA se está enfrentando a una función de distribución.
No tengo muy claro qué representa esa función de distribución, pero entiendo que son los “píxeles” (no son píxeles, porque estamos en el Espacio Latente, pero por entendernos) óptimos de ruido que habría que eliminar en ese paso concreto.
Sea eso o no lo que representa la función de distribución, en cada paso del denoising hay una función de distribución de la cual hay que samplear.
Eso es asín.
Así que si la visualización de los píxeles nos ayuda a entenderlo, vamos a tirar por ahí y ya nos dirán que nos estamos columpiando si lo estamos haciendo.
Más vale pedir perdón que pedir permiso.
El caso es que nosotros no conocemos esa función, pero sabemos que la red neuronal la aproxima y estima cuál es (es para eso para lo que la hemos entrenado). Pero, aunque nosotros sepamos que la red neuronal sólo la “aproxima”, para la IA esa función de distribución es 100% correcta.
Es decir, la IA sabe que hay unos píxeles óptimos a remover de la imagen (da igual si realmente son los óptimos o no en términos absolutos, la IA asume que sí). Esos píxeles o conjuntos de píxeles a retirar serían los samples. Los puntos concretos en la distribución.
El sampler, en el proceso de denoising, pues, tira dardos a conjuntos de píxeles de ruido que hay que retirar.
Ahora, esta distribución es mucho más compleja que la de la campana de Gauss, porque es una distribución condicionada (porque la “imagen” actual depende de/está condicionara por la “imagen” anterior en la cadena) y porque tiene un proceso estocástico subyacente, lo cual añade aleatoriedad a la movida.
En un caso como este, ¿cómo samplea el sampler? ¿cómo genera el sampler los samples correctos? ¿Cómo sabe con qué probabilidad debe generar cada sample?
Pues, para eso, hay que resolver una ecuación diferencial. Al resolverla, se obtienen los samples que hay que generar y que se adecúan a esa compleja función de distribución.
Y las ecuaciones diferenciales pueden resolverse de varias formas.
Pues bien, en última instancia, un sampler es una forma de resolver esa ecuación diferencial.
Y el cómo se resuelve esa ecuación diferencial hace que los píxeles que se identifican como óptimos para eliminar, varíen.
Y, en consecuencia, al cambiar el sampler, cambiamos los píxeles que vamos sustrayendo durante el denoising.
¿Y esto qué pollas me importa a mí?
Pues te importa, amigo, te importa.
De lo explicado antes, puedes entender que el sampler determinará el cómo se quita el ruido. Y también sabes que el número de pasos es el número de veces que el sampler actuará (el número de veces que quitará ruido).
¿Qué pasa?
Pues que igual un sampler necesita 20 pasos para generar una imagen decente y otro sampler necesita 50.
Esto, a su vez, afectará a la velocidad de generación de la imagen y el coste que tendrá para nosotros (si, para obtener una imagen decente, necesitamos más pasos y, por cada paso, nos cobran, pues si elegimos un sampler que necesita más pasos tendremos que pagar más).
Además, un sampler puede que nunca llegue a generar tan buenas imágenes como otro, por muchos pasos que le pongas.
Y, por último, hay una cuestión importante, y es el de la coherencia en los pasos sucesivos.
Un rápido vistazo a los diferentes samplers
Stable Diffusion tiene BASTANTES más samplers que los que aparecen en DreamStudio. Podría limitarme a hablar de los que aparecen ahí, pero será mejor ver unos cuantos más para entenderlo todo mejor.
Los diferentes samplers se pueden organizar de distintas formas.
Yo te presento una que no tiene que ser ni peor ni mejor que otras. Es una de ellas.
Samplers EDO
Los Samplers EDO son un grupo que se caracterizan por ser formas de resolver Ecuaciones Diferenciales Ordinarias. Algunos tienen más de 100 años, como podrás intuir por el nombre de alguno de ellos:
- Euler: El sampler más simple posible.
- Heun: Un poco más lento que Euler, pero con mejores resultados.
- LMS (Linear Multi-Step method): Igual de rápido que Euler, pero (en teoría) con resultados un poco mejores.
Samplers Ancestrales
Algunos de los samplers tienen una “a” en el nombre (Euler a, DPM2 a, DPM++ 2S a, DPM++ 2S a Karras).
Esta “a” hace referencia a “ancestral”.
Son samplers estocásticos porque el sampleo siempre tiene algo de aleatoriedad (cuidado, algunos samplers también son estocásticos y no tienen “a” en el nombre).
¿Qué significa esto?
Pues que los samplers ancestrales (y todos los que sean estocásticos) no convergen.
Mientras que un sampler como Euler va perfilando la imagen de un cerdo y el cerdo más o menos se mantiene siempre igual en cada paso y sólo se va refinando, en el caso de Euler a el cerdo va ganando nitidez en cada paso, pero no es el mismo cerdo en todos los pasos.
Tampoco es que el cerdo aparezca en un paso normal y en el siguiente bailando una jota. Pero sí que se percibe que los saltos entre pasos son mucho más bestias y hacen cambiar más la imagen en general, no solo los detalles que la vuelven más nítida.
Esto es importante, porque si usamos un sampler estocástico y tratamos de jugar con el número de pasos manteniendo la misma semilla con el objetivo de conseguir la misma imagen, pero más nítida y refinada, puede que no lo consigamos.
Para conseguir eso, necesitaremos otro sampler con mayor consistencia entre cada paso.
Samplers Karras
Los Samplers Karras juegan con el ruido tal y como se recomendaba en este artículo (de ahí el nombre que tienen).
En este tipo de samplers, la cantidad de ruido que se elimina en los primeros pasos es menor que en los otros samplers, mientras que es mayor hacia los últimos pasos.
Es decir, para un denoising de 50 pasos, dada una imagen de puro ruido en el paso 0, en el paso 1 un sampler Karras habrá mantenido más ruido en la imagen que un sampler no-Karras. Y seguirá siendo así hasta el paso, digamos, 25, donde la cantidad de ruido será la misma (aprox) en ambas imágenes.
Sin embargo, a medida que los pasos avanzan a partir del 25, el sampler Karras irá quitando cada vez una cantidad de ruido mayor que la que quita el sampler no-Karras. Por ello, en el paso 40, si comparásemos las imágenes de ambos samplers, veríamos que la del sampler Karras tiene menos ruido que la del sampler no-Karras.
Al final, en el Step 50, ambos samplers tendrán una imagen sin nada de ruido. Pero Karras habrá eliminado más ruido (relativo) en los últimos 25 pasos, mientras que el no-Karras habrá eliminado más ruido (relativo) en los primeros 25 pasos.
Los investigadores encontraron que los samplers Karras generan imágenes de mayor calidad en términos generales.
DDIM y PLMS
Después tenemos DDIM (Denoising Diffusion Implicit Model) y PLMS (Pseudo Linear Multi-Step method).
Estos fueron los samplers que venían de serie con la primera versión de Stable Diffusion.
Son samplers que están específicamente diseñados para modelos de difusión. Siendo así, podríamos pensar que son una buena opción. Pero no. De hecho, no se recomienda su uso porque están desfasados y no generan resultados tan buenos como otros samplers.
DPM y DPM++
Luego tenemos el DPM y el DPM++, cuyas siglas son De Puta Madre y De Puta Madre++.
Na, es broma.
Las siglas son de Diffusion Probabilistic Model solver.
Son nuevos samplers diseñados, también, específicamente para modelos de difusión. Pero son más actuales que los anteriores. Estos salieron en 2022.
Todos los samplers DPM funcionan más o menos de la misma forma, pero con pequeñas diferencias.
DPM y DPM2 son básicamente lo mismo, salvo por que DPM2 es más lento y con mejores resultados.
DPM++ es una versión mejorada de DPM.
DPM Adaptative tiene la capacidad de ajustar el número de pasos de forma adaptativa (de ahí el nombre) según las necesidades del sampler para asegurarse de conseguir los mejores resultados. Esto puede conducir a que no haga caso al número de pasos que le hayas indicado.
UniPC
UniPC (Unified Predictor-Corrector) es un sampler que apareció en 2023 y que está inspirado en los métodos de predicción-corrección propios de los EDO mencionados al principio.
Está bastante guay y puede generar resultados de alta calidad con apenas 5-10 pasos.
k-diffusion
Por último, tenemos los k-diffusion.
Este término hace referencia al repositorio de GitHub de Katherine Crowson. Básicamente, son los samplers de Karras.
La mayoría de samplers son k-diffusion, a excepción de DDIM, PLMS y UniPC.
¿Y con qué sampler me quedo?
Pues elegir el mejor sampler va a depender de lo que estés buscando hacer en cada momento. Vamos a ver una comparativa (sacada de esta web) que toma como base el sampler Euler, porque se asume que éste tiene la mejor relación entre calidad, consistencia y velocidad.
Convergencia/Consistencia entre pasos
Si lo que quieres son imágenes que converjan y sean consistentes en los distintos pasos (algo que necesitarás para hacer cambios a partir de una semilla) NO deberás usar ningún sampler estocástico (como los ancestral).
Luego tenemos el grupo de los samplers EDO (incluyen el Euler, el DDIM, el PLMS, el LMS Karras y el Heun). En este grupo de samplers, deberías optar por el Euler o el Heun (aunque el Heun es más lento). A partir de unos 20 pasos, también podrías incluir el DDIM.
Después tenemos los DPM. DPM2 y DPM2 Karras lo hacen mejor que Euler, a costa de ser más lentos. Si la generación la vas a hacer en menos de 12 pasos, deberías optar por Euler. Si la generación va a ser entre 12 y 30 pasos, deberías apostar por DPM2 Karras. A partir de 30 pasos, todos tienen el mismo nivel de consistencia.
(DPM Adaptative te dará siempre la mejor calidad y consistencia, pero, claro, no sabrás a priori los pasos necesarios, así que es difícil comparar).
Otro grupo es el de los DPM++. Aquí, DPM++ SDE y DPM++ SDE Karras funcionan como los ancestrales. No convergen. En cambio, DPM++ 2M y DPM++ 2M Karras lo hacen bien. De hecho, DPM++ 2M Karras es la mejor opción a partir de 18 pasos (para menos de 18 pasos, es mejor Euler). A partir de 30 pasos, da igual usar DPM++ 2M, DPM++ 2M Karras o Euler.
Por último, UniPC tarda más en converger y necesita unos 35 pasos para tener la misma consistencia que Euler. No obstante, la diferencia no es brutal en los pasos anteriores y, teniendo en cuenta la mejor calidad de UniPC, nos puede interesar apostar por él.
En resumen y aplicado al caso concreto de DreamStudio: Si lo más importante para ti es la consistencia (sin atender a la velocidad ni a la calidad), tienes que:
- k_euler SIEMPRE es una buena opción.
- k_heun también, aunque más lenta.
- ddim también es una opción igual de buena que las anteriores a partir de 20 pasos.
- k_dpm_2 es mejor que k_euler si la generación la vas a hacer entre 12 y 30 pasos aprox (si son menos pasos, mejor k_euler y, si son más, da igual).
- k_dpmpp_2m es la mejor opción a partir de 18 pasos (para menos, mejor k_euler y, para más, da igual).
Calidad
Ahora, lo anterior hace referencia a la consistencia. Pero igual k_euler está convergiendo en una puta mierda. Así que tenemos que ver cuál es el sampler que nos ofrece la mejor calidad.
Si nos centramos únicamente en la calidad y atendemos a los distintos grupos de samplers, encontramos que:
Entre los EDO Samplers, el que mejor lo hace es el DDIM, que es capaz de generar una imagen de calidad con tan solo 8 pasos y mantiene un nivel de calidad superior en cualquier otro paso posterior. Euler, Heun y LMS Karras tienden a generar la misma calidad a partir del paso 10 (aprox).
Entre los ancestrales, todos generan más o menos la misma calidad que Euler, salvo por la excepción de Euler a (genera mejores imágenes) y DPM2 Ancestral Karras (genera peores salvo a partir de 25 pasos). Todos los ancestrales tienden a tener la misma calidad a partir de 30 pasos.
Los DPM2 tienden a tener una calidad un poco mejor a partir de los 7 pasos.
Los DPM++ SDE y DPM++ SDE Karras tienen una calidad notablemente mayor que Euler en cualquier paso y mantiene esa mejor calidad independientemente del número de pasos.
UniPC genera peores resultados que Euler en generaciones de pocos pasos, pero tiende a igualarlo a partir de unos 25 pasos.
En resumen y aplicado al caso concreto de DreamStudio: Si lo más importante para ti es la consistencia (sin atender a la velocidad ni a la calidad), tienes que:
- k_dpmpp_2s_ancestral tiene la mejor calidad (a costa de no ser consistente) y mantiene esa ventaja en cualquier número de pasos.
- k_euler_ancestral tiene también una muy buena calidad en el entorno de los 15 pasos (a costa de no ser consistente), pero tiende a perder esa ventaja en pasos posteriores.
- ddim y k_dpm_2 tienen más o menos la misma calidad (pero inferior k_dpmpp_2_ancestral), esta calidad se mantiene en cualquier número de pasos a partir del paso 10 y, además, son consistentes.
Entonces… ¿Con cuál me quedo?
Pues…
- Si lo que te interesa es sólo la calidad (porque vas a generar una imagen y usarla, no jugar con ella a través de la semilla): k_dpmpp_2s_ancestral con 8-12 pasos.
- Si quieres una calidad aceptable, pero una generación más rápida y que converja (porque estás explorando y luego vas a jugar con la imagen): k_dpm_2 con 20-30 pasos.
- Si quieres jugar con las imágenes, olvídate de cualquier sampler Ancestral.
- Si quieres algo equilibrado entre tiempo, consistencia y calidad, k_euler.
Más de 3000 orangotanes ya reciben mis emails
Suscríbete a la Niusleta de Joseo20.
Yo sí mando spam. Cuando tengo que vender, vendo. El resto de tiempo envío emails con temas que considero interesantes.
Hablo de todo lo que me sale de los cojones, no sólo de marketing o negocios. Hay política, filosofía y otras gilipolleces.
Es probable que después de leerla me odies.
Incluye orangotanes.
¿Y los samplers son consistentes entre sí?
Nos queda una última duda por resolver: ¿Los samplers son consistentes entre sí?
Es decir, si genero unas cuantas imágenes con k_euler y una me gusta y quiero algo así con mayor calidad, ¿puedo usar k_euler_ancestral para obtenerla con mejor calidad?
Pues no.
Pero podrías usar k_dpm_2. Con este sí mantendrías una mayor consistencia.
En general, para trabajar de esta forma (generaciones rápidas y de calidad aceptable y luego elegir una y mejorarla) deberías optar por ddim, k_euler o k_heun para la primera fase y k_dpm_2 o k_lms para la segunda (aunque, al final, lo mejor es que juegues una tarde con ello y encuentres tus propias combinaciones).
A partir de ahí, teniendo en cuenta lo que hemos mencionado de la calidad, ya puedes elegir con cuál hacer cada cosa.
CLIP Guidance
Aclarado lo anterior, hablemos del CLIP Guidance.
El CLIP Guidance es un modo de generación de las imágenes que, en principio, genera mejores imágenes (y así es en la práctica –al menos, la mayoría de veces).
El problema de CLIP Guidance es que sólo funciona con un sampler, que es k_dpm_2_ancestral.
Y, como ya hemos dicho, este sampler es estocástico, así que no nos sirve para jugar con la semilla y refinar la imagen, porque cada vez nos generaría una pollada diferente.
Por tanto, dependiendo del momento en el que estemos y lo que queramos hacer, tendremos que elegir entre activar o desactivar el CLIP Guidance.
Es lo que pasaba con la chica que vimos al jugar con los steps.
Pero vamos a ilustrarlo también con el propio ejemplo que nos trae Dream Studio de serie (¿cuál mejor para comprobar esto?).
Pongo el prompt por defecto, que es este:
A dream of a distant galaxy, concept art, matte painting, HQ, 4k
Y genero esta imagen con 10 pasos y un CFG de 7:
Ahora, uso esa semilla y ese mismo prompt y subo los steps a 30, manteniendo todo lo demás igual. Lo lógico sería pensar que voy a obtener esa misma imagen, pero con un mayor nivel de detalle, ¿no?
Pues no.
Mira:
¿DÓNDE COÑO ESTÁN LAS MONTAÑAS DE LA IMAGEN ANTERIOR?
La diferencia es más que notable.
Y no debería ser así si estoy usando una semilla.
Ahora, ¿y si hago lo mismo, pero desactivando el CLIP Guidance y pongo un sampler cuya consistencia sea mayor, como k_dpm_2?
Pues, de primeras, digamos que genero esta imagen con 10 pasos:
Y, ahora, pillo la semilla, subo los steps a 30 y dejo todo lo demás igual:
Ahora sí que tenemos lo mismo, pero con mayor calidad (date cuenta de que la imagen original con 10 pasos ya era mejor en el caso de k_dpm_2).
Vale, y nos faltaría por probar una última cosa. Lo de la consistencia entre samplers.
Vamos a usar el k_euler para generar unas cuantas variaciones y nos quedamos con esta:
Y, ahora, cogemos la semilla, mantenemos el prompt, subimos los steps a 30 y cambiamos el sampler a k_dpm_2.
Bueno, no es exacto, pero se aproxima.
Compara con el uso de un sampler estocástico, como k_dpm_2_ancestral:
Como ves, se le va más la olla.
Pues bueno, ese es el rollo de los samplers y el CLIP Guidance.
Quizá haya sido tremenda turra, pero te haya servido para entender bien el asunto.
¿Y si lo que cambio es el modelo?
Ahora, ¿y si en vez de cambiar el sampler y aumentar los pasos lo que cambio es el modelo?
Pues, si el juego es entre el mismo sampler y un cambio menor, como puede ser de 1.4 a 1.5, puedes conseguir resultados más o menos consistentes (a veces hay cambios, dependiendo de los samplers con los que juegues, pero bastante bien):
Si el juego es entre distintos samplers y un cambio menor, como puede ser de 1.4 a 1.5, también podemos conseguir resultados consistentes:
Ahora, si hacemos un cambio más gordo, como de 1.x a 2.x, la consistencia se va a la mierda incluso con el mismo sampler (lógico, por otro lado):
Entre diferentes versiones de 2.x la consistencia es buena si mantienes el mismo sampler.
Más de 3000 orangotanes ya reciben mis emails
Suscríbete a la Niusleta de Joseo20.
Yo sí mando spam. Cuando tengo que vender, vendo. El resto de tiempo envío emails con temas que considero interesantes.
Hablo de todo lo que me sale de los cojones, no sólo de marketing o negocios. Hay política, filosofía y otras gilipolleces.
Es probable que después de leerla me odies.
Incluye orangotanes.
Entendiendo el Prompting en Stable Diffusion
Bueno, ahora que ya hemos entendido todos los parámetros y opciones de configuración de DreamStudio, pasemos a hablar del Prompt Engineering en Stable Diffusion propiamente dicho.
Es decir, cómo debemos construir los prompts y qué podemos conseguir.
Después, en otro apartado, te mostraré truquitos concretos. Pero, de momento, vamos a generar imágenes sin más.
Vamos a intentar crear un paisaje de partida y vamos a ir iterando sobre él para ir corrigiendo y añadiendo cositas, de menos a más, siguiendo el esquema que vimos en la lección anterior, hasta llegar a un paisaje cyberpunk interesante (ten en cuenta que no tendremos mucha capacidad de decisión, porque vamos a usar imágenes de partida varias veces y eso influenciará bastante en la imagen final).
Por otro lado, como ya he dicho en más de una ocasión, Stable Diffusion es la IA que mayor curva de aprendizaje tiene.
Esto es malo y bueno a la vez, porque significa que, si aprendes a crear buenos prompts para Stable Diffusion, hacer lo mismo con Dall·E 2 o Midjourney te va a parecer un juego de niños.
Yo, personalmente, no soy ningún experto en Stable Diffusion y mis resultados no son demasiado buenos. Pero bueno, verás bien cómo voy iterando en un trabajo concreto con todos los pasos posibles.
¡Por cierto!
Para todo el proceso voy a estar usando k_dpm_2 con 30 pasos, porque como vamos a jugar con la imagen quiero que sea consistente.
Además, como ya dije, vamos a usar el último modelo, que, en el momento de escribir estas líneas, es el Stable Diffusion v2.2.2-XL Beta (a pesar de sus ya mencionadas limitaciones actuales).
Y, dicho esto, vamos pa allá.
Imagen de partida
Vamos a empezar por pasarle esta imagen de partida (que he sacado de Google):
La verdad, en este apartado de Imagen de Partida hay poco más que decir. Voy a tener que ir jugando un poco con el Image Strength, pero, en la medida en que estás obligado a meter un prompt textual (a diferencia de lo que sucede en Midjourney) pues vamos a pasar allí directamente.
Input textual
Vale, pues junto a la imagen de partida esa, voy a meter un primer input textual. Vamos a verlo paso a paso, como vimos en la lección anterior.
Descripción
Vamos a hacer un paisaje cyberpunk (por ejemplo). Veamos cómo ir describiéndolo.
Sujeto
En el caso de un paisaje, obviamente, no hay un “sujeto”. No hay un protagonista o un actor. Podríamos considerar que el propio paisaje es el sujeto, pero… ¿Pa qué?
Si luego tenemos una parte dedicada a la descripción del “Entorno”, pues vamos a pasar allí directamente.
Acciones
Igual que no hay sujeto, no hay acciones (porque requieren de un sujeto).
Entorno
Y, ahora sí, vamos a meter el input textual para el caso de querer crear un paisaje.
Hemos dicho que queremos un paisaje cyberpunk (el estilo ya lo meteremos luego, de momento, vamos paso a paso –aunque en un trabajo “real”, ya lo meteríamos, pero lo vamos a hacer por separado por claridad expositiva, puesto que veremos más claro cómo se ve afectada la generación de la imagen si vamos pasito a pasito).
Bueno, pues le pasamos “cyberpunk landscape” como prompt junto a la Imagen de Partida y jugamos con el Image Strength hasta llegar a estos resultados:
Como ves, a partir de 60 la imagen generada se parece demasiado a la original, mientras que por debajo de 50 genera cosas muy random.
Así que un valor entre 50 y 60 da un resultado interesante para lo que nosotros queremos (que es una imagen nueva, pero respetando una cierta composición y elementos).
Para jugar a lo largo de esta guía, vamos a generar una nueva y vamos a seguir trabajando sobre ella (con la semilla).
Juego un poco con el Cfg Style y el Prompt Image, generando varias imágenes al mismo tiempo hasta que doy con una que me gusta.
Finalmente, llego a esta, con un peso de la imagen de 45 y un Cfg Scale de 14:
cyberpunk landscape
Date cuenta de que, de momento, no nos importa demasiado que se parezca muchísimo a lo que tenemos en mente por “Paisaje Cyberpunk”, porque el prompt que le hemos metido es súper simple y es normal que no encaje con lo que queremos al 100%.
Simplemente, no le hemos especificado qué es lo que queremos. Normal que no nos lo dé.
Lo que queremos en este punto es generar una imagen que mantenga la composición y tenga atisbos de cyberpunkosidad. Luego ya profundizaremos en ello.
Tenemos varias formas de hacerlo (no sólo el prompt).
Ahora, lo que vamos a hacer es detallar más el prompt para lograr una imagen más ajustada.
Para ello, hacemos clic en la imagen generada que nos gusta y se nos abrirá en primer plano. A la derecha, verás que aparece su semilla activada. Es ahora cuando vamos a jugar con la imagen cambiando el prompt.
Si haces clic en dream sin tocar nada, verás que el resultado es exactamente el mismo. Porque todos los elementos (imagen de partida, prompt y parámetros) están igual y tiene la semilla activada.
En cambio, cualquier cambio que hagamos afectará al resultado. Por tanto, obtendremos variaciones.
De momento, vamos a dejar todo igual y sólo vamos a tocar el prompt. Vamos a ponerle uno más completo y detallado.
Por ejemplo, pasamos de esto:
cyberpunk landscape
A esto:
cyberpunk landscape, in the foreground, a beach with garbage, in the background, an artificial island with a city, on the horizon, several skyscrapers with lights, green polluted wáter
El resultado no me gusta mucho. Y, como estoy usando una semilla, siempre que use ese prompt con esos parámetros, el resultado será el mismo (no pudo darle a “dream” y que salga otra cosa, como sucedería si no utilizase una semilla).
Por tanto, tengo que jugar más.
Después de iterar mucho, llego a esto:
cyberpunk beach with palm trees, palm trees, giantic war ship on sea, sky rockets, cars flying on sky, futuristic cyberpunk landscape, big city metropolis in the horizon with giant skyscrapers, robotic enhancements
Con los parámetros siguientes:
- Cfg Scale: 13
- Steps: Los mantengo en 30
- Image Strength: 35
Como ves, en el prompt repito “palm trees”, porque, si no, no aparecían. La repetición hace que aparezcan. Los coches voladores y los cohetes no aparecen, pero me generan una nave voladora que parece de guerra.
Así que compro.
Recuerda que, muchas veces, jugar con estas IAs no tiene como objetivo conseguir exactamente lo que queremos, sino que tenemos que estar abiertos a que nos ofrezca algo interesante.
Como en este caso.
Además, ten en cuenta que, como estamos usando una imagen de partida, la IA está muy anclada a ella. Es más difícil lograr que haga lo que quieras.
Por ejemplo, si quieres un robot gigante en la playa, lo más probable es que te convierta las palmeras en el robot. Porque está pillando la composición de la imagen que le pasas como input, y, como le dices que quieres un robot, pues entiende que lo que querrás es que esas palmeras sean el robot.
Esta es la razón por la que, por mucho que pongas “night” en el prompt, no consigas que la imagen sea de noche.
Bueno, ya tenemos nuestro paisaje.
Iluminación
Para jugar con la iluminación, lo que voy a hacer es descargarme la imagen y usarla como imagen de partida.
Y, ahora, podemos hacer dos cosas:
La primera es copiar todo el prompt y añadir los elementos de iluminación al final de ese prompt (o en otra posición) y jugar con los parámetros, lo que nos arrojaría algo así:
cyberpunk beach with palm trees, palm trees, giantic war ship on sea, sky rockets, cars flying on sky, futuristic cyberpunk landscape, big city metropolis in the horizon with giant skyscrapers, robotic enhancements, purple cyberpunk neon light, sunrise, saturated pigments, high contrast
Esta opción está guay porque, al meter la imagen y el prompt, aunque no tengamos la semilla, el resultado es bastante estable incluso bajando el Image Strength bastante (hasta niveles de 40 o incluso menos).
La segunda opción es subir la imagen y sólo meter los elementos de iluminación como prompt. Al hacerlo, obtenemos cosas así:
purple cyberpunk neon light, sunrise, saturated pigments, high contrast
Esta opción me gusta menos porque te obliga a poner un Image Strength (70 o más) demasiado alto para que no se ponga a generar otra cosa (y, aun así, fíjate, a veces cambia cosas, como la nave espacial). Y, claro, si subes tanto el Image Strength, los cambios que puedes aplicar vía prompt, se reducen.
En cualquier caso, es otra opción para jugar.
Yo, personalmente, me quedo para seguir jugando con esta:
Cámara
En el caso del trabajo que estamos haciendo, no tenemos margen para jugar con la cámara.
¿Por qué?
Pues porque estamos partiendo de una imagen que nos da la composición. Y, si damos margen suficiente como para que la cámara cambie, también cambiará la composición y los elementos.
Por tanto, nosotros no vamos a tocar nada aquí.
Ahora bien, si estuvieses generando una imagen desde cero, pues sí tendrías más margen para jugar, usando alguna de las dos técnicas mencionadas anteriormente (o, directamente, a partir de la semilla).
Detalles
Por último, podemos añadir algunos detalles. Para ello, subo la última imagen que me gustó, que era esta:
Y le meto al prompt algunos detalles que creo que pueden venirle bien:
cyberpunk beach with palm trees, palm trees, giantic aircraft carrier warship on sea, sky rockets, detailed spaceship, cars flying on sky, futuristic cyberpunk landscape, big city metropolis in the horizon with giant skyscrapers, robotic enhancements, dark black oil in water, petrol in water, purple cyberpunk neon light, sunrise, saturated pigments, high contrast
Lo que hago es aprovechar para meter el concepto de “detailed spaceship”, aprovechando que ya me lo había sacado antes. Matizo que el barco es un portaaviones. Y añado lo del petróleo en la playa (que no hace mucho, pero sí le da un brillo interesante en la derecha).
Por supuesto, he tenido que jugar con el peso de la imagen y el Cfg Scale (aumentándolo, puesto que ahora “me fío” mucho más de mi prompt y quiero menos innovaciones).
El estilo ha cambiado. Pero eso nos da igual, porque estamos abiertos a lo que vaya surgiendo.
Modificadores de estilo
Ahora, tenemos que meter los estilos. Como hemos metido una imagen de partida, nuestros resultados son muy dependientes de ella. Por tanto, no podemos automáticamente cambiar el estilo por anime o impresionismo (por ejemplo).
Sin embargo, sí podemos jugar un poco, teniendo en cuenta que, lo que añadamos, como mucho, se mezclará con el estilo por defecto de la imagen de partida.
Lo que hacemos es subir la última imagen, meter el prompt completo y añadir estilos:
cyberpunk beach with palm trees, palm trees, giantic aircraft carrier warship on sea, sky rockets, highly detailed starship, futuristic cyberpunk landscape, big city metropolis in the horizon with giant skyscrapers, robotic enhancements, dark black oil in water, petrol in water, purple cyberpunk neon light, sunrise, saturated pigments, high contrast, cinematic, anime, by Alfred Bierstadt
Como ves, aunque no cambia demasiado, sí que se añaden algunos detallitos interesantes (y, si no te gustase, pues sigues con la anterior).
Potenciadores
Y, por último, metemos los potenciadores.
En este caso no descargo la imagen y la subo, sino que, con la semilla de la última imagen y manteniendo todos los parámetros igual, copypasteo el prompt y añado los potenciadores al final:
cyberpunk beach with palm trees, palm trees, giantic aircraft carrier warship on sea, sky rockets, highly detailed starship, futuristic cyberpunk landscape, big city metropolis in the horizon with giant skyscrapers, robotic enhancements, dark black oil in water, petrol in water, purple cyberpunk neon light, sunrise, saturated pigments, high contrast, cinematic, anime, by Alfred Bierstadt, masterpiece, cinematic composition, beautiful lighting, sharp, details, hyper - detailed, hd, hdr, 4k, 8k
Y aquí la comparativa entre la imagen de partida, una imagen del proceso a medias y la imagen final:
Oye… pero cuánta vuelta, ¿no?
Pues claro. Hemos ido paso a paso. Cuando estés trabajando, normalmente no irás paso a paso, pero nosotros lo hemos hecho así para ver cómo influyen todas las opciones de DreamStudio y cómo se va afectando la composición y el resultado final.
Y lo haremos así en todas las lecciones.
Parámetros
En el caso de los parámetros, los únicos que usamos en DreamStudio son los relativos a las dimensiones de las imágenes generadas y el Cfg Scale.
Como ya los hemos usado y explicado según hemos ido avanzando, no voy a profundizar en ellos.
Simplemente, recuerda que el Image Strength determinará cuánto pesa la Imagen de Partida en la composición, colores, elementos y demás y el Cfg Scale cuánto caso hace la IA a tu prompt (por tanto, cuanto más seguro estás de tu prompt, más alto lo debes poner).
Más de 3000 orangotanes ya reciben mis emails
Suscríbete a la Niusleta de Joseo20.
Yo sí mando spam. Cuando tengo que vender, vendo. El resto de tiempo envío emails con temas que considero interesantes.
Hablo de todo lo que me sale de los cojones, no sólo de marketing o negocios. Hay política, filosofía y otras gilipolleces.
Es probable que después de leerla me odies.
Incluye orangotanes.
Trucos de Prompt Engineering para Stable Diffusion
Y, para terminar, vamos a ver algunos trucos y detalles concretos para Stable Diffusion (en DreamStudio).
Prompt Weights y negative prompts
Antes de nada, hablemos de los prompt weights y los negative prompts, puesto que no los hemos visto en el ejemplo anterior.
Stable Diffusion te permite utilizar multiprompts y prompt weights. Lo que haces al usar multiprompts es que Stable Diffusion entienda un único prompt como dos o más y juegue con ellos.
Además, puedes añadir pesos a las diferentes partes del prompt.
Por ejemplo, imagina que tenemos este prompt, que genera esta imagen:
eagle flying in red desert landscape, digital paint, intrincated details, 4k, 8k, hd
(He aumentado el width y puesto el modelo 2.0)
Ahora, supón que guardamos esa semilla y usamos prompt weights, de esta forma:
eagle flying : 6 | red desert landscape, digital paint, intrincated details, 4k, 8k, hd
¿Y qué nos genera esto?
Esto:
Muy bien. ¿Dónde está el desierto? ¿Dónde está el digital paint?
Bueno, no le hemos matizado nada en el primer prompt, así que nos ha puesto la foto de un águila y, como parte de eso, pues eso arrastra al segundo prompt hacia que sea una foto.
Si añadimos los mismos modificadores al primer prompt, tenemos esto:
eagle flying, digital paint, intrincated details, 4k, 8k, hd : 2 | red desert landscape, digital paint, intrincated details, 4k, 8k, hd
Que es un águila un poco rara, pero ya se parece más a lo que buscamos.
Como ves, lo que hacemos es ponerle un peso de 2 al primer prompt. El segundo se mantiene en 1 porque es el que viene por defecto. De esta forma, damos más peso al águila.
¿Y si cambiamos el orden, pero mantenemos el peso en el águila?
red desert landscape, digital paint, intrincated details, 4k, 8k, hd : 1 | eagle flying, digital paint, intrincated details, 4k, 8k, hd : 2
Pues obtenemos más o menos lo mismo, porque está tomando ambos prompts como separados y le suda bastante la polla el orden (a igualdad de semilla y pesos y sin ser un prompt muy largo).
Ahora, ¿y si no quiero el águila?
Pues le pongo un peso negativo:
red desert landscape, digital paint, intrincated details, 4k, 8k, hd : 1 | eagle flying, digital paint, intrincated details, 4k, 8k, hd : -2
Obviamente, en este caso, podría haber quitado el segundo prompt y ya está, no habría salido el águila. Pero por ver que, incluso poniéndole en el prompt, no aparece, porque el peso es negativo.
Ahora, no parece un “digital paint” eso, ¿no?
No lo es porque no le hemos puesto peso negativo sólo al águila, sino a todos los modificadores, que son compartidos con el primer prompt. Y, como en el segundo prompt el peso negativo es mayor que el positivo del primer prompt, pues no aplica los modificadores.
Lo que tenemos que hacer es quitar los modificadores del segundo prompt:
red desert landscape, digital paint, intrincated details, 4k, 8k, hd : 1 | eagle flying : -2
Ahora sí.
Bueno, y ese es el juego con los multiprompts, los prompt weight y los prompts negativos.
Para usarlos, simplemente, separas los prompts con una pleca (|) y pones los pesos con ( : ) (teniendo en cuenta ambos espacios).
Ten en cuenta que el valor por defecto (sin usar “:”) es 1. También ten en cuenta que, a partir de 10 o -10, el prompt weight deja de tener efecto (o sea, lo tomará como un 10 aunque pongas 50).
En general, con rangos de -2 a 2 irás sobrado.
Para terminar, de decir dos cosas:
- En mi experiencia, no funcionan tan bien como en Midjourney.
- DreamStudio no es la mejor interfaz para aplicar prompts negativos, por la limitación de caracteres.
Genera imágenes con pocos steps y luego re-genéralas con mayor calidad
A la hora de generar imágenes muy definidas, no es buena idea poner un gran número de pasos desde el principio.
Es mejor generar unas cuantas con pocos pasos y, cuando encuentres una que te guste, coger su semilla (con alguno de los samplers consistentes) y aumentarle el número de steps.
De esta forma, ahorrarás créditos (e irás más tiempo).
Genera imágenes de tamaño reducido y luego amplíalas
Siguiendo con lo anterior, otra forma de reducir el coste de generar imágenes es generar, primero, las imágenes al mínimo tamaño y, después, aumentar su resolución.
¿Pero cómo? ¡Si antes me dijiste que no se podía hacer porque la imagen de puro ruido cambiaba al aumentar el tamaño y ni con la misma semilla podía conseguirse!
Bueno, hay un truquito muy simple:
- Generas la imagen en tamaño reducido (512×512).
- La descargas.
- La subes como Image Input.
- Subes el Image Strength al máximo.
- Pones el tamaño que quieras.
- ¡Listo!
Lo más cercano al principio del prompt tiene más peso
Como en otras IAs de Imágenes, lo que pongas al principio del prompt tendrá más peso que lo que pongas después.
Si algo no está apareciendo, una buena opción es adelantarlo en el prompt. No obstante, piensa que, a lo mejor, estás queriendo que en un paisaje aparezca un determinado personaje y, si pones el personaje delante, igual acabas con el personaje en primer plano.
Y no es eso lo que quieres.
Si estás en esta situación, es mejor que apuestes por el siguiente truco.
Repite términos y usa sinónimos para dar énfasis
Sí, tan sencillo como eso.
Ya lo viste antes: No aparecían las palmeras y repetí el término. Y ya está.
Al aparecer más veces en el prompt, la IA lo tiene más en cuenta.
También puedes usar sinónimos para ver cuál es el que activa la bombilla de la IA y hace que lo que buscas aparezca.
Otra opción es usar prompt weights, pero te la juegas un poco más. Te recomiendo dejar esta opción como último recurso, tras probar las anteriores y que no funcionen.
Configuraciones recomendadas
Si no quieres comerte mucho la olla con las configuraciones y sólo quieres generar imágenes guapas, una configuración que funciona bien es:
- Cfg Scale = 8
- Steps = 30
- Sampler = k_dpm_2
- Model = Stable Diffusion v2.1
Con esto puedes conseguir cosas así:
portrait photo of a apache old warrior chief, red tribal make up, profile, serious eyes, hard rim lighting photography–beta
Ahora, si quieres jugar, ya has visto todo lo que se puede tocar.
CFG y afectación de cambios en el prompt
Algo obvio pero que quizá se le ha escapado a alguien: Si el CFG Scale hace que la IA haga más caso a nuestro prompt cuanto mayor es, esto significa que, cuanto mayor sea, más impacto veremos al cambiar elementos en nuestro prompt.
Sí, lo sé, es evidente. Pero por si acaso.
No añadas muchos pasos
Como ya vimos, en muchas ocasiones, añadir más pasos no nos aporta gran calidad extra.
En la configuración que hemos venido usando y en la que te he recomendado, la diferencia entre 30 y 50 pasos ya es casi imperceptible y totalmente negligible. Imagínate si te vas a 150 pasos.
¿Qué son los estilos de DreamStudio Beta?
Los estilos de DreamStudio Beta, como su nombre indica, son diferentes estilos que puedes aplicar a tus prompts y generaciones. Es algo que se está viendo bastante en diferentes interfaces de Stable Diffusion.
Si te digo la verdad, aún no estoy seguro de si es un finetuneo del modelo o, simplemente, unos botones que añaden un sufijo a tus prompts indicando el estilo que deseas conseguir.
Por lo que he podido comprobar, es lo segundo.
He estado jugando con estilos y prompts negativos quitando dicho estilo y los resultados se alteran bastante, así que imagino que esos estilos sólo son inputs de texto que se añaden a tu prompt.
No está mal (de hecho, es el futuro de todo este mundillo), pero te oculta parte del prompt. Y, como estás haciendo un curso de Prompt Engineering, pues te conviene meter esos estilos en tu prompt directamente, y no pulsar un botón para que los aplique por ti.
Imágenes censuradas en DreamStudio
Tienes que tener en cuenta que DreamStudio tiene activados filtros NSFW en el output de las imágenes.
Esto significa que, a lo mejor, generas una imagen guarra, pero DreamStudio te la blurrea y te avisa de que no te va a cobrar por ella.
El problema es que, a veces, el filtro salta sin que estés generando nada porno o violento. Simplemente, hay que lidiar con ello.
Prompt prohibido en DreamStudio
Otro tipo de censura que hay en DreamStudio es en los inputs. Algunos términos están prohibidos, como “porn”, “dick”, “pussy” y demás. Sin embargo, como en el caso anterior, el problema es que, a veces, hay palabras censuradas que no tienen mucho sentido.
Por ejemplo, el término “child” está prohibido. Tiene sentido, pero cuando usas la palabra “child” no tienes por qué tener intenciones malvadas.
Pero bueno, es lo que hay.
Por cierto, en las Imágenes de Partida, no hay esta censura. Puedes subir una imagen porno perfectamente. Eso sí, es probable que te la censuren a posteriori con el método mencionado antes.
No te agobies si no consigues buenos resultados
Como digo, Stable Diffusion es la IA más complicada de utilizar y que más exigente es con los prompts.
No creas que no vas a ser capaz de generar buenas imágenes porque Stable Diffusion se te hace cuesta arriba.
Dall·E 2 y, sobre todo, Midjourney, te permitirán conseguir buenos resultados con mayor facilidad.
Más de 3000 orangotanes ya reciben mis emails
Suscríbete a la Niusleta de Joseo20.
Yo sí mando spam. Cuando tengo que vender, vendo. El resto de tiempo envío emails con temas que considero interesantes.
Hablo de todo lo que me sale de los cojones, no sólo de marketing o negocios. Hay política, filosofía y otras gilipolleces.
Es probable que después de leerla me odies.
Incluye orangotanes.
Deja un comentario
Lo siento, debes estar conectado para publicar un comentario.