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.
Voici à peu près ce dont vous aurez besoin :
= 32 Go de RAM
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.
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.
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.
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.
htop
pour dépanner/afficher l'utilisation de la mémoire.pip
et/ou conda
(j'ai fait les deux et je ne suis pas sûr de ce qui a tout fait fonctionner) 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
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 }
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.
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 |
---|---|
GDR
sans plm | avec plms |
---|---|
Un panneau d'arrêt violet
Texte à image
sans plm | avec plms |
---|---|
GDR
sans plm | avec plms |
---|---|
tanière de renard, art numérique
Texte à image
sans plm | avec plms |
---|---|
GDR
sans plm | avec plms |
---|---|
gagner le grand jeu, photographie primée
Texte à image
sans plm | avec plms |
---|---|
GDR
sans plm | avec plms |
---|---|
une voiture de sport roulant dans les dunes de sable
Texte à image
sans plm | avec plms |
---|---|
GDR
sans plm | avec plms |
---|---|
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.
Également publié ici .