paint-brush
Créer votre propre IA Générateur d'images avec diffusion latentepar@lanolinoil
3,835 lectures
3,835 lectures

Créer votre propre IA Générateur d'images avec diffusion latente

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

Trop long; Pour lire

Exécutez vos propres invites de texte en image avec CUDA, beaucoup d'espace disque et une quantité insensée de mémoire. Vous avez besoin d'un système Linux avec une carte compatible CUDA pour que cela fonctionne jusqu'au bout. Il existe 2 techniques de génération d'images possibles avec Latent Diffusion. Nous allons installer et examiner les modèles txt-2img et txt2-img que nous allons configurer. Le modèle RAD utilise une base de données d'images et la définit et la met à l'échelle en une référence configurable. Cela semble signifier qu'il est moins bon en tant qu'objectif général, mais pourrait être utilisé avec un ensemble de formation spécifique.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Créer votre propre IA Générateur d'images avec diffusion latente
Lanolinoil HackerNoon profile picture

DALL-E Homebrew

Dans cet article, nous verrons comment configurer l'exécution de votre propre générateur d'images AI. Vous avez besoin d'un système Linux avec une carte compatible CUDA pour que cela fonctionne jusqu'au bout. J'ai obtenu le script de base txt-2img fonctionnant sous Windows. Malheureusement, pour les modèles de diffusion augmentés par récupération publiés en juillet, vous avez besoin de scann afin d'indexer l'ensemble de données openimages, qui n'est disponible que sur Linux. WSL a bien fonctionné pour moi.


chien lion - modèle rdm

chien lion - modèle rdm

chien lion - modèle rdm

chien lion - modèle rdm

Voici à peu près ce dont vous aurez besoin :

  • Linux (amende WSL)
  • 11.3 Graphiques CUDA
  • = 32 Go de RAM

  • 50 Go d'espace disque (~30 Go sans openimages)
  • Carte de la série 3xxx (je ne fais que deviner ici. Tout cela est fait avec un 3090 FE)

Diffusion latente

Je suis tombé par hasard sur le référentiel de diffusion latente pendant que je parcourais les sous-reddits AI. Quelques messages l'ont mentionné et je ne savais pas ce que c'était, alors je suis allé chercher sur Google.


Je ne suis pas un informaticien, un mathématicien ou quoi que ce soit d'autre qui serait nécessaire pour vraiment comprendre ce qui se passe ici. L'article sur les nouveaux modèles RAD est compréhensible et intéressant, mais je n'ai pas encore fait beaucoup de recherches au-delà de cela.

image-20220807154208076

Text-to-image vs RAD

Il existe 2 techniques de génération d'images possibles avec Latent Diffusion. Nous allons installer et examiner les deux.


Je crois que le modèle txt2-img que nous allons configurer en premier est ce à quoi nous sommes habitués avec d'autres outils de génération d'images en ligne - il crée un clip d'image à très basse résolution qui pense être une bonne correspondance rapide et le débruite et le met à l'échelle.


Le modèle RAD utilise une base de données configurable d'images comme référence ET fait la diffusion comme nous en avons l'habitude. Cela semble signifier qu'il est moins bon en tant que générateur à usage général, mais pourrait être utilisé avec un ensemble de formation spécifique que vous pourriez éventuellement créer. Je vais essayer cela à l'avenir.


RAD génère également des images 768X768, ce qui est assez impressionnant.

cantaloup géant à la plage

Cantaloup géant à la plage


Instructions d'installation

Texte à image

  • Assurez-vous que CUDA 11.3 est installé et que conda fonctionne dans votre shell. Vous pouvez obtenir Conda ici

  • (Ré)installez Pytorch maintenant , de peur que vous ne vous retrouviez plus tard dans l'enfer de la dépendance. Je l'ai fait via pip mais conda peut aussi fonctionner.

  • Cloner le repo sur un lecteur avec beaucoup d'espace libre

  • cd dans le référentiel et exécutez :

     conda env create -f environment.yaml conda activate ldm

    Cela configurera l'environnement initial. Si vous rencontrez des erreurs avec Pytorch plus tard et que vous devez le réinstaller, revenez à environment.yaml et réinstallez en utilisant les versions de package correctes.

  • Téléchargez le modèle et vous êtes prêt à partir tant que vos dépendances de torche sont toutes correctement configurées.

 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

Vous devriez être en mesure d'échantillonner des images maintenant en utilisant :

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

Assurez-vous de voir les options que vous pouvez définir dans le README.


Vous pouvez utiliser ce script bash pour faciliter l'exécution de tout à partir d'un shell. Vous pouvez l'inclure dans votre fichier ~/.bashrc et rouvrir votre shell. Assurez-vous de modifier les 3 chemins en fonction de vos besoins. Nous verrons le PLMS plus tard.


 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 }


Les images sont 512X512 par défaut. Vous pouvez utiliser This Jupiter Notebook pour mettre à l'échelle les images avec de très bons résultats.

Dépannage

  • Si vous obtenez des erreurs de mémoire CUDA lors de l'exécution de commandes, essayez de réduire la taille du lot. Utilisez htop pour dépanner/afficher l'utilisation de la mémoire.
  • Si vous utilisez WSL, assurez-vous que toute votre RAM est disponible pour Linux.
  • Si vous obtenez des erreurs liées à la torche, vous devrez probablement réinstaller Pytorch. Cela entraînera probablement d'autres problèmes avec les packages. Vérifiez environment.yaml et installez manuellement les versions de package correctes avec pip et/ou conda (j'ai fait les deux et je ne suis pas sûr de ce qui a tout fait fonctionner)

image-20220807155754576

image-20220807155807229


GDR

Vous pouvez en savoir plus sur RDM ici . Comme dit précédemment, il combine essentiellement une base de données d'images avec des descriptions de clips avec le processus de diffusion existant, d'après ce que je comprends. Cette partie prend beaucoup plus de temps à fonctionner.


Notez que ce modèle, en particulier lors de l'utilisation de la formation openimages, est le meilleur pour recréer des choses réelles et ne semble pas très bon (encore) et créer les images étranges auxquelles nous sommes habitués à partir des modèles de diffusion.


  • Faites fonctionner le modèle Text-to-Image en premier

  • Installez de nouveaux packages et téléchargez le modèle de formation.

     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
  • Testez tout fonctionne jusqu'à présent avec

     python scripts/knn2img.py --prompt "I'm a computer"
  • Si tout s'est bien passé, vous devriez voir un texte de réussite dans votre shell. Nous devons maintenant télécharger tous les index/modèles d'images. Le zip openimages est de 11 Go. Les données ArtBench sont assez petites.

     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


Nous sommes maintenant prêts à utiliser les modèles Artbench (qui fonctionnent plutôt bien dans mes tests limités), mais ce que nous voulons vraiment, c'est utiliser le modèle openimages massif comme référence. Nous avons téléchargé les données, mais nous devons créer l'index.


Si vous souhaitez tester la base de données Artbench, exécutez

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

image-20220807155912575

image-20220807155927854


Index des images ouvertes

Sauf si vous avez un super ordinateur, la terrible gestion de la mémoire dans le multitraitement python (d'après ce que je peux dire) nous empêchera d'utiliser les 4 fichiers que nous avons décompressés avec le script du repo pour les indexer. Tout le reste que j'ai essayé, les processus manqueraient de mémoire.


Heureusement, nous avons juste besoin de concaténer les fichiers. Vous pouvez ensuite supprimer les anciens fichiers de pièces si vous le souhaitez. Nous devons également déplacer les fichiers de pièces hors du dossier 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 ../../../../

Maintenant, lorsque nous exécutons le script de formation, nous ne devrions pas manquer de mémoire. Je pense que c'est un problème dans leur fonction multi-fichiers dans le script de formation.

 python scripts/train_searcher.py
  • Nous devons modifier la taille du lot dans scripts/knn2img.py afin de ne pas manquer de mémoire GPU. Vous devrez peut-être descendre à 1, mais j'ai pu régler à 2 sur un 3090.

  • Ouvrez scripts/knn2img.py dans un éditeur

  • Allez à la ligne 243 ou trouvez "n_samples"

  • Modifiez la valeur par défaut à 1 ou 2 et enregistrez

  • Vous pouvez également le faire en utilisant le paramètre de ligne de commande, mais comme cela ne fonctionnera jamais pour moi, je voulais changer la valeur par défaut. Notez que si vous mettez à jour le dépôt à l'avenir, cela sera probablement écrasé.


Nous pouvons maintenant générer des images RDM à l'aide de la base de données openimages :

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


Voici un script ~/.bashrc pour l'exécuter facilement. Encore une fois, assurez-vous de modifier les 3 chemins en fonction de vos besoins :

 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 }

Accélérer les choses

Vous pouvez également exécuter des invites par lots en créant un fichier (dans ce cas prompts.txt ) et en y pointant le script avec le paramètre –from-file comme celui-ci

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

exemple prompts.txt

 prompt 1 prompt 2 prompt 3


Cela devrait vous faire gagner beaucoup de temps si vous exécutez de nombreuses requêtes, car le modèle n'est chargé qu'une seule fois. Le modèle texte-image n'a pas cette option.

voiture de sport dans le désert

voiture de sport dans le désert

voiture de sport dans le désert


Tests initiaux et PLMS

Vous trouverez ci-dessous quelques résultats initiaux des deux modèles avec PLMS activé et désactivé. Le PLMS devrait accélérer les choses. Pour l'instant, nous ne mesurerons pas l'augmentation de la vitesse mais regarderons subjectivement la qualité d'image/les résultats.

Étant donné que le modèle RDM ne fera que 2 photos à la fois pour mon système, j'ai inclus les deux photos au lieu d'une grille pour ce modèle.

Je ferai presque certainement des tests plus spécifiques à l'avenir et ces modèles seront inclus dans les prochains articles de comparaison.


Une maison en bois sur une colline, photographie de paysage

Texte à image

sans plm

avec plms

image-20220807150052836

image-20220807153545252


GDR

sans plm

avec plms

image-20220807145854952

image-20220807145920778

image-20220807145911367

image-20220807145931866


Un panneau d'arrêt violet


Texte à image

sans plm

avec plms

image-20220807154729984

image-20220807153711466

GDR

sans plm

avec plms

image-20220807150500598

image-20220807153000850

image-20220807151421393

image-20220807153013778


tanière de renard, art numérique

Texte à image

sans plm

avec plms

image-20220807155228088

image-20220807155634227


GDR

sans plm

avec plms

image-20220807151441359

image-20220807152859265

image-20220807152235267

image-20220807152911615


gagner le grand jeu, photographie primée

Texte à image

sans plm

avec plms

image-20220807160007336

image-20220807160228471

GDR

sans plm

avec plms

image-20220807151456027

image-20220807152928304

image-20220807152216729

image-20220807152940229


une voiture de sport roulant dans les dunes de sable

Texte à image

sans plm

avec plms

image-20220807160557241

image-20220807160838768

GDR

sans plm

avec plms

image-20220807151401781

image-20220807152825508

image-20220807152200386

image-20220807152839511


Un générateur d'images pour appeler le vôtre

Et voilà, plus de crédits ni de limites mensuelles, juste une pure génération d'images d'IA par vous-même. Une fois que j'aurai défini certains paramètres de réglage et créé ma propre base de données de formation d'images, nous en reparlerons probablement.


Espérons qu'avec quelques réglages et de nouvelles versions/modèles, cela se rapprochera du facteur WOW de DALL-E.

panda dans une cape rouge


Également publié ici .