YOLO Vision 2026:

Consejos para obtener los mejores resultados de entrenamiento con YOLOv5#

📚 Esta guía explica cómo obtener los mejores resultados de mAP y entrenamiento con YOLOv5 🚀.

La mayoría de las veces se pueden obtener buenos resultados sin cambiar los modelos ni los ajustes de entrenamiento, siempre que tu conjunto de datos sea suficientemente grande y esté bien etiquetado. Si al principio no obtienes buenos resultados, hay algunas medidas que puedes tomar para mejorar, pero siempre recomendamos entrenar primero con todos los ajustes predeterminados antes de plantearte cualquier cambio. Esto ayuda a establecer una línea base de rendimiento y a detectar áreas de mejora.

Si tienes preguntas sobre los resultados de tu entrenamiento, te recomendamos proporcionar la máxima cantidad de información posible si esperas recibir una respuesta útil, incluidos gráficos de resultados (pérdidas de entrenamiento, pérdidas de validación, P, R, mAP), la curva PR, la matriz de confusión, mosaicos de entrenamiento, resultados de prueba e imágenes con estadísticas del conjunto de datos, como labels.png. Todo esto se encuentra en tu directorio project/name, normalmente en yolov5/runs/train/exp.

A continuación hemos preparado una guía completa para quienes quieran obtener los mejores resultados en sus entrenamientos de YOLOv5.

Conjunto de datos#

  • Imágenes por clase. Se recomiendan ≥ 1500 imágenes por clase
  • Instancias por clase. Se recomiendan ≥ 10000 instancias (objetos etiquetados) por clase
  • Variedad de imágenes. Debe ser representativa del entorno en el que se desplegará el modelo. Para casos de uso reales, recomendamos usar imágenes de distintas horas del día, estaciones del año, condiciones meteorológicas, condiciones de iluminación, ángulos y fuentes (extraídas de Internet, recopiladas localmente o tomadas con distintas cámaras), etc.
  • Coherencia de las etiquetas. Todas las instancias de todas las clases en todas las imágenes deben estar etiquetadas. El etiquetado parcial no funcionará.
  • Precisión de las etiquetas. Las etiquetas deben rodear estrechamente cada objeto. No debe haber espacio entre un objeto y su cuadro delimitador. No debe faltar la etiqueta de ningún objeto.
  • Disciplina en la división entre entrenamiento y validación. Asegúrate de que las imágenes de validación y de prueba nunca aparezcan en el conjunto de entrenamiento para evitar métricas excesivamente optimistas. Mantén distribuciones de clases similares entre las divisiones.
  • Verificación de las etiquetas. Visualiza train_batch*.jpg al iniciar el entrenamiento para verificar que las etiquetas aparecen correctamente, es decir, consulta el mosaico de ejemplo.
  • Imágenes de fondo. Las imágenes de fondo son imágenes sin objetos que se añaden a un conjunto de datos para reducir los falsos positivos (FP). Recomendamos aproximadamente entre un 0 y un 10 % de imágenes de fondo para ayudar a reducir los FP (COCO tiene 1000 imágenes de fondo como referencia, un 1 % del total). Las imágenes de fondo no requieren etiquetas.

COCO dataset class distribution analysis

Selección del modelo#

Los modelos más grandes, como YOLOv5x y YOLOv5x6, producirán mejores resultados en casi todos los casos, pero tienen más parámetros, requieren más memoria de CUDA para entrenarse y son más lentos al ejecutarse. Para despliegues móviles, recomendamos YOLOv5s/m; para despliegues en la nube, recomendamos YOLOv5l/x. Consulta la tabla de nuestro README para ver una comparación completa de todos los modelos.

YOLOv5 Models

  • Empieza con pesos preentrenados. Recomendado para conjuntos de datos pequeños o medianos (por ejemplo, VOC, VisDrone, GlobalWheat). Pasa el nombre del modelo al argumento --weights. Los modelos se descargan automáticamente desde la versión más reciente de YOLOv5.

    python train.py --data custom.yaml --weights yolov5s.pt
    python train.py --data custom.yaml --weights yolov5m.pt
    python train.py --data custom.yaml --weights yolov5l.pt
    python train.py --data custom.yaml --weights yolov5x.pt
    python train.py --data custom.yaml --weights custom_pretrained.pt
  • Empieza desde cero. Recomendado para conjuntos de datos grandes (por ejemplo, COCO, Objects365, OIv6). Pasa la arquitectura YAML del modelo que te interese junto con un argumento --weights '' vacío:

    python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
    python train.py --data custom.yaml --weights '' --cfg yolov5m.yaml
    python train.py --data custom.yaml --weights '' --cfg yolov5l.yaml
    python train.py --data custom.yaml --weights '' --cfg yolov5x.yaml

Ajustes de entrenamiento#

Antes de modificar nada, entrena primero con los ajustes predeterminados para establecer una línea base de rendimiento. Puedes encontrar la lista completa de ajustes de train.py en el argparser de train.py.

  • Épocas. Empieza con 300 épocas. Si se produce sobreajuste al principio, puedes reducir el número de épocas. Si no se produce sobreajuste después de 300 épocas, entrena durante más tiempo, por ejemplo, 600, 1200, etc. épocas.
  • Tamaño de imagen. COCO se entrena con la resolución nativa de --img 640, aunque, debido a la gran cantidad de objetos pequeños del conjunto de datos, puede beneficiarse de entrenarse con resoluciones mayores, como --img 1280. Si hay muchos objetos pequeños, los conjuntos de datos personalizados se beneficiarán de entrenarse con la resolución nativa o una mayor. Los mejores resultados de inferencia se obtienen con el mismo --img con el que se realizó el entrenamiento; es decir, si entrenas con --img 1280, también deberías probar y detectar con --img 1280.
  • Tamaño del lote. Usa el --batch-size más grande que permita tu hardware. Los tamaños de lote pequeños producen estadísticas deficientes de normalización por lotes y deben evitarse. Puedes usar --batch-size -1 para seleccionar automáticamente el tamaño de lote óptimo para tu GPU.
  • Tasa de aprendizaje. La planificación predeterminada de la tasa de aprendizaje funciona bien en la mayoría de los casos. Para lograr una convergencia más rápida, puedes probar el indicador --cos-lr para activar una planificación de la tasa de aprendizaje basada en coseno, que reduce gradualmente la tasa de aprendizaje siguiendo una curva coseno a lo largo de las épocas.
  • Aumento de datos. YOLOv5 incluye varias técnicas de aumento, como el mosaico, que combina varias imágenes de entrenamiento. Ajusta la intensidad del aumento mediante el hiperparámetro mosaic en tu archivo --hyp para ayudar a estabilizar el entrenamiento.
  • Hiperparámetros. Los hiperparámetros predeterminados se encuentran en hyp.scratch-low.yaml. Te recomendamos entrenar primero con los hiperparámetros predeterminados antes de plantearte modificar alguno. En general, aumentar los hiperparámetros de aumento reducirá y retrasará el sobreajuste, lo que permitirá entrenamientos más largos y un mAP final mayor. Reducir los hiperparámetros de ganancia de los componentes de pérdida, como hyp['obj'], ayudará a reducir el sobreajuste en esos componentes de pérdida específicos. Para consultar un método automatizado de optimización de estos hiperparámetros, visita nuestro Tutorial sobre la evolución de hiperparámetros.
  • Entrenamiento con precisión mixta. YOLOv5 activa automáticamente la precisión mixta automática (AMP) cuando detecta una GPU compatible, lo que acelera el entrenamiento y reduce el uso de memoria sin sacrificar la precisión del modelo.
  • Entrenamiento con varias GPU. Si tienes varias GPU, usa --device 0,1,2,3 para distribuir el entrenamiento entre ellas, lo que puede reducir considerablemente el tiempo de entrenamiento.
  • Parada temprana. Usa --patience 50 para detener el entrenamiento si las métricas de validación no mejoran durante 50 épocas, ahorrando tiempo y evitando el sobreajuste.

Técnicas avanzadas de optimización#

  • Aprendizaje por transferencia. Para conjuntos de datos especializados, empieza con pesos preentrenados y descongela gradualmente las capas durante el entrenamiento para adaptar el modelo a tu tarea específica.
  • Poda del modelo. Después del entrenamiento, plantéate podar el modelo para eliminar pesos redundantes y reducir su tamaño sin una pérdida significativa de rendimiento.
  • Ensamblado de modelos. Para aplicaciones críticas, entrena varios modelos con configuraciones diferentes y combina sus predicciones para mejorar la precisión.
  • Aumento en tiempo de prueba. Activa TTA durante la inferencia con --augment para mejorar la precisión de las predicciones promediando los resultados de versiones aumentadas de la imagen de entrada.

Lecturas adicionales#

Si quieres saber más, un buen punto de partida es «Receta para entrenar redes neuronales», de Karpathy, que contiene ideas muy útiles para el entrenamiento aplicables en general a todos los ámbitos del ML: https://karpathy.github.io/2019/04/25/recipe/

Para obtener información más detallada sobre los ajustes y las configuraciones de entrenamiento, consulta la documentación de ajustes de entrenamiento de Ultralytics, que ofrece explicaciones exhaustivas de todos los parámetros disponibles.

¡Buena suerte 🍀 y cuéntanos si tienes alguna otra pregunta!

Preguntas frecuentes#

  • Es posible que tu modelo esté sufriendo sobreajuste si la pérdida de entrenamiento sigue disminuyendo mientras la pérdida de validación empieza a aumentar. Supervisa el mAP de validación: si se estabiliza o disminuye mientras la pérdida de entrenamiento sigue mejorando, es una señal de sobreajuste. Entre las soluciones se incluyen añadir más datos de entrenamiento, aumentar el aumento de datos o aplicar técnicas de regularización.

  • El tamaño de lote óptimo depende de la memoria de tu GPU. Los tamaños de lote mayores suelen proporcionar mejores estadísticas de normalización por lotes y una mayor estabilidad durante el entrenamiento. Usa el tamaño de lote más grande que tu hardware pueda gestionar sin quedarse sin memoria. Puedes usar --batch-size -1 para determinar automáticamente el tamaño de lote óptimo para tu configuración.

  • Para acelerar el entrenamiento, prueba a usar varias GPU con --device 0,1,2,3, almacenar en caché tu conjunto de datos con --cache y optimizar el tamaño de lote (la precisión mixta se activa automáticamente en las GPU compatibles). También puedes plantearte usar una variante de modelo más pequeña, como YOLOv5s, si la precisión absoluta no es fundamental.

Comentarios