Une expérience qui rend Stable Diffusion XL plus intelligent grâce à de mauvaises images générées par l’IA
(minimaxir.com)- Stable Diffusion XL 1.0 est un modèle open source capable de générer nativement des images en 1024x1024, et la prise en charge par diffusers ainsi que le modèle refiner réduisent la barrière d’entrée pour les expérimentations personnelles
- Dreambooth LoRA entraîne uniquement de petits adaptateurs au lieu de réentraîner tout le modèle, ce qui permet d’ajouter rapidement des concepts spécifiques et de les partager facilement
- L’expérience centrale consiste à entraîner SDXL en associant des images déformées et de mauvaise qualité qu’il a lui-même produites à
wrong, puis à comparer si l’ajout de ce terme en negative prompt améliore les résultats générés - Le LoRA
wrongmontre, sur plusieurs prompts, des améliorations en matière d’éclairage, de texture, de mise en page, de rendu des mains et des bras, ainsi que de fidélité au prompt, par rapport au SDXL de base ou à un simple negative promptwrong - En sélectionnant de mauvaises images pour apprendre au modèle ce qu’il doit éviter, l’approche se rapproche d’un negative LoRA et du RLHF, même s’il reste encore de la marge d’amélioration sur la génération des données et le temps d’entraînement
SDXL 1.0 et l’environnement d’expérimentation
- Le mois dernier, Stability AI a annoncé Stable Diffusion XL 1.0 et l’a publié en open source
- SDXL fait partie des modèles open source capables de générer nativement des images en 1024x1024 sans contournement particulier, avec davantage de détails
- Le modèle se compose de deux parties
- base model : chargé de la génération d’image principale
- refiner model : améliore fortement les détails et, comme il n’ajoute pas de surcoût notable en vitesse, son usage conjoint est recommandé quand c’est possible
- Les diffusers de Hugging Face prennent en charge SDXL et des optimisations de performance, ce qui permet d’expérimenter en modifiant à peine le code d’exemple
- L’expérience a été menée sur une Spot instance de Google Cloud Platform avec un GPU NVIDIA L4
- coût total de 0,24 $/heure
- environ 22 secondes pour générer une image en 1024x1024
- sur un GPU de milieu de gamme, on ne peut générer qu’une image à la fois
- à plus basse résolution, c’est plus rapide, mais les résultats sont nettement moins bons, donc ce n’est pas recommandé
Pondération des prompts dans diffusers et Dreambooth LoRA
- diffusers prend en charge deux fonctions qui n’avaient pas été utilisées dans les précédentes expérimentations avec Stable Diffusion
- la pondération des prompts
- l’entraînement et l’inférence Dreambooth LoRA
- La pondération des prompts s’appuie sur compel pour ajuster de façon plus mathématique l’importance de mots ou d’expressions
- on ajoute plusieurs
+ou-à un mot pour augmenter ou réduire son importance dans l’embedding résultant - on peut entourer une expression de parenthèses, comme dans
San Francisco landscape by Salvador Dali, (oil on canvas)+++, pour renforcer un style ou un médium précis
- on ajoute plusieurs
- Dans les tests, cette méthode corrige en grande partie les difficultés de réglage des prompts apparues depuis Stable Diffusion 2.0
- le
guidance_scalepar défaut est 7.5 - Max Woolf préfère 13, et tous les exemples LoRA de l’article utilisent aussi un
guidance_scalede 13
- le
- Dreambooth est une technique qui apprend à Stable Diffusion un concept spécifique à partir d’un petit nombre d’images source et d’un mot-clé déclencheur
- LoRA n’entraîne qu’un petit adaptateur pour le modèle visuel, plutôt que l’ensemble du modèle Stable Diffusion
- l’entraînement peut se faire en environ 10 minutes sur un seul GPU bon marché
- la qualité finale modèle+LoRA est proche de celle d’un fine-tuning complet
- le résultat est stocké dans un petit fichier binaire facile à partager
- ce qu’on appelle souvent fine-tuning de Stable Diffusion correspond en réalité fréquemment à la création d’un LoRA
- un seul LoRA peut être activé à la fois, même si la fusion de plusieurs LoRA est possible et reste un travail délicat
Le potentiel de SDXL vérifié avec un LoRA Ugly Sonic
- Avant la généralisation des LoRA, on utilisait textual inversion pour apprendre des concepts à l’encodeur de texte, mais l’entraînement était long et les résultats parfois difficiles à exploiter
- Un précédent test avait appris le personnage mème Ugly Sonic, absent du dataset d’origine de Stable Diffusion, via textual inversion, avec des résultats mitigés
- Pour vérifier le potentiel de SDXL, Ugly Sonic a été réentraîné sous forme de LoRA
- en utilisant le script train_dreambooth_lora_sdxl.py de Hugging Face
- avec quelques paramètres ajustés, mais un fonctionnement globalement immédiat
- Le LoRA Ugly Sonic ainsi entraîné génère, sur divers prompts, des images bien meilleures et plus cohérentes qu’auparavant
Conception de l’expérience du LoRA wrong
- L’auteur a repris une ancienne expérimentation de textual inversion autour des negative prompts sous forme de LoRA SDXL, en entraînant le modèle à associer au prompt
wrongdes images déformées et de mauvaise qualité - L’objectif était de vérifier si l’usage de
wrongcomme negative prompt poussait le modèle à s’éloigner de ce type d’images et donc à produire des résultats moins déformés - Les images synthétiques
wrongont été générées par SDXL lui-même- un Jupyter Notebook générateur d’images wrong a été créé
- différentes pondérations de prompts ont été utilisées pour mieux distinguer des catégories d’images ratées comme
blurryoubad hands - SDXL a dû être réutilisé pour produire des images de mauvaise qualité mais en haute résolution
- Les images
wronggénérées évoquent des pochettes d’albums punk rock des années 2000, ou semblent normales au premier regard avant de révéler, en y regardant de plus près, un caractère dérangeant relevant de l’uncanny valley - sdxl-wrong-lora se charge sur le SDXL base model
- le refiner n’a pas besoin de LoRA
- un Jupyter Notebook de comparaison a aussi été publié
Méthode de comparaison et résultats représentatifs
- Trois variantes ont été comparées
- le pipeline base + refiner sans LoRA
- le pipeline sans LoRA avec
wrongen negative prompt - le pipeline avec le LoRA
wrongetwrongen negative prompt
- Toutes les générations utilisent le même seed pour conserver un cadrage proche et faciliter la comparaison de l’effet du negative prompt
wronget du LoRA A wolf in Yosemite National Park, chilly nature documentary film photography- avec le modèle de base, l’ajout de
wrongajoute quelques feuilles et un peu de profondeur à l’image de forêt - le LoRA améliore encore l’éclairage, les ombres, le détail des feuilles, et fait regarder le loup vers la caméra
- avec le modèle de base, l’ajout de
An extreme close-up of a wolf in Yosemite National Park, chilly nature documentary film photography- le résultat avec LoRA est meilleur en texture, en vivacité et en netteté
- le simple ajout du prompt
wrongmodifie déjà le point de vue
a large delicious hamburger (in the shape of five-dimensional alien geometry)++++, professional food photography- malgré plusieurs tentatives de prompt engineering, le hamburger à géométrie extraterrestre en cinq dimensions n’est pas correctement rendu
- le SDXL de base semble avoir interprété
alienplus littéralement qu’attendu - le LoRA produit un hamburger plus « extraterrestre », difficile à manger pour un humain, avec une mise en scène plus brillante
lossless PDF scan of the front page of the January 2038 issue of the Wall Street Journal featuring a cover story about (evil robot world domination)++- la lisibilité du texte est meilleure qu’avec Stable Diffusion 2.0, mais reste similaire dans les trois cas
- le LoRA améliore une mise en page plus moderne, une plus grande variété d’articles, et l’épaisseur relative des polices dans les titres
- le modèle de base, même avec le negative prompt
wrong, conserve une page monotone à l’allure de vieux papier brunâtre
USA President Taylor Swift (signing papers)++++, photo taken by the Associated Press- avec le SDXL de base, le bras droit est très peu réaliste, et l’ajout de
wrongseul empire encore le résultat - avec le LoRA, le problème du bras est corrigé, et la veste tire davantage vers un blanc net que vers un blanc jaunâtre
- malgré cela, générer des humains avec SDXL 1.0 reste délicat et peu fiable, avec l’avertissement implicite de ne pas trop regarder les mains
- avec le SDXL de base, le bras droit est très peu réaliste, et l’ajout de
Changements observés dans d’autres exemples
realistic human Shrek blogging at a computer workstation, hyperrealistic award-winning photo for vanity fair- les mains et l’éclairage sont meilleurs, et les détails des vêtements comme l’arrière-plan deviennent plus intéressants
pepperoni pizza in the shape of a heart, hyperrealistic award-winning professional food photography- les détails du pepperoni et les bulles dues à la chaleur sont plus visibles, l’excès de pepperoni sur les bords diminue, et la croûte paraît plus croustillante
presidential painting of realistic human Spongebob Squarepants wearing a suit, (oil on canvas)+++++- Spongebob retrouve un nez, et le costume gagne davantage de boutons
San Francisco panorama attacked by (one massive kitten)++++, hyperrealistic award-winning photo by the Associated Press- le LoRA montre une véritable tentative de suivre le prompt
hyperrealistic death metal album cover featuring edgy moody realistic (human Super Mario)++, edgy and moody- les proportions de Mario se rapprochent davantage de celles du personnage de jeu, et l’éclairage devient plus dur et plus sombre
Ressources publiées et méthode de reproduction
- Le LoRA
wrongest disponible sur Hugging Face - Son efficacité n’est pas garantie dans d’autres interfaces que diffusers
- Les notebooks utilisés pour la génération d’images sont publiés dans le repository GitHub
- Un Notebook Colab pour SDXL 1.0 + refiner + LoRA
wrongpeut être exécuté sur un GPU T4 gratuit - Les versions haute résolution des images générées utilisées dans l’article sont visibles dans le code source du billet
Pourquoi le LoRA wrong a fonctionné
- L’hypothèse de départ était que le LoRA
wrongaméliorerait simplement la qualité et la netteté des images, mais en pratique le résultat se rapproche davantage d’un SDXL plus fidèle à l’intention du prompt - Techniquement, un negative prompt définit une zone de l’espace latent depuis laquelle commence le processus de diffusion
- lorsqu’on utilise un negative prompt
wrongsans LoRA - lorsqu’on applique le LoRA et qu’on utilise un negative prompt
wrong - dans les deux cas, la zone de départ est identique
- lorsqu’on utilise un negative prompt
- Intuitivement, on peut interpréter cela comme un remodelage par le LoRA des régions indésirables de l’espace latent de grande dimension pour les rapprocher de la zone de départ, ce qui réduit la probabilité que la génération normale y aboutisse et améliore ainsi les résultats
- Le fait d’améliorer SDXL en l’entraînant sur de mauvaises images peut techniquement être vu comme une forme de RLHF
- OpenAI améliore ses modèles via des interactions utilisateurs positives, réduisant implicitement les comportements négatifs
- cette expérience, elle, utilise des images choisies comme mauvaises par l’utilisateur pour augmenter implicitement les comportements positifs
- Dreambooth LoRA ne demande pas autant de données d’entrée qu’un grand modèle de langage
Pistes de développement restantes et prochaines expériences
- Il reste encore de nombreux points à améliorer dans le negative LoRA
- les paramètres de génération du dataset synthétique peuvent être affinés
- le LoRA pourrait être entraîné plus longtemps
- Il faut aussi tester si la fusion avec d’autres LoRA permet d’améliorer encore les performances
- la combinaison du LoRA
wrongavec le LoRA Ugly Sonic est citée comme exemple
- la combinaison du LoRA
- SDXL prend aussi en charge un modèle diffusers pour ControlNet
- ControlNet permet de contrôler fortement la forme globale et la composition d’une image générée
- ControlNet peut aussi être utilisé avec un LoRA
- L’amélioration de la qualité de génération d’images IA est présentée comme importante pour un journalisme IA transparent
- avec publication de prompts reproductibles et de Jupyter Notebooks
- dans l’environnement actuel du capital-risque, l’auteur estime que les nouvelles avancées du secteur en génération d’images IA pourraient ne pas être rendues publiques
- il précise aussi ne pas soutenir ni cautionner le remplacement d’artistes professionnels par l’IA
1 commentaires
Avis sur Hacker News
Le concept de RLHF personnalisé est vraiment intéressant
À mesure que l’on interagit davantage avec un système d’IA générative donné, il semble probable qu’on accumule assez de données d’interaction pour ajuster de façon significative les sorties vers ses préférences personnelles. Ce serait bien que l’UI s’améliore pour rendre ce processus aussi transparent que possible
Du point de vue de la mise en produit, il paraît assez simple d’ajouter un retour “j’aime/je n’aime pas” à chaque image générée, ainsi qu’un libellé textuel optionnel pour remplacer
wrong. Une fois suffisamment de retours humains collectés, ou via un traitement batch chaque nuit, on pourrait réentraîner une nouvelle LoRA alignée sur les préférences personnellesOn peut aussi collecter du feedback humain dans la recherche arborescente implicite qui consiste à générer N images candidates à partir d’un prompt, puis à en choisir une pour l’affiner. Plus explicitement, on pourrait avoir une UI permettant de classer/noter rapidement un lot, ou une corbeille où jeter les images qui déplaisent à chaque étape d’amélioration itérative, puis agréger plus tard ces retours négatifs pour mettre à jour une LoRA de projet ou globale
Je me demande aussi jusqu’où pourrait aller le cycle d’itération minimal si l’on créait une boucle de feedback très courte, avec une réaction par touche clavier juste après la génération de l’image. Si l’on reste rivé à la machine pendant quelques heures et qu’on collecte environ 10 000 préférences à raison d’une par seconde, est-ce que cela pourrait rendre le modèle nettement meilleur pour produire des images qui me plaisent personnellement ? Ce serait toutefois assez intense, avec un côté un peu Orange mécanique
Je n’ai pas vu dans l’article le nombre d’images
wrong, mais en parcourant le code, il semble y avoir 13 mots-clés et environ 6 images par mot-clé, donc pas tant que ça. Si le modèle a pu être ajusté à ce point avec seulement une centaine de retours, c’est une quantité étonnamment faibleAI Horde est un cluster distribué open source fonctionnant avec des GPU fournis par des bénévoles, et Stability.ai fournit une partie des ressources GPU pour réaliser des tests A/B
Quand on demande des images au modèle SDXL via Lucid Creations, l’UI d’AI Horde, ou via ArtBot que l’on a créé soi-même, on reçoit 2 images. L’une est générée par SDXL v1.0, l’autre par un modèle mis à jour, mais on ne sait pas laquelle est laquelle
L’utilisateur n’a qu’à choisir l’image qu’il préfère, et les résultats sont renvoyés à Stability.ai pour analyse et intégration dans de futurs modèles d’image
En plus, AI Horde et LAION collaborent de façon similaire pour fournir une évaluation esthétique définie par les utilisateurs dans le même objectif
https://aihorde.net/
https://dbzer0.com/blog/stable-diffusion-xl-beta-on-the-ai-h...
https://dbzer0.itch.io/lucid-creations
https://tinybots.net/artbot
https://laion.ai/blog/laion-stable-horde/
Certaines ne sont toutefois pas très utiles. Par exemple, “random text” semble parfois produire quelque chose qui ressemble à une vieille appli SMS
Les LoRA fonctionnent bien avec seulement 4 ou 5 images, mais c’était avec des versions plus anciennes et plus petites de Stable Diffusion. J’ai donc utilisé davantage d’images pour SDXL et entraîné la LoRA un peu plus longtemps. À titre de comparaison, la LoRA Ugly Sonic utilisait environ 14 images, et elle était probablement surapprise
C’est encore un projet très précoce, mais l’idée clé est que de nombreux flux d’IA générative, qu’il s’agisse de texte ou d’images, d’un modèle unique ou d’une chaîne de modèles, doivent être ajustés à partir d’une forme quelconque de signal de feedback ; il est donc pertinent de construire l’infrastructure de base pour le prendre en charge. L’une des premières démos suivait justement ce type de flux et utilisait l’amélioration de prompts comme substitut peu coûteux à l’ajustement réel des poids du modèle
En gros, nous voulons créer une infrastructure de base au niveau Python qui permette d’écrire facilement des flux presque en Python natif, et de suivre l’exécution des flux génératifs, y compris l’exécution de “composants humains” comme les évaluateurs. Le voyage dans le temps/rembobinage/réexécution, une UI gradio automatique et FastAPI sont aussi pris en charge, mais les deux derniers restent très expérimentaux
À moyen terme, nous voulons permettre d’envelopper n’importe quel flux génératif dans un flux “d’évaluation humaine”, de le déployer automatiquement via une API ou une UI gradio, puis de faciliter son ajustement au moyen de diverses techniques comme le RLHF, le fine-tuning ou les tests A/B de sous-composants génératifs
Pour l’instant, nous nous concentrons sur la bonne mise en place du “squelette”, mais la documentation de démarrage rapide https://github.com/agentic-ai/enact/blob/main/examples/quick... et le README https://github.com/agentic-ai/enact/tree/main#why-enact donnent déjà une assez bonne idée de la direction. Nous cherchons des personnes pour l’essayer ou contribuer
Ces systèmes ne sont-ils pas déjà entraînés, à partir de feedback humain, à attribuer des scores plus élevés à ce qui est bon et plus faibles à ce qui est mauvais ?
C’est un peu comme le Mom test : lorsqu’on demande à quelqu’un d’évaluer, la question elle-même influence l’évaluation
On peut utiliser un flux d’upscale, mais il n’a pas besoin d’être limité comme Midjourney basé sur Discord. On peut afficher toutes les images en pleine taille et aussi détecter des actions comme le fait que l’utilisateur les copie, les enregistre ou fasse un clic droit
Créer de l’art avec Stable Diffusion est devenu un hobby vraiment amusant
La différence entre SD 1.5/2.0 et SDXL est énorme, et c’est impressionnant de voir la qualité s’améliorer aussi vite
Je n’ai pas encore essayé SDXL, mais j’ai beaucoup utilisé la 1.5
Jusqu’ici, je comprenais surtout ça comme une résolution plus élevée et une « qualité » plus élevée, mais comme j’ai longtemps utilisé realistic vision 3, je n’ai jamais eu de problème de qualité. Et avec l’upscaling, je n’avais pas non plus besoin d’une résolution plus élevée
Il y a environ 5 ans, chez certains data scientists, c’était devenu à la mode d’enregistrer toutes les frappes clavier de son PC ; maintenant que ces données deviennent réellement assez utiles, je suis un peu jaloux
J’ai une collection de 30 000 images de mon anime préféré, et il y a 5 ans je les avais même classées de façon compétitive avec un score esthétique ; ça pourrait être assez utile pour ce genre de choses
Très chouette. Je compte bientôt essayer cette idée moi-même. Je suis un peu scientifique aussi :)
Il y a quelques jours, j’ai fait quelque chose d’intéressant. J’ai utilisé le modèle de base SDXL avec Diffusers pour générer des images en mélangeant plusieurs prompts de style, puis j’ai entraîné une LoRA sur ces images, avant de régénérer avec cette LoRA et les prompts utilisés pour créer le jeu d’entraînement
Au final, l’effet était renforcé : c’était plus glitché, plus étrange, avec une impression de haute résolution
Les résultats sont ici : https://imgur.com/gallery/vUobKPK
Évidemment, je prévois d’entraîner une autre LoRA sur ces générations et de répéter le processus
En y repensant, c’est une assez bonne façon de contourner la limite de 77 tokens de Diffusers et de développer beaucoup plus de styles
La LoRA peut être essayée sur https://replicate.com/galleri5/nammeh. Il faut un compte GitHub
Je la mettrai aussi bientôt sur CivitAI
Ce serait bien de publier la LoRA sur civitai.com et sur le Reddit Stable Diffusion aussi
Les résultats ont l’air plutôt bons et j’ai hâte de l’essayer. Je ne savais pas que l’engouement pour les images générées s’était refroidi ; comme je continue à en utiliser régulièrement, j’ai l’impression que c’est toujours un sujet brûlant
Civitai a récupéré la LoRA et l’a publiée : https://civitai.com/models/128708/sdxl-wrong-lora
Si SDXL ne m’a pas énormément enthousiasmé, c’est parce que je n’ai pas eu l’impression d’un bond énorme en qualité d’image. Le fait que la taille ait doublé est sympa, mais je n’ai pas toujours envie de générer des images en 1024x1024, donc c’est aussi un problème
J’utilise toujours des modèles SD 1.5 entraînés par des tiers : les sorties sont vraiment bonnes, et il existe environ 5 méthodes d’upscaling, dont au moins une ajoute de nouveaux détails pendant l’agrandissement
Dans un registre un peu lié, je ne sais pas encore vraiment pourquoi, mais les LoRA que j’ai créées pour Stable Diffusion XL ne fonctionnent bien que lorsque j’ajoute un prompt négatif assez générique
Je les ai fine-tunées avec 6 photos de mon visage, mais si je n’utilise qu’un prompt positif, le personnage généré ne me ressemble pas vraiment. En revanche, quand j’ajoute des termes négatifs génériques comme « low quality », la représentation de mon visage devient soudain presque exacte
J’ai entraîné plusieurs modèles, avec différents learning rates et nombres d’époques d’entraînement, et ça s’est reproduit à chaque fois
Au final, j’ai le sentiment que ce phénomène est lié d’une manière ou d’une autre à ce qui produit les observations de minimaxir dans cet article
Je ne suis pas d’accord avec l’idée que la sortie de SDXL serait passée globalement inaperçue parce que l’engouement pour l’IA d’images générées s’est refroidi
D’après les personnes avec qui j’en ai parlé, il y avait deux raisons. D’abord, des exigences plus élevées en VRAM et en calcul. Ensuite, une qualité de résultat perçue comme inférieure à celle des modèles SD1.5 spécialisés
Si l’un de ces deux points avait été différent, je suis convaincu que SDXL aurait été bien plus populaire
Mais au final, la plupart des gens attendent surtout de voir si les modèles SDXL spécialisés pourront réellement dépasser les modèles 1.5 spécialisés
Pour la plupart des gens qui y touchent occasionnellement, je pense que c’est plutôt un jouet avec lequel on s’amuse un moment. Les fans acharnés de SD… fabriquent probablement des trucs hardcore
XL est mauvais pour le porno. Stability a eu peur de sa propre création et a essayé de se couvrir du côté de la « sécurité ». Il ne faudrait pas que du porno de Kate Middleton ou d’Emma Watson soit trop plausible
Les gens continueront à utiliser la 1.5 jusqu’à ce qu’il y ait mieux, surtout mieux pour le porno
Ce concept n’est pas nouveau. Sur civit.ai, il y a beaucoup de negative embeddings à mettre dans les prompts négatifs pour corriger les mains et la mauvaise anatomie
Le présent article porte sur les negative LoRA, qui ne fonctionnent pas de la même manière sur le plan technique
Peut-être parce que j’ai grandi dans le champ de contradictions des années 90, entre « contre-culture » et « contre-culture, mais diffusée sur MTV », quand je vois un prompt se terminer par une référence à des tags du genre « award winning photo for vanity fair », ça me donne une profonde envie de ne pas participer à cette vague d’images générées
Je ressens la même chose avec n’importe quel suffixe de tags standard que les auteurs de prompts utilisent dans ce genre d’articles
L’affirmation selon laquelle « une seule LoRA peut être activée à la fois » n’est absolument pas vraie, au moins dans auto1111