La generación automática de imágenes es una de las tareas que actualmente ha sido potenciada por generadores de imágenes potenciados por Inteligencia Artificial (AI).
Estos últimos días se ha estado hablando mucho sobre StableDiffusion, que es un modelo generador de imágenes como varios que existen actualmente, y que no tiene nada que envidiar a los demás. La empresa que la impulsa es Stability.Ai, que tiene en su haber varios proyectos Open Source que enfrentan a gigantes empresariales propietarios de modelos, como Google, OpenAI, Microsoft, etc; y es en este punto en donde StableDiffusion ingresa a «democratizar la síntesis de imágenes de alta-resolución», como lo dice su investigación, con este modelo Open Source al alcance de la comunidad. Hace apenas 4 meses DALL-E 2 sorprendía al mundo con una generación de calidad impresionante en creatividad y bajo un modelo de pago, aunque con ciertas restricciones en cuanto a las libertades acerca de qué temática no era permitida en la generación de imágenes.
Pero, ¿en qué se basa el modelo de StableDiffusion? Según el paper de investigación «Síntesis de Imágenes de Alta-Resolución con Modelos de Difusión Latente«:
«Para permitir el entrenamiento de Modelos de Difusión (DM) en recursos computacionales limitados manteniendo calidad y flexibilidad, los aplicamos en el espacio latente de poderosos autoencoders pre-entrenados… Introduciendo capas de cross-attention en la arquitectura del modelo, los DMs se convierten en poderosos y flexibles generadores para entradas de texto, y la síntesis se hace posible de una manera convolucional.»
High-Resolution Image Synthesis with Latent Diffusion Models
Analizando brevemente el documento, podemos ver que el corazón de StableDIffusion son los Modelos de Difusión, de lo cual extenderé un analisis teórico-práctico en una futura entrada de este blog, aunque se explica que el modelo también puede interpretarse como una VQGAN, con lo cual ingresa en la categoría de modelos generativos.
A continuación he puesto una tabla con algunos de los modelos de síntesis de imágenes más remarcables de los cuales se ha estado hablando últimamente
Empresa | Modelo | Categoría | Paper |
---|---|---|---|
Stability.Ai | Stable Diffusion | Latent DM / VQGAN | 📓 |
Midjourney | Midjourney | VQGAN | 📓 |
Imagen | DM | 📓 | |
Parti | VQGAN | 📓 | |
Meta | Make-A-Scena | VQGAN | 📓 |
Microsoft | Nuwa Infinity | DM / VQGAN | 📓 |
OpenAI | DALL-E | 📓 | |
OpenAI | DALL-E 2 | DM | 📓 |
StableDifussion es particularmente sorprendente debido a que propone una versión de modelo generativo abierto para la generación automática de imágenes, a diferencia de los otros modelos pertenecientes a empresas propietarias de los datasets con los cuales se han entrenado estos modelos. Stability.Ai ha creado un dataset enorme de millones de imágenes (LAION), que ha sido utilizado en el modelo de StableDiffusion, de una forma algo similar a Google Imagen. Actualmente está abierto para su utilización en https://beta.dreamstudio.ai/dream, aunque ya incluye una membresía de £10 por aproximadamente 1000 generaciones de imágenes, lo cual sigue abriendo las puertas a la creatividad para muchos.
Algunos sitios web ya han empezado a utilizar el modelo de StableDiffusion, en experimentación o de manera comercial, lo cual hace que me pregunte cuál es el valor que va a tomar esta tecnología en manos de la sociedad. Por ejemplo: https://replicate.com/stability-ai/stable-diffusion
¿Pero cómo es que están apareciendo tan rápidamente implementaciones de StableDiffusion?
La buena noticia es que este modelo es Open Source, por lo que cualquiera podrá acceder al modelo de generación de imágenes, descargarlo y utilizarlo desde su repositorio en GitHub: https://github.com/CompVis/stable-diffusion. Sin embargo, estos modelos son bastante grandes y no todo el mundo tiene la infraestructura para realizar la generación de imágenes en casa. Están pensados para organizaciones e investigación, pero alguien con un computador con un buen procesador y tarjeta gráfica tendrá la oportunidad de utilizarlo.
El fotorealismo y la creatividad de este modelo son impresionantes y pueden ser un motivo para que se generalice el uso de estos modelos generativos, pero este mismo beneficio puede volverse un problema ya que estas imágenes sintetizadas podrían fácilmente confundirse con imágenes reales, y entramos en un problema ético de copyrights y el respeto del derecho al prestigio y buen nombre de figuras públicas.
Al momento de la creación de este post, DreamStudio no está generando imágenes tan fotorealistas como en las primeras pruebas, pero eso no impide al modelo ejecutado en algún otro servidor poder hacerlo dado el dataset con el que fue entrenado.
Este puede ser el punto de inicio de una nuevas aplicaciones no solamente en generación de imágenes, sino en generación de video; y, de esta manera, la AI se estaría aplicando en otros campos que revolucionarán la industria como la conocemos.
¿Cómo instalar localmente StableDifussion?
He probado la instalación del modelo de StableDiffusion en mi PC con Ubuntu 22.04, 16 GB de RAM, y una tarjeta de video ASUS ROG Strix (NVIDIA GeForce RTX 3060), y ha resultado bastante sencillo el proceso siguiendo las indicaciones dadas en el repositorio de GitHub. Los resultados son aceptables, pero si es notoria la necesidad de una infraestructura de hardware medianamente potente para este tipo de tareas.
Requisitos:
- Python 3.9+
- Anaconda o Miniconda
- Tarjeta de video NVIDIA (de gama media a alta)
- CUDA 11+
- Espacio de disco duro, aproximadamente 20 GB
$ git clone https://github.com/CompVis/stable-diffusion.git
$ cd stable-diffusion
$ conda env create -f environment.yaml
$ conda activate ldm
Los comandos previos realizan la instalación local de Stable Diffusion. Con el siguiente comando procedemos a la creación de una imagen utilizando el modelo generativo, durante la ejecución de este comando se van a descargar varios archivos de modelo de algunos GB de tamaño, por lo cual es necesario un poco de paciencia para empezar con la generación de imágenes:
python scripts/txt2img.py --prompt "TEXT_TO_GENERATE_IMAGE" --plms --ckpt sd-v1-4.ckpt --skip_grid --n_samples 1
Son varios parámetros opcionales para personalizar la síntesis:
Parámetro | Descripción |
---|---|
--ckpt | Ruta del modelo a usar. Default «models/ldm/stable-diffusion-v1/model.ckpt» |
--ddim_steps | Valor entero del número de pasos de muestreo para el proceso de Difusión (más alto es mejor calidad). Default 50 |
--from-file | La ruta de un archivo con los «prompts» que se usarán en la generación |
--H | Valor entero de la altura en píxeles de la imagen (height). Default 512 |
--n_iter | Valor entero del número de bucles de muestreo. Default 2 |
--n_samples | Valor entero del número de muestras a producir. Default 3 |
--outdir | Carpeta de salida de la imagen generada. Default «outputs/txt2img-samples» |
--prompt | El texto que se interpretará para generar la imagen |
--scale | Valor decimal de la escala a usar. Default 7.5 |
--seed | Valor entero de siembra para la generación aleatoria. Default 42 |
--skip_grid | Omite la creación de una imagen combinada |
--W | Valor entero del ancho en píxeles de la imagen (width). Default 512 |
Conclusión
Estos meses hemos visto varios modelos de generación de imágenes por Inteligencia Articial, con resultados asombrosos como los de DALL-E 2, y con la propuesta democratizadora como la de Stable Diffusion que, en cuestión de pocas días de estar disponible, ha causado revuelo y espectativas que estoy seguro seguirán asombrando los meses y años por venir.
El dilema ético se plantea, como en todas las tecnologías emergentes, frente a la manera cómo la humanidad vamos a utilizarla, y qué repercusiones sociales tendrá de cara a los profesionales del arte.
Pero no solo este campo de Computer Vision es el que está en apogeo actualmente, también estimo que nos estaremos asombrando con los logros de la AI en campos como el Natural Language Processing.