Cómo generar una imagen a partir de texto usando difusión estable en Python

Estás leyendo la publicación: Cómo generar una imagen a partir de texto usando difusión estable en Python

En visión artificial, la síntesis de imágenes es uno de los desarrollos recientes más espectaculares, pero también uno de los de mayor demanda computacional. La ampliación de los modelos basados ​​en la probabilidad ahora domina la síntesis de alta resolución de entornos naturales complicados. Se ha demostrado que los resultados alentadores de las GAN, por otro lado, se limitan principalmente a datos con una variabilidad relativamente limitada, ya que su técnica de aprendizaje antagónico no se escala fácilmente para modelar distribuciones multimodales complicadas. Recientemente, se ha demostrado que los modelos de difusión, que se crean a partir de una jerarquía de codificadores automáticos que eliminan el ruido, generan resultados sobresalientes en la síntesis de imágenes. Este artículo ayudará a comprender un modelo de difusión utilizado para la síntesis de imágenes. Los siguientes temas deben ser cubiertos.

Tabla de contenido

  1. Acerca de los modelos de difusión
  2. La difusión latente
  3. Generación de imágenes a partir de texto usando Stable Diffusion

Acerca de los modelos de difusión

Los modelos de difusión son modelos generativos, lo que significa que crean datos comparables a los datos en los que fueron entrenados. Los modelos de difusión funcionan fundamentalmente corrompiendo los datos de entrenamiento añadiendo sucesivamente ruido gaussiano y luego aprendiendo a recuperar los datos invirtiendo este proceso de ruido.

Los modelos de difusión son modelos probabilísticos que se utilizan para aprender una distribución de datos eliminando gradualmente el ruido de una variable distribuida normalmente, lo que equivale a aprender el proceso opuesto de una cadena de Markov de longitud fija. Los modelos de síntesis de imágenes más eficaces se basan en una forma ponderada del límite inferior variacional de la distribución, que es similar a la coincidencia de puntuación de eliminación de ruido. Estos modelos pueden considerarse como una serie de codificadores automáticos de eliminación de ruido que han sido entrenados para predecir una variación eliminada de ruido de su entrada.

La difusión latente

Los modelos de difusión latente son modelos de difusión que se entrenan en un espacio latente. Un espacio latente es un espacio abstracto multidimensional que almacena una representación interna significativa de eventos presenciados externamente. En el espacio latente, las muestras que son comparables en el mundo exterior se colocan cerca unas de otras. Su objetivo principal es convertir datos sin procesar, como valores de píxeles de imágenes, en una representación interna adecuada o un vector de características a partir del cual el subsistema de aprendizaje, a menudo un clasificador, puede reconocer o categorizar patrones en la entrada.

🔥 Recomendado:  Cómo ganar dinero haciendo vlogging: su guía definitiva para empezar

El autocodificador variacional en los modelos de difusión latente maximiza el ELBO (límite inferior de la evidencia). Calcular y maximizar directamente la probabilidad de la variable latente es un desafío, ya que requiere integrar todas las variables latentes, lo que es intratable para modelos grandes, o acceder a un codificador latente de verdad. El ELBO, por otro lado, es un límite inferior de la evidencia. En esta situación, la evidencia se expresa como la probabilidad logarítmica de los datos observados. Entonces, maximizar el ELBO se convierte en un objetivo indirecto para optimizar un modelo de variable latente; en el mejor de los casos, cuando el ELBO se parametriza poderosamente y se optimiza adecuadamente, se vuelve absolutamente idéntico a la evidencia.

Debido a que el codificador optimiza lo mejor entre un conjunto de distribuciones posteriores probables especificadas por los parámetros, esta técnica es variacional. Se denomina codificador automático porque es similar a un modelo de codificador automático estándar, en el que se enseña a los datos de entrada a predecirse a sí mismos después de pasar por una fase intermedia de representación de cuello de botella.

La ecuación matemática del codificador automático calcula dos valores: el primer término de la ecuación estima la probabilidad de reconstrucción del decodificador a partir de la distribución variacional. Esto garantiza que la distribución aprendida modele latentes efectivas a partir de las cuales se puedan recrear los datos originales. La segunda parte de la ecuación compara la distribución variacional aprendida con un conocimiento previo sobre las variables latentes. Al reducir este componente, se anima al codificador a aprender una distribución en lugar de colapsar en una función delta de Dirac. Aumentar el ELBO es similar a aumentar su primer término y disminuir su segundo término.

Generación de imágenes a partir de texto usando Stable Diffusion

En este artículo, utilizaremos el modelo perteneciente a Stable Difusion V1 para generar algunas imágenes a partir de la descripción de texto de la imagen. Stable Diffusion es un modelo de difusión latente de texto a imagen desarrollado por investigadores e ingenieros de CompVis, Stability AI y LAION. Fue entrenado utilizando imágenes de 512 × 512 de la base de datos LAION-5B. Para condicionar el modelo en las indicaciones de texto, este modelo emplea un codificador de texto CLIP ViT-L/14 congelado. El modelo es bastante liviano, con un codificador de texto 860M UNet y 123M, y funciona en una GPU con al menos 10 GB de VRAM.

🔥 Recomendado:  One vs One, One vs Rest con SVM para clasificación multiclase

Si bien los modelos generadores de imágenes tienen grandes capacidades, también pueden reforzar o agravar los prejuicios sociales. Stable Diffusion v1 se entrenó en subconjuntos de LAION-2B(en), que contiene imágenes grandes con descripciones en inglés. Es probable que los textos y fotografías de grupos y culturas que hablan diferentes idiomas estén subrepresentados. Esto tiene un impacto en el resultado general del modelo porque las culturas blanca y occidental se eligen con frecuencia como predeterminadas. Además, la capacidad del modelo para producir material con indicaciones que no están en inglés es notablemente menor que con indicaciones en inglés.

Instalando las dependencias

!pip instalar difusores==0.3.0 !pip instalar transformadores scipy ftfy !pip instalar ipywidgets==7.7.2

El usuario también debe aceptar la licencia del modelo antes de descargar o utilizar las pesas. Visitando la tarjeta del modelo y leyendo la licencia, y marcando la casilla de verificación si está de acuerdo, el usuario podría acceder al modelo pre-entrenado. El usuario debe ser un usuario registrado en Hugging Face Hub y también debe usar un token de acceso para que el código funcione.

de huggingface_hub importar notebook_login notebook_login()

Importando las dependencias

importar antorcha de antorcha importar autocast de difusores importar StableDiffusionPipeline de PIL importar imagen

Creando la canalización

Antes de crear la canalización, asegúrese de que la GPU esté conectada a la computadora portátil. Si usa la computadora portátil Colab, use estas líneas de código.

!nvidia-smi

StableDiffusionPipeline es una tubería de inferencia completa que se puede usar para producir imágenes a partir de texto usando solo unas pocas líneas de código.

experimental_pipe = StableDiffusionPipeline.from_pretrained(“CompVis/stable-diffusion-v1-4″, revision=”fp16”, torch_dtype=torch.float16, use_auth_token=True)

Inicialmente, cargamos los pesos preentrenados del modelo para todos los componentes. Proporcionamos una revisión particular, torch_dtype, y usamos el token de autenticación para la función previamente entrenada además de la identificación del modelo “CompVis/stable-diffusion-v1-4”, se requiere “Use_auth_token” para confirmar que ha aceptado el modelo. licencia. Para garantizar que cualquier Google Colab gratuito pueda ejecutar Stable Diffusion, cargamos los pesos de la rama de precisión media “fp16” e informamos a los difusores que esperen pesos en precisión float16 al pasar el tipo de datos de la antorcha como el flotador. Para obtener inferencias más rápidas, mueva la canalización al acelerador de GPU.

🔥 Recomendado:  ¿Cómo hacer que una serie de tiempo sea estacionaria?

tubo_experimental = tubo_experimental.to(“cuda”)

Generando una imagen

description_1 = “una fotografía de un caballo en la luna” con autocast(“cuda”): image_1 = experimental_pipe(description_1).images[0]
imagen_1

Como pudimos observar, el modelo hizo un trabajo bastante bueno al generar la imagen. Tenemos el caballo que está en la luna y también pudimos ver la tierra desde la luna y los detalles como reflejos, negros, exposición y otros también están bien.

Probemos una descripción compleja con más detalles sobre la imagen.

description_2 = “perro sentado en un campo de hojas de otoño” con autocast(“cuda”): image_2 = experimental_pipe(description_2).images[0]

Formemos una cuadrícula de 3 columnas y 1 fila para mostrar más imágenes.

num_images = 3 descripción = [description_2]*num_images with autocast(“cuda”): experiment_image = experimental_pipe(description).images grid = grids(experiment_image, rows=1, cols=3) grid

Conclusión

La síntesis de imágenes es una parte espectacular del campo de visión por computadora de la inteligencia artificial, y con el crecimiento de los codificadores automáticos y los métodos probabilísticos, estas síntesis están mostrando resultados sorprendentes. La difusión estable es uno de los increíbles modelos de difusión que puede generar una imagen bien definida a partir de una descripción de texto. Con este artículo, hemos entendido el modelo de difusión latente y sus implementaciones.

Referencias