Articulo de referencia

modelo de difusión latente

El modelo de difusión latente ( LDM ) [ 1 ] es una arquitectura de modelo de difusión desarrollada por el grupo CompVis (Visión por computadora y aprendizaje) [ 2 ] en LMU Munic...

El modelo de difusión latente ( LDM ) [ 1 ] es una arquitectura de modelo de difusión desarrollada por el grupo CompVis (Visión por computadora y aprendizaje) [ 2 ] en LMU Munich . [ 3 ]

Introducidos en 2015, los modelos de difusión (MD) se entrenan con el objetivo de eliminar aplicaciones sucesivas de ruido (generalmente gaussiano ) en imágenes de entrenamiento. El MD mejora el MD estándar al realizar el modelado de difusión en un espacio latente y al permitir el condicionamiento de autoatención y atención cruzada.

Los LDM se utilizan ampliamente en modelos de difusión prácticos. Por ejemplo, las versiones 1.1 a 2.1 de Stable Diffusion se basaron en la arquitectura LDM. [ 4 ]

Historial de versiones

Los modelos de difusión se introdujeron en 2015 como un método para aprender un modelo que puede muestrear a partir de una distribución de probabilidad altamente compleja. Utilizaron técnicas de la termodinámica del no equilibrio , especialmente la difusión . [ 5 ] Esto se complementó con una implementación de software en Theano . [ 6 ]

Un artículo de 2019 propuso la red de puntuación condicional de ruido (NCSN) o coincidencia de puntuación con dinámica de Langevin (SMLD). [ 7 ] El artículo estuvo acompañado de un paquete de software escrito en PyTorch publicado en GitHub. [ 8 ]

Un artículo de 2020 [ 9 ] propuso el Modelo Probabilístico de Difusión con Eliminación de Ruido (DDPM) , que mejora el método anterior mediante inferencia variacional . El artículo estuvo acompañado de un paquete de software escrito en TensorFlow publicado en GitHub. [ 10 ] Fue reimplementado en PyTorch por lucidrains. [ 11 ] [ 12 ]

El 20 de diciembre de 2021, el artículo sobre LDM se publicó en arXiv, [ 13 ] y los repositorios de Stable Diffusion [ 14 ] y LDM [ 15 ] se publicaron en GitHub. Sin embargo, permanecieron prácticamente iguales. La información sustancial sobre Stable Diffusion v1 se añadió a GitHub recién el 10 de agosto de 2022. [ 16 ]

Todas las versiones de Stable Diffusion (SD), desde la 1.1 hasta la XL, eran implementaciones particulares de la arquitectura LDM.

SD 1.1 a 1.4 fueron lanzados por CompVis en agosto de 2022. No existe una "versión 1.0". SD 1.1 fue un LDM entrenado en el conjunto de datos laion2B-en. SD 1.1 fue ajustado a 1.2 en imágenes más estéticas. SD 1.2 fue ajustado a 1.3, 1.4 y 1.5, con una reducción del 10% en el condicionamiento de texto, para mejorar la guía sin clasificador. [ 17 ] [ 18 ] SD 1.5 fue lanzado por RunwayML en octubre de 2022. [ 18 ]

Arquitectura

Si bien el LDM puede funcionar para generar datos arbitrarios condicionados a otros datos arbitrarios, para mayor concreción, describimos su funcionamiento en la generación condicional de texto a imagen.

LDM consta de un autoencoder variacional (VAE), una U-Net modificada y un codificador de texto.

El codificador VAE comprime la imagen del espacio de píxeles a un espacio latente de menor dimensión , capturando un significado semántico más fundamental de la imagen. Se aplica ruido gaussiano iterativamente a la representación latente comprimida durante la difusión hacia adelante. El bloque U-Net, compuesto por una red neuronal ResNet , elimina el ruido de la salida de la difusión hacia adelante y la retroalimenta para obtener una representación latente. Finalmente, el decodificador VAE genera la imagen final convirtiendo la representación de nuevo al espacio de píxeles. [ 4 ]

El paso de eliminación de ruido puede condicionarse a una cadena de texto, una imagen u otra modalidad. Los datos de condicionamiento codificados se exponen a las U-Nets de eliminación de ruido mediante un mecanismo de atención cruzada . [ 4 ] Para el condicionamiento en texto, se utiliza un codificador de texto CLIP ViT-L/14 preentrenado fijo para transformar las indicaciones de texto a un espacio de incrustación. [ 3 ]

Autoencoder variacional

Para comprimir los datos de imagen, primero se entrena un autoencoder variacional (VAE) con un conjunto de datos de imágenes. El codificador del VAE recibe una imagen como entrada y genera una representación latente de menor dimensión de la misma. Esta representación latente se utiliza como entrada para la red U-Net. Una vez entrenado el modelo, el codificador se utiliza para codificar las imágenes en representaciones latentes, y el decodificador se utiliza para decodificar dichas representaciones latentes y convertirlas de nuevo en imágenes.

Sea el codificador y el decodificador del VAEmi,D{\displaystyle E,D}.

Para codificar una imagen RGB, sus tres canales se dividen por el valor máximo, lo que da como resultado un tensor.incógnita{\displaystyle x}de forma(3,512,512){\displaystyle (3,512,512)}con todas las entradas dentro del rango[0,1]{\displaystyle [0,1]}. El vector codificado es0,18215×mi(2incógnita1){\displaystyle 0.18215\times E(2x-1)}, con forma(4,64,64){\displaystyle (4,64,64)}, donde 0,18215 es un hiperparámetro que los autores originales eligieron para blanquear aproximadamente el vector codificado a una varianza aproximadamente unitaria. Por el contrario, dado un tensor latentey{\displaystyle y}, la imagen decodificada es(D(y/0,18125)+1)/2{\displaystyle (D(y/0.18125)+1)/2}, luego recortado al rango[0,1]{\displaystyle [0,1]}. [ 19 ] [ 20 ]

En la versión implementada, [ 3 ] : ldm/models/autoencoder.py el codificador es una red neuronal convolucional (CNN) con un único mecanismo de autoatención cerca del final. Toma un tensor de forma(3,H,W){\displaystyle (3,H,W)}y genera un tensor de forma(8,H/8,W/8){\displaystyle (8,H/8,W/8)}, siendo la concatenación de la media y la varianza predichas del vector latente, cada una de forma(4,H/8,W/8){\displaystyle (4,H/8,W/8)}La varianza se utiliza en el entrenamiento, pero después del entrenamiento, normalmente solo se toma la media y se descarta la varianza.

El decodificador también es una CNN con un único mecanismo de autoatención cerca del final. Toma un tensor de forma(4,H/8,W/8){\displaystyle (4,H/8,W/8)}y genera un tensor de forma(3,H,W){\displaystyle (3,H,W)}.

U-Net

La arquitectura U-Net acepta los siguientes tipos de entradas:

  • Una matriz de imágenes latentes , producida por el codificador VAE. Tiene dimensiones(canal,ancho,altura){\displaystyle ({\text{canal}},{\text{ancho}},{\text{alto}})}. Normalmente,(canal,ancho,altura)=(4,64,64){\displaystyle ({\text{canal}},{\text{ancho}},{\text{alto}})=(4,64,64)}.
  • Un vector de incrustación de paso de tiempo , que le indica a la red neuronal principal cuánto ruido hay en la imagen. Por ejemplo, una incrustación de paso de tiempo.t=0{\displaystyle t=0}indicaría que la imagen de entrada ya está libre de ruido, mientras quet=100{\displaystyle t=100}eso significaría que hay mucho ruido.
  • Una secuencia de vectores de incrustación de modalidad , que indica a la red neuronal principal condiciones adicionales para la eliminación de ruido. Por ejemplo, en la generación de imágenes a partir de texto, el texto se divide en una secuencia de tokens, que luego se codifica mediante un codificador de texto, como un codificador CLIP , antes de introducirlo en la red neuronal principal. Otro ejemplo es que una imagen de entrada puede ser procesada por un Vision Transformer en una secuencia de vectores, que luego se puede usar para condicionar la red neuronal principal para tareas como generar una imagen con el mismo estilo.

Cada iteración a través de la red U-Net genera un vector de ruido predicho. Este vector se reduce y se resta de la matriz de la imagen latente, lo que da como resultado una imagen latente con un nivel de ruido ligeramente menor. El proceso de eliminación de ruido se repite según un esquema predefinido ("esquema de ruido"), y el resultado del último paso es procesado por el decodificador VAE para obtener la imagen final.

Un único mecanismo de atención cruzada tal como aparece en un modelo de lenguaje Transformer estándar.
Diagrama de bloques para la arquitectura completa de Transformer. La pila de la derecha es un decodificador Transformer estándar anterior a LN, que es esencialmente el mismo que el SpatialTransformer.

De forma similar a la U-Net estándar , la arquitectura U-Net utilizada en SD 1.5 se compone esencialmente de capas de reducción de escala seguidas de capas de aumento de escala. Sin embargo, la arquitectura U-Net cuenta con módulos adicionales que le permiten gestionar la incrustación. A modo de ejemplo, describimos una única capa de reducción de escala en la arquitectura:

  • La matriz latente y la incrustación temporal son procesadas por un ResBlock:
    • La matriz latente es procesada por una capa convolucional .
    • El vector de incrustación temporal es procesado por una red neuronal de alimentación directa de una sola capa y luego se agrega a la matriz anterior (difusión a todos los píxeles).
    • Esto se procesa mediante otra capa convolucional y luego mediante otra incrustación temporal.
  • La matriz latente y la secuencia del vector de incrustación son procesadas por un SpatialTransformer, que es esencialmente un decodificador Transformer pre-LN estándar sin enmascaramiento causal.
    • En los bloques de atención cruzada, la matriz latente en sí misma sirve como secuencia de consulta, un vector de consulta por píxel. Por ejemplo, si, en esta capa de la U-Net, la matriz latente tiene dimensiones(128,32,32){\displaystyle (128,32,32)}, entonces la secuencia de consulta tiene1024{\displaystyle 1024}vectores, cada uno de los cuales tiene128{\displaystyle 128}dimensiones. La secuencia del vector de incrustación sirve tanto como secuencia clave como secuencia de valor.
    • Cuando no se introduce ninguna secuencia de vector de incrustación, un bloque de atención cruzada pasa por defecto a la autoatención, donde la matriz latente sirve como consulta, clave y valor. [ 21 ] : línea 251

En pseudocódigo,

def ResBlock ( x , time , residual_channels ): x_in = x time_embedding = feedforward_network ( time ) x = concatenate ( x , residual_channels ) x = conv_layer_1 ( activate ( normalize_1 ( x ))) + time_embedding x = conv_layer_2 ( dropout ( activate ( normalize_2 ( x )))) return x_in + xdef SpatialTransformer ( x , cond ): x_in = x x = normalize ( x ) x = proj_in ( x ) x = cross_attention ( x , cond ) x = proj_out ( x ) return x_in + xdef unet ( x , time , cond ) : residual_channels = [ ] for resblock , spatialtransformer in downscaling_layers : x = resblock ( x , time ) residual_channels.append ( x ) x = spatialtransformer ( x , cond )x = middle_layer.resblock_1 ( x , tiempo ) x = middle_layer.spatialtransformer ( x , tiempo ) x = middle_layer.resblock_2 ( x , tiempo )para resblock , spatialtransformer en upscaling_layers : residual = residual_channels.pop ( ) x = resblock ( concatenate ( x , residual ) , time ) x = spatialtransformer ( x , cond )devolver x

La arquitectura detallada se puede encontrar en. [ 22 ] [ 23 ]

Entrenamiento e inferencia

El modelo LDM se entrena utilizando una cadena de Markov para añadir ruido gradualmente a las imágenes de entrenamiento. A continuación, el modelo se entrena para revertir este proceso, comenzando con una imagen ruidosa y eliminando gradualmente el ruido hasta recuperar la imagen original. Más específicamente, el proceso de entrenamiento se puede describir de la siguiente manera:

  • Proceso de difusión hacia adelante: Dada una imagen realincógnita0{\displaystyle x_{0}}, una secuencia de variables latentesincógnita1:T{\displaystyle x_{1:T}}Se generan añadiendo gradualmente ruido gaussiano a la imagen, según un "programa de ruido" predeterminado.
  • Proceso de difusión inversa: Partiendo de una muestra de ruido gaussianoincógnitaT{\displaystyle x_{T}}El modelo aprende a predecir el ruido añadido en cada paso, con el fin de revertir el proceso de difusión y obtener una reconstrucción de la imagen original.incógnita0{\displaystyle x_{0}}.

El modelo se entrena para minimizar la diferencia entre el ruido predicho y el ruido real añadido en cada paso. Esto se suele hacer utilizando una función de pérdida de error cuadrático medio (MSE).

Una vez entrenado el modelo, se puede utilizar para generar nuevas imágenes simplemente aplicando el proceso de difusión inversa a partir de una muestra de ruido aleatorio. El modelo elimina gradualmente el ruido de la muestra, guiado por la distribución de ruido aprendida, hasta generar la imagen final.

Consulte la página del modelo de difusión para obtener más detalles.

Véase también

Referencias

  1. Rombach, Robin; Blattmann, Andreas; Lorenz, Dominik; Esser, Patrick; Ommer, Björn (2022). Síntesis de imágenes de alta resolución con modelos de difusión latente . Conferencia IEEE/CVF sobre visión por computadora y reconocimiento de patrones (CVPR) 2022. págs. 10684–10695 . 
  2. "Inicio" . Computer Vision & Learning Group . Consultado el 5 de septiembre de 2024 .
  3. 1 2 3 "Repositorio de difusión estable en GitHub" . CompVis - Grupo de investigación en visión artificial y aprendizaje, LMU Múnich. 17 de septiembre de 2022. Archivado del original el 18 de enero de 2023. Recuperado el 17 de septiembre de 2022 .
  4. 1 2 3 Alammar, Jay. "The Illustrated Stable Diffusion" . jalammar.github.io . Archivado del original el 1 de noviembre de 2022. Recuperado el 31 de octubre de 2022 .
  5. Sohl-Dickstein, Jascha; Weiss, Eric; Maheswaranathan, Niru; Ganguli, Surya (2015-06-01). "Aprendizaje profundo no supervisado utilizando termodinámica de no equilibrio" (PDF) . Actas de la 32.ª Conferencia Internacional sobre Aprendizaje Automático . 37. PMLR: 2256–2265 . arXiv : 1503.03585 .
  6. Sohl-Dickstein, Jascha (1 de septiembre de 2024). "Sohl-Dickstein/Modelos-probabilísticos-de-difusión" . GitHub . Consultado el 7 de septiembre de 2024 .
  7. "ermongroup/ncsn" . ermongroup. 2019. Consultado el 7 de septiembre de 2024 .
  8. Song, Yang; Ermon, Stefano (2019). "Modelado generativo mediante la estimación de gradientes de la distribución de datos" . Advances in Neural Information Processing Systems . 32. Curran Associates, Inc. arXiv : 1907.05600 .
  9. Ho, Jonathan; Jain, Ajay; Abbeel, Pieter (2020). "Modelos probabilísticos de difusión con eliminación de ruido" . Advances in Neural Information Processing Systems . 33. Curran Associates, Inc.: 6840–6851 .
  10. ^ Ho, Jonathan (20 de junio de 2020). "hojonathanho/difusión" . GitHub . Consultado el 7 de septiembre de 2024 .
  11. Wang, Phil (2024-09-07). "lucidrains/denoising-diffusion-pytorch" . GitHub . Recuperado el 2024-09-07 .
  12. "El modelo de difusión anotado" . huggingface.co . Consultado el 7 de septiembre de 2024 .
  13. Rombach, Robin; Blattmann, Andreas; Lorenz, Dominik; Esser, Patricio; Ommer, Björn (20 de diciembre de 2021). "Síntesis de imágenes de alta resolución con modelos de difusión latente". arXiv : 2112.10752 [ cs.CV ].
  14. "Actualizar README.md · CompVis/stable-diffusion@17e64e3" . GitHub . Consultado el 07-09-2024 .
  15. "Actualizar README.md · CompVis/latent-diffusion@17e64e3" . GitHub . Consultado el 07-09-2024 .
  16. "difusión estable · CompVis/stable-diffusion@2ff270f" . GitHub . Consultado el 07-09-2024 .
  17. "CompVis (CompVis)" . huggingface.co . 23-08-2023 . Consultado el 06-03-2024 .
  18. 1 2 "runwayml/stable-diffusion-v1-5 · Hugging Face" . huggingface.co . Archivado del original el 21 de septiembre de 2023. Recuperado el 17 de agosto de 2023 .
  19. "Explicación del factor 0,18215 en textual_inversion? · Problema #437 · huggingface/diffusers" . GitHub . Consultado el 19-09-2024 .
  20. "diffusion-nbs/Stable Diffusion Deep Dive.ipynb en master · fastai/diffusion-nbs" . GitHub . Consultado el 19 de septiembre de 2024 .
  21. "latent-diffusion/ldm/modules/attention.py en main · CompVis/latent-diffusion" . GitHub . Consultado el 9 de septiembre de 2024 .
  22. "U-Net para difusión estable" . U-Net para difusión estable . Consultado el 31 de agosto de 2024 .
  23. "Transformador para U-Net de difusión estable" . Transformador para U-Net de difusión estable . Consultado el 7 de septiembre de 2024 .

Lecturas adicionales

  • Wang, Phil (2024-09-07). "lucidrains/denoising-diffusion-pytorch" . GitHub . Recuperado el 2024-09-07 .
  • "El modelo de difusión anotado" . huggingface.co . Consultado el 7 de septiembre de 2024 .
  • "U-Net para difusión estable" . U-Net para difusión estable . Consultado el 31 de agosto de 2024 .
  • "Transformador para U-Net de difusión estable" . Transformador para U-Net de difusión estable . Consultado el 7 de septiembre de 2024 .
Obtenido de " https://en.wikipedia.org/w/index.php?title=Latent_diffusion_model&oldid=1363317667 "