L’essentiel
Supprimer un arrière-plan impliquait autrefois d’envoyer la photo à un serveur équipé d’un GPU. Ce n’est plus obligatoire. Un modèle de segmentation assez léger pour être téléchargé une seule fois (44 Mo) peut tourner dans le navigateur : sur une machine compatible WebGPU, il traite une photo en bien moins d’une seconde ; sans WebGPU, le même modèle s’exécute sur le CPU en 15 à 25 secondes. Dans les deux cas, la photo ne quitte jamais l’appareil. Le modèle réussit bien les personnes, les produits et les animaux sur un fond bien distinct. Il échoue sur des cheveux devant un fond de même teinte, sur le verre, et sur tout ce dont le photographe lui-même ne distinguait pas le contour.
Le modèle
L’outil utilise ISNet, le réseau présenté dans Highly Accurate Dichotomous Image Segmentation (Qin et al., ECCV 2022). « Dichotomique » signifie que la tâche est binaire : chaque pixel est soit au premier plan, soit non. ISNet a été entraîné sur le jeu de données DIS5K, soit cinq mille images haute résolution accompagnées de masques minutieux au pixel près. On y trouve des vélos, des chaises ou des arbres, choisis justement parce que leurs structures fines mettaient en échec les modèles précédents. Pour une entrée de 1024 × 1024, il produit une carte de probabilités de 1024 × 1024 ; l’outil applique un seuil à cette carte, adoucit le contour et s’en sert comme canal alpha d’un PNG.
Les poids sont distribués sous licence Apache-2.0. Le site les héberge lui-même, découpés en trois parties pour que le téléchargement puisse reprendre en cas de coupure, puis le navigateur les met en cache après la première utilisation : la deuxième photo ne télécharge plus rien.
Pourquoi c’est désormais possible « dans le navigateur »
Il fallait deux briques. ONNX Runtime Web exécute un modèle entraîné en JavaScript, les calculs étant réalisés soit par WebAssembly sur le CPU, soit (depuis 2023) par WebGPU, l’API du navigateur qui donne accès à la carte graphique pour du calcul généraliste. Une passe de segmentation représente quelques centaines de milliards de multiplications-additions. C’est exactement le travail pour lequel les GPU sont conçus, et qu’un seul thread de CPU fait mal.
Les mesures sur l’outil du site, avec la même entrée de 1024 pixels :
| Voie | Où elle s’exécute | Temps par photo |
|---|---|---|
| WebGPU | Chrome / Edge 113+, Safari 26+ sur un portable ou un ordinateur de bureau avec n’importe quel GPU récent | moins de 1 seconde |
| WebAssembly | n’importe quel navigateur, un seul thread | 15 à 25 secondes |
La voie WebAssembly est volontairement monothread. Le WASM multithread exige que la page soit cross-origin isolated, un réglage d’en-têtes qui bloque tous les scripts tiers, y compris le code publicitaire qui finance le site. Le monothread est plus lent mais garde la page gratuite ; le calcul est déporté dans un Web Worker pour que l’interface reste réactive pendant le traitement.
La mémoire est l’autre contrainte : le moteur, le modèle et les activations demandent environ 200 Mo libres. Les téléphones dotés de 4 Go de RAM y parviennent par la voie CPU ; certains téléphones plus anciens ne peuvent pas allouer le tampon du tout, et l’outil l’indique au lieu de faire planter l’onglet.
Là où il échoue, sans détour
- Des cheveux sur un fond similaire. Cheveux foncés devant un mur sombre, cheveux blonds devant un rideau beige. Le modèle ne voit aucun contour, car les pixels n’en contiennent pas. Soit le masque mange les cheveux, soit il garde un halo de mur.
- Les objets transparents et réfléchissants. Le verre, l’eau, un verre à vin devant le sujet. La segmentation est binaire ; un verre n’est ni premier plan ni arrière-plan, et le résultat est un bord net qui le traverse.
- Le flou de bougé. Un contour flou n’a pas de limite unique correcte.
- Plusieurs sujets. Le modèle garde tout ce qu’il considère comme « le sujet » ; avec deux personnes, il garde en général les deux, avec une personne et un grand chien, il peut n’en garder qu’un.
- Les sujets très petits. L’entrée fait 1024 px sur le grand côté ; une personne de 60 px de haut dans un plan large devient un masque de quelques dizaines de pixels aux contours grossiers.
Pour des photos de produits propres, des portraits devant un mur uni, des animaux posés au sol et des logos sur papier, il est fiable : c’est ce dont le jeu d’entraînement est rempli.
Que faire du résultat
Le fichier produit est un PNG avec une vraie transparence. C’est le bon format pour l’insérer dans une diapositive, une annonce ou une autre photo, et le mauvais pour l’envoyer par e-mail : un détourage PNG de 12 mégapixels pèse 20 à 30 Mo. Si la destination exige un petit fichier sans transparence, convertissez-le en JPEG sur fond blanc ; s’il faut de la transparence et un poids réduit, le WebP avec alpha pèse un tiers du PNG. Le Compresseur d’images gère les deux cas.