Update README.md
Browse files
README.md
CHANGED
@@ -31,7 +31,7 @@ El modelo forma parte de un pipeline más amplio donde los videos son procesados
|
|
31 |
---
|
32 |
|
33 |
### 📊 Datasets Utilizados
|
34 |
-
Para entrenar el modelo, se
|
35 |
|
36 |
- **COCO8** - versión reducida de COCO para pruebas rápidas.
|
37 |
- **License Plate Recognition** - para mejorar la detección de matrículas.
|
@@ -168,16 +168,6 @@ Primeramente descarga el dataset de **COCO8** para que genere la estructura cor
|
|
168 |
|
169 |
---
|
170 |
|
171 |
-
### 📊 **Resultados y Gráficos**
|
172 |
-
🛑 **Pendiente de añadir métricas y gráficos tras finalizar el entrenamiento.**
|
173 |
-
|
174 |
-
Se incluirán gráficos como:
|
175 |
-
- Matriz de confusión
|
176 |
-
- Curva de precisión-recall
|
177 |
-
- Loss function por época
|
178 |
-
|
179 |
-
---
|
180 |
-
|
181 |
### 💻 **Uso del Modelo en Videos**
|
182 |
Para aplicar el modelo a un video y detectar objetos:
|
183 |
|
@@ -192,4 +182,122 @@ results = model.predict("ruta/video.mp4", save=True, conf=0.5)
|
|
192 |
|
193 |
# Guardar el video con las detecciones
|
194 |
print("✅ Procesamiento completado. Video guardado.")
|
195 |
-
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
---
|
32 |
|
33 |
### 📊 Datasets Utilizados
|
34 |
+
Para entrenar el modelo, se ha utilizado el dataset de **COCO8**, pero tambien es posible añadir otros datasets como **License Plate Recognition** o **Shahbagh Traffic Dataset**:
|
35 |
|
36 |
- **COCO8** - versión reducida de COCO para pruebas rápidas.
|
37 |
- **License Plate Recognition** - para mejorar la detección de matrículas.
|
|
|
168 |
|
169 |
---
|
170 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
171 |
### 💻 **Uso del Modelo en Videos**
|
172 |
Para aplicar el modelo a un video y detectar objetos:
|
173 |
|
|
|
182 |
|
183 |
# Guardar el video con las detecciones
|
184 |
print("✅ Procesamiento completado. Video guardado.")
|
185 |
+
```
|
186 |
+
|
187 |
+
---
|
188 |
+
|
189 |
+
### 📂 Estructura del Proyecto YOLOv8
|
190 |
+
|
191 |
+
```bash
|
192 |
+
.
|
193 |
+
├── .venv/ # Entorno
|
194 |
+
├── datasets/ # Carpeta de datasets
|
195 |
+
│ ├── coco8/ # Dataset COCO8
|
196 |
+
│ ├── yolov8s.pt # Pesos preentrenados de YOLOv8s
|
197 |
+
├── datasets-download/ # Descargas de datasets
|
198 |
+
├── processed-video/ # Vídeos procesados
|
199 |
+
│ ├── ny-traffic-processed.mp4 # Vídeo de tráfico procesado
|
200 |
+
├── raw-video/ # Vídeos sin procesar
|
201 |
+
│ ├── ny-traffic.mp4 # Vídeo de tráfico original
|
202 |
+
├── runs/ # Resultados de entrenamiento y validación
|
203 |
+
│ ├── detect/ # Carpeta de detección de objetos
|
204 |
+
│ │ ├── train_coco8 # Entrenamiento con COCO8
|
205 |
+
│ │ ├── train_yolov8n # Entrenamiento con YOLOv8n
|
206 |
+
│ ├── val/ # Resultados de validación
|
207 |
+
├── .gitattributes # Configuración de atributos de Git
|
208 |
+
├── .gitignore # Ignorar archivos innecesarios en Git
|
209 |
+
├── predict.py # Script para realizar predicciones a los vídeos
|
210 |
+
├── requirements.txt # Dependencias del proyecto
|
211 |
+
├── train_yolov8n.py # Script para entrenar YOLOv8n
|
212 |
+
├── train_yolov8s.py # Script para entrenar YOLOv8s
|
213 |
+
├── validate.py # Script para validar el modelo
|
214 |
+
├── yolov8n.pt # Pesos del modelo YOLOv8n
|
215 |
+
```
|
216 |
+
|
217 |
+
---
|
218 |
+
|
219 |
+
### 📊 **Resultados y Gráficos**
|
220 |
+
|
221 |
+
#### Comparación General de Resultados entre YOLOv8n y YOLOv8s
|
222 |
+
|
223 |
+
| **Métrica** | **YOLOv8n** | **YOLOv8s** | **Diferencia (YOLOv8s - YOLOv8n)** |
|
224 |
+
|--------------------|------------|------------|----------------------------------|
|
225 |
+
| **Precisión (B)** | 0.748 | 0.821 | +0.073 |
|
226 |
+
| **Recall (B)** | 0.561 | 0.920 | +0.359 |
|
227 |
+
| **mAP@50 (B)** | 0.645 | 0.944 | +0.299 |
|
228 |
+
| **mAP@50-95 (B)** | 0.431 | 0.726 | +0.295 |
|
229 |
+
| **Fitness** | 0.453 | 0.747 | +0.294 |
|
230 |
+
|
231 |
+
#### 📌 Análisis:
|
232 |
+
- **Precisión**: YOLOv8s tiene mejor precisión (**+7.3%**), lo que significa que el modelo comete menos falsos positivos.
|
233 |
+
- **Recall**: YOLOv8s tiene un recall significativamente mayor (**+35.9%**), indicando que detecta más objetos correctamente.
|
234 |
+
- **mAP@50**: YOLOv8s supera a YOLOv8n en un **30%**, lo que sugiere que el modelo más grande tiene una mejor capacidad para detectar objetos con alta confianza.
|
235 |
+
- **mAP@50-95**: También mejora en un **29.5%**, lo que significa que tiene un rendimiento más consistente en diferentes umbrales de IoU.
|
236 |
+
- **Fitness**: YOLOv8s tiene una mejora notable (**+29.4%**), lo que indica un mejor balance entre precisión y recall.
|
237 |
+
|
238 |
+
---
|
239 |
+
|
240 |
+
#### Comparación de Velocidad
|
241 |
+
|
242 |
+
| **Parámetro** | **YOLOv8n** | **YOLOv8s** | **Diferencia** |
|
243 |
+
|---------------------|------------|------------|----------------|
|
244 |
+
| **Preprocesamiento** | 1.92 ms | 1.68 ms | -0.24 ms |
|
245 |
+
| **Inferencia** | 55.05 ms | 128.99 ms | +73.94 ms |
|
246 |
+
| **Postprocesamiento** | 1.22 ms | 0.91 ms | -0.31 ms |
|
247 |
+
|
248 |
+
#### 📌 Análisis:
|
249 |
+
- **Preprocesamiento**: Similar en ambos modelos.
|
250 |
+
- **Inferencia**: **YOLOv8s es mucho más lento** en inferencia (**+74 ms**), lo cual es esperable ya que es un modelo más grande.
|
251 |
+
- **Postprocesamiento**: Ligeramente más rápido en **YOLOv8s**, pero la diferencia no es significativa.
|
252 |
+
|
253 |
+
---
|
254 |
+
### 🔍 YOLOv8n vs YOLOv8s
|
255 |
+
|
256 |
+
#### Comparación de Métricas
|
257 |
+
|
258 |
+

|
259 |
+
|
260 |
+
#### 📌 Análisis:
|
261 |
+
- YOLOv8s supera en todas las métricas a YOLOv8n.
|
262 |
+
- La mayor diferencia se observa en **Recall (+35.9%)** y **mAP@50-95 (+29.5%)**, indicando una mejor detección a diferentes umbrales de IoU.
|
263 |
+
- Aunque YOLOv8s tiene mejor rendimiento, su velocidad de inferencia es más lenta.
|
264 |
+
|
265 |
+
---
|
266 |
+
|
267 |
+
#### Evolución de la Función de Pérdida por Época
|
268 |
+
|
269 |
+

|
270 |
+
|
271 |
+
#### 📌 Análisis:
|
272 |
+
- Ambos modelos muestran una disminución de la pérdida a lo largo del entrenamiento.
|
273 |
+
- **YOLOv8s** comienza con una pérdida mayor pero converge bien, sugiriendo que aprende mejor con más iteraciones.
|
274 |
+
- **YOLOv8n** tiene una convergencia más rápida pero con menor precisión general.
|
275 |
+
|
276 |
+
---
|
277 |
+
|
278 |
+
#### Curva de Precisión-Recall
|
279 |
+
|
280 |
+

|
281 |
+
|
282 |
+
#### 📌 Análisis:
|
283 |
+
- **YOLOv8s** mantiene una precisión más alta en todos los valores de recall, lo que significa menos falsos positivos en comparación con YOLOv8n.
|
284 |
+
- **YOLOv8n** muestra más fluctuaciones en la curva, indicando menor estabilidad en la detección de objetos.
|
285 |
+
|
286 |
+
---
|
287 |
+
|
288 |
+
#### Matriz de Confusión
|
289 |
+
|
290 |
+

|
291 |
+
|
292 |
+
#### 📌 Análisis:
|
293 |
+
- Ambas matrices muestran que algunos objetos están siendo confundidos entre sí.
|
294 |
+
- **YOLOv8s** presenta menos errores de clasificación en comparación con YOLOv8n.
|
295 |
+
- La normalización de la matriz confirma que YOLOv8s tiene una mejor distribución de predicciones.
|
296 |
+
|
297 |
+
---
|
298 |
+
|
299 |
+
#### Ejemplo de Detección
|
300 |
+
|
301 |
+

|
302 |
+
|
303 |
+
---
|