Sistema completo para entrenar un modelo YOLO v8 con 2 clases personalizadas.
pip install ultralytics opencv-python numpy.
├── 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
python setup.pyEsto crea todas las carpetas necesarias y archivos de configuración.
Coloca tus imágenes en la carpeta data_raw/
python labelador.pyControles del etiquetador:
Click + Drag: Dibuja bounding box1: Cambiar a Clase1 (Verde)2: Cambiar a Clase2 (Azul)C: Limpiar todos los boxesD: Borrar el último boxS: Guardar y siguiente imagenB: Volver a imagen anteriorQ: Salir
Las imágenes etiquetadas se guardan automáticamente en:
data_labeled/images/→ Imágenesdata_labeled/labels/→ Etiquetas YOLO (.txt)
python augment.pyGenera 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.
python train.pyEsto:
- Divide el dataset en train (70%), val (15%), test (15%)
- Pregunta si deseas entrenar
- Entrena YOLO v8n por 25 épocas
El modelo se guarda en: results/yolo_training/weights/best.pt
python test.pyOpciones:
- Probar en imágenes: Realiza inferencia en dataset de test
- Inferencia tiempo real: Usa tu webcam
- Salir
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
Edita clases.txt:
MiClase1
MiClase2
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
...
)Edita augment.py, método generar_aumentos():
aumentos = [
('original', imagen),
('rotado_15', self.rotar_imagen(imagen, 15)),
# Agrega más aquí...
]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
Durante el entrenamiento, TensorBoard muestra gráficos en tiempo real:
tensorboard --logdir results1. "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
Sen el etiquetador - Revisa que
data_labeled/labels/esté vacía
- 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)
# 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 2Para problemas con:
- YOLO: https://github.com/ultralytics/yolov8
- OpenCV: https://opencv.org/
¡Éxito con tu modelo YOLO! 🚀