izaskunmz commited on
Commit
636c3c3
·
verified ·
1 Parent(s): fe55437

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +153 -52
README.md CHANGED
@@ -1,52 +1,153 @@
1
- ---
2
- license: mit
3
- ---
4
- tags:
5
- - yolov8
6
- - object-detection
7
- - deep-learning
8
- - computer-vision
9
- - pretrained
10
- ---
11
-
12
- # 📦 YOLOv8 - Modelo de Detección de Objetos
13
-
14
- Este modelo está basado en **YOLOv8**, una de las arquitecturas más avanzadas para la detección en tiempo real de objetos en imágenes y vídeos. Está entrenado en un dataset de múltiples clases para reconocer una variedad de objetos con alta precisión.
15
-
16
- ---
17
-
18
- ## 🛠️ **Detalles Técnicos**
19
- - **Arquitectura**: YOLOv8 (You Only Look Once)
20
- - **Dataset**: Conjunto de datos etiquetado con objetos de diversas categorías.
21
- - **Épocas de entrenamiento**: 600
22
- - **Tamaño de imagen**: 640x640 px
23
- - **Precisión final (mAP@50)**: 85% en validación
24
- - **FPS en GPU**: ~45 en inferencia
25
-
26
- ---
27
-
28
- ## 🚀 **Uso del Modelo**
29
- Puedes cargar el modelo y realizar predicciones con la librería `ultralytics`.
30
-
31
- ### **📸 Para Imágenes**
32
- ```python
33
- import cv2
34
- from ultralytics import YOLO
35
-
36
- model = YOLO("izaskun/yolov8-object-detection")
37
- cap = cv2.VideoCapture("video.mp4")
38
-
39
- while cap.isOpened():
40
- ret, frame = cap.read()
41
- if not ret:
42
- break
43
-
44
- results = model.predict(frame)
45
- annotated_frame = results[0].plot()
46
- cv2.imshow("YOLOv8 - Detección en Vídeo", annotated_frame)
47
-
48
- if cv2.waitKey(1) == ord('q'):
49
- break
50
-
51
- cap.release()
52
- cv2.destroyAllWindows()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: mit
3
+ base_model:
4
+ - Ultralytics/YOLOv8
5
+ tags:
6
+ - yolov8
7
+ - object-detection
8
+ - deep-learning
9
+ - computer-vision
10
+ - pretrained
11
+ ---
12
+
13
+ # 📦 YOLOv8s - Modelo de Detección de Objetos
14
+
15
+ ### 📌 Resumen
16
+ Este modelo está basado en **YOLOv8s**, entrenado específicamente para la detección de objetos en entornos urbanos y de tráfico. Se han combinado múltiples datasets para mejorar la detección de matrículas y objetos en escenarios urbanos complejos.
17
+
18
+ ---
19
+
20
+ ### 📂 Arquitectura del Proyecto
21
+ El modelo forma parte de un pipeline más amplio donde los videos son procesados en AWS. La arquitectura general es la siguiente:
22
+
23
+ ![image/png](https://cdn-uploads.huggingface.co/production/uploads/66f1268bcaf696884799cb97/wTk0ygmkAy1CxRdcrU5PJ.png)
24
+
25
+ 1. Los videos son enviados a un **bucket S3** desde una API.
26
+ 2. Un **AWS Lambda** enciende una instancia **EC2** que contiene el modelo YOLOv8s.
27
+ 3. La EC2 procesa el video y envía los resultados a **DynamoDB**.
28
+ 4. Los resultados finales se almacenan en **S3** en formato JSON y logs en formato .log.
29
+ 5. DynamoDB indexa la información con claves secundarias globales (GSI).
30
+ 6. Cuando el proceso finaliza, una **segunda Lambda** apaga la instancia EC2.
31
+
32
+ ---
33
+
34
+ ### 📊 Datasets Utilizados
35
+ Para entrenar el modelo, se han combinado varios datasets descargados desde **COCO8** y **Roboflow Universe**:
36
+
37
+ - **COCO8** - versión reducida de COCO para pruebas rápidas.
38
+ - **License Plate Recognition** - para mejorar la detección de matrículas.
39
+ - **Shahbagh Traffic Dataset** - dataset específico para escenas de tráfico.
40
+
41
+ El dataset de Coco8 se descargó con el siguiente código:
42
+
43
+ ```python
44
+ from ultralytics.utils.downloads import download
45
+
46
+ # Descargar el dataset COCO8 en formato YOLO
47
+ download('https://ultralytics.com/assets/coco8.zip', dir='datasets')
48
+ ```
49
+
50
+ Y los datasets de Roboflow con el siguiente código:
51
+
52
+ ```python
53
+ from roboflow import Roboflow
54
+
55
+ # Configurar la API Key
56
+ rf = Roboflow(api_key="TU_API_KEY")
57
+
58
+ # Cargar el dataset desde Roboflow Universe
59
+ project = rf.workspace("shovonthesis").project("shahbagh-g7vmy")
60
+
61
+ # Seleccionar la versión 4 del dataset (según la URL)
62
+ version = project.version(4)
63
+
64
+ # Descargar el dataset en formato YOLOv8
65
+ dataset_path = version.download("yolov8")
66
+
67
+ print(f"✅ Dataset descargado en: {dataset_path}")
68
+ ```
69
+ ### 🔹 **Observación**
70
+ Para descargar los datasets de Roboflow mediante código es necesario la Private API Key que se encuentra en Settings > APi Keys de tu cuenta de Roboflow.
71
+
72
+ ---
73
+
74
+ ### ⚙ **Configuración del Entrenamiento**
75
+ El modelo fue entrenado utilizando **YOLOv8s** con los siguientes parámetros:
76
+
77
+ ```python
78
+ from ultralytics import YOLO
79
+
80
+ # Cargar el modelo YOLOv8s preentrenado
81
+ model = YOLO("yolov8s.pt")
82
+
83
+ # Entrenar el modelo
84
+ model.train(
85
+ data="/home/USER/yolo/yolov8-object-detection/datasets/combined/data.yaml",
86
+ epochs=150,
87
+ batch=8,
88
+ imgsz=640,
89
+ device='cpu', # Cambiar a 'cuda' si hay GPU disponible
90
+ project="/home/USER/yolo/yolov8-object-detection/runs/detect",
91
+ name="train_yolov8s",
92
+ exist_ok=True,
93
+ patience=200,
94
+ lr0=0.01,
95
+ momentum=0.937,
96
+ weight_decay=0.0005
97
+ )
98
+ ```
99
+
100
+ ---
101
+
102
+ ### ✅ **Validación del Modelo**
103
+ Después del entrenamiento, validamos el modelo con el siguiente código:
104
+
105
+ ```python
106
+ from ultralytics import YOLO
107
+
108
+ # Cargar el modelo entrenado
109
+ model = YOLO("/home/USER/yolo/yolov8-object-detection/runs/detect/train_yolov8s_v4/weights/best.pt")
110
+
111
+ # Validar el modelo y guardar los resultados
112
+ metrics = model.val(
113
+ data="/home/USER/yolo/yolov8-object-detection/datasets/combined/data.yaml",
114
+ project="/home/USER/yolo/yolov8-object-detection/runs/val",
115
+ name="val",
116
+ exist_ok=True
117
+ )
118
+
119
+ print(metrics)
120
+ ```
121
+
122
+ ### 🔹 **Recomendación**
123
+ Primeramente descarga el dataset de **COCO8** para que genere la estructura correcta de los archivos para incluir los demás datasets.
124
+
125
+ *Para juntar varios datasets habrá que hacerlo manualmente o mediante un codigo de python que añada las imágenes y labels a sus carpetas correspondientes.*
126
+
127
+ ---
128
+
129
+ ### 📊 **Resultados y Gráficos**
130
+ 🛑 **Pendiente de añadir métricas y gráficos tras finalizar el entrenamiento.**
131
+
132
+ Se incluirán gráficos como:
133
+ - Matriz de confusión
134
+ - Curva de precisión-recall
135
+ - Loss function por época
136
+
137
+ ---
138
+
139
+ ### 💻 **Uso del Modelo en Videos**
140
+ Para aplicar el modelo a un video y detectar objetos:
141
+
142
+ ```python
143
+ from ultralytics import YOLO
144
+
145
+ # Cargar el modelo entrenado
146
+ model = YOLO("runs/detect/train_yolov8s_v4/weights/best.pt")
147
+
148
+ # Realizar inferencia en un video
149
+ results = model.predict("video.mp4", save=True, conf=0.5)
150
+
151
+ # Guardar el video con las detecciones
152
+ print("✅ Procesamiento completado. Video guardado.")
153
+ ```