File size: 8,602 Bytes
aedd96f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
# 📊 Résultats du Projet Trash Full Detection

## 🎯 Vue d'ensemble

Projet académique de détection automatique du niveau de remplissage des poubelles utilisant **YOLOv8n** (Ultralytics). Le modèle détecte deux classes : `poubelle_pleine` et `poubelle_vide`.

---

## 📈 Performances du Modèle

### Métriques Globales

| Métrique | Valeur | Description |
|----------|--------|-------------|
| **mAP50** | **67.1%** | Précision moyenne à IoU=0.50 (métrique principale) |
| **mAP50-95** | **41.1%** | Précision moyenne sur IoU de 0.50 à 0.95 |
| **Précision** | **65.2%** | Taux de vrais positifs parmi les détections |
| **Rappel** | **74.8%** | Taux de détection des poubelles présentes |

### Performances par Classe

| Classe | Précision | Rappel | mAP50 |
|--------|-----------|--------|-------|
| poubelle_pleine | ~70% | ~80% | ~70% |
| poubelle_vide | ~60% | ~70% | ~64% |

---

## 🗂️ Dataset

### Composition

- **Source** : Roboflow (workspace: deep-nhhm8, projet: my-first-project-prs1r, v2)
- **Total images** : 395
  - Train : 345 images (87.3%)
  - Validation : 25 images (6.3%)
  - Test : 25 images (6.3%)
- **Classes** : 2 (poubelle_pleine, poubelle_vide)
- **Format** : YOLOv9 (compatible YOLOv8)

### Annotations

- Format YOLO : `class_id x_center y_center width height` (coordonnées normalisées)
- Bounding boxes annotées manuellement
- Un seul objet principal par image

---

## 🏋️ Entraînement

### Configuration

```python
Architecture : YOLOv8n
Paramètres : 3,011,238
GFLOPs : 8.2
Époques : 30
Batch size : 16
Image size : 640x640
Device : CPU
Optimiseur : AdamW (lr0=0.01)
```

### Évolution des Pertes

| Époque | Box Loss | Class Loss | DFL Loss |
|--------|----------|------------|----------|
| 1 | 1.448 | 3.164 | 1.364 |
| 10 | 1.083 | 1.333 | 1.163 |
| 20 | 0.927 | 0.963 | 1.106 |
| 30 | 0.846 | 0.830 | 1.078 |

**Temps d'entraînement** : ~49 minutes (CPU Intel)

---

## 🧪 Tests d'Inférence

### Résultats sur Images de Test

#### Image 1 : `img_122_jpg.rf.7dd543872a8a7df198786227b6aeb614.jpg`
- **Classe détectée** : `poubelle_pleine`
- **Confiance** : 91.35%
- **Temps d'inférence** : 65.5ms
- **Bbox** : [3.14, 34.99, 474.78, 485.31]

#### Image 2 : `img_134_jpg.rf.3b456fc8c759d10eb71dd8d0480f1d3a.jpg`
- **Classe détectée** : `poubelle_pleine`
- **Confiance** : 41.49%
- **Temps d'inférence** : ~60ms

#### Image 3 : `img_15_jpg.rf.7b71311ce3b8b18890542419fdd21ca3.jpg`
- **Classe détectée** : `poubelle_pleine`
- **Confiance** : 93.77%
- **Temps d'inférence** : ~60ms

### Performance d'Inférence

- **Vitesse moyenne** : ~15 FPS (CPU)
- **Prétraitement** : 2.7ms
- **Inférence** : 65.5ms
- **Post-traitement** : 1.1ms

---

## 📦 Modèles Exportés

| Format | Fichier | Taille | Usage |
|--------|---------|--------|-------|
| PyTorch | `best.pt` | 5.96 MB | Entraînement, inférence Python |
| ONNX | `best.onnx` | 11.70 MB | Déploiement multiplateforme |

### Compatibilité

- ✅ Python (Ultralytics)
- ✅ ONNX Runtime
- ✅ TensorRT (après conversion)
- ✅ OpenVINO (après conversion)
- ✅ TFLite (via export supplémentaire)

---

## 🎯 Applications Pratiques

### 1. Optimisation des Tournées de Collecte

**Problème** : Les camions poubelles suivent des itinéraires fixes, collectant des poubelles vides.

**Solution** : 
- Caméras sur drones/véhicules détectent les poubelles pleines
- Génération d'itinéraires optimisés en temps réel
- **Économies** : 20-30% de réduction des kilomètres parcourus

### 2. Gestion Smart City

**Architecture** :
```
Caméras IoT → Edge Computing (Raspberry Pi) → API Cloud → Dashboard Web
```

**Bénéfices** :
- Surveillance 24/7 de l'état des poubelles
- Alertes automatiques pour collecte urgente
- Tableaux de bord temps réel pour les services municipaux

### 3. Analyse Prédictive

**Données collectées** :
- Fréquence de remplissage par localisation
- Pics d'utilisation (jours/heures)
- Saisonnalité

**Utilisation** :
- Prévision des besoins de collecte
- Dimensionnement optimal des équipements
- Planification des ressources humaines

---

## 🚀 Déploiement

### Option 1 : API REST (FastAPI)

```python
# api.py
from fastapi import FastAPI, File, UploadFile
from ultralytics import YOLO

app = FastAPI()
model = YOLO("models/yolo/best.pt")

@app.post("/predict")
async def predict(file: UploadFile):
    results = model.predict(file, conf=0.25)
    return {"detections": parse_results(results)}
```

**Commande** : `uvicorn api:app --host 0.0.0.0 --port 8000`

### Option 2 : Edge Computing (Raspberry Pi)

**Matériel** :
- Raspberry Pi 4 (4GB RAM)
- Caméra USB/Pi Camera
- Optional : Coral USB Accelerator

**Installation** :
```bash
pip install ultralytics
yolo predict model=best.pt source=0  # Webcam
```

### Option 3 : Mobile (TFLite)

**Export** :
```python
model = YOLO('best.pt')
model.export(format='tflite')
```

**Intégration** : Android (Kotlin) / iOS (Swift)

---

## 📊 Visualisations Générées

### Fichiers disponibles dans `runs/detect/trash_yolo_model/`

1. **results.png** : Courbes de perte et métriques
2. **confusion_matrix.png** : Matrice de confusion
3. **BoxP_curve.png** : Courbe Précision-Confiance
4. **BoxR_curve.png** : Courbe Rappel-Confiance
5. **BoxPR_curve.png** : Courbe Précision-Rappel
6. **BoxF1_curve.png** : Courbe F1-Confiance

### Images annotées

- Disponibles dans `outputs/images/`
- Format : Bounding box + label + confiance
- Couleur : Bleu (détection YOLO par défaut)

---

## 🔍 Analyse des Résultats

### Points Forts

✅ **mAP50 de 67.1%** : Performance solide pour un dataset de 395 images  
✅ **Rappel de 74.8%** : Détecte la majorité des poubelles  
✅ **Inférence rapide** : ~65ms par image (adapté au temps réel)  
✅ **Modèle léger** : 6 MB, déployable sur edge devices  

### Points d'Amélioration

⚠️ **mAP50-95 de 41.1%** : Localisation des bounding boxes imprécise  
⚠️ **Confiance variable** : Certaines détections à 40-50%  
⚠️ **Dataset limité** : 395 images (idéal : 1000+)  
⚠️ **Conditions variées** : Peu d'images nocturnes, angles variés  

### Recommandations

1. **Augmentation des données** : Rotation, flip, luminosité, occlusions
2. **Dataset plus large** : 1000-2000 images, plus de variété (météo, éclairage)
3. **Segmentation** : YOLOv8-seg pour calcul du degré de remplissage précis
4. **Hyperparamètres** : Grid search sur learning rate, batch size
5. **Modèle plus lourd** : YOLOv8m ou YOLOv8l pour meilleures performances

---

## 🎓 Notions Académiques

### YOLO (You Only Look Once)

**Principe** : Détection d'objets en une seule passe (single-shot detector)

**Architecture YOLOv8** :
- **Backbone** : CSPDarknet (extraction features)
- **Neck** : PANet (fusion multi-échelle)
- **Head** : Découplé (classification + localisation)

**Loss Function** :
```
Loss_total = λ_box * Loss_box + λ_cls * Loss_cls + λ_dfl * Loss_dfl
```

- **Loss_box** : IoU/GIoU pour localisation
- **Loss_cls** : Binary cross-entropy pour classification
- **Loss_dfl** : Distribution Focal Loss pour raffinement bbox

### Métriques de Détection

**Precision** : `TP / (TP + FP)`  
→ Parmi les détections, combien sont correctes ?

**Recall** : `TP / (TP + FN)`  
→ Parmi les objets présents, combien sont détectés ?

**mAP** : Moyenne de la précision sur différents seuils de rappel  
→ Métrique globale de performance

**IoU** : `Intersection / Union` des bounding boxes  
→ Mesure la qualité de localisation

---

## 📝 Conclusion

Ce projet démontre la faisabilité d'un système de détection automatique du remplissage des poubelles avec YOLO. Les performances (mAP50 = 67.1%) sont satisfaisantes pour un prototype académique avec un dataset limité.

### Impact Potentiel

- 🌍 **Environnemental** : Réduction des émissions CO2 (-20-30%)
- 💰 **Économique** : Optimisation des coûts opérationnels
- 🏙️ **Sociétal** : Villes plus propres, services plus efficaces

### Perspectives

1. **Court terme** : Augmentation du dataset, fine-tuning
2. **Moyen terme** : Déploiement pilote sur 10-20 poubelles
3. **Long terme** : Intégration dans écosystème Smart City

---

## 📚 Références

- **Ultralytics YOLOv8** : https://docs.ultralytics.com/
- **Roboflow** : https://roboflow.com/
- **ONNX** : https://onnx.ai/
- **FastAPI** : https://fastapi.tiangolo.com/

---

**Projet réalisé dans le cadre d'un Master 2 en Systèmes Intelligents / Intelligence Artificielle**  
**Date** : Janvier 2025  
**Auteur** : [Votre nom]