Aujourd'hui, nous publions le [Classificateur de sécurité pour l'essayage virtuel](https://huggingface.co/Genlook/tryon-safety-classifier) sur Hugging Face sous licence Apache-2.0. Il examine les photos d'un produit pour répondre à une seule question : si un client essaie cet article, que montrera la photo générée ?
Nous l'avons créé pour filtrer les produits avant qu'ils n'atteignent un modèle d'[essayage virtuel](/glossary/virtual-try-on). Tout service d'essayage acceptant des images de produits arbitraires se heurte au même problème ; c'est pourquoi nous publions le modèle, les règles d'étiquetage et les évaluations.

## Pourquoi les détecteurs NSFW classiques ne fonctionnent pas pour l'essayage virtuel
L'essayage virtuel prend en entrée la photo d'une personne et celle d'un produit, puis retourne une image de la personne portant ce produit. Le risque réside dans le résultat final, mais avant la génération, on ne peut vérifier que le produit.
Les détecteurs NSFW génériques évaluent les pixels de l'image qu'on leur soumet. Ce n'est pas la bonne approche pour une photo produit :
- **Une lingerie photographiée à plat ne contient aucune nudité.** Mais l'essayage virtuel montrera le client en lingerie.
- **Des cache-tétons sur fond blanc ne sont que quelques centimètres de tissu.** Le résultat de l'essayage sera topless.
- **Une cagoule fétichiste sur un mannequin n'a rien d'explicite.** Cela reste un article à caractère sexuel.
- **Un mannequin posant nu avec seulement un collier produit une image explicite.** Pourtant, le collier est un produit tout à fait classique.
Lorsque nous avons testé trois classificateurs d'images NSFW open source populaires (NudeNet, nsfw-vit et Falconsai) sur un échantillon initial de 141 produits étiquetés, ils n'étaient d'accord avec nos étiquettes que dans 48 à 62 % des cas. Le modèle ShieldGemma 2 de Google, configuré avec des règles spécifiques pour cette question précise, a atteint 71,6 %. Ces modèles fonctionnent très bien. Ils répondent juste à une autre question.
## Ce que prédit le classificateur
Chaque produit reçoit un niveau, classé par degré de sévérité :
| Niveau | Ce que montre le résultat de l'essayage virtuel | Exemples |
|---|---|---|
| `ok` | Le client habillé de façon classique | Vêtements du quotidien, tenues de sport, combinaisons de plongée, cosplays couvrants, accessoires |
| `revealing` | Une couverture équivalente à un maillot de bain | Bikinis et maillots, sous-vêtements pour hommes, vêtements sculptants, micro-shorts, la plupart des tenues de festival |
| `lingerie` | Sous-vêtements féminins, sans zone intime visible | Soutiens-gorge, culottes, ensembles de lingerie, bodys, porte-jarretelles, corsets portés comme lingerie |
| `adult` | Zones intimes exposées, ou produit sexuel | Micro-maillots, cache-tétons, pièces transparentes, bonnets ouverts, articles BDSM et fétichistes, costumes de jeux de rôle sexuels |
Trois informations supplémentaires accompagnent ce niveau :
- **subject** : `human_clothing`, `pet` ou `not_clothing`. Un harnais pour chien et un harnais de bondage se ressemblent sur une photo détourée. Les perruques, les cosmétiques et les articles pour la maison sont classés comme non vestimentaires.
- **swimwear** : `regular`, `near_micro` ou `micro`. Les catégories régulières et proches du micro sont `revealing` ; le micro est `adult`. Le mot « microkini » dans le nom d'un produit ne change rien : seules les photos comptent.
- **ravewear** : vrai ou faux, pour les tenues de festival. Cela ne modifie pas le niveau de sévérité, mais c'est là que le modèle est le moins certain, il est donc utile de le savoir.
Les niveaux décrivent le résultat, pas le produit ni la boutique. Le bon filtrage dépend de l'audience : une marque de lingerie autorisera le niveau `lingerie`, tandis qu'une marketplace pour enfants bloquera probablement le niveau `revealing`. Le modèle renvoie également un indicateur `blocked` (probabilité de niveau `adult` supérieure ou égale à 0,3), ce qui permet d'intercepter davantage d'articles pour adultes qu'avec le seul niveau principal, moyennant une légère hausse des faux positifs.
## Les cas difficiles
La majorité des produits ne pose pas de problème. La politique a été pensée pour les exceptions, et chaque règle découle d'un cas réel ayant nécessité un arbitrage :
| Produit | Niveau | Raison |
|---|---|---|
| Brassière de sport vendue comme tenue de gym | ok | Se porte comme un haut en public |
| Même coupe vendue comme bralette de lingerie | lingerie | Sous-vêtement féminin |
| Soutien-gorge en dentelle, tétons clairement visibles sur les photos | adult | Transparence au niveau des tétons |
| Boxers pour hommes | revealing | Couverture équivalente à un maillot de bain |
| Combinaison de plongée, t-shirt anti-UV, burkini | ok | Couverture totale |
| Pantalon en cuir, robe aspect latex | ok | Pièces de mode |
| Combinaison en cuir ou latex vendue comme article fétichiste | adult | Tenue fétichiste |
| Harnais de poitrine en cuir sur une chemise | ok | Accessoire porté sur un vêtement |
| Harnais à sangles sur peau nue | adult | Article fétichiste |
| Masque d'animal pour Halloween | ok | Déguisement |
| Masque de pup-play | adult | Masque fétichiste |
| Chaîne de corps portée sur une robe | ok | Bijou sur vêtement |
| Chaîne de corps sur torse nu | adult | Porté sur peau nue |
| Cosplay couvrant comme un vêtement | ok | Déguisement |
| Tenue d'anime façon lingerie | adult | Cosplay sexualisé |
La politique complète, incluant les règles pour chaque niveau et balise, est disponible dans le fichier [LABELLING_POLICY.md](https://huggingface.co/Genlook/tryon-safety-classifier/blob/main/LABELLING_POLICY.md), aux côtés des poids du modèle.
Les exemples en haut de cet article montrent le modèle appliqué à notre catalogue de démonstration. Le maillot de bain à manches longues est un cas intéressant : manches longues et fermeture éclair devant, mais le bas est échancré comme un maillot une pièce. L'essayage virtuel montre donc une couverture type maillot de bain, et le modèle indique `revealing`. À côté, la brassière de sport dos nu reste classée `ok` avec un score de 0,97.
## Comment nous l'avons conçu
**Les données.** Environ 2 600 produits (soit près de 5 000 photos) issus de catalogues de boutiques en ligne. Nous les avons sélectionnés pour couvrir les cas complexes : lingerie, micro-maillots de bain, tenues fétichistes, tenues de festival, cosplay et vêtements pour animaux, tout en conservant une part importante de vêtements de tous les jours pour éviter que le modèle ne filtre à l'excès. Seules des photos de produits sont utilisées, jamais de photos de clients. Tout article susceptible de montrer un mineur dans un contexte révélateur ou sexuel a été définitivement supprimé des données.
**L'étiquetage.** Claude a étiqueté chaque produit en examinant toutes les photos et en lisant le titre et la description, en respectant la politique établie. Un réviseur humain a vérifié des exemples de calibrage pour chaque niveau et corrigé les cas limites, qui ont ensuite servi à ajuster la politique. Celle-ci a connu plusieurs versions ; le niveau `lingerie`, par exemple, a été séparé du niveau `adult` lorsqu'il est devenu évident que la plupart des sous-vêtements ne sont pas de nature explicite.
**Le modèle.** Il s'appuie sur SigLIP 2 de Google (so400m, patch 16, 384 px), sous licence Apache-2.0. Deux variantes sont proposées :
| Variante | Taille | Ce dont il s'agit |
|---|---|---|
| finetuned (par défaut) | environ 0,9 Go | Les 6 derniers blocs transformers et la tête de pooling entraînés de bout en bout, avec quatre têtes de classification linéaires |
| frozen | environ 120 Ko par-dessus SigLIP 2 | Le modèle de vision original avec des têtes logistiques appliquées à la moyenne et au maximum des embeddings d'images |
Un produit est évalué sur l'ensemble de ses photos, car l'une cache souvent ce qu'une autre révèle (vue de dos, photo de détail du tissu).
Nous avons également testé un LLM de pointe avec les mêmes règles. La précision était proche, mais chaque requête prenait environ 1,6 seconde, et une solution de repli était nécessaire pour gérer les délais d'attente. Un classificateur visuel tourne en quelques dizaines de millisecondes par photo sur un GPU, renvoie toujours le même résultat et peut être réentraîné facilement si la politique évolue.
## Ses performances
Une validation croisée à 5 plis sur 2 596 produits a été réalisée : chaque produit est évalué par un modèle qui ne l'a jamais vu lors de l'entraînement.
| | finetuned | frozen |
|---|---|---|
| Précision, 4 niveaux | 94,6 % | 94,2 % |
| Produits adultes manqués, flag `blocked` | 34 sur 534 | 39 sur 534 |
| Faux positifs adultes, flag `blocked` | 52 | 55 |
| Rappel pour la lingerie | 90 % | 89 % |
| Précision sur le sujet | 99,2 % | |
| Précision sur la balise swimwear | 90,0 % | |
Par groupe de produits (version finetuned, niveau principal) :
| Groupe | Produits | Précision |
|---|---|---|
| Catalogues mode classique | 1 032 | 97,5 % |
| Cordes et bondage | 75 | 100 % |
| Marques de maillots de bain | 230 | 95,2 % |
| Marques de lingerie | 120 | 94,2 % |
| Anime et cosplay | 63 | 93,7 % |
| Fétichisme, lingerie et animaux | 631 | 92,6 % |
| Maillots de bain exotiques et micro | 330 | 91,8 % |
| Festivals et rave | 115 | 85,2 % |
Pour les véritables micro-maillots de bain : 91 interceptés sur 95.
L'ensemble de test a été volontairement conçu pour être ardu. Sur les catalogues de mode classique, qui correspondent à ce que vendent la plupart des boutiques, la précision atteint 97,5 %.
## Limites
- **La lingerie transparente reste la frontière la plus complexe.** C'est la visibilité claire des tétons ou des parties génitales qui départage `lingerie` de `adult`, et des produits d'apparence similaire se retrouvent des deux côtés. C'est là que se concentrent la majorité des erreurs restantes.
- **Les tenues de festival et de rave constituent le groupe le moins performant.** Résilles, mailles et strass poussent souvent le modèle vers la catégorie `adult`.
- **Principalement des photos e-commerce occidentales.** Attendez-vous à une précision moindre sur des styles photographiques très différents.
- **Il classe des produits, pas des personnes.** Ne l'utilisez pas pour identifier une personne ou prendre des décisions la concernant.
## Comment l'utiliser
```python
# pip install torch open_clip_torch safetensors huggingface_hub pillow
from huggingface_hub import hf_hub_download
import importlib.util
spec = importlib.util.spec_from_file_location(
"tryon_safety",
hf_hub_download("Genlook/tryon-safety-classifier", "tryon_safety.py"),
)
tryon_safety = importlib.util.module_from_spec(spec)
spec.loader.exec_module(tryon_safety)
clf = tryon_safety.TryOnSafetyClassifier.from_pretrained(
"Genlook/tryon-safety-classifier", revision="v1.0"
)
pred = clf.predict(["front.jpg", "back.jpg"]) # toutes les photos d'un produit
print(pred.level, pred.blocked, pred.subject, pred.swimwear, pred.ravewear)
```
Fixez la révision `revision="v1.0"` pour qu'une mise à jour ne modifie jamais vos résultats à votre insu. L'inférence ne nécessite que `open_clip` et `torch`, et les poids sont au format safetensors.
Vos retours sur les faux positifs, les faux négatifs et vos idées pour la prochaine version sont les bienvenus dans l'onglet Discussions du [dépôt du modèle](https://huggingface.co/Genlook/tryon-safety-classifier).
## Ce que cela implique pour Genlook
L'[API Genlook Try-On](https://platform.genlook.app) vérifie déjà chaque produit avant qu'un essayage virtuel ne soit généré : les articles pour adultes ou fétichistes sont refusés, tandis que les maillots de bain et la lingerie nécessitent un compte payant. Un essayage refusé renvoie une erreur `CONTENT_POLICY_VIOLATION` et le crédit correspondant est remboursé ([référence des erreurs](/docs/tryon-api/errors)). Ce classificateur est précisément le modèle que nous avons conçu pour effectuer cette vérification.
Pour les développeurs, cela signifie que la sécurité est intégrée d'office à l'API ; ce n'est plus un élément à construire par-dessus. Un seul endpoint gère tous les types de produits, à 0,02 $ par essayage virtuel avec abonnement (voire 0,015 $ pour les gros volumes) et 0,04 $ à la carte. De plus, tout nouveau compte bénéficie de crédits gratuits pour commencer.
## En résumé
- **La sortie :** un classificateur sous licence Apache-2.0 basé sur SigLIP 2, qui prédit ce que montrerait un essayage virtuel à partir des seules photos du produit.
- **Sa raison d'être :** les détecteurs NSFW analysent les pixels d'une photo produit, ce qui n'est pas pertinent pour l'essayage virtuel. Trois d'entre eux n'ont obtenu que 48 à 62 % de réussite sur nos labels.
- **Les sorties :** quatre niveaux (ok, revealing, lingerie, adult), plus des indicateurs pour le sujet (subject), les maillots de bain (swimwear) et les tenues de festival (ravewear).
- **La précision :** 94,6 % sur les quatre niveaux avec un ensemble de données délibérément difficile, 97,5 % sur la mode classique, et 100 % sur la catégorie cordes et bondage.
- **L'ouverture :** les poids, le code d'inférence et la politique d'étiquetage sont publics. Les données d'entraînement, en revanche, ne le sont pas.
---
_[Obtenez le modèle sur Hugging Face](https://huggingface.co/Genlook/tryon-safety-classifier), [récupérez une clé API sur platform.genlook.app](https://platform.genlook.app), ou [ajoutez l'essayage virtuel à votre boutique](/get-started)._
<Faq>
<FaqItem
question="Qu'est-ce que le Classificateur de sécurité pour l'essayage virtuel ?"
answer="C'est un classificateur d'images open source publié par Genlook sous licence Apache-2.0. Il analyse les photos d'un article et prédit le rendu d'un essayage virtuel : ok, revealing (révélateur), lingerie ou adult. Il identifie aussi le sujet (vêtement humain, animal ou non vestimentaire), le degré de couvrance des maillots de bain et les tenues de festival."
/>
<FaqItem
question="Pourquoi ne pas utiliser un simple détecteur NSFW pour l'essayage virtuel ?"
answer="Les filtres NSFW classiques analysent les pixels de l'image. Pour l'essayage virtuel, la photo du produit n'est pas le résultat final : une photo de lingerie à plat ne montre aucune nudité, mais l'essayage virtuel affichera le client en lingerie. Sur nos données, trois détecteurs NSFW open source n'étaient pertinents que 48 à 62 % du temps."
/>
<FaqItem
question="Quelle est sa précision ?"
answer="Il atteint 94,6 % sur ses quatre niveaux lors d'une validation croisée à 5 plis portant sur 2 596 produits choisis pour leur complexité, et 97,5 % sur des catalogues de mode standard. En utilisant le flag bloqué (blocked), il ne rate que 34 produits pour adultes sur 534."
/>
<FaqItem
question="Puis-je l'utiliser à des fins commerciales ?"
answer="Oui. Le modèle est sous licence Apache-2.0, tout comme SigLIP 2 sur lequel il est basé. Les données d'entraînement ne sont toutefois pas publiées."
/>
<FaqItem
question="L'API d'essayage virtuel de Genlook intègre-t-elle des filtres de sécurité ?"
answer="Oui. Chaque article est contrôlé avant la génération d'un essayage. Les produits pour adultes et fétichistes sont rejetés, les maillots de bain et la lingerie exigent un compte payant, et les requêtes bloquées sont remboursées. Les boutiques pour adultes peuvent demander un accès spécifique via support@genlook.app."
/>
</Faq>