Objectif fixé par une simple phrase : « je veux un modèle qui rend une photo en manga ». Voici la chaîne complète, construite en une soirée sur le GPU gratuit de Kaggle, 0 € — et surtout comment chaque problème rencontré a dicté l'étape suivante. Prérequis : comprendre la diffusion.
Tout part d'une découverte faite avec l'expérience du chien : un modèle de diffusion transforme tout ce qu'on lui donne vers son monde à lui (son prior = ses données). Pour manga-fier, il faut donc un modèle dont le monde est le manga : le même U-Net que pour les chats, entraîné sur 63 565 visages d'anime. La preuve qu'il maîtrise le style — 64 visages générés depuis du bruit pur, aucun n'existe :
La méthode img2img : on brouille la vraie photo à un niveau t choisi (le curseur de force), et le prior manga la débruite — il la « répare » vers son monde. Ça marche… à moitié :
Constat (fait par l'utilisateur en regardant la planche) : « ça ne garde pas les traits communs ». Diagnostic : l'identité habite les détails fins — et le bruit détruit justement les détails fins en premier. À t fort, il ne survit que les masses de couleur : le modèle génère un visage manga compatible, pas le tien. Pire, le prior est biaisé (le dataset = quasi que des jeunes filles d'anime) : le monsieur de la rangée 3 devient une fille aux cheveux verts.
Le problème du premier essai : la photo n'est donnée qu'une fois, brouillée, puis elle s'érode. Le remède : extraire la carte des contours de la photo (filtre de Sobel — pure arithmétique qui détecte les frontières claires/sombres) et la montrer au U-Net à chaque pas du débruitage, intacte, en 4e canal d'entrée. La structure ne peut plus se perdre : elle est réinjectée en permanence. L'entraînement s'auto-étiquette : chaque visage anime est apparié à ses propres contours — aucune main humaine.
L'identité est sauvée : chaque personne reste reconnaissable, et 3 tirages de bruit = 3 ambiances sur la même structure. Mais un nouveau problème apparaît (repéré à l'œil, encore) : le rendu fait « photo peinte », pas dessin net.
Pourquoi « pas clean » ? Compare les colonnes contours des planches : ceux d'un dessin sont des lignes franches ; ceux d'une photo sont du gravier — chaque pore de peau, chaque mèche fait une micro-ligne. Le modèle, contraint par ce bruit de texture, peint au lieu de dessiner. Le correctif en deux gestes : ① flouter d'abord (les micro-textures disparaissent) ; ② binariser ensuite (chaque pixel devient ligne ou pas-ligne, comme un trait de dessinateur) — et on rééduque le modèle avec ce même extracteur.
Verdict : le style anime est revenu — chevelures colorées, aplats francs, regarde la rangée 1 (et le contrôle sur dessins, redevenu superbe). Mais le curseur a basculé : les visages sont plus déformés qu'à l'étape 3 — sur une photo 64×64, même flouté-binarisé, le trait reste épais et grumeleux (colonne contours : des pâtés blancs, pas des lignes fines). Plus de liberté = plus de style et moins de ressemblance : le curseur contrainte ↔ liberté, démontré en deux planches. La suite connue des pros : un extracteur de lignes plus fin (amincissement type Canny) ou une résolution supérieure.
Le mur du « pas vrai manga » était la résolution — alors on a construit la pièce manquante de notre pile : un compresseur maison (auto-encodeur 128×128 → 32×32, entraîné en recopiant ses entrées) et la diffusion qui tourne dans l'espace compressé (l'architecture de Stable Diffusion, 100 % à nous — détails sur la page diffusion). Puis le même test img2img que les étapes précédentes :
Deux surprises. ① La colonne « AE seule » : le compresseur, qui n'a pourtant vu que du manga, recopie les vraies photos presque parfaitement — un compresseur apprend des motifs locaux génériques (coins, dégradés), c'est le débruiteur qui porte le « monde manga », pas lui. ② À t = 700-900, les plus beaux visages manga du projet — mèches fines, yeux dessinés, 4× plus de détail qu'en 64. Mais l'identité s'évapore toujours (pas de guidage), et à t bas le mélange est brouillon : dans l'espace latent, chaque unité de bruit détruit plus d'information. Le chaînon suivant est connu : rebrancher les contours (étape 3) sur ce moteur 128 — structure + style + résolution, enfin réunis.
Le bilan des étapes 2 à 5 tenait en une phrase : chaque run n'avait que deux qualités sur trois — le style (le prior manga), la finesse (le 128×128 latent), la ressemblance (le trait guidé). run-014 les assemble : le prior latent du run-012, le trait de la personne extrait en 128 (enfin des lignes, plus des pâtés) encodé et montré au U-Net à chaque pas, génération depuis le bruit pur guidée par le trait seul.
Regarde la rangée 2 : les lunettes, la coiffure, le visage — c'est elle, en dessin, en 128×128. La structure tient (le contrôle sur dessins est propre) et c'est la meilleure combinaison ressemblance + style + finesse du projet. Le rendu reste « aquarelle » — couleurs qui bavent, pas les aplats francs d'un vrai anime : l'écart trait-de-photo ↔ trait-de-dessin n'est pas entièrement comblé, et 25 époques de fine-tuning laissaient la loss encore en descente. La machine 100 % maison est là ; le polissage est une affaire d'époques et de données, plus d'architecture.
Tentative logique : amincir le trait avec l'algorithme de Canny (ne garder que la crête de chaque ligne, 1 pixel — colonne « trait » : de vrais croquis au crayon !) et tripler la durée (60 époques). La loss s'améliore (0,065 → 0,055, mieux que l'étape 6)… et pourtant les visages sont plus brouillons qu'à l'étape 6.
Pourquoi ? Le trait passe par un encodeur qui le réduit de 128×128 à 32×32 avant d'entrer dans le U-Net : une ligne de 1 pixel disparaît presque dans cette réduction, alors que les bandes épaisses de l'étape 6 y survivaient. Un guide plus beau pour l'œil humain est un guide plus faible pour le modèle. Deux leçons d'or : (1) la qualité d'une entrée se juge après son trajet dans le réseau, pas avant ; (2) énième preuve que la loss ne dit pas tout. L'étape 6 (run-014) reste le champion de la manga-fication maison.
1. Le prior est la matière première : on ne « programme » pas le style manga — on le fait entrer par les données (63 000 exemples), et le modèle transforme tout vers ce qu'il connaît.
2. Chaque limite observée à l'œil a dicté le run suivant : pas ressemblant → guider par les contours ; pas clean → nettoyer le trait. C'est le vrai moteur du projet : regarder les planches, pas la loss (elle a même été divisée par 2 entre les runs 009 et 011 sans que le style s'améliore).
3. La grande découverte cachée : le curseur contrainte ↔ liberté. Plus on impose (contours denses), plus ça ressemble et moins c'est stylé ; plus on libère, plus c'est beau et moins c'est toi. Toutes les applis « anime-toi » commerciales vivent sur ce même curseur.