Ismail Ben Alla

Text2Image

Douze architectures texte-vers-image côte à côte

IA générative · oct. 2026 · Terminé

Les principales façons de générer des images à partir de texte aujourd’hui, implémentées avec les mêmes données, encodeur de texte, boucle et évaluateur, pour que seule l’architecture change.

Construit avecPyTorchCustom TransformersNumPypytest

Text2Image — vue d’ensemble

Présentation

Les systèmes texte-vers-image reposent sur une poignée de familles d’architectures, du U-Net de Stable Diffusion au MMDiT à la FLUX, en passant par MeanFlow en une étape, les modèles unifiés à la Transfusion, la prédiction à l’échelle suivante de VAR et l’autorégression à tokens continus de MAR, et les articles les décrivent à une échelle où rien ne peut être comparé sur un ordinateur portable. J’en ai implémenté douze côte à côte en PyTorch, chacune assez petite pour s’entraîner sur CPU, derrière la même interface : model.loss(images, tokens) et model.generate(tokens, cfg_scale).

Chaque modèle partage les mêmes données, le même tokenizer et encodeur de texte, la même boucle d’entraînement (AdamW, warm-up puis planification cosinus, poids EMA, écrêtage du gradient) et le même classifier-free guidance, de sorte que la seule chose qui change entre les runs est l’architecture. Le benchmark est une tâche procédurale de formes légendées : une forme colorée sur fond sombre en 32x32, décrite par 432 prompts sur quatre attributs indépendants (taille, couleur, forme, position). Un petit oracle CNN lit ces attributs dans une image avec une précision d’environ 100 % et note les images générées par attribut et sur les quatre à la fois, une version jouet de GenEval.

Après 2 000 pas avec un batch de 32, le U-Net en v-prediction réussit tous les attributs (100 %), les modèles à tokens suivent (MaskGIT 77 %, MAR 72 %, VAR 65 %) et les transformers de flux en espace pixel placent correctement mais floutent les formes (DiT 25 %, MMDiT 34 %). La cible de prédiction s’est révélée décisive : le même U-Net en ε-prediction obtient 3 %, et la prédiction d’image propre de JiT double le score de DiT. MeanFlow égale DiT avec une seule évaluation du réseau au lieu de 30.

La question

Quand les données, l’encodeur de texte, la boucle d’entraînement et l’évaluation sont fixés, comment les principales architectures texte-vers-image se comparent-elles pour associer chaque mot d’une légende à la bonne propriété visuelle ?

Fonctionnalités clés

Comment ça marche

  1. Dessiner et légender

    Chaque image d’entraînement est une forme dessinée procéduralement en 32x32 à partir d’un prompt tel que « a small blue square at the top left », avec un jitter aléatoire de position et d’échelle ; une banque pré-rendue garde la boucle CPU rapide.

  2. Encoder le texte

    Un tokenizer de mots et un petit transformer produisent une séquence de tokens pour l’attention croisée ou jointe et un vecteur agrégé pour la modulation adaLN. 10 % des prompts sont remplacés par le prompt nul pour que le guidage fonctionne à l’échantillonnage.

  3. Entraîner avec une perte par famille

    Les modèles de diffusion et de flux régressent ε, v, x0 ou une vitesse sur des pixels bruités ; MeanFlow régresse la vitesse moyenne via l’identité MeanFlow ; les modèles à tokens prédisent des codes VQ (token suivant, tokens masqués ou échelle suivante) ou font tourner une tête de flux par token continu.

  4. Générer avec guidage

    Chaque generate() combine les sorties conditionnelle et inconditionnelle (bruit, vitesse, logits ou vitesse de la tête de flux) à l’échelle 3,0 ; MeanFlow échantillonne en un pas, MaskGIT en environ 12, les modèles de diffusion en 30.

  5. Noter avec l’oracle

    Un CNN entraîné sur des images réelles lit la couleur, la forme, la position et la taille de chaque image générée pour 128 prompts aléatoires ; un modèle ne marque sur « les 4 corrects » que s’il associe chaque mot à la bonne propriété.

Exemples

Chaque modèle sur les 8 mêmes prompts, de « a large red circle at the center » à « a small red cross at the bottom left ». Le U-Net les dessine exactement ; les transformers de flux en espace pixel les placent bien mais les floutent ; l’ε-prediction et SANA perdent la position.
Chaque modèle sur les 8 mêmes prompts, de « a large red circle at the center » à « a small red cross at the bottom left ». Le U-Net les dessine exactement ; les transformers de flux en espace pixel les placent bien mais les floutent ; l’ε-prediction et SANA perdent la position.
Échantillons du U-Net en v-prediction, le meilleur modèle à cette échelle : 100 % sur la couleur, la forme, la position et la taille après 2 000 pas sur CPU, et le seul modèle qui dessine nettement les petites croix.
Échantillons du U-Net en v-prediction, le meilleur modèle à cette échelle : 100 % sur la couleur, la forme, la position et la taille après 2 000 pas sur CPU, et le seul modèle qui dessine nettement les petites croix.
Échantillons de MaskGIT, le meilleur transformer : 77 % des images ont les quatre attributs corrects, le décodeur VQ gérant les détails fins et le transformer choisissant 64 codes en environ 12 pas parallèles (40 ms par image).
Échantillons de MaskGIT, le meilleur transformer : 77 % des images ont les quatre attributs corrects, le décodeur VQ gérant les détails fins et le transformer choisissant 64 codes en environ 12 pas parallèles (40 ms par image).
Échantillons de MeanFlow générés avec une seule évaluation du réseau (9 ms par image) : 25 % tout correct, le même score que DiT à 30 pas sur le même backbone.
Échantillons de MeanFlow générés avec une seule évaluation du réseau (9 ms par image) : 25 % tout correct, le même score que DiT à 30 pas sur le même backbone.

Entrée

transfusion.complete_caption("a small blue")

Sortie

"a small blue square at the top right"

Le modèle Transfusion est aussi un modèle de langage sur les légendes : le même transformer qui débruite les patches d’image complète les légendes grammaticalement.

Entrée

text2image-eval --ckpt runs/unet/model.pt --oracle runs/oracle/model.pt --n 128

Sortie

color 100% shape 100% position 100% size 100% all 4 correct 100%

La ligne U-Net du tableau du benchmark ; la même commande avec runs/unet-eps/model.pt donne 62 % / 38 % / 11 % / 60 % et 3 % tout correct, la seule différence étant la cible de régression.

Stack technique

Ce que j’ai appris

Limites

Mots-clés

texte-vers-image · Stable Diffusion · U-Net · DiT · MMDiT · FLUX · SANA · JiT · MeanFlow · Transfusion · génération d’images autorégressive · MaskGIT · VAR · MAR · VQ-VAE · flow matching · rectified flow · classifier-free guidance · v-prediction · GenEval · PyTorch