- Stable Cascade est la base de code officielle de Stability AI, qui fournit les scripts d'entraînement et d'inférence ainsi que plusieurs checkpoints de modèles pour un modèle de génération d'images fondé sur l'architecture Würstchen
- La différence essentielle est qu'il fonctionne dans un espace latent bien plus petit que Stable Diffusion : il encode une image 1024x1024 en 24x24 au lieu de 128x128 pour Stable Diffusion, ce qui réduit le temps d'inférence et le coût d'entraînement
- Le modèle se compose d'une cascade en 3 étapes, Stage A, Stage B, Stage C : Stage A et B assurent la compression de l'image, tandis que Stage C génère une représentation latente 24x24 à partir d'un prompt textuel
- Les fonctionnalités proposées incluent text-to-image, variations d'image, image-to-image, ControlNet, LoRA, reconstruction d'image, entraînement from scratch et fine-tuning, avec un accès également disponible dans diffusers 🤗
- La base de code est en phase initiale de développement, il peut donc y avoir des erreurs inattendues ou du code d'entraînement et d'inférence non optimisé ; le code est sous licence MIT et les poids des modèles relèvent de la Stability AI Non-Commercial Research Community License
Le problème que Stable Cascade cherche à résoudre
- Stable Cascade est la base de code officielle de Stable Cascade, qui fournit des scripts d'entraînement et d'inférence ainsi que plusieurs modèles utilisables
- Le modèle est fondé sur l'architecture Würstchen
- La principale différence avec des modèles comme Stable Diffusion est qu'il fonctionne dans un espace latent beaucoup plus petit
- Stable Diffusion utilise un facteur de compression de 8 et encode une image 1024x1024 en 128x128
- Stable Cascade atteint un facteur de compression de 42 et peut encoder une image 1024x1024 en 24x24
- Le modèle conditionné par le texte est entraîné dans cet espace latent à très forte compression
- Ce petit espace latent permet une inférence plus rapide et un entraînement moins coûteux
- Une version précédente de cette architecture avait permis une réduction des coûts par 16 par rapport à Stable Diffusion 1.5
Performances et efficacité
- Stable Cascade est présenté comme un modèle adapté aux usages où l'efficacité est importante
- Les méthodes d'extension connues comme fine-tuning, LoRA, ControlNet, IP-Adapter, LCM sont également possibles avec cette approche
- Dans son évaluation interne, Stable Cascade affiche les meilleures performances sur presque toutes les comparaisons, à la fois en alignement au prompt et en qualité esthétique
- L'évaluation humaine a été menée en mélangeant des parti-prompts et des aesthetic prompts
- Stable Cascade a été comparé avec 30 étapes d'inférence
- Les références sont Playground v2 à 50 étapes, SDXL à 50 étapes, SDXL Turbo à 1 étape et Würstchen v2 à 30 étapes
- Le plus gros modèle contient 1,4 milliard de paramètres de plus que Stable Diffusion XL, tout en offrant un temps d'inférence plus rapide
Architecture du modèle en 3 étapes
- Comme son nom l'indique, Stable Cascade est composé de 3 modèles en cascade pour générer des images : Stage A, Stage B, Stage C
- Stage A et Stage B servent à compresser l'image, de manière similaire au VAE de Stable Diffusion
- Stage C prend un prompt textuel en entrée et génère une petite représentation latente 24 x 24
- Stage A est un VAE, tandis que Stage B et Stage C sont des modèles de diffusion
- Cette release fournit les checkpoints suivants
- Stage C : une version à 1 milliard de paramètres et une version à 3,6 milliards de paramètres
- Stage B : une version à 700 millions de paramètres et une version à 1,5 milliard de paramètres
- Stage A : 20 millions de paramètres, fixé en raison de sa petite taille
- L'usage de la version 3,6 milliards de paramètres pour Stage C est fortement recommandé, car la majorité des travaux de fine-tuning ont porté sur cette version
- Pour Stage B, les deux versions donnent de bons résultats, mais la version à 1,5 milliard de paramètres reconstruit mieux les petits détails et les détails fins
- Pour obtenir les meilleurs résultats, il est proposé d'utiliser les variantes les plus grandes à chaque étape
Fonctions d'inférence et notebooks
- L'exécution du modèle est possible via les notebooks de la section inference
- Cette section contient aussi des détails sur le téléchargement des modèles, les besoins en calcul et les tutoriels d'utilisation
-
Text-to-Image
- text_to_image.ipynb fournit les fonctions de base text-to-image, variation d'image et image-to-image
- La variation d'image comprend les embeddings d'image et peut générer des variantes de l'image fournie ; dans l'exemple, aucun prompt n'est donné
- L'image-to-image fonctionne en bruitant une image jusqu'à un certain point, puis en générant à partir de ce point de départ
- Dans l'exemple, l'image de gauche est bruitée à 80 % et utilise la légende
A person riding a rodent. - Le modèle est également accessible dans la bibliothèque diffusers 🤗 via la documentation stable-cascade de Hugging Face
-
ControlNet
- controlnet.ipynb explique comment utiliser les ControlNet fournis pour Stable Cascade ou ceux entraînés par l'utilisateur
- Les ControlNet de cette release incluent Inpainting / Outpainting, Face Identity, Canny, Super Resolution
- Face Identity ControlNet sera publié ultérieurement
- Ils peuvent être utilisés dans le même notebook, en changeant seulement les réglages selon chaque ControlNet
-
LoRA
- Stable Cascade propose sa propre implémentation pour l'entraînement et l'utilisation de LoRA
- LoRA peut être utilisé pour faire du fine-tuning du modèle conditionné par le texte, Stage C
- Il est possible d'ajouter et d'entraîner de nouveaux tokens, puis d'ajouter des couches LoRA au modèle
- lora.ipynb montre comment utiliser un LoRA entraîné
-
Reconstruction d'image
- reconstruct_images.ipynb montre comment encoder et décoder des images, ainsi que les avantages de cette méthode à forte compression
- Le Diffusion Autoencoder de Stable Cascade permet de travailler dans un espace très compressé
- Stage A et Stage B peuvent être utilisés pour entraîner son propre modèle, comme on utilise le VAE de Stable Diffusion pour entraîner ses propres modèles
- Un batch d'exemple
4 x 3 x 1024 x 1024est encodé en4 x 16 x 24 x 24 - Le facteur de compression spatiale est
1024 / 24 = 42.67 - Il peut ensuite être redécodé en
4 x 3 x 1024 x 1024avec Stage A et Stage B - Les résultats de reconstruction sont annoncés comme très proches de l'original, même sur les petits détails, ce qui ne serait pas possible avec un VAE standard ou équivalent
Entraînement, app, licence
- Le code d'entraînement couvre l'entraînement de Stable Cascade from scratch, le fine-tuning, ControlNet et LoRA
- Des explications détaillées sur l'entraînement sont fournies dans le dossier training
- La base de code est en phase initiale de développement
- Des erreurs inattendues peuvent survenir
- Le code d'entraînement et d'inférence peut ne pas être entièrement optimisé
- Si l'intérêt se confirme, des mises à jour continueront d'être publiées pour intégrer les dernières améliorations et optimisations
- Les idées, retours et contributions aux mises à jour sont bienvenus
- Pour lancer l'application Gradio, installez d'abord :
pip3 install gradiopip3 install acceleratepip3 install git+https://github.com/kashif/diffusers.git@wuerstchen-v3
- Depuis la racine du projet, lancez l'application Gradio avec la commande suivante
PYTHONPATH=./ python3 gradio_app/app.py
- Le code est distribué sous MIT LICENSE
- Les poids des modèles téléchargeables sur Hugging Face relèvent de la STABILITY AI NON-COMMERCIAL RESEARCH COMMUNITY LICENSE
1 commentaires
Avis sur Hacker News
Après quelques heures d’utilisation, il semble bien meilleur pour le respect du prompt
Pour l’instant, la qualité paraît inférieure à celle de certains modèles SDXL, mais je préfère suspendre mon jugement jusqu’à avoir testé quelques jours de plus
C’est aussi rapide, avec l’impression d’être environ 2 à 3 fois plus rapide que SDXL non turbo
Si l’on doit recourir à ControlNet, OpenPose, voire à une depth map pour imposer une apparence ou une profondeur précises, la solution devient beaucoup trop sur mesure à chaque génération
En le testant moi-même, j’ai constaté une amélioration dans le suivi du prompt, et les images me plaisent aussi davantage visuellement
Le plus gros modèle aurait 1,4 milliard de paramètres de plus que SDXL, et SDXL demande déjà beaucoup de VRAM
Très impressionnant
Si j’ai bien compris, Stability AI est actuellement financée par du capital-risque, mais elle semble forcément brûler énormément d’argent, et on ne sait pas non plus si son modèle économique est viable
Peut-être qu’elle mériterait des financements publics de recherche
Au moment de l’accord avec Intel, il a été rapporté qu’elle dépensait environ 8 millions de dollars par mois en factures et salaires, tandis que son chiffre d’affaires n’en représentait qu’une fraction
Le chiffre d’affaires d’août était de 1,2 million de dollars, et Mostaque avait publié sur X que les logiciels et services la mettaient sur une trajectoire de 3 millions de dollars ce mois-là, mais le message a ensuite été supprimé
https://fortune.com/2023/11/29/stability-ai-sale-intel-ceo-r...
Aujourd’hui, la recherche HN ne me donne pas de bons résultats, donc je ne retrouve pas le commentaire précis auquel je pense
Si quelqu’un peut le trouver, sa page utilisateur est ici : https://news.ycombinator.com/user?id=emadm
Je me demande donc comment cette structure fonctionne
Est-ce un travail exclusif pour stability.ai ?
À en juger par le commit, la licence est passée de MIT à une licence personnalisée maison : https://github.com/Stability-AI/StableCascade/commit/209a526...
Est-il juridiquement possible d’utiliser un ancien snapshot antérieur au changement de licence sous l’ancienne licence MIT ?
En général, les tribunaux examinent la situation dans son ensemble, tiennent compte de l’intention et comprennent aussi que des erreurs administratives peuvent arriver
Une exception pourrait toutefois exister si une entreprise affirmait avoir investi beaucoup de ressources en se fiant à l’ancienne licence
Le moment du commit semble assez important. Si le dépôt n’a été sous MIT que pendant quelques heures avant l’annonce publique, il paraît difficile pour une entreprise de prétendre avoir réalisé un investissement substantiel
Ce commit peut continuer à être utilisé comme on le souhaite sous la licence MIT en vigueur au moment de sa publication
C’est un peu comme acheter un ebook : même si la deuxième édition ne sort ensuite qu’en relié, on peut toujours lire l’ebook de la première édition
Ce sont des œuvres différentes sous des licences différentes
Stability AI a indiqué que cette licence non commerciale s’expliquait par le fait qu’il s’agissait d’un aperçu technologique, comme SDXL 0.9
On peut fermer une base de code sous licence MIT, mais on ne peut pas modifier rétroactivement la licence d’un ancien code déjà publié
Les premiers commits de Stability comportaient une licence MIT, donc on peut forker ce commit et en faire ce qu’on veut
La partie délicate, c’est qu’ils ont fait un commit changeant la licence de MIT vers une licence propriétaire, sans changement de code
Cela risque de ne pas être valable, car on ne peut pas distribuer la même base de code sous deux licences contradictoires
La nouvelle licence ne peut s’appliquer qu’aux changements ajoutés à la base de code après le changement de licence
Je n’irais pas jusqu’à dire que c’est « illégal », mais comme le même logiciel a déjà été distribué sous une licence ouverte, il serait difficile de faire tenir devant un tribunal l’affirmation selon laquelle il s’agit d’un logiciel propriétaire
Voici un playground optimisé : https://www.fal.ai/models/stable-cascade
C’est d’autant plus vrai dans un domaine aussi concurrentiel, et le public de HN choisira probablement de l’exécuter lui-même si on lui demande de s’inscrire pour tester la génération d’une seule image
Comme les autres générateurs d’images que j’ai essayés, celui-ci n’arrive pas non plus à produire correctement des touches de piano [1]
Il faudra sans doute une autre approche pour pouvoir compter les groupes de touches noires
[1] https://fal.ai/models/stable-cascade?share=13d35b76-d32f-45c...
Dans mon cas, quand je générais des images liées au basket, il y avait le plus souvent plus d’un ballon
Je ne suis pas expert, mais il semble que l’apprentissage ne saisisse pas, ou seulement partiellement, les contraintes fondamentales de la vie culturelle humaine, comme le fait que toutes les touches d’un piano doivent être identiques ou qu’il n’y a qu’un seul ballon dans un match
Ce modèle a été construit sur l’architecture Würstchen
Il existe une vidéo où l’un des auteurs explique très bien comment ce modèle fonctionne
https://www.youtube.com/watch?v=ogJsCPqgFMk
Gemini Advanced> Summarize this video: https://www.youtube.com/watch?v=ogJsCPqgFMk
Cette vidéo porte sur la méthode d’entraînement d’un modèle de diffusion texte-image appelé Würstchen
Elle est bien plus efficace que les approches existantes comme Stable Diffusion 1.4, et peut produire des résultats similaires en n’utilisant que 1/16 du temps d’entraînement et de la puissance de calcul
Le point clé est un processus de compression en deux étapes
La première étape compresse l’image avec un VQ-VAE dans un espace latent 4 fois plus petit que l’espace latent utilisé par Stable Diffusion, et la deuxième étape recompresse cet espace latent 10 fois avec un modèle de diffusion
Le taux de compression total atteint ainsi 40×, bien au-dessus de la compression 8× de Stable Diffusion
Grâce à cet espace latent compressé, le modèle de diffusion texte-image de Würstchen peut être entraîné avec un modèle bien plus petit et bien plus rapide que les modèles Stable Diffusion
Würstchen peut être entraîné sur un seul GPU en 24 000 heures-GPU, tandis que Stable Diffusion 1.4 nécessite 150 000 heures-GPU
Tout en étant efficace, il peut générer des images d’une qualité comparable à Stable Diffusion, et même produire une meilleure qualité pour des images en plus haute résolution ou plus détaillées
Dans l’ensemble, Würstchen constitue une avancée importante dans la génération texte-image, en permettant un entraînement de modèles plus efficace et moins coûteux, ce qui peut élargir les usages à des images marketing, des illustrations de livres ou des avatars personnalisés
Existe-t-il une méthode pour générer plusieurs images du même modèle ?
Par exemple, créer des images d’un modèle de voiture sous plusieurs angles, tout en conservant partout la même voiture générée
[1] https://zero123.cs.columbia.edu/
On peut faire image d’entrée => embedding => flux de N images, et si l’on pense aussi au point de vue du rendu 3D, il suffit d’appliquer ControlNet à ces N images
Référence : « The model can also understand image embeddings, which makes it possible to generate variations of a given image (left). There was no prompt given here. »
Je me souviens avoir fait divers essais avec ces deux chercheurs pour trouver la meilleure manière de conditionner Stage B sur une représentation latente
Nous avions abandonné, car concaténer simplement les canaux d’entrée avec l’upsampling par plus proche voisin de la représentation latente donnait de meilleurs résultats qu’une cross-attention très sophistiquée avec des embeddings de position relative 2D
Ce modèle était auparavant connu sous le nom de Würstchen v3
Est-ce que ça fonctionne sur AMD ?
Je n’ai pas trouvé d’information sur la prise en charge
Les utilisateurs qui font tourner Stable Diffusion sur AMD doivent subir une baisse de performances, donc pour ce type de projet c’est une fonctionnalité assez importante
Ce qui m’impressionne le plus, c’est la compression
Pouvoir compresser des images 42 fois est un avantage énorme sur les appareils mobiles, avec une mauvaise connexion Internet, ou les deux
L’idée étant de fournir de la 8K avec une faible bande passante