¿Puede la IA reparar roturas y rayones? Cifras de viabilidad
Sí, y esta nota registra las mediciones que la llevaron de esperanza en la hoja de ruta a función en producción: lo que el pipeline solía hacer con los escaneos dañados, las cifras de la prueba de concepto que justificaron construir la etapa y los resultados de extremo a extremo de la versión que ahora se publica detrás de la casilla “Reparar rayones y roturas”.
Lo que el pipeline hacía antes con una foto rota
La restauración no tenía etapa de inpainting: nada que pudiera eliminar una región y sintetizar un sustituto. Verificado en un retrato con muchas grietas: dentro de las regiones de la cara, el daño desaparecía de forma incidental (el modelo facial vuelve a sintetizar todo el recorte) y luego reaparecía bruscamente en el límite de la mezcla, una grieta que se detiene en la mejilla, lo que puede verse peor que no reparar. En todas partes, el daño se realzaba: la pasada de enfoque afilaba los bordes de las roturas como si fueran detalle, y el colorizador teñía las líneas blancas de las grietas como contenido de la escena.
Prueba de concepto
Sujeto de prueba: un retrato en blanco y negro de 510×817 con una red de grietas en la emulsión. Hardware: un entorno aislado deliberadamente débil y solo CPU, así que cada tiempo es el peor caso. Dos etapas: una red de detección de rayones (del proyecto de código abierto “Bringing Old Photos Back to Life” de Microsoft[2]) produce una máscara de daños; el modelo de inpainting LaMa[1] rellena después solo las regiones enmascaradas en teselas de 512 px, ambos con el proveedor CPU de ONNX Runtime[3].
La máscara de daños cubrió el 18.4% de los píxeles en esta foto muy dañada. Resultado de calidad: la red de grietas se eliminó en la cara, la ropa y el fondo, sin falsos positivos dañinos: el mantel de encaje, la trampa clásica para los detectores de rayones, sobrevivió.
Lo que se publicó, medido de extremo a extremo
La etapa de producción se ejecuta primero en el orden de restauración, para que las grietas nunca se coloreen ni se enfoquen antes de eliminarlas. La detección se ejecuta con lado corto de 256 y una dilatación de la máscara de 2 px; el inpainting es por parches a resolución nativa, con un tope de 12 parches por foto y prioridad para las regiones de daño más grandes. Se imponen dos invariantes en lugar de esperar que se cumplan: solo se escriben píxeles enmascarados (cada píxel sin daño de la salida es idéntico byte a byte al de la entrada) y un filtro de cobertura omite la etapa por completo cuando el área detectada es inferior al 0.5% (nada que merezca repararse) o superior al 35% (más probablemente textura mal detectada que daño).
Una revisión posterior en producción añadió un segundo discriminador, más fino, al filtro automático: la forma. La cobertura por sí sola no distingue una rotura fina como un cabello del ruido del detector, pero su geometría difiere en un orden de magnitud: una rotura es larga y delgada, el ruido son manchas. Para cada componente conexa de la máscara, con caja delimitadora bw×bh y área en píxeles A, puntuamos
Puntos de calibración del banco: un gráfico de marketing limpio obtiene una elongación máxima de 2.4; el escaneo con red de grietas obtiene 29.8. El umbral de 6 queda bien lejos de ambos, y cada ejecución en producción registra su cobertura y su elongación para que el filtro siga afinándose con tráfico real y no con dos fotos.
Dos controles: con la casilla desactivada, la etapa nunca se ejecutó y los tiempos coincidieron exactamente con el pipeline anterior. En una foto casi limpia, el detector marcó solo el 0.81% de píxeles realmente dañados (restos de grietas en las esquinas y polvo), sin ningún falso positivo en caras, encaje o textura.
Por qué es opcional y no predeterminada
El modo de fallo conocido de la reparación automática de daños son los falsos positivos: un detector que marca alambres de una valla, mechones de pelo o encaje como rayones borrará contenido real, y un inpainter es muy bueno borrando cosas. Dos fotos de control son evidencia, no un benchmark. La etapa se publica, por tanto, como una casilla explícita, y cada ejecución registra su cifra de cobertura de daños para poder afinar los umbrales con tráfico real antes de promoverla a predeterminada. También rechazamos el atajo de enviar las fotos a una API externa de imágenes generativas: esta herramienta procesa las fotos de forma transitoria en nuestra propia infraestructura, y un re-renderizado generativo completo desplaza la identidad; el objetivo es reparar el daño, no repintar a tu familiar.
Referencias
- Suvorov, R., Logacheva, E., Mashikhin, A., et al. (2022). Resolution-robust Large Mask Inpainting with Fourier Convolutions (LaMa). WACV. arXiv:2109.07161. arxiv.org
- Wan, Z., Zhang, B., Chen, D., et al. (2020). Bringing Old Photos Back to Life (the scratch-detection recipe). CVPR. arXiv:2004.09484. arxiv.org
- ONNX Runtime: the inference engine both our server (CPU) and in-browser (WebGPU/WASM) engines run on. onnxruntime.ai