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í.
Esto es más o menos lo que deduzco que necesitarás:
= 32GB RAM
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.
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.
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.
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.
htop
para solucionar problemas/ver el uso de la memoria.pip
y/o conda
(hice ambas cosas y no estoy seguro de cuál hizo que todo funcionara) 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
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 }
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.
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 |
---|---|
RDM
sin plms | con plms |
---|---|
Una señal de alto violeta
Texto a imagen
sin plms | con plms |
---|---|
RDM
sin plms | con plms |
---|---|
guarida de zorros, arte digital
Texto a imagen
sin plms | con plms |
---|---|
RDM
sin plms | con plms |
---|---|
ganar el gran juego, fotografía premiada
Texto a imagen
sin plms | con plms |
---|---|
RDM
sin plms | con plms |
---|---|
un auto deportivo conduciendo en dunas de arena
Texto a imagen
sin plms | con plms |
---|---|
RDM
sin plms | con plms |
---|---|
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.
También publicado aquí .