Générer des images avec une IA

Nous voyons actuellement de plus en plus d’images incroyables générées par des ordinateurs. Des photographies de visages, des paysages générés via des lignes de textes… Certains parlent même qu’un jour il sera possible d’alléger les pages web en fournissant une description à la place des images pour qu’elles soient recalculées sur les navigateurs clients.

J’ai donc voulu étudier le fonctionnement de plusieurs outils de génération d’images. Je vous livre ici le résultat de mes petites expériences en espérant qu’elles vous permettent de gagner du temps.

Etude du contexte:

J’ai lu dans cet article que des IA étaient capables de concurrencer des humains sur des concours de création d’art graphique. Mais qu’en est-il vraiment ? Est-ce aussi simple de générer une image, n’y a t-il pas un minimum de connaissances à avoir ? Pour faire mes tests, je me suis basé sur les 3 outils les plus populaires:
Dall-E 2 (gratuit le 1er mois),
Midjourney (gratuit sur 25 images, puis payant),
Stable diffusion (open source et donc gratuit et illimité).

Rapidement, je me suis rendu compte que le dernier est tout bonnement incroyable. Les rendus sont au moins aussi bons que les payants, et l’énorme communauté donne beaucoup d’infos sur les différents filtres qu’on peut lui rajouter, ou la façon de le personnaliser.

Stable Diffusion, une boite à outils magique.

Dans le git officiel, vous trouverez les infos pour l’installer (ca marche en Python 3).
Comptez bien un minimum de 15 Go pour installer les modèles et tout le système.
Faites bien attention lors de la génération de cette ligne:
conda activate ldm
Sans cela, vous allez galérer comme moi avec un dépot python qui n’a rien à voir et qui fait planter le script.

Vous aurez alors accès à ces outils:

  • img2img: un outil pour générer des images à partir d’autres images
  • inpaint: un outil pour générer des images à partir d’autres images et de texte
  • txt2img.py: un outil pour générer des images à partir de texte
  • knn2img.py ??
  • sample_diffusion.py ??
  • train_searcher.py ??
InPaint: mon dessin de cheval avant

Ensuite, on rajoute une petite description: « cheval avec 2 nuages et un soleil ».

InPaint: c’est mieux après, non ?

Voici la ligne à faire dans le shell:
python optimizedSD/optimized_img2img.py –prompt « a horse with a sun and 2 clouds » –init-img ~/Images/cheval.jpg –strength 0.8 –n_iter 2 –n_samples 5 –H 512 –W 512

Malheureusement pour moi, ce n’est pas parce que vous aurez une carte graphique récente (j’ai une RTX 3070 Ti) que ça va fonctionner du feu de dieu. Les calculs montent vite, et il faudra surement vous rabattre sur une version optimisée pour ceux qui n’ont pas un minimum de 10 G de VRAM sur leur carte graphique.

Le git à vous mettre sous la dent est donc celui-ci. Avec ce GIT, vous n’aurez plus les erreurs tels que : « RuntimeError: CUDA out of memory. Tried to allocate 24.00 GiB (GPU 0; 7.79 GiB total capacity; 4.47 GiB already allocated; 1.07 GiB free; 4.63 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF ».

L’importance des mots clés:

Bien sur tout se fait en anglais, vous pouvez donc lui dire : « a phoenix descending on the moon »

a phoenix descending on the moon

Mais je pense que vous serez d’accord pour dire que le résultat avec le texte suivant est bien meilleur : « fantasy, highly detailed, cinematic lighting »! Il faut donc rajouter des descriptifs après des virgules pour influencer le style de rendu. On peut même y mettre des noms d’artistes…

a phoenix descending on the moon, fantasy, highly detailed, cinematic lighting

Voici un petit récap des mots clés permettant de choisir le style:

Différent style artistique (https://creator.nightcafe.studio)


Vous avez également le site https://promptomania.com/ pour vous assister dans la création de la requête ou encore ce site: https://www.creativindie.com/midjourney-ai-for-book-cover-design-how-is-this-legal.
Maintenant que vous avez les bases pour générer des belles images, voyons comment augmenter la taille de 512 à 1024 pixels.

Générer du 1024 x 1024:

Il y a un autre script qui permet de générer des plus grandes images et qui se greffe à notre installation: txt2imghd.
Je vous met ici le git.

Si vous avez précédemment eu des problèmes de mémoire avec les scripts natifs, alors il vous faudra aussi faire quelques modifs sur ce script.

  • Editez txt2imghd.py
  • Trouver la ligne: model = instantiate_from_config(config.model)
  • Immediately après, ajouter la ligne: model.half()
  • Trouvez la ligne: init_image = repeat(init_image, … b=batch_size)
  • Immediately après, ajouter la ligne: init_image = init_image.half()

Il faut aussi lui ramener un modèle de calcul sur ce git.
Pensez à faire chmod +x realesrgan-ncnn-vulkan (pour qu’il soit éxecutable).

Et on lance le tout avec :
python optimizedSD/txt2imghd.py –prompt « a battle between a fire-spitting phoenix and an ice-spitting dragon in the starry sky, fantasy, highly detailed, cinematic lighting » –realesrgan ./realesrgan-ncnn-vulkan
A noter que ca ne vous générera qu’une seule image au lieu de 4, mais elle sera plus grande.

Une interface:

Vous avez aussi moyen de configurer une interface graphique via ce projet git si vous n’êtes pas très ligne de commande. Faites attention, la procédure est assez identique à celle pour installer la version standard, mais si vous êtes obligé d’utiliser les 2, vous aurez un conflit sur la variable d’environnement. Pour corriger cela, éditer le fichier environnment.yaml, changer ldm en ldmui, et lorsque vous lancerez conda activate ldm, faites plutôt conda activate ldmui.

Stable Diffusion web UI

Conclusion

Aujourd’hui, on peut voir commencer à émerger des BD illustrés par des IA. Prochainement, on pourra surement voir des personnes dans des jeux vidéos, ou des vidéos générés par du texte. Il suffit de regarder instagram, ou le discord de Midjourney pour se rendre compte du potentiel incroyable de ces technologies. Je ne vous recommande qu’une chose, essayez par vous même !


Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.