Blog / Ingénierie

Jusqu'où l'amélioration par IA doit-elle agrandir ? Une conception bornée

· mis à jour le 24 août avec les mesures de tuilage et de coût · données : registre de décision, journaux de production, banc de labo

Les modèles de super-résolution sont quadratiques : double le côté de l'entrée et tu quadruples le travail, et l'attente. Fais-en tourner un naïvement sur tout ce que les gens envoient et un scan de 40 mégapixels prend des minutes tandis qu'une photo de téléphone prend des secondes. Notre étape d'amélioration planifie au contraire chaque tâche pour que la charge de travail du modèle ait la même taille bornée quoi qu'il arrive. Cette note donne la règle de planification et, nouveau dans cette révision, les mesures derrière ses deux affirmations porteuses : que le coût est linéaire une fois borné (~15,6 s par mégapixel d'entrée sur la machine de test, r² > 0,999), et que l'inférence par tuiles n'est visuellement sans raccord que parce que chaque tuile emporte 8 px de contexte, ce qui retire 87 % de l'énergie de raccord que laisse un remplissage à zéro.

2560 pxcible du grand côté en sortiepour que l'entrée du modèle soit ≤ 640 px
15,6 s/MPcoût mesuré, linéairer² > 0,999 sur la machine de test
3,4×énergie de raccord à 0 px de margefrontières vs image environnante
87 %de l'excès de raccord retirépar les 8 px de contexte en production

Chaque chiffre de cette note a été mesuré sur le code du pipeline de production : mêmes modèles, mêmes calculs. Données brutes par image : e6_tiles.json.

1 · La règle de planification

L'étape vise une sortie d'au plus 2560 px sur le grand côté, avec un modèle de super-résolution 4×[1]. En remontant, le modèle n'a jamais besoin d'une entrée plus longue que 2560 ÷ 4 = 640 px, si bien que le planificateur pré-réduit tout ce qui arrive à cette borne avant que le modèle ne tourne, plafonnant l'entrée du modèle autour de 0,41 mégapixel, que l'envoi fasse 1 MP ou 40 MP. Formellement, pour un envoi de grand côté L :

out = min(4L, 2560), pre = ⌈out / 4⌉, skip if out < 1.3 · L(1)

Trois garde-fous complètent la règle : la sortie ne descend jamais sous la résolution d'origine (l'amélioration ne doit jamais te coûter des pixels), les entrées déjà proches de la cible ou au-dessus sautent entièrement la passe (la clause de gain minimal de 1,3×, parce qu'en dessous l'aller-retour rééchantillonnage-modèle floute à peu près autant qu'il affine), et les visages sont restaurés après la passe, pour que les recadrages de visages entrent dans le modèle de visages à la résolution améliorée.

8211024
Envoi0,84 MP
513640
Entrée du modèle (pré-réduite)0,33 MP
20522560
Sortie (×4)5,25 MP
Figure 1. Le plan borné pour le scan de référence : le modèle voit une entrée de 0,33 MP quelle que soit la taille de l'envoi ; sa sortie 4× tombe exactement sur la cible de 2560 px.

2 · Pourquoi une borne : le coût est linéaire, une fois qu'on l'y force

L'affirmation qui motive toute la conception est mesurable, alors nous l'avons mesurée : le chemin d'agrandissement de production (tuiles de 192 px, marge de 8 px, ONNX Runtime CPU[3]) exécuté sur des entrées de 0,04 à 0,39 mégapixel sur du matériel de classe conteneur à 2 vCPU :

020004000600000.10.20.30.4mégapixels d'entréetemps écoulé (ms)
Figure 2. Temps écoulé en fonction des mégapixels d'entrée à travers le chemin de tuiles de production. L'ajustement est linéaire à ≈15,6 s par mégapixel d'entrée (r² > 0,999). Linéaire en pixels d'entrée reste quadratique en longueur de côté, ce qui est exactement pourquoi le planificateur borne le côté avant que le modèle ne tourne : la borne transforme « pourrait prendre des minutes » en « toujours quelques secondes de temps modèle ».

Un second fait d'ingénierie sort du même balayage : le temps total est essentiellement indépendant de la taille des tuiles (de 96 → 384 px, tout tombe à 8 % près) : le travail est par pixel, et le surcoût de marge à 8 px est du bruit. La taille des tuiles se choisit donc pour la mémoire, pas pour la vitesse : 192 px garde le tenseur de pointe assez petit pour le tas WASM du moteur de repli du navigateur.

3 · La taxe de raccord, et pourquoi 8 px de contexte la paient

Le tuilage a un mode d'échec sur lequel les articles s'attardent rarement : les convolutions ont des champs récepteurs, si bien qu'une tuile découpée sans contexte environnant est fausse le long de sa bordure, et la mosaïque réassemblée montre une grille. Nous le mesurons avec un indice de raccord : gradient de luma moyen sur les colonnes de pixels aux frontières des tuiles, divisé par le gradient moyen ailleurs ; 1,0 veut dire que les frontières sont statistiquement invisibles :

11.522.533.5024816marge de contexte (px par côté)indice de raccord (1 = invisible)production
Figure 3. Indice de raccord en fonction de la marge de contexte, tuiles de 192 px sur une image Kodak dense en textures. Une marge nulle laisse les frontières des tuiles 3,4× plus agitées que l'image environnante : des bandes visibles sur la grille de sortie. Huit pixels (le réglage de production) retirent 87 % de l'excès ; seize n'apportent que trois points de plus pour le double de calcul de marge.
Deux recadrages agrandis de volets de fenêtre ; la version sans marge montre des lignes de raccord verticales visibles que la version avec marge n'a pas
Figure 4. La même reconstruction avec 0 px (gauche) et 8 px (droite) de contexte de tuile. Les discontinuités répétées du panneau de gauche tombent exactement sur la grille de tuiles de la sortie : chaque tuile a jugé différemment le bord de son monde.

La forme de cette courbe est l'argument de conception en miniature : les deux premiers pixels de contexte achètent la moitié de l'amélioration, huit achètent des rendements décroissants, et au-delà de huit tu paies un surcoût de marge quasi quadratique pour une énergie de raccord qu'aucun spectateur ne peut trouver. (Savoir si les pixels améliorés eux-mêmes battent l'interpolation classique est une question distincte, avec une réponse mesurée ; voir le banc de 28 images, où le modèle cède 1,07 dB de PSNR à Lanczos-3 et restaure 3,1× l'énergie de contours[2].)

4 · Temps mesurés, de bout en bout

Référence : un scan noir et blanc de 821×1024 restauré en 2052×2560, colorisé, un visage, sur une instance chaude.

Figure 5. Temps écoulé par étape sur l'exécution de référence à chaud, 6,4 s au total. La passe d'amélioration bornée n'est pas l'étape dominante.

De bout en bout en production sur la même photo : 68 s à froid (chargement des poids des modèles) et 32 s à chaud. Pour l'échelle : le pipeline précédent, qui n'agrandissait rien et ne touchait qu'aux visages, tournait en 23–34 s à chaud ; la passe bornée sur l'image entière n'ajoute presque rien au temps écoulé, parce que son entrée est petite par construction. Et quand la même tâche tourne dans le navigateur (le repli automatique), un scan de 1000×1223 a pris 340,8 s sur un ordinateur de bureau Apple Silicon avec WebGPU (même plan borné, environ 10× le temps écoulé). La borne est ce qui garde même ce pire cas utilisable plutôt qu'illimité.

5 · Ce qui a été rejeté

La super-résolution par diffusion (bien trop lente pour un outil interactif sur notre pile), des modèles de restauration de visages plus gros par défaut (le temps par visage explose sur les photos de groupe), et l'envoi des photos à des API d'inférence GPU externes : les photos quitteraient notre infrastructure, ce que la promesse de confidentialité exclut. Le plan borné garde les gains de qualité là où un spectateur les perçoit réellement, une image de la taille d'un écran, au lieu de payer quadratiquement pour des pixels que personne ne peut voir.

6 · Limites

La cible de 2560 px est une décision produit, pas un optimum : les impressions profitent de plus de résolution, et un futur palier payant pourrait relever la borne. Les temps ci-dessus sont le cas courant : les photos denses en visages passent proportionnellement plus de temps dans l'étape des visages, que la borne d'amélioration ne couvre pas. Et l'indice de raccord est un instrument statistique : il certifie que les frontières sont calmes en moyenne, pas qu'aucune texture adverse ne pourrait jamais en révéler une.

Références

  1. Wang, X., Xie, L., Dong, C., & Shan, Y. (2021). Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data. ICCV Workshops. arXiv:2107.10833. arxiv.org
  2. Kodak Lossless True Color Image Suite: 24 uncompressed 768×512 PhotoCD reference images, the classic image-quality test set. r0k.us
  3. ONNX Runtime: the inference engine both our server (CPU) and in-browser (WebGPU/WASM) engines run on. onnxruntime.ai