Proyecto de detección de objetos usando YOLO con datos propios etiquetados en Roboflow.
Este proyecto implementa un pipeline completo de detección de objetos utilizando:
- Datos propios etiquetados en Roboflow
- Aumentación de datos para balanceo de clases
- Entrenamiento con YOLO (Ultralytics)
- Evaluación con métricas estándar (mAP, Precision, Recall)
- 📊 Sistema de registro en Excel para comparar experimentos
git clone https://github.com/Not-Minimal/DeepLabScan.git
cd DeepLabScanpython3.11 -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activatepip install --upgrade pip setuptools wheelpip install -r requirements.txtNota: Incluye soporte para guardar resultados en Excel (pandas, openpyxl)
python scripts/download_roboflow_simple.pyEste script:
- Descarga el dataset desde Roboflow (URL configurada en el script)
- Crea la estructura necesaria en
data/raw/
# Entrenamiento básico (guarda automáticamente en Excel)
python scripts/train.py --data-dir data/raw --epochs 15
# Con configuración personalizada y notas
python scripts/train.py \
--data-dir data/raw \
--model yolo11n.pt \
--epochs 30 \
--name "exp_v1" \
--notes "Primer entrenamiento con augmentation"Los resultados se guardan automáticamente en results/experiment_results.xlsx.
# Evaluación básica
python scripts/evaluate.py --weights runs/detect/train/weights/best.pt
# Con nombre personalizado
python scripts/evaluate.py \
--weights runs/detect/train/weights/best.pt \
--exp-name "eval_test" \
--notes "Evaluación en test set"# Predicción en imagen
python scripts/predict.py \
--weights runs/detect/train/weights/best.pt \
--source test_image.jpg
# Predicción en directorio
python scripts/predict.py \
--weights runs/detect/train/weights/best.pt \
--source test_images/ \
--conf 0.3 \
--exp-name "pred_v1" \
--notes "Predicciones con confidence 0.3"- ✅ Guardado automático de todos los resultados
- ✅ 4 hojas organizadas: Resumen, Training, Evaluation, Prediction
- ✅ Comparación fácil entre experimentos
- ✅ Identificación automática del mejor modelo
- ✅ Formato profesional con colores
# Ver resumen de todos los experimentos
python scripts/view_results.py
# Ver últimos 10 experimentos
python scripts/view_results.py --summary --last 10
# Encontrar mejor modelo
python scripts/view_results.py --best-model
# Ver solo entrenamientos
python scripts/view_results.py --training
# Comparar experimentos
python scripts/view_results.py --compare
# Exportar a CSV
python scripts/view_results.py --export results/mi_analisis.csvEl archivo results/experiment_results.xlsx contiene:
- Hoja Resumen: Todos los experimentos para comparación rápida
- Hoja Training: Detalles de entrenamientos (hiperparámetros, duración, métricas)
- Hoja Evaluation: Resultados de evaluaciones (precision, recall, mAP)
- Hoja Prediction: Historial de predicciones (detecciones, clases)
Si no quieres guardar en Excel:
python scripts/train.py --data-dir data/raw --epochs 15 --no-excel
python scripts/evaluate.py --weights best.pt --no-excel
python scripts/predict.py --weights best.pt --source img.jpg --no-excelGenera datos de ejemplo para ver cómo funciona:
python scripts/test_excel_logger.pyPara más detalles, consulta:
- 📖 Guía completa:
EXCEL_LOGGING_GUIDE.md - 📁 Documentación del sistema:
results/README.md
DeepLabScan/
├── scripts/
│ ├── train.py # Entrenamiento con Excel logging
│ ├── evaluate.py # Evaluación con Excel logging
│ ├── predict.py # Predicción con Excel logging
│ ├── excel_logger.py # Módulo de logging
│ ├── view_results.py # Visualización de resultados
│ └── test_excel_logger.py # Script de prueba
├── results/
│ ├── experiment_results.xlsx # Archivo principal
│ └── README.md # Documentación
├── data/
│ └── raw/ # Dataset
├── runs/ # Resultados de entrenamientos
├── EXCEL_LOGGING_GUIDE.md # Guía completa del sistema
└── requirements.txt # Dependencias
- mAP@0.5: Mean Average Precision con IoU=0.5
- mAP@0.5:0.95: mAP promediado desde IoU 0.5 hasta 0.95
- Precision: Proporción de detecciones correctas
- Recall: Proporción de objetos detectados
- F1-Score: Media armónica entre Precision y Recall
- Excelente: mAP ≥ 0.9
- Bueno: mAP 0.7-0.9
- Aceptable: mAP 0.5-0.7
- Bajo: mAP < 0.5 (requiere mejoras)
python scripts/train.py \
--name "yolo11n_aug_batch16_v1" \
--notes "Con data augmentation, batch 16"python scripts/train.py \
--notes "Baseline sin augmentation para comparación"python scripts/view_results.py --best-model
python scripts/view_results.py --comparecp results/experiment_results.xlsx results/backup_$(date +%Y%m%d).xlsx
- Descomprime automáticamente los archivos
- Organiza el dataset en `data/raw/` con la estructura YOLO esperada
- Mueve `data.yaml`, `train/`, `valid/`, `test/` a la ubicación correcta
**Nota:** Si necesitas cambiar la URL del dataset, edita la variable `DEFAULT_URL` en el script o pasa `--url` como argumento.
### 2. (Opcional) Aumentación de Datos
Balancea las clases minoritarias generando nuevas imágenes con aumentación (flip, rotación, brillo):
```bash
# Aumentación básica con límite del 25%
python scripts/augment_data.py --data-dir data/raw
# Con límite personalizado y semilla específica
python scripts/augment_data.py --data-dir data/raw --limit 0.25 --seed 42
# Guardando gráficos en disco
python scripts/augment_data.py --data-dir data/raw --save-plotsParámetros:
--data-dir: Directorio del dataset (default:data/raw)--limit: Límite de nuevas instancias como fracción del total (default: 0.25 = 25%)--seed: Semilla aleatoria para reproducibilidad (default: 42)--save-plots: Guardar gráficos en disco en lugar de mostrarlos
Este script:
- Analiza la distribución de clases
- Genera gráfico de distribución inicial
- Aumenta imágenes de clases minoritarias hasta igualar la mayoritaria
- Genera gráfico de distribución final
- Guarda las imágenes/etiquetas aumentadas en
train/imagesytrain/labels
# Entrenamiento básico con 15 épocas
python scripts/train.py --data-dir data/raw --epochs 15
# Con modelo YOLO11n y batch size de 16
python scripts/train.py --data-dir data/raw --model yolo11n.pt --epochs 50 --batch 16
# Con modelo YOLOv8n, 100 épocas y CUDA
python scripts/train.py --data-dir data/raw --model yolov8n.pt --epochs 100 --imgsz 640 --device cudaParámetros disponibles:
--data-dir: Directorio del dataset (default:data/raw)--model: Modelo YOLO a usar (default:yolo11n.pt)--epochs: Número de épocas (default: 15)--batch: Tamaño del batch, -1 para auto (default: -1)--imgsz: Tamaño de imágenes (default: 640)--device: Dispositivo (cpu/cuda/mps, auto-detect si no se especifica)--project: Directorio de salida (default:runs/detect)--name: Nombre del experimento (default:train)--patience: Épocas de paciencia para early stopping (default: 50)
El script:
- Detecta automáticamente GPU/CPU disponible
- Carga el modelo YOLO preentrenado
- Entrena con el dataset (aumentado si ejecutaste el paso 2)
- Guarda los pesos del mejor modelo en
runs/detect/train/weights/best.pt
# Evaluación básica (muestra métricas en terminal)
python scripts/evaluate.py --weights runs/detect/train/weights/best.pt
# Con directorio del dataset especificado
python scripts/evaluate.py --weights runs/detect/train/weights/best.pt --data-dir data/raw
# Guardando gráficos en disco
python scripts/evaluate.py --weights runs/detect/train/weights/best.pt --save-plots
# Sin mostrar gráficos (headless)
python scripts/evaluate.py --weights runs/detect/train/weights/best.pt --no-showGenera:
- Métricas de Precision, Recall, mAP@0.5, mAP@0.5:0.95
- Matriz de confusión
- Curvas PR (Precision-Recall)
- Visualizaciones de predicciones
# Predicción en una imagen
python scripts/predict.py --weights runs/detect/train2/weights/best.pt --source test.jpg
# Predicción en directorio con visualización
python scripts/predict.py --weights runs/detect/train2/weights/best.pt --source images/ --show
# Predicción en video
python scripts/predict.py --weights runs/detect/train2/weights/best.pt --source video.mp4
# Predicción con webcam
python scripts/predict.py --weights runs/detect/train2/weights/best.pt --source 0 --show
# Con ajustes de confidence
python scripts/predict.py --weights runs/detect/train2/weights/best.pt --source test.jpg --conf 0.5
# Guardando labels en formato YOLO
python scripts/predict.py --weights runs/detect/train2/weights/best.pt --source test.jpg --save-txtDeepLabScan/
├── scripts/
│ ├── download_roboflow_simple.py # Descarga dataset desde Roboflow
│ ├── augment_data.py # Aumentación y balanceo de datos
│ ├── train.py # Entrenamiento del modelo
│ ├── evaluate.py # Evaluación del modelo
│ └── predict.py # Predicciones con el modelo
├── data/
│ └── raw/ # Dataset descargado
│ ├── data.yaml # Configuración del dataset
│ ├── train/ # Datos de entrenamiento
│ ├── valid/ # Datos de validación
│ └── test/ # Datos de prueba
├── runs/
│ └── detect/ # Resultados de entrenamientos
├── requirements.txt # Dependencias del proyecto
├── .env # Variables de entorno (Roboflow API Key)
└── README.md
# 1. Setup del entorno
python3.11 -m venv venv
source venv/bin/activate
pip install --upgrade pip setuptools wheel
pip install -r requirements.txt
# 2. Descargar datos
python scripts/download_roboflow_simple.py
# 3. (Opcional) Aumentar datos para balanceo
python scripts/augment_data.py --data-dir data/raw --limit 0.25
# 4. Entrenar modelo
python scripts/train.py --data-dir data/raw --epochs 15
# 5. Evaluar modelo
python scripts/evaluate.py --weights runs/detect/train/weights/best.pt --data-dir data/raw
# 6. Hacer predicciones
python scripts/predict.py --weights runs/detect/train/weights/best.pt --source test_image.jpg- Precision: Proporción de detecciones correctas sobre todas las detecciones realizadas
- Recall: Proporción de objetos detectados sobre todos los objetos reales
- mAP@0.5: Mean Average Precision con IoU threshold de 0.5
- mAP@0.5:0.95: Mean Average Precision promediando IoU thresholds de 0.5 a 0.95
- Python 3.11+
- GPU recomendada (CUDA o Apple Silicon MPS) para entrenamiento rápido
- Al menos 8GB de RAM
- Espacio en disco para el dataset y modelos
ultralytics- Framework YOLOtorchytorchvision- PyTorch para deep learningopencv-python- Procesamiento de imágenespillow- Manipulación de imágenesnumpy- Operaciones numéricasmatplotlibyseaborn- Visualización de datospandas- Análisis de datospyyaml- Configuración
- Asegúrate de haber ejecutado
download_roboflow_simple.pyprimero - Verifica que existe el archivo
data/raw/data.yaml
- Reduce el batch size:
--batch 8o--batch 4 - Usa un modelo más pequeño:
--model yolov8n.pt
- Reactiva el entorno virtual:
source venv/bin/activate - Reinstala dependencias:
pip install -r requirements.txt
MIT License
Not-Minimal