juancmamacias commited on
Commit
0a0401d
·
verified ·
1 Parent(s): ba9b1ff

Update README.md

Browse files

Comparativa modelos medium, samll and nano

Files changed (1) hide show
  1. README.md +106 -280
README.md CHANGED
@@ -16,339 +16,165 @@ pipeline_tag: video-classification
16
  [![YOLOv8](https://img.shields.io/badge/YOLOv8-Ultralytics-purple.svg)](https://github.com/ultralytics/ultralytics)
17
  [![Hugging Face](https://img.shields.io/badge/🤗%20Hugging%20Face-Model%20Hub-orange)](https://huggingface.co)
18
 
19
- ## 📋 Table of Contents
20
- - [🎯 Quick Comparison](#-quick-comparison)
21
- - [📊 Model Performance](#-model-performance)
22
- - [⚡ Training Efficiency](#-training-efficiency)
23
- - [🖼️ Visual Results](#️-visual-results)
24
- - [💰 Resource Usage](#-resource-usage)
25
- - [🚀 Usage](#-usage)
26
- - [📈 Detailed Metrics](#-detailed-metrics)
27
- - [🔗 Downloads](#-downloads)
28
 
29
  ---
30
 
31
- ## 🎯 Quick Comparison
32
 
33
- | Aspect | **YOLOv8 Medium** | **YOLOv8 Small** | **Winner** |
34
- |--------|-------------------|-------------------|-------------|
35
- | **🏆 [email protected]** | **97.94%** | **97.04%** | 🥇 Medium (+0.9%) |
36
- | **📐 Precision** | **97.27%** | **97.22%** | 🥇 Medium (+0.05%) |
37
- | **🔍 Recall** | **95.74%** | **93.09%** | 🥇 Medium (+2.65%) |
38
- | **⏱️ Training Time** | 11.55 hours | **4.43 hours** | 🥇 **Small (2.6x faster)** |
39
- | **💾 Model Size** | ~50 MB | **~25 MB** | 🥇 **Small (50% lighter)** |
40
- | **🚀 Inference Speed** | ~15ms | **~8-12ms** | 🥇 **Small (25-50% faster)** |
41
- | **💰 Training Cost** | $57.75 | **$22.15** | 🥇 **Small (62% cheaper)** |
42
 
43
- ### 🎖️ **Verdict**:
44
- - **🏆 Medium**: Choose for maximum precision (0.9% advantage)
45
- - **⚡ Small**: Choose for efficiency (2.6x faster training, 50% smaller)
46
- - **💡 Recommendation**: **Small model** offers the best balance for most applications
 
47
 
48
  ---
49
 
50
- ## 📊 Model Performance
51
 
52
- ### 🎯 Final Metrics Comparison (Epoch 100)
53
 
54
- | Metric | Medium | Small | Difference | Status |
55
- |--------|---------|--------|------------|---------|
56
- | **[email protected]** | 97.94% | 97.04% | -0.90% | 🟡 Minimal loss |
57
- | **[email protected]:0.95** | 76.43% | 75.19% | -1.24% | 🟡 Minimal loss |
58
- | **Precision** | 97.27% | 97.22% | -0.05% | 🟢 Negligible |
59
- | **Recall** | 95.74% | 93.09% | -2.65% | 🟡 Acceptable |
60
- | **F1-Score** | 96.49% | 95.10% | -1.39% | 🟡 Good trade-off |
61
-
62
- ### 📈 Performance Evolution
63
-
64
- **Training Progress Comparison:**
65
- ```
66
- Medium Model Evolution:
67
- Epoch 1: 60.63% → Epoch 100: 97.94% [email protected] (+37.31%)
68
-
69
- Small Model Evolution:
70
- Epoch 1: 57.58% → Epoch 100: 97.04% [email protected] (+39.46%)
71
- ```
72
-
73
- **Key Insights:**
74
- - ✅ Both models achieve **>97% [email protected]** (excellent performance)
75
- - ✅ Small model shows **slightly better learning curve** (+39.46% vs +37.31%)
76
- - ✅ Performance difference is **<1%** - practically negligible
77
- - ✅ Both models ready for **production deployment**
78
 
79
  ---
80
 
81
- ## Training Efficiency
82
 
83
- ### ⏱️ Time Comparison
84
- | Phase | Medium | Small | Improvement |
85
- |-------|---------|-------|-------------|
86
- | **Total Training** | 41,586s (11.55h) | 15,966s (4.43h) | **🚀 2.6x faster** |
87
- | **Per Epoch** | ~415s (6.9min) | ~160s (2.7min) | **⚡ 2.6x faster** |
88
- | **Convergence** | Epoch 80+ | Epoch 60+ | **📈 20% earlier** |
89
 
90
- ### 💾 Resource Requirements
91
- | Resource | Medium | Small | Advantage |
92
- |----------|---------|-------|----------|
93
- | **Model Parameters** | ~25.9M | ~11.2M | Small: 57% less |
94
- | **VRAM Usage** | ~8GB | ~4-6GB | Small: 25-50% less |
95
- | **Storage** | ~50MB | ~25MB | Small: 50% smaller |
96
- | **Inference Memory** | ~200MB | ~100MB | Small: 50% less |
97
-
98
- ---
99
 
100
- ## 🖼️ Visual Results
 
 
101
 
102
- ### 📊 Training Curves Comparison
 
103
 
104
- | Medium Model | Small Model |
105
- |:------------:|:-----------:|
106
- | ![Medium Results](./huggingface_assets/medium_results.png) | ![Small Results](./huggingface_assets/small_results.png) |
107
- | **97.94% [email protected]** | **97.04% [email protected]** |
108
 
109
- ### 🎯 Confusion Matrices
110
-
111
- | Medium Model | Small Model |
112
- |:------------:|:-----------:|
113
- | ![Medium Confusion](./huggingface_assets/medium_confusion_matrix.png) | ![Small Confusion](./huggingface_assets/small_confusion_matrix.png) |
114
- | **97.27% Precision** | **97.22% Precision** |
115
-
116
- ### 📈 Precision-Recall Curves
117
-
118
- | Medium Model PR Curve | Small Model PR Curve |
119
- |:---------------------:|:--------------------:|
120
- | ![Medium PR](./huggingface_assets/medium_pr_curve.png) | ![Small PR](./huggingface_assets/small_pr_curve.png) |
121
-
122
- ### 🔍 F1-Score Curves
123
-
124
- | Medium F1 Curve | Small F1 Curve |
125
- |:---------------:|:---------------:|
126
- | ![Medium F1](./huggingface_assets/medium_f1_curve.png) | ![Small F1](./huggingface_assets/small_f1_curve.png) |
127
 
128
- ### 📊 Dataset Analysis
129
 
130
- | Medium Labels | Small Labels |
131
- |:-------------:|:------------:|
132
- | ![Medium Labels](./huggingface_assets/medium_labels.jpg) | ![Small Labels](./huggingface_assets/small_labels.jpg) |
133
 
134
- ### 🔬 Validation Examples
 
 
135
 
136
- #### Ground Truth vs Predictions - Batch 0
137
- | Medium Model | Small Model |
138
- |:------------:|:-----------:|
139
- | ![Medium Val GT](./huggingface_assets/medium_val_batch0_labels.jpg) | ![Small Val GT](./huggingface_assets/small_val_batch0_labels.jpg) |
140
- | ![Medium Val Pred](./huggingface_assets/medium_val_batch0_pred.jpg) | ![Small Val Pred](./huggingface_assets/small_val_batch0_pred.jpg) |
141
 
142
- #### Additional Validation Samples
143
- | Medium Batch 1 | Small Batch 1 |
144
- |:--------------:|:-------------:|
145
- | ![Medium Val1](./huggingface_assets/medium_val_batch1_pred.jpg) | ![Small Val1](./huggingface_assets/small_val_batch1_pred.jpg) |
146
 
147
  ---
148
 
149
- ## 💰 Resource Usage
150
 
151
- ### 💸 Cost Analysis (100 Epochs Training)
 
152
 
153
- | Cost Factor | Medium | Small | Savings |
154
- |-------------|---------|-------|---------|
155
- | **GPU Hours** | 11.55h | 4.43h | **-62%** |
156
- | **Electricity** | ~$4.62 | ~$1.77 | **-62%** |
157
- | **Cloud Compute** | ~$57.75 | ~$22.15 | **-62%** |
158
- | **Storage** | $0.50/month | $0.25/month | **-50%** |
159
- | **Bandwidth** | $1.00 | $0.50 | **-50%** |
160
 
161
- ### 🌱 Environmental Impact
162
- - **Carbon Footprint**: Small model = **62% less CO2** emissions
163
- - **Energy Efficiency**: Small model = **2.6x more efficient**
164
- - **Sustainability Score**: Small model **⭐⭐⭐⭐⭐** vs Medium **⭐⭐⭐**
165
 
166
- ---
 
 
167
 
168
- ## 🚀 Usage
169
 
170
- ### 🔧 Installation
171
- ```bash
172
- pip install ultralytics torch torchvision
173
- ```
174
 
175
- ### 📥 Model Download
176
  ```python
177
  from ultralytics import YOLO
178
 
179
- # Load models
180
- medium_model = YOLO('path/to/medium/weights/best.pt')
181
- small_model = YOLO('path/to/small/weights/best.pt')
182
- ```
183
-
184
- ### 🎯 Inference
185
- ```python
186
- # Single image prediction
187
- results_medium = medium_model('image.jpg')
188
- results_small = small_model('image.jpg')
189
-
190
- # Batch prediction
191
- results_medium = medium_model(['img1.jpg', 'img2.jpg'])
192
- results_small = small_model(['img1.jpg', 'img2.jpg'])
193
- ```
194
-
195
- ### 📊 Benchmarking
196
- ```python
197
- import time
198
-
199
- # Speed test
200
- start = time.time()
201
- results = small_model('test_image.jpg')
202
- small_inference_time = time.time() - start
203
-
204
- start = time.time()
205
- results = medium_model('test_image.jpg')
206
- medium_inference_time = time.time() - start
207
-
208
- print(f"Small: {small_inference_time:.3f}s")
209
- print(f"Medium: {medium_inference_time:.3f}s")
210
- print(f"Speedup: {medium_inference_time/small_inference_time:.1f}x")
211
  ```
212
 
213
  ---
214
 
215
- ## 📈 Detailed Metrics
216
-
217
- ### 📊 Per-Class Performance (Estimated)
218
-
219
- | Class | Medium Precision | Small Precision | Medium Recall | Small Recall |
220
- |-------|------------------|-----------------|---------------|--------------|
221
- | **Adidas** | ~97.5% | ~97.0% | ~96.0% | ~94.0% |
222
- | **Adidas_1** | ~97.0% | ~96.8% | ~95.5% | ~92.0% |
223
- | **Adidas_2** | ~97.2% | ~97.0% | ~95.8% | ~93.0% |
224
- | **Nike** | ~98.0% | ~97.8% | ~96.0% | ~95.0% |
225
-
226
- ### 🔄 Convergence Analysis
227
-
228
- **Medium Model Convergence:**
229
- - Epoch 20: 90.68% [email protected]
230
- - Epoch 60: 96.09% [email protected]
231
- - Epoch 100: **97.94% [email protected]**
232
-
233
- **Small Model Convergence:**
234
- - Epoch 20: 88.30% [email protected]
235
- - Epoch 60: 95.29% [email protected]
236
- - Epoch 100: **97.04% [email protected]**
237
-
238
- ### 📉 Loss Evolution
239
-
240
- | Loss Type | Medium Final | Small Final | Better |
241
- |-----------|--------------|-------------|---------|
242
- | **Box Loss** | 0.7554 | 0.7707 | Medium |
243
- | **Class Loss** | 0.3743 | 0.4121 | Medium |
244
- | **DFL Loss** | 1.0088 | 0.9651 | Small |
245
-
246
- ---
247
-
248
- ## 🔗 Downloads
249
 
250
- ### 📦 Model Weights
251
- - **Medium Model**: [Download weights](link-to-medium-weights) (50MB)
252
- - **Small Model**: [Download weights](link-to-small-weights) (25MB)
 
 
253
 
254
- ### 📁 Training Artifacts
255
- - **Medium Configs**: [args.yaml](./runs/detect/modelo_entrenado_medium/args.yaml)
256
- - **Small Configs**: [args.yaml](./runs/detect/modelo_entrenado_small/args.yaml)
257
- - **Training Logs**: [results.csv](./runs/detect/)
258
-
259
- ### 🗂️ Dataset
260
- - **Sports Logos Dataset**: 4 classes (adidas, adidas_1, adidas_2, nike)
261
- - **Format**: YOLO format with train/val/test splits
262
- - **Images**: 416×416px resolution optimized
263
 
264
  ---
265
 
266
- ## 🎯 Use Case Recommendations
267
-
268
- ### ✅ Choose **Medium Model** when:
269
- - **Precision is critical** (forensics, legal applications)
270
- - **Maximum accuracy needed** (>97.5% required)
271
- - **Resources are abundant** (cloud/server deployment)
272
- - **Batch processing** with time flexibility
273
 
274
- ### Choose **Small Model** when:
275
- - **Mobile/edge deployment** required
276
- - **Real-time performance** needed
277
- - **Cost optimization** is priority
278
- - **Fast training iterations** required
279
- - **Limited hardware** resources
280
 
281
- ### 🏢 Enterprise Recommendations
282
- - **Production**: Small model for 90% of use cases
283
- - **Premium tier**: Medium model for high-value clients
284
- - **Development**: Small model for rapid prototyping
285
- - **Research**: Medium model for baseline studies
286
-
287
- ---
288
 
289
- ## 📊 Technical Specifications
290
-
291
- ### 🏗️ Architecture Comparison
292
- | Specification | Medium | Small |
293
- |---------------|---------|-------|
294
- | **Base Model** | YOLOv8m | YOLOv8s |
295
- | **Parameters** | 25.9M | 11.2M |
296
- | **Layers** | 295 | 225 |
297
- | **GFLOPs** | 78.9 | 28.6 |
298
- | **Input Size** | 416×416 | 416×416 |
299
-
300
- ### ⚙️ Training Configuration
301
- Both models trained with:
302
- - **Epochs**: 100
303
- - **Batch Size**: 4
304
- - **Optimizer**: AdamW
305
- - **Learning Rate**: 0.001 → 0.01
306
- - **Augmentations**: RandAugment, HSV, Mosaic, Erasing
307
- - **Device**: NVIDIA GPU with CUDA
308
 
309
  ---
310
 
311
- ## 📚 Citation
312
-
313
- If you use these models in your research, please cite:
314
-
315
- ```bibtex
316
- @misc{sports-logo-yolov8-comparison,
317
- title={YOLOv8 Sports Logo Detection: Medium vs Small Model Comparison},
318
- author={Juan Carlos Macías - Grupo 5},
319
- year={2025},
320
- publisher={Hugging Face},
321
- url={https://huggingface.co/your-username/your-model}
322
- }
323
- ```
324
-
325
- ---
326
-
327
- ## 🤝 Contributing
328
-
329
- Contributions are welcome! Please feel free to submit a Pull Request.
330
-
331
- ## 📄 License
332
-
333
- This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
334
-
335
- ## 🙏 Acknowledgments
336
-
337
- - [Ultralytics](https://ultralytics.com/) for the YOLOv8 framework
338
- - Sports brands for logo datasets (educational use)
339
- - Hugging Face for model hosting platform
340
-
341
- ---
342
-
343
- ## 📞 Support
344
-
345
- - 🐛 [Report Issues](https://github.com/your-repo/issues)
346
- - 💬 [Discussions](https://github.com/your-repo/discussions)
347
- - 📧 [Contact](mailto:[email protected])
348
-
349
- ---
350
 
351
- ### 🏆 **Performance Summary: Small Model Delivers 97% of Medium's Accuracy with 2.6x Efficiency Gain**
352
 
353
  *Last Updated: September 2, 2025*
354
 
 
16
  [![YOLOv8](https://img.shields.io/badge/YOLOv8-Ultralytics-purple.svg)](https://github.com/ultralytics/ultralytics)
17
  [![Hugging Face](https://img.shields.io/badge/🤗%20Hugging%20Face-Model%20Hub-orange)](https://huggingface.co)
18
 
19
+ # 🚀 Modelos YOLOv8 para Detección de Logos Deportivos - Análisis Comparativo
20
+ ### Detección de Objetos de Alto Rendimiento para Reconocimiento de Marcas Deportivas
 
 
 
 
 
 
 
21
 
22
  ---
23
 
24
+ ## 📋 Resumen de Modelos
25
 
26
+ Este repositorio presenta una comparación exhaustiva de tres modelos YOLOv8 entrenados para detección de logos deportivos, específicamente dirigidos al reconocimiento de **Adidas**, **Nike** y **variantes de Adidas**. Cada modelo ofrece diferentes compensaciones entre precisión, velocidad y requerimientos computacionales.
 
 
 
 
 
 
 
 
27
 
28
+ | Modelo | Arquitectura | Parámetros | Tamaño | Velocidad | Mejor Caso de Uso |
29
+ |--------|-------------|------------|---------|-----------|-------------------|
30
+ | **YOLOv8n (Nano)** | Nano | ~3.2M | 6.2 MB | >100 FPS | Móviles/Dispositivos Edge |
31
+ | **YOLOv8s (Small)** | Small | ~11.2M | 21.5 MB | ~80 FPS | Aplicaciones balanceadas |
32
+ | **YOLOv8m (Medium)** | Medium | ~25.9M | 49.7 MB | ~60 FPS | Escenarios alta precisión |
33
 
34
  ---
35
 
36
+ ## 🎯 Comparación de Rendimiento
37
 
38
+ ### 📊 Resumen de Métricas Clave
39
 
40
+ | Métrica | Nano (YOLOv8n) | Small (YOLOv8s) | Medium (YOLOv8m) | Ganador |
41
+ |---------|----------------|-----------------|------------------|---------|
42
+ | **[email protected]** | 95.9% | 97.0% | 97.9% | 🥇 Medium |
43
+ | **[email protected]-0.95** | 72.4% | 75.2% | 76.4% | 🥇 Medium |
44
+ | **Precisión** | 98.0% | 97.2% | 97.3% | 🥇 Nano |
45
+ | **Recall** | 92.7% | 93.1% | 95.7% | 🥇 Medium |
46
+ | **F1-Score** | 95.3% | 95.1% | 96.5% | 🥇 Medium |
47
+ | **Tiempo Entrenamiento** | 2.55h | 4.43h | 11.6h | 🥇 Nano |
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
 
49
  ---
50
 
51
+ ## 🎨 Recursos Visuales
52
 
53
+ ### 📊 **Visualizaciones de Rendimiento - Modelo Nano**
 
 
 
 
 
54
 
55
+ #### Evolución de Métricas de Entrenamiento
56
+ ![Resultados Nano](./huggingface_assets/nano_results.png)
 
 
 
 
 
 
 
57
 
58
+ #### Curvas de Rendimiento
59
+ ![Curva F1 Nano](./huggingface_assets/nano_boxf1.png)
60
+ ![Curva Precisión-Recall Nano](./huggingface_assets/nano_boxpr.png)
61
 
62
+ #### Análisis de Confusión - Nano
63
+ ![Matriz de Confusión Nano](./huggingface_assets/nano_confusion.png)
64
 
65
+ #### Ejemplos de Validación - Nano
66
+ ![Etiquetas Validación Nano](./huggingface_assets/nano_val_labels.jpg)
67
+ ![Predicciones Validación Nano](./huggingface_assets/nano_val_pred.jpg)
 
68
 
69
+ ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
 
71
+ ### 📊 **Visualizaciones de Rendimiento - Modelo Small**
72
 
73
+ #### Evolución de Métricas de Entrenamiento
74
+ ![Resultados Small](./huggingface_assets/small_results.png)
 
75
 
76
+ #### Curvas de Rendimiento
77
+ ![Curva F1 Small](./huggingface_assets/small_boxf1.png)
78
+ ![Curva Precisión-Recall Small](./huggingface_assets/small_boxpr.png)
79
 
80
+ #### Análisis de Confusión - Small
81
+ ![Matriz de Confusión Small](./huggingface_assets/small_confusion.png)
 
 
 
82
 
83
+ #### Ejemplos de Validación - Small
84
+ ![Etiquetas Validación Small](./huggingface_assets/small_val_labels.jpg)
85
+ ![Predicciones Validación Small](./huggingface_assets/small_val_pred.jpg)
 
86
 
87
  ---
88
 
89
+ ### 📊 **Visualizaciones de Rendimiento - Modelo Medium**
90
 
91
+ #### Evolución de Métricas de Entrenamiento
92
+ ![Resultados Medium](./huggingface_assets/medium_results.png)
93
 
94
+ #### Curvas de Rendimiento
95
+ ![Curva F1 Medium](./huggingface_assets/medium_boxf1.png)
96
+ ![Curva Precisión-Recall Medium](./huggingface_assets/medium_boxpr.png)
 
 
 
 
97
 
98
+ #### Análisis de Confusión - Medium
99
+ ![Matriz de Confusión Medium](./huggingface_assets/medium_confusion.png)
 
 
100
 
101
+ #### Ejemplos de Validación - Medium
102
+ ![Etiquetas Validación Medium](./huggingface_assets/medium_val_labels.jpg)
103
+ ![Predicciones Validación Medium](./huggingface_assets/medium_val_pred.jpg)
104
 
105
+ ---
106
 
107
+ ## 🚀 Ejemplo de Uso
 
 
 
108
 
 
109
  ```python
110
  from ultralytics import YOLO
111
 
112
+ # Cargar tu modelo preferido
113
+ modelo_nano = YOLO('ruta/a/nano/weights/best.pt')
114
+ modelo_small = YOLO('ruta/a/small/weights/best.pt')
115
+ modelo_medium = YOLO('ruta/a/medium/weights/best.pt')
116
+
117
+ # Ejecutar inferencia
118
+ resultados = modelo_nano('ruta/a/tu/imagen.jpg')
119
+
120
+ # Procesar resultados
121
+ for r in resultados:
122
+ cajas = r.boxes
123
+ for caja in cajas:
124
+ id_clase = caja.cls
125
+ confianza = caja.conf
126
+ coordenadas = caja.xyxy
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  ```
128
 
129
  ---
130
 
131
+ ## 📊 Información del Dataset
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
 
133
+ ### 🎯 Clases Detectadas
134
+ - **adidas**: Variantes principales del logo de Adidas
135
+ - **nike**: Logos swoosh y de texto de Nike
136
+ - **adidas_1**: Diseños alternativos de Adidas
137
+ - **adidas_2**: Variantes especializadas de Adidas
138
 
139
+ ### 📸 Estadísticas del Dataset
140
+ - **Total de Imágenes**: 1,200+ muestras
141
+ - **Conjunto de Entrenamiento**: 70% (840+ imágenes)
142
+ - **Conjunto de Validación**: 20% (240+ imágenes)
143
+ - **Conjunto de Prueba**: 10% (120+ imágenes)
144
+ - **Resolución de Imagen**: 416×416 píxeles
145
+ - **Formato de Anotación**: Formato YOLO
 
 
146
 
147
  ---
148
 
149
+ ## 🎯 Guía de Selección de Modelo
 
 
 
 
 
 
150
 
151
+ ### 🚀 Elige **Nano** si necesitas:
152
+ - Inferencia en tiempo real (>100 FPS)
153
+ - Despliegue móvil/edge
154
+ - Consumo mínimo de recursos
155
+ - Escalado rentable
156
+ - Dispositivos con batería
157
 
158
+ ### ⚖️ Elige **Small** si necesitas:
159
+ - Rendimiento/eficiencia balanceados
160
+ - Flexibilidad de despliegue en cloud
161
+ - Estabilidad de producción
162
+ - Requerimientos de precisión moderados
163
+ - ✅ Infraestructura de servidor estándar
 
164
 
165
+ ### 🎯 Elige **Medium** si necesitas:
166
+ - ✅ Máxima precisión (97.9% [email protected])
167
+ - Rendimiento grado investigación
168
+ - Aplicaciones críticas
169
+ - ✅ Capacidades de análisis detallado
170
+ - Mejor rendimiento de recall (95.7%)
 
 
 
 
 
 
 
 
 
 
 
 
 
171
 
172
  ---
173
 
174
+ *Última Actualización: 2 de Septiembre, 2025*
175
+ *Estado de Modelos: ✅ Listos para Producción*
176
+ *Licencia: MIT*
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
 
 
178
 
179
  *Last Updated: September 2, 2025*
180