Module 8 — Mise à l'échelle et correction des visages
Une image SDXL sort à 1024 sur 1024 pixels : très correcte pour un écran, insuffisante pour une bannière d'exposition ou une impression A3 à 300 points par pouce. Pour le fil rouge — préparer un visuel de la chaise pour un catalogue imprimé — il faut monter à 3000 sur 3000 pixels au moins. Deux familles de techniques y arrivent, et il ne faut pas les confondre.
Deux familles, deux principes
La mise à l'échelle par réseaux dédiés (Real-ESRGAN, SwinIR, BSRGAN) traite la haute résolution comme un problème d'apprentissage supervisé : le réseau a été entraîné à prédire la version haute résolution d'une image dégradée, à partir de millions de paires (image nette, image dégradée). Il ne s'interroge pas sur ce que représente l'image ; il applique un filtre appris.
La mise à l'échelle par diffusion (SDXL Refiner à haute résolution, pipelines Latent Upscaler) traite le même problème comme une génération conditionnée : l'image d'entrée guide un débruitage sur une résolution supérieure, avec la consigne texte réinjectée.
La différence est fondamentale.
Un réseau dédié est rapide (une image passe en quelques secondes sur CPU pour du 4x), prévisible (deux exécutions donnent la même sortie), et fidèle aux pixels d'entrée. Il ne peut pas inventer de détails qui n'étaient pas dans l'image, mais il ne peut pas non plus se tromper sur ce qu'il y a.
La diffusion à haute résolution est plus lente, variable (chaque graine change le résultat), et surtout capable d'halluciner des détails absents de l'image d'entrée — qui peuvent améliorer visuellement le résultat (une texture de bois plus fine) ou trahir l'original (les mots d'une étiquette deviennent illisibles ou différents). C'est un choix méthodologique, pas simplement technique.
Real-ESRGAN : le défaut raisonnable
Real-ESRGAN est un dérivé de ESRGAN entraîné spécifiquement pour les dégradations réelles — compression JPEG, flou de mouvement, bruit numérique. Il existe en variantes 2x, 4x et 8x, avec des modèles distincts pour les images naturelles et les illustrations anime (Real-ESRGAN-Anime). Pour le fil rouge, la variante générale 4x fait passer 1024 à 4096 pixels de côté en une passe.
from PIL import Image
from realesrgan import RealESRGANer
from basicsr.archs.rrdbnet_arch import RRDBNet
modele = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, scale=4)
augmenteur = RealESRGANer(
scale=4,
model_path="./poids/RealESRGAN_x4plus.pth",
model=modele,
tile=512, # decoupe en carreaux pour tenir en memoire
tile_pad=32,
half=True,
)
entree = Image.open("chaise-1024.png").convert("RGB")
sortie, _ = augmenteur.enhance(np.array(entree), outscale=4)
Image.fromarray(sortie).save("chaise-4096.png")
Le paramètre tile mérite d'être connu : il découpe l'image en carreaux qui passent successivement dans le réseau, pour tenir en mémoire graphique. Sans cela, une image 4x d'une entrée 1024 demande d'énormes quantités de mémoire pour la sortie intermédiaire. Une valeur de 512 pixels avec 32 de recouvrement passe sur 6 à 8 Go.
La mise à l'échelle par diffusion : quand c'est justifié
Le geste typique pour un rendu photo est le hires fix : générer d'abord une image à résolution native (1024), puis faire un passage img2img à résolution supérieure (par exemple 2048) avec une force de 0,3 à 0,45. Cette seconde passe ajoute des détails cohérents avec la consigne — grain de bois, fibres du tissu, imperfections de matière — que Real-ESRGAN ne peut pas inventer.
C'est le bon choix quand on veut du photo réalisme fin. C'est le mauvais choix quand la fidélité aux pixels est critique — retouche d'archive, image contenant du texte, visage identifiable de personne réelle.
Une pratique qui combine les deux mondes : d'abord Real-ESRGAN pour un premier 2x fidèle, puis diffusion à faible force pour un second 2x qui ajoute des détails cohérents. Le résultat est plus prévisible qu'une diffusion 4x d'un seul coup, et plus riche qu'un Real-ESRGAN 4x brut.
Les artefacts à savoir reconnaître
Trois artefacts reviennent régulièrement sur les images mises à l'échelle.
Les motifs répétés apparaissent avec Real-ESRGAN sur des textures uniformes — un grain de peau devient un motif régulier, une texture de tissu prend une trame visible. Le tuilage y contribue, avec des jonctions parfois visibles. Solutions : augmenter le recouvrement (tile_pad), ou finir par une passe de diffusion à force basse.
Les hallucinations locales apparaissent avec la diffusion : un détail plausible mais faux, souvent sur les visages et les mains. Sur une image générée, c'est acceptable ; sur une retouche d'image existante, c'est une trahison. Solutions : baisser la force (0,2 au lieu de 0,4), ou masquer les zones sensibles.
La perte de netteté sur les contours secondaires peut apparaître avec des modèles trop agressifs. Real-ESRGAN-Anime sur une photo réelle, par exemple, lisse trop. Choisir le modèle adapté à la source.
Correction des visages
Les visages sont un cas à part. Stable Diffusion les génère souvent avec des défauts subtils — yeux asymétriques, dents floues, bouche mal dessinée — parce que le U-Net décide de la région complète en même temps, sans donner un budget de résolution particulier aux traits fins. Deux réponses spécialisées existent.
GFPGAN (Generative Facial Prior GAN, 2021) est un réseau adverse entraîné à restaurer les visages : il détecte chaque visage dans l'image, extrait la région, applique un modèle spécialisé, et recompose. C'est très efficace sur les vrais visages, un peu moins sur les visages stylisés. CodeFormer (2022) suit une logique proche avec un poids w réglable (entre 0 et 1) qui arbitre entre fidélité à l'original et qualité restaurée.
Le geste pratique consiste à passer l'image mise à l'échelle dans un correcteur de visage après la mise à l'échelle, jamais avant : sinon le correcteur produit de belles zones aux dimensions basses qui seront ensuite étirées et perdront leur détail.
Préparer pour l'impression
Trois vérifications finales avant d'envoyer un fichier au format catalogue papier.
La résolution effective : viser 300 points par pouce à la taille finale. Une image 4096 sur 4096 pixels remplit un carré de 34 cm à cette densité — largement suffisant pour un carré d'un pied dans un catalogue. En dessous de 200 points par pouce, le grain devient visible.
Le profil colorimétrique : les images IA sortent en sRGB. L'imprimeur travaille en CMYK, avec un profil qui dépend du papier. La conversion se fait dans une application graphique, pas dans la génération. Ne pas oublier que certaines couleurs saturées sRGB sont hors du gamut CMYK et sortiront ternes.
Le format d'enregistrement : PNG pour préserver la qualité entre étapes, TIFF sans compression pour l'envoi final. Le JPEG haute qualité (95 %) reste acceptable pour un usage web ; en dessous, la compression laisse des artefacts qui deviennent visibles à l'impression.
Les images générées peuvent embarquer, selon l'outil, les hyperparamètres complets — consigne, graine, modèle, LoRA, poids. Pratique pour vous, indiscret pour un client à qui vous ne voulez pas révéler la recette. Nettoyer les métadonnées avant livraison (exiftool -all= image.jpg) est un geste d'hygiène professionnelle.
En résumé
- Les réseaux dédiés (
Real-ESRGAN) sont rapides, prévisibles et fidèles aux pixels ; la diffusion ajoute des détails cohérents mais peut halluciner. - Le hires fix — passe
img2imgà haute résolution avec force basse — enrichit un rendu, à réserver aux cas où la fidélité aux pixels n'est pas critique. GFPGANouCodeFormerrestaurent les visages ; à appliquer après la mise à l'échelle, pas avant.- Pour l'impression : viser 300 points par pouce, prévoir la conversion
sRGBversCMYK, préférerPNGouTIFFauJPEG.
Module suivant : le coût de calcul et l'optimisation mémoire, pour savoir quel matériel autorise quelles techniques, et comment faire tenir un pipeline complet sur une carte modeste.