🎨 La machine à manga

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.

📷 ta photo
✏️ extraction du trait
flou + Sobel + binarisation
🌫️ bruit pur
+ le trait montré à chaque pas
🧠 U-Net « prior manga »
1000 pas de débruitage guidé
✨ ton portrait manga
1

Construire le « prior » : un modèle qui ne connaît QUE le manga run-009

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 :

64 visages manga générés depuis du bruit
2 h 15 de GPU · loss 0,098 → 0,027 · dataset : Anime Face Dataset (Kaggle)
2

Premier essai : brouiller la photo et le laisser « réparer » joli mais pas ressemblant

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é :

manga-fication img2img : la ressemblance se perd

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.

3

Le remède : guider par les contours, à chaque pas run-011 · le principe de ControlNet

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.

manga-fication guidée par les contours : l'identité est gardée

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.

fine-tuning 49 min · loss divisée par 2 (0,026 → 0,013) : la preuve que le modèle s'appuie sur les lignes
4

Le polissage : du gravier au coup de crayon run-011b · à moitié gagné

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.

manga-fication au trait binaire

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.

fine-tuning du run-011 · 15 ép. · 39 min GPU · loss 0,028 → 0,022 · checkpoint : run-011b-trait.pt
5

Le changement d'échelle maison : 128×128 par diffusion latente run-012 · style ↑, identité à rebrancher

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 :

manga-fication 128×128 par diffusion latente

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.

test img2img latent · kernel CPU · DDIM 50 pas · planches génération pure : 36 visages 128×128
6

L'assemblage : les trois pièces dans la même machine run-014 · meilleure manga-fication du projet

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.

manga-fication finale : trait 128 + prior latent

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.

fine-tuning du run-012 · 25 ép. · 27 min GPU · loss 0,073 → 0,061 (encore en chute) · checkpoint : run-014-trait-latent.pt
7

Le polissage qui a reculé — la meilleure leçon de la page run-014b · trait plus fin, résultat moins bon

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.

polissage run-014b : trait aminci mais résultat en recul

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.

60 ép. · 60 min GPU · loss 0,065 → 0,055 (meilleure que l'étape 6, planche moins bonne) · checkpoint : run-014b-polish.pt

🎓 Ce que cette page enseigne

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.