Archives mensuelles : février 2025

Hypothèse de Sapir-Whorf

(Référence pour les incultes: https://fr.wikipedia.org/wiki/Hypoth%C3%A8se_de_Sapir-Whorf )

L’encodeur textuel t5xxl utilisé par Flux.1 est, comme tout bon LLM , entrainé sur de nombreux langages et pas juste en anglais (*). Mais pour un prompt identique simplement traduit dans différentes langues, comment se comporte l’image générée, est-elle aussi localisée vers le pays correspondant ?

(*) Enfin pas tant que ça: T5 a été entraîné sur Common_Crawl, qui contient 46% d’anglais, suivi de l’allemand, le russe, le japonais, le français, l’espagnol et le chinois, chacun représentant moins de 6 % des documents. Refs: https://en.wikipedia.org/wiki/T5_(language_model) et https://en.wikipedia.org/wiki/Common_Crawl

Testons depuis un prompt de base « Un homme en ville devant un monument célèbre » (à part l’anglais, les autres langues que je ne connais pas ont été traduites via Google-Translate), toujours sur la seed « 1 »

  • Un homme en ville devant un monument célèbre
  • A man in a city in front of a famous monument
  • Un hombre en la ciudad frente a un monumento famoso.
  • رجل في المدينة أمام نصب تذكاري مشهور
  • Мужчина в городе перед известным памятником
  • 유명한 기념물 앞에 있는 마을의 한 남자
  • 有名な記念碑の前に立つ町の男性
  • ሓደ ሰብኣይ ኣብ ከተማ ኣብ ቅድሚ ፍሉጥ ሓወልቲ (Tigrinia, parlé en Ethiopie et Erythrée)
  • Mwanamume mjini mbele ya mnara maarufu (Swahili)
  • En man i stan framför ett berömt monument (Skölh Offenstrü… Suédois)
  • Moški v mestu pred slavnim spomenikom (Slovène)
  • Ένας άντρας στην πόλη μπροστά από ένα διάσημο μνημείο
  • Ein Mann in der Stadt vor einem berühmten Denkmal
  • Bir kishi shaharda mashhur yodgorlik oldida (Uzbek)
  • 鎮上一個著名嘅紀念碑前面嘅男人 (Cantonese)

Bon… Apparemment, les Coréens et Japonais ont overfité sur les mangas, les Ouzbeks sont réincarnés en tapis, et les fameuses Hyènes Bleues de chines roulent en scooter. La version arabisante est quant à elle très fantasmée…

Enfin c’était peut-être pas de bol pour cette seed, testons avec la seed « 2 »… Alors, dans l’ordre « Français, arabe, Swahili, Uzbek, Cantonese »: Déjà on voit qu’en Français le « monument célèbre » a été spécialisé en Arc de Triomphe. Pour le reste….

… oui bon c’est mieux mais pas vraiment ce que j’avais demandé non plus. Ne parlons même pas du genre.

Conclusion partielle: Dans les langues européennes (sûrement les mieux représentées dans l’entrainement de l’encodeur) l’image générées est, à la fois pertinente pour le prompt, et plus ou moins légèrement localisée dans la géographie typique correspondante; Mais en s’éloignant pour des langues plus « exotiques », ne vont rester qu’une vague tendance stylistique et stéréotypée.

On peut quand même, probablement, s’en servir pour orienter certaines caractéristiques de l’image générées; plutot que de décrire textuellement un paysage suédois typique, il suffit d’écrire directement le prompt en suédois.

Compromis à 50%: bilingual

Maintenant, utilisons la puissance de l’embedding textuel pour faire des maths sur la langue, en mixant les deux prompts « langue1 + langue2 » pour donner un vecteur abstrait entre les deux.

Le plus simple est de simplement écrire les deux phrases concaténées dans le prompt « Bir kishi shaharda mashhur yodgorlik oldida Un homme en ville devant un monument célèbre« . Notre tapis brodé et jeune beauté en studio se sont transformés vers l’idée originale du prompt:

Prompt Interpolation

Avec le node ComfyUI « ConditioningAverage » on peut aussi écrire les deux prompts séparément en faire la moyenne mathématique, en réglant la pondération.

En réglant le taux d’ouzbekitude on peut varier assez continûment de 12% à 75% de français par rapport à l’Ouzbek (à 10% de français on est encore sur le tapis, à 12% on a déjà un humain, et à partir de 42% on a la composition habituelle personnage de dos).

Malgré ça, est-ce que ça ressemble à Samarcande ? Les médersa du Régistan n’ont pas ce gros bulbe sur le dessus.

Bien sûr on peut aussi mélanger Uzbek et Swahili pour voir ce que ça donne (seed 2 cette fois, qui a déjà des humains photographiques de base, même si la composition n’était pas bonne):

(et je doute que ça soit des tenues traditionnelles représentatives non plus…)

Pour forcer le respect du prompt initial, on va y rajouter 30% de prompt français (celui plus haut devant l’Arc de Triomphe) (à 12% il ne se passe quasiment rien), on a maintenant:

Bon maintenant il n’y a plus de monument particulièrement notable. Donc pas d’incohérence architecturale flagrante… Pas de pierre, pas de palais. Pas de Palais… pas de palais.

Reality is boring… but real

Boring mais beaucoup plus réelle: Boring Reality https://civitai.com/models/639937/boreal-fd-boring-reality-flux-dev-lora et sa version vidéo https://civitai.com/models/1222102/boreal-hl ( exemples sur https://www.youtube.com/watch?v=0tuGBrDbXU0 ) donne un grain early-2000 au lieu du surréalisme/kraxiréalisme typiquement choisi pour la génération d’images qui claquent. Ceci permet de beaucoup plus facilement se faire passer pour vrai (à l’image du filtre CRT qui rend les Backrooms réalistes malgré un CGI sous blender très basique)

En repartant d’une vieille image non publiée pour réaliser l’article https://public.letribun.org/2023/05/02/4k-ultra-hd-remaster-blueray/ , faites sous Stable-Diffusion 1.5, je fais passer un Image2Image avec ComfyUI et FLux-1 Dev, Lora BoringReality et « SameFace Fix » ( https://civitai.com/models/766608/sameface-fix-flux-lora , poids négatif)

  • Prompt de la source sous SD1.5 + Lora style-paintmagic: concept-art of a beautiful korean girl with thick flowing hair in (style-paintmagic_0.1), detailed, high quality
  • Prompt du img2img avec un denoise de 50% : A polaroid photo of a indie japanese teenager girl in her bedroom, Polaroid Colorpack 80, long hair, dyed and wet hair, polaroid frame, grainy, large field of view
  • 60% denoise: A photo taken from a fisheye doorbell of a indie japanese teenager girl on a porch

Ça reste encore assez « stylisé » pour être une photo travaillée (façon photo d’album indie).

Pour du pur boring réalisme il faut sans doute faire du txt2img ou un denoise suffisamment fort qu’il ne reste plus rien (en attendant d’avoir un guidage précis via ControlNet), dans ce genre à 87% de denoise:

Dans le doute mais normalement tout le monde a déjà récupéré des workflows ailleurs, voici le mien adapté d’un autre trouvé sur le net.

Télécharger l’image dans ce lien et drag-and-drop l’image dans comfyUI pour l’importer. (Ne pas importer l’apperçu visible ci-dessous car WordPress supprime les meta-datas du png, qui contiennent le workflow json effectivement utile)

ComfyUI img2img Workflow with 2 loras

Un autre Lora est Amateur Photography , entrainé a priori sur des photos amateurs de blog ou de flickr de 2007.

Réglages txt2img parfaitement minimalistes; à noter peut-être qu’un sampler « Heun/Beta » (au lieu du classique Euler) donne un rendu plus réaliste (l’auteur recommande Deis/DDIM pour la v6, mais chez moi ça ne rend pas si bien que ça et donc j’ai gardé ce qui était recommandé pour la v2).

An amateur theatre play of the revolution in the streets of an Italian suburb on a rainy day. A dog is chasing a cat in the middle of the crowd. Photo taken in 2007 from the sidewalk and posted on Flickr by Anonymous
A journalist interviews people about the revolution in the streets of an Italian suburb on a rainy day. The sky is dark and cloudy; A dog is chasing a cat in the middle of the crowd.
In the background we can guess a parade or carnaval is happening behind the crowd with colorful dancers.
Photo taken in 2007 from the sidewalk and posted on Flickr by a an anonymous bystander.

Presque rien ne fait penser à une image IA a priori… sauf ce cable de micro qui ne va nulle part, et la dame en blanc dans le fond a clairement l’air de juger fortement le journaliste pour être aussi incompétent.

Zoomons un peu pour mieux nous en rendre compte, en utilisant un Upscaler 4x_NMKD suivant d’un re-detailer couplé à Controlnet, inspiré du workflow de https://myaiforce.com/flux-controlnet-upscaler/ . Ici par contre pas de captionning automatique avec Florence2, ce sera fait main ou interrogé en ligne sans Node spécial.

Et là on se rend bien compte qu’il faut continuer de charger le même Lora « amateur photography » et les mêmes samplers lors de l’upscaling, sinon la vieille dame « populaire » commence à s’habiller chez Versace et à se transformer en Reine d’Angleterre.

Blog’s not dead

Après presque 2 ans à payer l’hébergement sans rien publier de nouveau il serait temps de se bouger un peu.

Pour démarrer avec du nouveau qui sent le réchauffé: Test de ComfyUI, Flux-1, Flux-Lora.

Pas de détails (installer ComfyUI dans un docker en suivant un tuto/Dockerfile obsolète, récupérer des workflows qui ressemblent à des plats de spaghetti aux node et paramètre systèmatiquement cassés, récupérer des modèles/checkpoints/safetensor aux quatre coins du web comme si on était encore à chercher des torrent rargb repack, et se battre avec une carte graphique qui plante).

Bref: Reprenons telle-quelle l’image finale de https://public.letribun.org/2023/05/02/4k-ultra-hd-remaster-blueray/ qu’on va passe dans un workflow Img2Img tout à fait naïf basé sur Flux-1-dev et un Lora hyperkraximalism , ça donne ça en un coup (denoise 70%):

Un denoise plus léger de 40% pour conserver plus de l’original:

Et une version beaucoup plus denoisée et libre de s’écarter de l’original:

Voilà, rien de plus à dire aujourd’hui.