Guía completa de samplers en Stable Diffusion

Sumérgete en el mundo de los samplers en Stable Diffusion y desbloquea el potencial de la generación de imágenes.

Introducción

Como vimos en el artículo Cómo funciona Stable Diffusion, cuando solicitamos a Stable Diffusion que genere una imagen lo primero que hace es generar una imagen con ruido y después el proceso de muestreo va eliminando ruido a lo largo de una serie de pasos que hemos especificado. Sería algo así como empezar con un bloque de mármol blanco y pegarle martillazos durante varios días hasta conseguir el David de Miguel Ángel.

En este proceso entran en escena varios algoritmos. El conocido como sampler se encarga de obtener del modelo que estemos utilizando en Stable Diffusion una muestra sobre la que aplica el ruido estimado por el predictor de ruido. Posteriormente resta esta muestra a la imagen que está limpiando, puliendo el mármol en cada paso.

Este algoritmo se encarga del cómo, mientras que el algoritmo conocido como noise scheduler se encarga del cuánto.

Si la reducción de ruido fuese lineal, nuestra imagen cambiaría la misma cantidad en cada paso, produciendo cambios bruscos. Un noise scheduler con pendiente negativa puede eliminar grandes cantidades de ruido al inicio y así avanzar más rápido, para después pasar a eliminar menos cantidad de ruido y así afinar los pequeños detalles de la imagen.

Siguiendo la analogía del mármol, seguramente al principio será mas útil darle buenos golpes y quitar trozos grandes para avanzar rápido, mientras que hacia el final tendremos que ir muy despacio para afinar bien los detalles y no hacer que se le caiga un brazo.

Un aspecto clave del proceso es la convergencia (convergence). Cuando un algoritmo de muestreo llega a un punto en el que más pasos no van a mejorar el resultado se dice que la imagen ha convergido.

Algunos algoritmos convergen muy rápido y son ideales para probar ideas. Otros tardan más o necesitan un mayor número de pasos pero suelen ofrecer más calidad. Otros en cambio nunca lo hacen porque no tienen límite y ofrecen mayor creatividad.

Con este artículo comprenderás la nomenclatura así como los usos de los diferentes métodos sin que haga falta entrar en detalles demasiado técnicos.

La imagen utilizada en las demostraciones ha sido generada con los siguientes parámetros:

  • Checkpoint: dreamshaper_631BakedVae.safetensors.
  • Positive prompt: ultra realistic 8k cg, picture-perfect black sports car, desert wasteland road, car drifting, tires churns up the dry earth beneath creating a magnificent sand dust cloud that billows outwards, nuclear mushroom cloud in the background far away, sunset, masterpiece, professional artwork, ultra high resolution, cinematic lighting, cinematic bloom, natural light.
  • Negative prompt: paintings, cartoon, anime, sketches, lowres, sun.
  • Width/Height: 512/512.
  • CFG Scale: 7.
  • Seed: 1954306091.

Samplers disponibles

Dependiendo del software utilizado encontrarás una variada lista de posibilidades. En este caso vamos a analizar los samplers disponibles en Automatic1111.

Es difícil clasificarlos en grupos, aunque claramente hay dos aproximaciones principales:

  • Modelos probabilísticos como DDPM, DDIM, PLMS y la familia de modelos DPM. Estos modelos generativos son capaces de generar un resultado en base a la distribución de probabilidad estimada por el modelo. Sería como utilizar una cámara de fotos para fotografíar un paisaje.
  • Métodos con enfoque numérico como Euler, Heun y LMS. En cada paso se busca la solución a un problema matemático concreto y se va estimando la solución poco a poco. En este caso sería como utilizar pintura y un lienzo para ir creando el paisaje y añadir nuevos detalles en cada paso.

DDPM

DDPM (paper) (Denoising Diffusion Probabilistic Models) es uno de los primeros samplers disponibles en Stable Diffusion. Se basa en modelos probabilísticos explícitos para eliminar ruido de una imagen. Requiere una gran cantidad de pasos para alcanzar un resultado decente.

Ya no está disponible en Automatic1111.

DDIM

DDIM (paper) (Denoising Diffusion Implicit Models) funciona de manera similar a DDPM, utilizando en este caso modelos probabilísticos implícitos. Esta diferencia hace que se produzcan mejores resultados en una cantidad de pasos mucho menor, lo que lo convierte en un sampler más rápido con apenas pérdida de calidad.

DDIM
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear

Como se puede apreciar en la nube se obtienen mejores resultados con un número alto de pasos (100+). Hay mejores alternativas como veremos a continuación.

PLMS

PLMS (paper) (Pseudo Linear Multi-Step) es una mejora con respecto a DDIM. Utilizando un proceso de 50 pasos es posible conseguir mayor calidad con respecto a un proceso de 1000 pasos en DDIM. ¿Fascinante verdad? Pues sigue leyendo que esto no es nada.

PLMS
Imagen distorsionada
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear

En el caso de PLMS no podemos utilizar pocos pasos porque no es capaz de limpiar el ruido, pero entre 50 y 100 pasos ya es capaz de ofrecer buenos resultados.

Euler

Euler es posiblemente el método más simple. Basado en ecuaciones diferenciales ordinarias (ODE), este método numérico elimina ruido de manera lineal en cada paso. Debido a su simplicidad puede no ser tan preciso como nos gustaría pero es uno de los más rápidos.

Euler
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear

Euler es tan rápido que es capaz de ofrecer buenos resultados incluso en 10 pasos. Su punto fuerte está entre los 30 y los 50 pasos.

Heun

Heun es el hermano perfeccionista de Euler. Mientras que Euler solo realiza una aproximación lineal, Heun realiza dos tareas en cada paso, convirtiéndolo en un sampler de segundo orden. Primero utiliza una aproximación lineal para la predicción y después una aproximación no lineal para la corrección. Esta mejora en la precisión ofrece mayor calidad a cambio de un pequeño inconveniente: tarda el doble.

¡Karl Heun desarrolló este método numérico hace más de un siglo!

Heun
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear

En 10 pasos aún tiene algo de ruido pero desaparece en pocos más. Como puedes ver, ofrece una alta calidad en 30 pasos, aunque en 50 ofrece algo más de nivel de detalle. En 100 pasos apenas cambia la imagen y no merece la pena hacerse viejo esperando al resultado.

LMS

LMS o método lineal multipaso (Linear Multi-Step) es el primo de PLMS que utiliza un enfoque numérico en vez de probabilístico (PLMS - P = LMS).

Además, a diferencia de Euler y Heun, utiliza información de los pasos anteriores para reducir el ruido en cada nuevo paso. Ofrece una mejor precisión a cambio de mayores requerimientos de computación (más lento).

LMS
Imagen distorsionada
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear

Utilizando pocos pasos tenemos un sampler capaz de generar imágenes psicodélicas imitando el efecto de las drogas. Bromas aparte, es un sampler que no merece la pena porque a pesar de ser rápido necesita en torno a 100 pasos para ofrecer algo decente.

Familia de modelos DPM

DPM (Diffusion Probabilistic Models) son modelos probabilísticos que ofrecen mejoras con respecto a DDPM. De ahí que su nombre sea parecido. Tampoco hay una implementación disponible en Automatic1111 debido a que cuenta con versiones mejoradas como veremos a continuación.

DPM2 es una mejora con respecto a DPM. Podría decirse que es la versión 2.

DPM2
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear

Con 10 pasos ya se obtiene una calidad impresionante (no intentes 5 pasos, no te gustará el resultado). En torno a 30 o 50 pasos está el punto ideal. Más pasos no suele merecer la pena.

Por otro lado tenemos DPM++, que es también una mejora de DPM. Utiliza un enfoque híbrido que combina métodos determinísticos y probabilísticos para el muestreo y la posterior reducción de ruido. No hay ninguna implementación básica de este sampler en Automatic1111, si no que se combina con otros métodos. Lo veremos en la siguiente sección.

Así pues, de DPM nacen dos versiones con mejoras: DPM2 y DPM++.

Modelos DPM más rápidos (DPM-Solver y UniPC)

Los modelos de difusión probabilística (DPM) son, como su nombre indica, probabilísticos. En cada paso no se resuelven ecuaciones mediante métodos numéricos deterministas como en el caso de Euler, Heun o LMS, si no que se aborda el problema mediante aproximación para intentar muestrear de la manera más precisa posible.

Dentro de estos modelos hay una pieza llamada solucionador (solver), un algoritmo que tiene un papel importante a la hora de calcular y aproximar una distribución de probabilidad en el muestreo. Y es aquí donde se implementa una nueva técnica conocida como DPM-Solver que acorta la duración de cada paso.

En otras palabras, modelos como DPM fast (paper) o DPM++ 2S/DPM++ 2M (paper) implementan un solucionador más rápido que ahorrará tiempo en el proceso de muestreo.

DPM fast
Imagen distorsionada
Imagen distorsionada de un coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear

Será rápido (y tampoco tanto), pero utilizando pocos pasos es inservible. Curiosamente ofrece un resultado distinto al resto de samplers y parece que el efecto cinemático es más pronunciado.

En el caso de DPM++ 2S/DPM++ 2M el número 2 significa que son de segundo orden. Es decir, utilizan tanto un predictor como un corrector para aproximar el resultado de manera precisa.

La S se refiere a Single step. En cada paso se realiza un único cálculo, por lo que es más rápido.

En cambio, la letra M proviene de Multi step, un enfoque en el cual se realizan múltiples cálculos en cada paso, teniendo en cuenta información obtenida en pasos anteriores. Esto equivale a una convergencia más precisa y de mayor calidad a costa de tardar más.

En ambas modalidades este solucionador es más rápido que el que viene por defecto en los modelos DPM.

No existe una implementación en Automatic1111 de DPM++ 2S, solo con variantes A, Karras y SDE (algo que veremos más adelante). Así que veamos unas muestras de DPM++ 2M.

DPM++ 2M
Imagen distorsionada de un coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear

Poco que decir de este sampler todoterreno. Ofrece impresionantes resultados a los 30 pasos y si le das algo más de tiempo se puede exprimir aún más.

En cuanto a UniPC (paper), se trata de un solucionador que se compone de dos partes: un predictor unificado (UniP) y un corrector unificado (UniC). Este método puede ser aplicado a cualquier modelo DPM y se centra en ofrecer la máxima calidad de muestreo posible en la menor cantidad de pasos. ¿Recuerdas ahora cuando PLMS bajó a 50 pasos lo que DDIM hacía en 1000? Pues en algunos casos UniPC es capaz de generar imágenes de calidad con tan solo 5 o 10 pasos.

Así pues, UniPC puede ser integrado en modelos DPM tanto Single step como Multi step, por lo que es comparable a DPM++ 2S o DPM++ 2M, con la particularidad de ofrecer mejores resultados cuando el número de pasos es muy bajo

Incluso el corrector UniC puede ser integrado a estos algoritmos de muestreo para conseguir mayor eficiencia (por ejemplo, DPM++ 2S + UniC).

UniPC
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear

En este ejemplo 10 pasos no son suficientes para generar una imagen sin ruido, pero en 15 o 20 si lo conseguirás. En 30 pasos es magnífico y no hace falta ir más allá, aunque todavía queda algo de margen de mejora.

Modelos DPM más precisos (Adaptive)

El modelo DPM adaptive es una extensión del modelo DPM en la cual se adapta el tamaño del paso según la dificultad del problema que se está intentando resolver.

Dicho de otra manera, es como si se ignorase el número de pasos especificado y el algoritmo tuviera total libertad para muestrear de manera más eficiente hasta conseguir la mejor convergencia posible. Genera imágenes de mayor calidad a expensas de tardar todo el tiempo que necesite (es el sampler más lento).

DPM adaptive
Coche deportivo negro en el desierto huyendo de una explosión nuclear

En este caso ha tardado el triple o cuádruple de tiempo con respecto a otros samplers pero el resultado es sorprendente. La composición de la imagen es distinta a la de todos los samplers y se asemeja más a DPM fast.

Otras características

Solo se puede elegir un algoritmo de muestreo. Pueden utilizarse Euler o DPM, pero no ambos a la vez. En cambio, cuando hablamos de variantes o características extra, éstas pueden ser combinadas.

Por ejemplo, podemos utilizar el sampler llamado DPM2 A Karras. Veamos qué significan estos nuevos valores.

Variantes ancestrales

Cuando un sampler contiene la letra A, normalmente se refiere a que pertenece a la categoría de variantes ancestrales. Estas variantes añaden, en cada nuevo paso, variables aleatorias obtenidas de pasos anteriores. Es como si tras limpiar el ruido en un paso se volviera a añadir un poco del ruido anterior.

Samplers con esta característica nunca convergen debido al ruido aleatorio que se añade en cada paso. Si siempre hay ruido que eliminar, siempre se podrá ir un paso más allá.

Esto hace que sean samplers más creativos. Un paso extra no tiene por qué aumentar la calidad, si no que ofrece otro resultado similar.

Si intentas reproducir una imagen generada con Stable Diffusion y no lo consigues a pesar de estar utilizando la misma semilla (seed) y los mismos parámetros, puede ser porque estás utilizando un sampler ancestral. ¡Es normal! El ruido que se vuelve a añadir en cada paso es aleatorio y diferentes implementaciones o versiones del sampler casi seguro que generan diferentes resultados.

Algunos ejemplos de samplers son: Euler A, DPM2 A o DPM++ 2S A.

Euler A
Explosión nuclear en el desierto
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear

Euler A ofrece un gran resultado en 25-30 pasos siendo además muy rápido. En 50 pasos la calidad es peor y luego en 100 pasos vuelve a ser mejor. Es una lotería. Además se puede apreciar como la composición de la imagen cambia constantemente debido al ruido aleatorio introducido en cada paso. Lejos de ser un inconveniente es quizás su mayor ventaja.

Variantes Karras

Las variantes con la palabra Karras (o K) (paper) se refieren a un trabajo liderado por Tero Karras, ingeniero de Nvidia. Este proceso introduce una serie de mejoras en algunos samplers, consiguiendo mejorar la eficiencia tanto en la calidad del resultado como en la computación requerida para el muestreo.

Algunos samplers que utilizan estos cambios son: LMS Karras, DPM2 Karras, DPM2 A Karras, DPM++ 2S A Karras, DPM++ 2M Karras o DPM++ SDE Karras.

DPM++ 2M Karras
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear

Al igual que DPM++ 2M, este sampler ofrece muy buenos resultados entre los 30 y los 50 pasos, pero la versión Karras tiene la ventaja de ofrecer mejores resultados en un número reducido de pasos como puede apreciarse en el siguiente ejemplo:

Si utilizas un alto número de pasos te costará ver la diferencia.

Variantes estocásticas

Las variantes SDE (paper) utilizan ecuaciones diferenciales estocásticas (stochastic differential equations). Sin entrar en mayor detalle, utilizar este tipo de ecuaciones diferenciales permite modelar el ruido de una manera más sofisticada y precisa, utilizándo información de pasos anteriores, lo que en principio generaría imágenes de mayor calidad a cambio de ser más lentos. Al ser estocástico nunca converge, por lo que a mayor número de pasos no ofrecen mayor calidad, si no más variaciones al igual que los samplers ancestrales.

A fecha de publicación de este artículo contamos con DPM++ SDE, DPM++ 2M SDE, DPM++ SDE Karras y DPM++ 2M SDE Karras.

DPM++ SDE
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear
Coche deportivo negro en el desierto huyendo de una explosión nuclear

Los samplers estocásticos son lentos pero ofrecen resultados increíbles incluso con 10 pasos. Sus resultados también son más variados y creativos. Como nunca convergen son una alternativa a los samplers ancestrales.

¿Cuál es el mejor sampler en Stable Diffusion?

¿Es mejor un Ferrari o un Jeep? Pues depende de si te metes campo a través, ¿no?

Depende de lo que necesites es mejor utilizar un tipo de sampler u otro. Con la información anterior espero que sea fácil elegir, pero aquí unas pistas.

Calidad de imagen

Si buscas calidad es buena idea perseguir la convergencia. Ese es el punto en el que se obtiene la máxima calidad. Si no quieres sacrificar mucho la velocidad de generación, olvidate de samplers como DDIM que necesitan cientos de pasos para converger. Heun y LMS Karras ofrecen buenos resultados pero mejor aún utilizar DPM++ 2M o su versión Karras.

También puedes probar DPM adaptive si no tienes prisa, o UniPC si la tienes.

Con estos samplers mencionados obtendrás buenos resultados en 20-30 pasos aunque no está de más probar unos pocos pasos extra.

Velocidad de generación

Si estás probando prompts no querrás perder tanto tiempo esperando resultados. En este caso y donde no busques la máxima calidad si no probar cambios rápidamente te recomiendo utilizar DPM++ 2M o UniPC con un número pequeño de pasos.

Con apenas 10-15 pasos obtendrás una imagen muy digna.

Si no te preocupa la reproducibilidad también tienes Euler A, un sampler ancestral rápido y con buena calidad. ¡Mi sampler favorito!

Creatividad y flexibilidad

Esta sección está reservada exclusivamente a samplers ancestrales y estocásticos. No ofrecen mala calidad ni tampoco son lentos, simplemente son diferentes.

El problema o ventaja (según como se mire) de estos samplers es que si tienes una imagen generada en 40 pasos, el haberlo hecho en 50 pasos puede mejorar o empeorar la imagen. Tendrás que ir probando continuamente. Y esta lotería hace que estos samplers sean más creativos ya que siempre puedes cambiar el número de pasos para obtener pequeñas variaciones.

Por supuesto aquí destacan Euler A y DPM++ SDE Karras. Prueba a generar imágenes en 15 pasos, 20 pasos, 25 pasos... y verás como cambia el resultado.

Puedes apoyarme para que pueda dedicar aún más tiempo a escribir artículos y tener recursos para crear nuevos proyectos. ¡Gracias!