Blog / Ingeniería

¿Cuánto debe ampliar la mejora con IA? Un diseño acotado

· actualizado el 24 de agosto con las mediciones de teselado y coste · datos: registro de decisión, registros de producción, banco de laboratorio

Los modelos de superresolución son cuadráticos: duplica el lado de la entrada y cuadruplicas el trabajo, y la espera. Ejecuta uno ingenuamente sobre lo que la gente suba y un escaneo de 40 megapíxeles tarda minutos mientras una foto de teléfono tarda segundos. Nuestra etapa de mejora, en cambio, planifica cada trabajo para que la carga del modelo tenga el mismo tamaño acotado sin importar lo que llegue. Esta nota da la regla de planificación y, nuevo en esta revisión, las mediciones detrás de sus dos afirmaciones de peso: que el coste es lineal una vez acotado (~15.6 s por megapíxel de entrada en la máquina del banco, r² > 0.999), y que la inferencia por teselas es visualmente continua solo porque cada tesela lleva 8 px de contexto, lo que elimina el 87% de la energía de costura que deja el relleno con ceros.

2560 pxobjetivo de lado largo de la salidapara que la entrada del modelo sea ≤ 640 px
15.6 s/MPcoste medido, linealr² > 0.999 en la máquina del banco
3.4×energía de costura con 0 px de rellenobordes frente a la imagen circundante
87%del exceso de costura eliminadopor los 8 px de contexto de producción

Cada cifra de esta nota se midió con el código del pipeline de producción: los mismos modelos, las mismas matemáticas. Registros brutos por imagen: e6_tiles.json.

1 · La regla de planificación

La etapa apunta a una salida de como máximo 2560 px en el lado largo, usando un modelo de superresolución 4×[1]. Yendo hacia atrás, el modelo nunca necesita una entrada de más de 2560 ÷ 4 = 640 px, así que el planificador reduce previamente lo que llegue a esa cota antes de ejecutar el modelo, limitando la entrada del modelo a unos 0.41 megapíxeles tanto si la subida era de 1 MP como de 40 MP. Formalmente, para una subida con lado largo L:

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

Tres salvaguardas completan la regla: la salida nunca queda por debajo de la resolución original (la mejora nunca debe costarte píxeles), las entradas ya cercanas o superiores al objetivo omiten la pasada por completo (la cláusula de ganancia mínima de 1.3×, porque por debajo de eso el viaje de ida y vuelta de remuestreo y modelo emborrona casi tanto como enfoca), y las caras se restauran después de la pasada, de modo que los recortes de cara entran en el modelo facial con la resolución mejorada.

8211024
Subida0.84 MP
513640
Entrada del modelo (reducida)0.33 MP
20522560
Salida (×4)5.25 MP
Figura 1. El plan acotado para el escaneo del benchmark: el modelo ve una entrada de 0.33 MP sea cual sea el tamaño de la subida; su salida 4× cae exactamente en el objetivo de 2560 px.

2 · Por qué una cota: el coste es lineal, después de hacer que lo sea

La afirmación que motiva todo el diseño es medible, así que la medimos: la ruta de ampliación de producción (teselas de 192 px, 8 px de relleno, ONNX Runtime CPU[3]) ejecutada sobre entradas de 0.04 a 0.39 megapíxeles en hardware de clase contenedor de 2 vCPU:

020004000600000.10.20.30.4megapíxeles de entradatiempo de reloj (ms)
Figura 2. Tiempo de reloj frente a megapíxeles de entrada a través de la ruta de teselas de producción. El ajuste es lineal a ≈15.6 s por megapíxel de entrada (r² > 0.999). Lineal en píxeles de entrada sigue siendo cuadrático en la longitud del lado, que es exactamente la razón por la que el planificador acota el lado antes de ejecutar el modelo: la cota convierte “podría tardar minutos” en “siempre unos segundos de tiempo de modelo”.

Del mismo barrido sale un segundo hecho de ingeniería: el tiempo total de ejecución es esencialmente independiente del tamaño de tesela (de 96 → 384 px, todos caen dentro de un 8% entre sí): el trabajo es por píxel, y la sobrecarga del relleno a 8 px es ruido. El tamaño de tesela se elige, por tanto, por memoria, no por velocidad: 192 px mantiene el tensor máximo lo bastante pequeño para el heap WASM del motor de respaldo del navegador.

3 · El impuesto de costura, y por qué 8 px de contexto lo pagan

El teselado tiene un modo de fallo en el que los artículos rara vez se detienen: las convoluciones tienen campos receptivos, así que una tesela cortada sin contexto circundante está equivocada a lo largo de su borde, y el mosaico reensamblado muestra una rejilla. Lo medimos con un índice de costura: el gradiente medio de luma a través de las columnas de píxeles en los bordes de las teselas dividido por el gradiente medio en el resto; 1.0 significa que los bordes son estadísticamente invisibles:

11.522.533.5024816relleno de contexto (px por lado)índice de costura (1 = invisible)producción
Figura 3. Índice de costura frente al relleno de contexto, teselas de 192 px en un fotograma Kodak denso en textura. Con relleno cero, los bordes de las teselas quedan 3.4× más agitados que la imagen circundante: franjas visibles en la rejilla de salida. Ocho píxeles (el ajuste de producción) eliminan el 87% del exceso; dieciséis compran solo tres puntos más por el doble de cómputo de relleno.
Dos recortes ampliados de contraventanas; la versión sin relleno muestra líneas de costura verticales visibles que la versión con relleno no tiene
Figura 4. La misma reconstrucción con 0 px (izquierda) y 8 px (derecha) de contexto de tesela. Las discontinuidades repetidas del panel izquierdo caen exactamente sobre la rejilla de teselas de la salida: cada tesela juzgó el borde de su mundo de forma distinta.

La forma de esa curva es el argumento de diseño en miniatura: los dos primeros píxeles de contexto compran la mitad de la mejora, ocho compran rendimientos decrecientes, y pasados los ocho estás pagando una sobrecarga de relleno casi cuadrática por una energía de costura que ningún espectador puede encontrar. (Si los propios píxeles mejorados superan a la interpolación clásica es una pregunta aparte con respuesta medida; consulta el benchmark de 28 imágenes, donde el modelo cede 1.07 dB de PSNR frente a Lanczos-3 y restaura 3.1× la energía de bordes[2].)

4 · Tiempos medidos, de extremo a extremo

Benchmark: un escaneo en blanco y negro de 821×1024 restaurado a 2052×2560, coloreado, una cara, en una instancia caliente.

Figura 5. Tiempo de reloj por etapa en la ejecución de benchmark en caliente, 6.4 s en total. La pasada de mejora acotada no es la etapa dominante.

De extremo a extremo en producción con la misma foto: 68 s en arranque en frío (carga de los pesos de los modelos) y 32 s en caliente. Para dar escala: el pipeline anterior, que no ampliaba nada y solo tocaba las caras, tardaba 23–34 s en caliente; la pasada acotada sobre la imagen entera añade casi nada al tiempo de reloj, porque su entrada es pequeña por construcción. Y cuando el mismo trabajo se ejecuta dentro del navegador (el respaldo automático), un escaneo de 1000×1223 tardó 340.8 s en un equipo de escritorio con Apple Silicon y WebGPU (el mismo plan acotado, unas 10× el tiempo de reloj). La cota es lo que mantiene utilizable incluso ese peor caso en lugar de ilimitado.

5 · Lo que se rechazó

La superresolución basada en difusión (demasiado lenta para una herramienta interactiva en nuestra pila), modelos de restauración por cara más grandes como opción por defecto (el tiempo por cara se dispara en las fotos de grupo) y enviar fotos a API externas de inferencia en GPU: las fotos saldrían de nuestra infraestructura, algo que la promesa de privacidad descarta. El plan acotado mantiene las ganancias de calidad donde un espectador realmente las percibe, una imagen de tamaño de pantalla, en lugar de pagar cuadráticamente por píxeles que nadie puede ver.

6 · Limitaciones

El objetivo de 2560 px es una decisión de producto, no un óptimo: las impresiones se benefician de más resolución, y un futuro nivel de pago podría elevar la cota. Los tiempos anteriores son el caso común: las fotos densas en caras pasan proporcionalmente más tiempo en la etapa facial, que la cota de la mejora no cubre. Y el índice de costura es un instrumento estadístico: certifica que los bordes son tranquilos en promedio, no que ninguna textura adversarial pueda revelar alguno.

Referencias

  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