Data science, ML/DL, NLP, Vision

Comment générer des images avec stable diffusion ?

Tandis que des entreprises comme OpenAI sont en train progressivement de perdre leur objectif principal de vue, d’autres comme Stability.ai, qui s’est...

Écrit par Ilyes Talbi · 3 min lecture >
Comment générer des images avec stable diffusion ?

Tandis que des entreprises comme OpenAI sont en train progressivement de perdre leur objectif principal de vue, d’autres comme Stability.ai, qui s’est fait connaitre grâce à stable diffusion, pourraient reprendre le flambeau.

L’été 2022 nous aura montré le vrai visage d’OpenAI. Une organisation censée faire de la recherche pour le bien commun… Non seulement le modèle DALL-E 2 a été entraîné avec les données d’artistes, de créateurs de contenus, et d’internautes qui n’ont rien demandés, mais en plus ils ont décidé de faire payer et de limiter l’accès.

Heureusement, de brillants chercheurs nous ont proposé un modèle similaire, plus léger, plus performant et surtout open source. Il s’agit de stable diffusion.

Je vous parle de son fonctionnement dans cet article, et on verra comment créer des images en utilisant Google Colab.

Comment fonctionne Stable diffusion ?

Stable diffusion est un modèle proposé par CompVis, Stability.ai et LAION. C’est le premier projet de génération d’images complètement open source.

Qu’est-ce que la génération d’images

Avant d’expliquer les particularité de stable diffusion, laissez moi rappeler ce qu’est la génération d’images.

Malgré le sentiment de deception que j’ai à l’égard d’OpenAI, je reconnais tout le travail qu’ils ont fait pendant toutes ces années. C’est eux qui nous ont permis d’entrer dans l’ère des images générées par intelligence artificielle.

Les modèles les plus connus de génération d’images sont DALL-E, Craiyon, Imagen, Midjourney, et maintenant Stable diffusion.

Le concept est toujours le même, il s’agit de transformer un texte en image. Le modèle va essayer de comprendre du mieux possible la requête entrée, et construire son image à partir de là.

La tâche est très complexe, puisque elle est à cheval entre la vision par ordinateur et le NLP.

Comment ça fonctionne et pourquoi les résultats sont si impressionnants ?

Le modèle a été entraîné sur le dataset LAION-5B, qui contient quasiment 5 milliards de paires image/texte, disponible en plusieurs langues.

L’entraînement a duré 150000 heures, et a été réalisé en utilisant 256 GPU Nvidia A100. Le coût total de l’entrainement est de 600,000€ selon Wikipedia.

C’est un modèle de diffusion, dans le sens où la création de l’image se fait en débruitant progressivement une image. C’est aussi comme ça que ce fait l’entrainement du modèle. On utilise des auto-encodeurs, pour bruiter l’image d’un côté du réseau, et la débruiter de l’autre.

auto-encodeur utilisé pour stable diffusion

Pour la partie comprehension de l’image, le modèle utilise un réseau avec une architecture U-Net qui contient 860M de paramètres, et un modèle de langage avec 123M de paramètres.

Générer des images avec Stable diffusion

Vous pouvez utiliser stable diffusion facilement avec Google Colab, en activant l’exécution sur GPU. Vous pourriez le faire en local mais je vous le déconseille si vous n’avez pas de GPU.

Commencez par installer la librairie diffusers :

!pip install diffusers==0.3.0 transformers scipy ftfy

Pour lancer ce code il vous faudra créer un compte sur Hugging face, c’est très rapide. Vous trouverez ensuite un access token dans vos paramètres.

⚠️ Votre token doit rester secret

YOUR_TOKEN = "VOTRE_TOKEN"

La librairie diffusers permet d’importer le modèle, les poids et toutes les dépendances très facilement :

from diffusers import StableDiffusionPipeline
import torch

# vous trouverez votre token ici : https://huggingface.co/settings/tokens
pipe = StableDiffusionPipeline.from_pretrained(
"CompVis/stable-diffusion-v1-4", 
use_auth_token=YOUR_TOKEN
)

Si vous êtes sur Colab et que vous avez bien activé l’option GPU (Exécution puis Modifier le type d’exécution), ou si vous avez un GPU Nvidia sur votre ordinateur, vous devez activer l’option avec cette ligne :

pipe.to("cuda")

Enfin, vous pouvez générer n’importe qu’elle image en changeant la variable prompt ci-dessous :

prompt = "tech article illustration, concept art"

with torch.autocast("cuda"):
    image = pipe(prompt)["sample"][0]

image.save(f"generated_image.png")

Avec le GPU de Google Colab l’image met moins de 10 secondes à être générée, sans GPU ça risque de prendre quelques minutes.

C’est d’ailleurs ce code qui a généré l’illustration principale de cette article 🙂

Vous pouvez retrouver les codes utilisés pour cet article ici.

Conclusion

Pour en savoir plus sur le projet je vous invite à vous rendre sur le github du projet.

Pour conclure, il faut savoir que l’open source a ses avantages, mais peut aussi avoir des limitations. Même si on est forcé d’accepter la license d’utilisation qui interdit l’exploitation du modèle pour générer du contenu offensant, techniquement rien n’empêche les utilisateurs de le faire.

D’ailleurs, dans une interview avec Sentdex, le CEO de Stability.ai expliquait qu’il considérait le fait d’ajouter des restrictions techniques comme étant liberticide, et condamnait l’avis d’OpenAI qui pense mieux connaitre que l’utilisateur ce qui est bien pour lui.

Néanmoins, je pense que cette approche est plus viable sur le long terme. En donnant un accès libre au modèle, on favorise la recherche et le développement communautaire, notamment concernant les biais.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *