2 points par GN⁺ 2023-08-23 | 1 commentaires | Partager sur WhatsApp
  • 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 wrong montre, 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 prompt wrong
  • 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 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
  • 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_scale par défaut est 7.5
    • Max Woolf préfère 13, et tous les exemples LoRA de l’article utilisent aussi un guidance_scale de 13
  • 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
  • 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 wrong des images déformées et de mauvaise qualité
  • L’objectif était de vérifier si l’usage de wrong comme 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 wrong ont é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 blurry ou bad hands
    • SDXL a dû être réutilisé pour produire des images de mauvaise qualité mais en haute résolution
  • Les images wrong gé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 wrong en negative prompt
    • le pipeline avec le LoRA wrong et wrong en 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 wrong et du LoRA
  • A wolf in Yosemite National Park, chilly nature documentary film photography
    • avec le modèle de base, l’ajout de wrong ajoute 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
  • 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 wrong modifie 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é alien plus 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 wrong seul 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

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 wrong est 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 wrong peut ê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 wrong amé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 wrong sans 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
  • 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 wrong avec le LoRA Ugly Sonic est citée comme exemple
  • 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

 
GN⁺ 2023-08-23
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 personnelles
    On 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 faible

    • AI Horde implémente en pratique cette approche en collaboration avec Stability.ai
      AI 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/
    • Exact. 6 valeurs de CFG × 13 mots-clés = 78 images
      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
    • Le framework open source que nous développons pourrait vous intéresser : https://github.com/agentic-ai/enact
      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
    • Le RLHF signifie apprentissage par renforcement à partir de feedback humain
      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 ?
    • Le RLHF implicite fonctionne mieux que les méthodes explicites
      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

    • Tu peux expliquer en quoi la différence entre SD 1.5/2.0 et SDXL est si énorme ?
      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

    • La release originale a été publiée sur /r/StableDiffusion, mais tous les commentaires se résumaient à « pourquoi ce n’est pas compatible avec A1111 ? », et je n’ai pas trouvé de bon script de conversion : https://www.reddit.com/r/StableDiffusion/comments/15r5k3i/i_...
      Civitai a récupéré la LoRA et l’a publiée : https://civitai.com/models/128708/sdxl-wrong-lora
    • Les gens ont tendance à supposer que tout le monde fait comme eux à partir de leurs propres habitudes, et je le fais assez souvent aussi. De mon point de vue, l’engouement pour les images générées est toujours bien présent
      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

    • La raison, c’est la qualité inférieure des sorties
      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

  • 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

    • « award winning photo for vanity fair » est surtout une astuce pour faire émerger une bonne composition photo, par exemple la règle des tiers
  • L’affirmation selon laquelle « une seule LoRA peut être activée à la fois » n’est absolument pas vraie, au moins dans auto1111

    • De mémoire, c’est géré en interne par fusion et ajustement des poids