Skip to content

Repository files navigation

Pipeline Completo de Entrenamiento YOLO v8

Sistema completo para entrenar un modelo YOLO v8 con 2 clases personalizadas.

📋 Requisitos

pip install ultralytics opencv-python numpy

🏗️ Estructura del Proyecto

.
├── setup.py              # Genera la estructura de carpetas
├── labelador.py          # Etiquetador visual interactivo
├── augment.py            # Generador de datos aumentados
├── train.py              # Preparación del dataset y entrenamiento
├── test.py               # Prueba e inferencia del modelo
│
├── data_raw/             # Imágenes sin etiquetar (copia aquí tus imágenes)
├── data_labeled/         # Imágenes etiquetadas
│   ├── images/
│   └── labels/
├── data_augmented/       # Imágenes aumentadas automáticamente
│   ├── images/
│   └── labels/
├── dataset/              # Dataset final dividido (train/val/test)
│   ├── images/
│   │   ├── train/
│   │   ├── val/
│   │   └── test/
│   └── labels/
│       ├── train/
│       ├── val/
│       └── test/
├── results/              # Resultados de entrenamiento y predicciones
├── models/               # Modelos guardados
└── logs/                 # Logs de entrenamiento

🚀 Instrucciones de Uso

1️⃣ Preparar la Estructura

python setup.py

Esto crea todas las carpetas necesarias y archivos de configuración.

2️⃣ Copiar Imágenes Originales

Coloca tus imágenes en la carpeta data_raw/

3️⃣ Etiquetar Imágenes

python labelador.py

Controles del etiquetador:

  • Click + Drag: Dibuja bounding box
  • 1: Cambiar a Clase1 (Verde)
  • 2: Cambiar a Clase2 (Azul)
  • C: Limpiar todos los boxes
  • D: Borrar el último box
  • S: Guardar y siguiente imagen
  • B: Volver a imagen anterior
  • Q: Salir

Las imágenes etiquetadas se guardan automáticamente en:

  • data_labeled/images/ → Imágenes
  • data_labeled/labels/ → Etiquetas YOLO (.txt)

4️⃣ Aumentar Datos

python augment.py

Genera automáticamente 5 variaciones por imagen con:

  • Rotaciones (±15°)
  • Volteo horizontal/vertical
  • Ajustes de brillo
  • Ruido Gaussiano
  • Desenfoque
  • Ajustes de contraste

Cada aumento hereda automáticamente las etiquetas de la imagen original.

5️⃣ Entrenar el Modelo

python train.py

Esto:

  1. Divide el dataset en train (70%), val (15%), test (15%)
  2. Pregunta si deseas entrenar
  3. Entrena YOLO v8n por 25 épocas

El modelo se guarda en: results/yolo_training/weights/best.pt

6️⃣ Probar el Modelo

python test.py

Opciones:

  1. Probar en imágenes: Realiza inferencia en dataset de test
  2. Inferencia tiempo real: Usa tu webcam
  3. Salir

📊 Formato de Etiquetas YOLO

Cada imagen tiene un archivo .txt con el siguiente formato:

<class_id> <x_center> <y_center> <width> <height>

Donde:

  • class_id: 0 = Clase1, 1 = Clase2
  • Coordenadas: normalizadas entre 0 y 1

Ejemplo:

0 0.5 0.5 0.3 0.4
1 0.7 0.3 0.2 0.2

🎯 Configuración Personalizada

Cambiar número de clases

Edita clases.txt:

MiClase1
MiClase2

Cambiar parámetros de entrenamiento

Edita train.py, función entrenar_yolo():

resultados = model.train(
    epochs=25,        # Número de épocas
    imgsz=640,        # Tamaño de imagen
    batch=16,         # Batch size
    patience=20,      # Early stopping
    device=0,         # 0=GPU, CPU=si no hay GPU
    ...
)

Cambiar aumentaciones de datos

Edita augment.py, método generar_aumentos():

aumentos = [
    ('original', imagen),
    ('rotado_15', self.rotar_imagen(imagen, 15)),
    # Agrega más aquí...
]

📈 Resultados y Métricas

Después del entrenamiento, los resultados están en:

results/yolo_training/
├── weights/
│   ├── best.pt        ← Mejor modelo
│   └── last.pt
├── results.csv        ← Métricas por época
└── confusion_matrix.png

🔍 Monitorizar Entrenamiento

Durante el entrenamiento, TensorBoard muestra gráficos en tiempo real:

tensorboard --logdir results

⚠️ Problemas Comunes

1. "No se encontraron imágenes en data_raw"

  • Verifica que las imágenes estén en data_raw/
  • Soportados: jpg, png, bmp, tiff

2. "Modelo no encontrado"

  • Primero entrena con python train.py
  • Asegúrate de que completó exitosamente

3. "CUDA out of memory"

  • Reduce batch size en train.py
  • O usa device='cpu'

4. Etiquetas no se guardan

  • Verifica que hayas presionado S en el etiquetador
  • Revisa que data_labeled/labels/ esté vacía

📝 Notas Importantes

  • Mínimo recomendado: 50 imágenes por clase
  • Ideal: 200+ imágenes por clase
  • Aumentaciones duplican los datos automáticamente
  • El modelo se entrena en CPU/GPU según disponibilidad
  • Cada epoch toma ~1-5 minutos (dependiendo de hardware)

🎓 Flujo Completo Ejemplo

# 1. Configurar estructura
python setup.py

# 2. Etiquetar tus imágenes
python labelador.py

# 3. Generar datos aumentados
python augment.py

# 4. Entrenar modelo
python train.py
# Selecciona: S (para entrenar)

# 5. Probar resultados
python test.py
# Selecciona: 1 o 2

📧 Soporte

Para problemas con:


¡Éxito con tu modelo YOLO! 🚀

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages