Skarn55 commited on
Commit
d1ceb4e
·
verified ·
1 Parent(s): f976268

Create README.md

Browse files
Files changed (1) hide show
  1. README.md +207 -0
README.md ADDED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ base_model: SmilingWolf/wd-vit-tagger-v3
4
+ pipeline_tag: image-classification
5
+ library_name: onnxruntime
6
+ language:
7
+ - fr
8
+ - en
9
+ tags:
10
+ - image-tagging
11
+ - anime
12
+ - photo-realistic
13
+ - onnx
14
+ - waifu-diffusion
15
+ - computer-vision
16
+ - browser-ml
17
+ - multi-label-classification
18
+ datasets:
19
+ - SmilingWolf/wd-vit-tagger-v3
20
+ ---
21
+
22
+ # WD ViT Tagger v3 - ONNX Runtime
23
+
24
+ 🎯 **Modèle ONNX optimisé pour le tagging d'images et l'analyse de contenu dans le navigateur**
25
+
26
+ 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.
27
+
28
+ ## 📋 Détails du Modèle
29
+
30
+ - **Modèle de Base** : [SmilingWolf/wd-vit-tagger-v3](https://huggingface.co/SmilingWolf/wd-vit-tagger-v3)
31
+ - **Type de Modèle** : Vision Transformer (ViT) pour classification multi-labels d'images
32
+ - **Format** : ONNX (optimisé pour WebAssembly)
33
+ - **Taille d'Entrée** : 448x448 RGB (ordre des canaux BGR)
34
+ - **Sortie** : ~9 000 tags répartis en plusieurs catégories
35
+ - **Licence** : Apache 2.0
36
+
37
+ ## 🎨 Capacités
38
+
39
+ Ce modèle peut analyser et étiqueter des images avec une grande précision pour :
40
+ - **Tags généraux** : Objets, actions, attributs, styles
41
+ - **Tags de personnages** : Identification de personnages (anime/manga)
42
+ - **Tags de classification** : Classification du contenu (général, sensible, explicite)
43
+ - **Photos réalistes** : Fonctionne parfaitement sur des photographies réelles
44
+ - **Anime/Manga** : Entraînement spécialisé pour les styles d'illustration
45
+
46
+ ## 🚀 Utilisation
47
+
48
+ ### JavaScript (Navigateur - ONNX Runtime Web)
49
+
50
+ ```javascript
51
+ import * as ort from 'onnxruntime-web';
52
+
53
+ // Charger le modèle
54
+ const session = await ort.InferenceSession.create(
55
+ 'https://huggingface.co/Skarn55/wd-vit-tagger-v3-onnx/resolve/main/model.onnx',
56
+ { executionProviders: ['wasm'] }
57
+ );
58
+
59
+ // Préparer l'image (448x448, BGR, plage 0-255)
60
+ const imageData = prepareImage(votreImage); // Voir preprocessing ci-dessous
61
+ const tensor = new ort.Tensor('float32', imageData, [1, 448, 448, 3]);
62
+
63
+ // Exécuter l'inférence
64
+ const results = await session.run({ [session.inputNames[0]]: tensor });
65
+ const scores = results[session.outputNames[0]].data;
66
+
67
+ // Filtrer les tags avec un seuil
68
+ const tags = scores.map((score, i) => ({ tag: tagNames[i], score }))
69
+ .filter(x => x.score > 0.35)
70
+ .sort((a, b) => b.score - a.score);
71
+ ```
72
+
73
+ ### Python (ONNX Runtime)
74
+
75
+ ```python
76
+ import onnxruntime as rt
77
+ import numpy as np
78
+ from PIL import Image
79
+
80
+ # Charger le modèle
81
+ session = rt.InferenceSession("model.onnx")
82
+
83
+ # Préparer l'image
84
+ img = Image.open("image.jpg").convert("RGB")
85
+ img = prepare_square_image(img, 448) # Padding pour format carré
86
+ img_array = np.asarray(img, dtype=np.float32)
87
+ img_array = img_array[:, :, ::-1] # RGB vers BGR
88
+ img_array = np.expand_dims(img_array, axis=0)
89
+
90
+ # Exécuter l'inférence
91
+ input_name = session.get_inputs()[0].name
92
+ output_name = session.get_outputs()[0].name
93
+ predictions = session.run([output_name], {input_name: img_array})[0]
94
+ ```
95
+
96
+ ## 🔧 Prétraitement de l'Image
97
+
98
+ **Étapes critiques de prétraitement :**
99
+
100
+ 1. **Composite alpha** : Si l'image a de la transparence, composer sur fond blanc
101
+ 2. **Padding carré** : Ajouter du padding blanc pour conserver le ratio d'aspect
102
+ 3. **Redimensionnement** : Mettre à l'échelle 448x448 avec interpolation BICUBIC
103
+ 4. **Conversion de couleurs** : Convertir RGB en BGR (inverser l'ordre des canaux)
104
+ 5. **Conserver la plage 0-255** : NE PAS normaliser entre 0-1
105
+
106
+ ```python
107
+ def prepare_square_image(image, target_size=448):
108
+ # Composer le canal alpha
109
+ canvas = Image.new("RGBA", image.size, (255, 255, 255))
110
+ canvas.alpha_composite(image.convert("RGBA"))
111
+ image = canvas.convert("RGB")
112
+
113
+ # Padding pour format carré
114
+ max_dim = max(image.size)
115
+ pad_left = (max_dim - image.size[0]) // 2
116
+ pad_top = (max_dim - image.size[1]) // 2
117
+
118
+ padded = Image.new("RGB", (max_dim, max_dim), (255, 255, 255))
119
+ padded.paste(image, (pad_left, pad_top))
120
+
121
+ # Redimensionnement
122
+ if max_dim != target_size:
123
+ padded = padded.resize((target_size, target_size), Image.BICUBIC)
124
+
125
+ return padded
126
+ ```
127
+
128
+ ## 📊 Performance
129
+
130
+ - **Temps d'Inférence** (Navigateur/WASM) : ~3-5 secondes
131
+ - **Taille du Modèle** : ~250 Mo
132
+ - **Nombre de Tags** : 10 861 labels possibles
133
+ - **Seuil Recommandé** : 0.35 pour les tags généraux
134
+
135
+ ## 📁 Fichiers
136
+
137
+ - `model.onnx` - Poids du modèle ONNX (~250 Mo)
138
+ - `selected_tags.csv` - Labels des tags avec catégories (~500 Ko)
139
+
140
+ ### Catégories de Tags
141
+
142
+ | Catégorie | Description | Exemples de Tags |
143
+ |-----------|-------------|------------------|
144
+ | 0 | Général | `1girl`, `solo`, `long hair`, `smile` |
145
+ | 1 | Artiste | Noms d'artistes et styles |
146
+ | 3 | Copyright | Noms de séries/franchises |
147
+ | 4 | Personnage | Noms de personnages |
148
+ | 5 | Meta | Tags de métadonnées d'image |
149
+ | 9 | Classification | `general`, `sensitive`, `explicit` |
150
+
151
+ ## 🎯 Cas d'Usage
152
+
153
+ - **Tagging automatique d'images** pour la gestion de contenu
154
+ - **Optimisation pour moteurs de recherche** avec génération de métadonnées
155
+ - **Modération de contenu** via classification
156
+ - **Annotation de datasets** pour le machine learning
157
+ - **Outils basés navigateur** sans dépendances serveur
158
+ - **Applications respectueuses de la vie privée** (traitement côté client)
159
+
160
+ ## ⚙️ Spécifications Techniques
161
+
162
+ - **Forme d'Entrée** : `[1, 448, 448, 3]` (format NHWC)
163
+ - **Type d'Entrée** : `float32`
164
+ - **Ordre des Couleurs** : BGR (pas RGB !)
165
+ - **Plage de Valeurs** : 0-255 (non normalisé)
166
+ - **Forme de Sortie** : `[1, 10861]`
167
+ - **Type de Sortie** : `float32` (probabilités sigmoid)
168
+
169
+ ## 🙏 Crédits
170
+
171
+ - **Modèle Original** : [SmilingWolf](https://huggingface.co/SmilingWolf) - Créateur du WD Tagger v3
172
+ - **Dataset d'Entraînement** : Dataset WaifuDiffusion v3
173
+ - **Conversion ONNX** : François MENGUY ([Skarn55](https://huggingface.co/Skarn55))
174
+
175
+ ## 📜 Licence
176
+
177
+ Ce modèle est publié sous **Licence Apache 2.0**, identique au modèle original.
178
+
179
+ Vous êtes libre de :
180
+ - ✅ Utiliser commercialement
181
+ - ✅ Modifier et distribuer
182
+ - ✅ Utiliser en privé
183
+ - ✅ Utilisation de brevets
184
+
185
+ **Attribution** : Merci de créditer SmilingWolf et de faire un lien vers le modèle original.
186
+
187
+ ## 🔗 Modèles Associés
188
+
189
+ - **Modèle PyTorch Original** : [SmilingWolf/wd-vit-tagger-v3](https://huggingface.co/SmilingWolf/wd-vit-tagger-v3)
190
+ - **Variante SwinV2** : [SmilingWolf/wd-swinv2-tagger-v3](https://huggingface.co/SmilingWolf/wd-swinv2-tagger-v3)
191
+ - **Variante ConvNeXt** : [SmilingWolf/wd-convnext-tagger-v3](https://huggingface.co/SmilingWolf/wd-convnext-tagger-v3)
192
+
193
+ ## 🛠️ Autres Modèles par François MENGUY
194
+
195
+ - **Classification de Genre** : [Skarn55/gender-classification-onnx](https://huggingface.co/Skarn55/gender-classification-onnx)
196
+
197
+ ## 📧 Contact
198
+
199
+ Pour des questions ou problèmes concernant cette version ONNX, veuillez ouvrir une issue sur le dépôt.
200
+
201
+ Pour des questions sur le modèle original, veuillez consulter [le dépôt de SmilingWolf](https://huggingface.co/SmilingWolf/wd-vit-tagger-v3).
202
+
203
+ ---
204
+
205
+ **Note** : Ceci est un miroir/conversion du modèle original pour la compatibilité ONNX Runtime. Tout le crédit pour l'architecture du modèle et l'entraînement revient à SmilingWolf.
206
+
207
+ **Converti avec ❤️ par François MENGUY**