Herramientas de imagen

Quitar el fondo de una foto en el navegador: qué modelo se usa, por qué importa la GPU y dónde falla

Una red neuronal de 44 MB se ejecuta en tu propio equipo para recortar el sujeto. Menos de un segundo con la GPU de un portátil, 15–25 segundos con la CPU. Qué es ISNet, por qué no se sube nada y qué fotos le salen mal.

En resumen

Quitar el fondo de una foto solía obligar a subirla a un servidor con GPU. Ya no hace falta. Un modelo de segmentación lo bastante pequeño para descargarlo una sola vez (44 MB) puede ejecutarse dentro del navegador: en un equipo con WebGPU tarda bastante menos de un segundo por foto, y sin WebGPU el mismo modelo se ejecuta en la CPU en 15–25 segundos. En ambos casos la foto no sale del dispositivo. El modelo funciona bien con personas, productos y animales sobre un fondo bien diferenciado, y mal con pelo sobre pelo, con cristal y con cualquier borde que tampoco el fotógrafo podía distinguir.

Qué modelo es

La herramienta usa ISNet, la red del artículo Highly Accurate Dichotomous Image Segmentation (Qin et al., ECCV 2022). “Dicotómica” significa que la tarea es binaria: cada píxel es primer plano o no lo es. ISNet se entrenó con el conjunto de datos DIS5K, cinco mil imágenes de alta resolución con máscaras minuciosas a nivel de píxel de objetos como bicicletas, sillas y árboles, elegidos precisamente porque sus estructuras finas hacían fracasar a los modelos anteriores. Para una entrada de 1024 × 1024 genera un mapa de probabilidades de 1024 × 1024; la herramienta aplica un umbral a ese mapa, suaviza el borde y lo usa como canal alfa de un PNG.

Los pesos se distribuyen bajo licencia Apache-2.0. El sitio los aloja en su propio servidor, divididos en tres partes para que la descarga pueda reanudarse, y el navegador los guarda en caché tras el primer uso: la segunda foto ya no descarga nada.

Por qué ahora es posible hacerlo en el navegador

Hacían falta dos piezas. ONNX Runtime Web ejecuta un modelo entrenado desde JavaScript, y los cálculos los hace WebAssembly en la CPU o bien, desde 2023, WebGPU, la API del navegador que pone la tarjeta gráfica a disposición del cálculo general. Una pasada de segmentación supone unos cuantos cientos de miles de millones de multiplicaciones y sumas. Para eso se construyen las GPU, y un solo hilo de CPU no está hecho para ello.

Las cifras de la herramienta de este sitio, con la misma entrada de 1024 píxeles:

Vía Dónde se ejecuta Tiempo por foto
WebGPU Chrome / Edge 113+, Safari 26+ en un portátil o equipo de escritorio con cualquier GPU moderna menos de 1 segundo
WebAssembly cualquier navegador, un hilo 15–25 segundos

La vía WebAssembly usa un solo hilo a propósito. WASM multihilo exige que la página esté aislada entre orígenes (cross-origin isolated), una configuración de cabeceras que bloquea todos los scripts de terceros, incluido el código de anuncios que financia el sitio. Con un solo hilo es más lento, pero la página sigue siendo gratuita; el trabajo se traslada a un Web Worker para que la interfaz siga respondiendo mientras calcula.

La otra limitación es la memoria: el entorno de ejecución, el modelo y las activaciones necesitan unos 200 MB libres. Los teléfonos con 4 GB de RAM lo consiguen por la vía de la CPU; algunos teléfonos más antiguos no pueden reservar el búfer, y en ese caso la herramienta lo indica en lugar de bloquear la pestaña.

Dónde falla, sin rodeos

  • Pelo sobre un fondo parecido. Pelo oscuro sobre una pared oscura, pelo rubio delante de una cortina beis. El modelo no ve ningún borde porque en los píxeles no lo hay. La máscara se come el pelo o deja un halo de pared.
  • Objetos transparentes y reflectantes. Cristal, agua, una copa de vino delante del sujeto. La segmentación es binaria; una copa no es primer plano ni fondo, y el resultado es un borde duro que la atraviesa.
  • Desenfoque de movimiento. Un borde movido no tiene un único límite correcto.
  • Varios sujetos. El modelo conserva todo lo que considera “el sujeto”: con dos personas suele conservar las dos; con una persona y un perro grande puede quedarse solo con uno.
  • Sujetos muy pequeños. La entrada mide 1024 px en el lado largo; una persona de 60 px de alto en un plano general se queda en unas pocas decenas de píxeles de máscara y sale como una mancha.

Con fotos de producto limpias, retratos sobre una pared lisa, mascotas en el suelo y logotipos sobre papel es fiable, porque de eso está lleno el conjunto de entrenamiento.

Qué hacer con el resultado

El resultado es un PNG con transparencia real. Es el formato adecuado para colocarlo en una diapositiva, un anuncio o sobre otra foto, y el inadecuado para enviarlo por correo electrónico: un recorte en PNG de 12 megapíxeles ocupa 20–30 MB. Si el destino necesita un archivo pequeño y no necesita transparencia, conviértelo a JPEG sobre fondo blanco; si necesita transparencia y menos peso, WebP con alfa ocupa un tercio que el PNG. El Compresor de imágenes hace las dos cosas.

Texto a vozTextToSpeech.tools Comprimir videoFreeCompress.video Diccionario chino-inglésChineseDict.com