|
|
--- |
|
|
license: apache-2.0 |
|
|
base_model: SmilingWolf/wd-vit-tagger-v3 |
|
|
pipeline_tag: image-classification |
|
|
library_name: onnxruntime |
|
|
language: |
|
|
- fr |
|
|
- en |
|
|
tags: |
|
|
- image-tagging |
|
|
- anime |
|
|
- photo-realistic |
|
|
- onnx |
|
|
- waifu-diffusion |
|
|
- computer-vision |
|
|
- browser-ml |
|
|
- multi-label-classification |
|
|
datasets: |
|
|
- SmilingWolf/wd-vit-tagger-v3 |
|
|
--- |
|
|
|
|
|
# WD ViT Tagger v3 - ONNX Runtime |
|
|
|
|
|
🎯 **Modèle ONNX optimisé pour le tagging d'images et l'analyse de contenu dans le navigateur** |
|
|
|
|
|
Ce dépôt héberge une version ONNX optimisée du modèle [WD ViT Tagger v3](https://huggingface.co/SmilingWolf/wd-vit-tagger-v3), conçu pour une inférence efficace dans les navigateurs web via ONNX Runtime Web. |
|
|
|
|
|
--- |
|
|
|
|
|
## 📋 Détails du Modèle |
|
|
|
|
|
- **Modèle de Base** : [SmilingWolf/wd-vit-tagger-v3](https://huggingface.co/SmilingWolf/wd-vit-tagger-v3) |
|
|
- **Type de Modèle** : Vision Transformer (ViT) pour classification multi-labels d'images |
|
|
- **Format** : ONNX (optimisé pour WebAssembly) |
|
|
- **Taille d'Entrée** : 448×448 RGB (ordre des canaux **BGR**) |
|
|
- **Sortie** : ~9 000 tags répartis en plusieurs catégories |
|
|
- **Licence** : Apache 2.0 |
|
|
|
|
|
--- |
|
|
|
|
|
## 🎨 Capacités |
|
|
|
|
|
Le modèle peut analyser et étiqueter des images avec une grande précision pour : |
|
|
|
|
|
- **Tags généraux** : Objets, actions, attributs, styles |
|
|
- **Tags de personnages** : Identification de personnages (anime/manga) |
|
|
- **Tags de classification** : général / sensible / explicite |
|
|
- **Photos réalistes** : Fonctionne parfaitement sur des images réelles |
|
|
- **Anime/Manga** : Modèle spécialisé pour styles illustrés |
|
|
|
|
|
--- |
|
|
|
|
|
## 🚀 Utilisation |
|
|
|
|
|
### 🌐 Outil en ligne (100% local, aucun serveur) |
|
|
|
|
|
👉 **https://fmenguy.fr/oai/** |
|
|
|
|
|
> **100% client-side** — aucune image envoyée, tout se passe dans votre navigateur. |
|
|
|
|
|
--- |
|
|
|
|
|
### 📦 JavaScript (Navigateur – ONNX Runtime Web) |
|
|
|
|
|
```javascript |
|
|
import * as ort from 'onnxruntime-web'; |
|
|
|
|
|
// Charger le modèle |
|
|
const session = await ort.InferenceSession.create( |
|
|
'https://huggingface.co/Skarn55/oai/resolve/main/model.onnx', |
|
|
{ executionProviders: ['wasm'] } |
|
|
); |
|
|
|
|
|
// Préparer l'image (448x448, BGR, plage 0-255) |
|
|
const imageData = prepareImage(votreImage); // Voir preprocessing ci-dessous |
|
|
const tensor = new ort.Tensor('float32', imageData, [1, 448, 448, 3]); |
|
|
|
|
|
// Exécuter l'inférence |
|
|
const results = await session.run({ [session.inputNames[0]]: tensor }); |
|
|
const scores = results[session.outputNames[0]].data; |
|
|
|
|
|
// Filtrer les tags |
|
|
const tags = scores |
|
|
.map((score, i) => ({ tag: tagNames[i], score })) |
|
|
.filter(x => x.score > 0.35) |
|
|
.sort((a, b) => b.score - a.score); |
|
|
|
|
|
// Affichage résultat |
|
|
console.log("Tags détectés :", tags); |
|
|
``` |
|
|
|
|
|
🔧 Prétraitement (Python) |
|
|
|
|
|
def prepare_square_image(image, target_size=448): |
|
|
canvas = Image.new("RGBA", image.size, (255, 255, 255)) |
|
|
canvas.alpha_composite(image.convert("RGBA")) |
|
|
image = canvas.convert("RGB") |
|
|
|
|
|
max_dim = max(image.size) |
|
|
pad_left = (max_dim - image.size[0]) // 2 |
|
|
pad_top = (max_dim - image.size[1]) // 2 |
|
|
|
|
|
padded = Image.new("RGB", (max_dim, max_dim), (255, 255, 255)) |
|
|
padded.paste(image, (pad_left, pad_top)) |
|
|
|
|
|
if max_dim != target_size: |
|
|
padded = padded.resize((target_size, target_size), Image.BICUBIC) |
|
|
|
|
|
return padded |
|
|
|
|
|
|
|
|
## 📊 Performance |
|
|
|
|
|
| Élément | Valeur | |
|
|
|--------|--------| |
|
|
| Inférence navigateur | 3–5 s | |
|
|
| Taille modèle | ~250 Mo | |
|
|
| Tags totaux | 10 861 | |
|
|
| Seuil recommandé | 0.35 | |
|
|
|
|
|
--- |
|
|
|
|
|
## 📁 Fichiers fournis |
|
|
|
|
|
- `model.onnx` |
|
|
- `selected_tags.csv` |
|
|
|
|
|
--- |
|
|
|
|
|
## 🏷️ Catégories de tags |
|
|
|
|
|
| Catégorie | Description | Exemples | |
|
|
|----------|-------------|----------| |
|
|
| Général | tags visuels | girl, solo | |
|
|
| Artiste | noms d’artistes | … | |
|
|
| Copyright | franchises | … | |
|
|
| Personnage | noms de personnages | … | |
|
|
| Meta | métadonnées | … | |
|
|
| Classification | general, sensitive, explicit | … | |
|
|
|
|
|
--- |
|
|
|
|
|
## 🎯 Cas d'usages |
|
|
|
|
|
- Tagging automatique d'images |
|
|
- Modération / filtrage |
|
|
- SEO (métadonnées images) |
|
|
- Annotation datasets ML |
|
|
- Apps 100% navigateur (confidentialité) |
|
|
|
|
|
--- |
|
|
|
|
|
## ⚙️ Spécifications Techniques |
|
|
|
|
|
- Entrée : `float32`, `[1, 448, 448, 3]`, **BGR**, 0–255 |
|
|
- Sortie : `float32`, `[1, 10861]` |
|
|
- Activation : **sigmoid** |
|
|
|
|
|
--- |
|
|
|
|
|
## 🙏 Crédits |
|
|
|
|
|
- **Modèle original** : SmilingWolf |
|
|
- **Dataset** : WaifuDiffusion v3 |
|
|
- **Conversion ONNX** : François MENGUY |
|
|
|
|
|
--- |
|
|
|
|
|
## 📜 Licence |
|
|
|
|
|
Licence **Apache 2.0**, autorise : |
|
|
|
|
|
- Utilisation commerciale |
|
|
- Modifications |
|
|
- Distribution |
|
|
- Usage privé |
|
|
|
|
|
Veuillez créditer **SmilingWolf**. |
|
|
|
|
|
--- |
|
|
|
|
|
## 🔗 Modèles Associés |
|
|
|
|
|
- `wd-vit-tagger-v3` |
|
|
- `wd-swinv2-tagger-v3` |
|
|
- `wd-convnext-tagger-v3` |
|
|
|
|
|
--- |
|
|
|
|
|
## 🛠️ Autres modèles par François MENGUY |
|
|
|
|
|
- `Skarn55/gender-classification-onnx` |
|
|
- https://fmenguy.fr/oai/ |
|
|
|
|
|
--- |
|
|
|
|
|
## 📧 Contact |
|
|
|
|
|
Ouvrez une issue pour tout problème concernant cette version ONNX. |
|
|
|
|
|
> Conversion ONNX réalisée avec ❤️ par François MENGUY. |
|
|
|