paint-brush
Creando tu propia IA Generador de imágenes con difusión latentepor@lanolinoil
3,828 lecturas
3,828 lecturas

Creando tu propia IA Generador de imágenes con difusión latente

por Lanolinoil9m2022/08/16
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

Ejecute sus propias indicaciones de texto a imagen con CUDA, un montón de espacio en disco y una cantidad increíble de memoria. Necesita un sistema Linux con una tarjeta habilitada para CUDA para que esto funcione hasta el final. Hay 2 técnicas de generación de imágenes posibles con Latent Diffusion. Instalaremos y echaremos un vistazo a los modelos txt-2img y txt2-img que configuraremos. El modelo RAD utiliza una base de datos de imágenes y densidades y la amplía a una referencia configurable. Esto parece significar que es menos bueno como propósito general, pero podría usarse con un conjunto de entrenamiento específico.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Creando tu propia IA Generador de imágenes con difusión latente
Lanolinoil HackerNoon profile picture

Cerveza casera DALL-E

En esta publicación, veremos cómo configurarlo para ejecutar su propio generador de imágenes de IA. Necesita un sistema Linux con una tarjeta habilitada para CUDA para que esto funcione hasta el final. Obtuve el script básico txt-2img funcionando en Windows. Desafortunadamente, para los modelos de difusión de recuperación aumentada lanzados en julio, necesita scann para indexar el conjunto de datos de imágenes abiertas, que solo está disponible en Linux. WSL funcionó bien para mí.


perro león - modelo rdm

perro león - modelo rdm

perro león - modelo rdm

perro león - modelo rdm

Esto es más o menos lo que deduzco que necesitarás:

  • Linux (WSL bien)
  • 11.3 Gráficos CUDA
  • = 32GB RAM

  • 50 GB de espacio en disco (~30 GB sin imágenes abiertas)
  • Tarjeta de la serie 3xxx (Solo estoy adivinando aquí. Todo esto se está haciendo con un 3090 FE)

Difusión latente

Me topé por casualidad con el repositorio de difusión latente mientras navegaba por los subreddits de IA. Algunas publicaciones lo mencionaron y no sabía qué era, así que busqué en Google.


No soy un científico informático, matemático o cualquiera de las cosas que se requieren para entender realmente lo que está pasando aquí. El documento sobre los nuevos modelos RAD es comprensible e interesante, pero aún no he investigado mucho más allá de eso.

imagen-20220807154208076

Texto a imagen frente a RAD

Hay 2 técnicas de generación de imágenes posibles con Latent Diffusion. Instalaremos y echaremos un vistazo a ambos.


Creo que el modelo txt2-img que configuraremos primero es a lo que estamos acostumbrados con otras herramientas de generación de imágenes en línea: crea un clip de imagen de muy baja resolución que se considera una buena combinación rápida y elimina el ruido y lo mejora.


El modelo RAD utiliza una base de datos configurable de imágenes como referencia Y hace la difusión como estamos acostumbrados. Esto parece significar que es menos bueno como generador de propósito general, pero podría usarse con un conjunto de entrenamiento específico que podría crear de manera factible. Intentaré esto en el futuro.


RAD también genera imágenes de 768X768, lo cual es bastante impresionante.

melón gigante en la playa

Melón gigante en la playa


Instrucciones de instalación

Texto a imagen

  • Asegúrese de tener CUDA 11.3 instalado y conda funcione en su shell. Puedes conseguir Conda aquí

  • (Re)instale Pytorch ahora , para que no termine en un infierno de dependencia más tarde. Hice esto a través de pip pero conda también puede funcionar.

  • Clone el repositorio en una unidad con mucho espacio libre

  • cd en el repositorio y ejecuta:

     conda env create -f environment.yaml conda activate ldm

    Esto configurará el entorno inicial. Si obtiene errores con Pytorch más adelante y necesita volver a instalarlo, vuelva a environment.yaml y vuelva a instalarlo con las versiones de paquete correctas.

  • Descargue el modelo y estará listo para comenzar, siempre que las dependencias de su antorcha estén configuradas correctamente.

 mkdir -p models/ldm/text2img-large/ wget -O models/ldm/text2img-large/model.ckpt https://ommer-lab.com/files/latent-diffusion/nitro/txt2img-f8-large/model.ckpt

Debería poder muestrear imágenes ahora usando:

 python scripts/txt2img.py --prompt "my cool image"

Asegúrese de ver las opciones que puede configurar en el LÉAME.


Puede usar este script bash para facilitar la ejecución de todo desde un shell. Puede incluir esto en su archivo ~/.bashrc y volver a abrir su shell. Asegúrese de cambiar las 3 rutas para que se ajusten a sus necesidades. Veremos PLMS más tarde.


 function txt2img() { if [ $# -eq 0 ]; then echo "Usage: diffuse '[prompt]' [--plms]" exit 1 fi cd /mnt/c/diffusion/latent-diffusion; conda activate ldm; if [ $2 = '--plms' ]; then python scripts/txt2img.py --prompt $1 --outdir '/mnt/g/My Drive/AI Image Tests/text2img' --plms --n_iter 4 --ddim_eta 0.0 else python scripts/txt2img.py --prompt $1 --outdir '/mnt/g/My Drive/AI Image Tests/text2img' --n_iter 4 --ddim_eta 0.0 fi }


Las imágenes son 512X512 por defecto. Puede usar This Jupiter Notebook para mejorar las imágenes con resultados bastante buenos.

Solución de problemas

  • Si obtiene errores de memoria CUDA al ejecutar comandos, intente disminuir el tamaño del lote. Use htop para solucionar problemas/ver el uso de la memoria.
  • Si usa WSL, asegúrese de que toda su RAM esté disponible para Linux.
  • Si obtiene errores relacionados con la antorcha, probablemente necesite reinstalar Pytorch. Es probable que esto cause otros problemas con los paquetes. Verifique environment.yaml e instale manualmente las versiones correctas del paquete con pip y/o conda (hice ambas cosas y no estoy seguro de cuál hizo que todo funcionara)

imagen-20220807155754576

imagen-20220807155807229


RDM

Puede leer más sobre RDM aquí . Como se dijo antes, esencialmente combina una base de datos de imágenes con descripciones de Clip con el proceso de difusión existente, por lo que entiendo. Esta parte tarda mucho más en ponerse en marcha.


Tenga en cuenta que este modelo, especialmente cuando se usa el entrenamiento de imágenes abiertas, es mejor para recrear cosas reales y no parece muy bueno (todavía) y para crear las imágenes extrañas a las que estamos acostumbrados a partir de los modelos de difusión.


  • Haz que el modelo de texto a imagen funcione primero

  • Instale nuevos paquetes y descargue el modelo de entrenamiento.

     pip install transformers==4.19.2 scann kornia==0.6.4 torchmetrics==0.6.0 pip install git+https://github.com/arogozhnikov/einops.git mkdir -p models/rdm/rdm768x768/ wget -O models/rdm/rdm768x768/model.ckpt https://ommer-lab.com/files/rdm/model.ckpt
  • Prueba que todo funciona hasta ahora con

     python scripts/knn2img.py --prompt "I'm a computer"
  • Si todo salió bien, debería ver un texto de éxito en su shell. Ahora necesitamos descargar todos los índices/modelos de imágenes. El zip de imágenes abiertas es de 11 GB. Los datos de ArtBench son bastante pequeños.

     mkdir -p data/rdm/retrieval_databases wget -O data/rdm/retrieval_databases/artbench.zip https://ommer-lab.com/files/rdm/artbench_databases.zip wget -O data/rdm/retrieval_databases/openimages.zip https://ommer-lab.com/files/rdm/openimages_database.zip unzip data/rdm/retrieval_databases/artbench.zip -d data/rdm/retrieval_databases/ unzip data/rdm/retrieval_databases/openimages.zip -d data/rdm/retrieval_databases/ mkdir -p data/rdm/searchers wget -O data/rdm/searchers/artbench.zip https://ommer-lab.com/files/rdm/artbench_searchers.zip unzip data/rdm/searchers/artbench.zip -d data/rdm/searchers


Estamos listos para usar los modelos Artbench ahora (que funcionan bastante bien en mis pruebas limitadas), pero lo que realmente queremos es usar el modelo masivo de imágenes abiertas como referencia. Descargamos los datos, pero necesitamos crear el índice.


Si desea probar la base de datos de Artbench, ejecute

 python scripts/knn2img.py --prompt "A blue pig" --use_neighbors --knn 20 

imagen-20220807155912575

imagen-20220807155927854


Índice de imágenes abiertas

A menos que tenga una supercomputadora, la terrible gestión de la memoria en el multiprocesamiento de Python (por lo que puedo decir) nos impedirá usar los 4 archivos que descomprimimos con el script del repositorio para indexarlos. Todo lo demás que probé, los procesos se quedarían sin memoria.


Afortunadamente, solo necesitamos concatenar los archivos. Puede eliminar los archivos de piezas anteriores si lo desea. También necesitamos sacar los archivos de las piezas de la carpeta openimages.

 cd data/rdm/retrieval_databases/openimages/ cat 2000000x768_part1.npz 2000000x768_part2.npz 2000000x768_part3.npz 2000000x768_part4.npz > 2000000x768.npz mv 2000000x768_* ~/temp cd ../../../../

Ahora, cuando ejecutamos el script de entrenamiento, no deberíamos quedarnos sin memoria. Creo que esto es un problema en su función de archivos múltiples en el script de entrenamiento.

 python scripts/train_searcher.py
  • Necesitamos cambiar el tamaño del lote en scripts/knn2img.py para no quedarnos sin memoria GPU. Es posible que deba bajar a 1, pero pude configurarlo en 2 en un 3090.

  • Abra scripts/knn2img.py en un editor

  • Vaya a la línea 243 o busque "n_samples"

  • Cambie el valor predeterminado a 1 o 2 y guarde

  • También puede hacer esto usando el parámetro de línea de comando, pero como nunca funcionará para mí, quería cambiar el valor predeterminado. Tenga en cuenta que si actualiza el repositorio en el futuro, es probable que se sobrescriba.


Ahora podemos generar imágenes RDM usando la base de datos openimages:

 python scripts/knn2img.py --prompt "A blue pig" --database openimages --use_neighbors --knn 20


Aquí hay un script ~/.bashrc para ejecutarlo convenientemente. Nuevamente, asegúrese de cambiar las 3 rutas para que se ajusten a sus necesidades:

 function diffuse() { if [ $# -eq 0 ]; then echo "Usage: diffuse '[prompt]' [--plms]" exit 1 fi cd /mnt/c/diffusion/latent-diffusion; conda activate ldm; if [ $2 = '--plms' ]; then python scripts/knn2img.py --database openimages --prompt $1 --use_neighbors --outdir '/mnt/g/My Drive/AI Image Tests/RDM' --knn 20 --plms else python scripts/knn2img.py --database openimages --prompt $1 --use_neighbors --outdir '/mnt/g/My Drive/AI Image Tests/RDM' --knn 20 fi }

Acelerando las cosas

También puede ejecutar solicitudes en lotes creando un archivo (en este caso, prompts.txt ) y señalando el script con el parámetro –from-file como este

 python scripts/knn2img.py --database openimages --from-file ./prompts.txt --use_neighbors --outdir '/mnt/g/My Drive/AI Image Tests/RDM' --knn 20

ejemplo prompts.txt

 prompt 1 prompt 2 prompt 3


Esto debería ahorrar mucho tiempo si está ejecutando muchas consultas, ya que el modelo solo se carga una vez. El modelo de texto a imagen no tiene esta opción.

coche deportivo en el desierto

coche deportivo en el desierto

coche deportivo en el desierto


Pruebas iniciales y PLMS

A continuación se muestran algunos resultados iniciales de ambos modelos con PLMS activado y desactivado. PLMS debería hacer que las cosas funcionen más rápido. Por ahora, no mediremos el aumento de velocidad, pero veremos subjetivamente la calidad/los resultados de la imagen.

Dado que el modelo RDM solo hará 2 fotos a la vez para mi sistema, incluí ambas fotos en lugar de una cuadrícula para ese modelo.

Es casi seguro que haré pruebas más específicas en el futuro y estos modelos se incluirán en futuras publicaciones de comparación.


Una casa de madera en una colina, fotografía de paisaje.

Texto a imagen

sin plms

con plms

imagen-20220807150052836

imagen-20220807153545252


RDM

sin plms

con plms

imagen-20220807145854952

imagen-20220807145920778

imagen-20220807145911367

imagen-20220807145931866


Una señal de alto violeta


Texto a imagen

sin plms

con plms

imagen-20220807154729984

imagen-20220807153711466

RDM

sin plms

con plms

imagen-20220807150500598

imagen-20220807153000850

imagen-20220807151421393

imagen-20220807153013778


guarida de zorros, arte digital

Texto a imagen

sin plms

con plms

imagen-20220807155228088

imagen-20220807155634227


RDM

sin plms

con plms

imagen-20220807151441359

imagen-20220807152859265

imagen-20220807152235267

imagen-20220807152911615


ganar el gran juego, fotografía premiada

Texto a imagen

sin plms

con plms

imagen-20220807160007336

imagen-20220807160228471

RDM

sin plms

con plms

imagen-20220807151456027

imagen-20220807152928304

imagen-20220807152216729

imagen-20220807152940229


un auto deportivo conduciendo en dunas de arena

Texto a imagen

sin plms

con plms

imagen-20220807160557241

imagen-20220807160838768

RDM

sin plms

con plms

imagen-20220807151401781

imagen-20220807152825508

imagen-20220807152200386

imagen-20220807152839511


Un generador de imágenes para llamarlo propio

Y ahí lo tiene: no más créditos ni límites mensuales, solo generación de imágenes de IA pura por su cuenta. Una vez que descubra algunas configuraciones de ajuste y cree mi propia base de datos de entrenamiento de imágenes, probablemente hablaremos de esto nuevamente.


Con suerte, con algunos ajustes y nuevos lanzamientos/modelos, esto se acercará al factor WOW que tiene DALL-E.

panda con capa roja


También publicado aquí .