Ir al contenido

Consejos para obtener los mejores resultados de entrenamiento de YOLOv5

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

La mayoría de las veces se pueden obtener buenos resultados sin realizar cambios en los modelos o la configuración de entrenamiento, siempre que su conjunto de datos sea lo suficientemente grande y esté bien etiquetado. Si al principio no obtiene buenos resultados, hay pasos que puede seguir para mejorar, pero siempre recomendamos a los usuarios que primero entrenen con todos los ajustes predeterminados antes de considerar cualquier cambio. Esto ayuda a establecer un punto de referencia de rendimiento y a detectar áreas de mejora.

Si tiene preguntas sobre los resultados de su entrenamiento le recomendamos que proporcione la mayor cantidad de información posible si espera una respuesta útil, incluyendo gráficos de resultados (pérdidas de entrenamiento, pérdidas de validación, P, R, mAP), curva PR, matriz de confusión, mosaicos de entrenamiento, resultados de pruebas e imágenes de estadísticas del conjunto de datos como labels.png. Todos estos se encuentran en su project/name directorio, normalmente yolov5/runs/train/exp.

Hemos preparado una guía completa para los usuarios que buscan obtener los mejores resultados en sus entrenamientos de YOLOv5 a continuación.

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 de implementación. Para casos de uso del mundo real, recomendamos imágenes de diferentes momentos del día, diferentes estaciones, diferentes climas, diferente iluminación, diferentes ángulos, diferentes fuentes (extraídas en línea, recopiladas localmente, diferentes cámaras), etc.
  • Consistencia 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 del etiquetado. Las etiquetas deben encerrar estrechamente cada objeto. No debe existir espacio entre un objeto y su cuadro delimitador. Ningún objeto debe carecer de etiqueta.
  • Verificación de etiquetas. Ver train_batch*.jpg al inicio del entrenamiento para verificar que tus etiquetas aparezcan correctamente, es decir, mira ejemplo mosaico.
  • 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 alrededor de un 0-10% de imágenes de fondo para ayudar a reducir los FP (COCO tiene 1000 imágenes de fondo como referencia, el 1% del total). No se requieren etiquetas para las imágenes de fondo.

Análisis COCO

Selección de 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 CUDA para entrenar y son más lentos de ejecutar. Para implementaciones móviles recomendamos YOLOv5s/m, para implementaciones en la nube recomendamos YOLOv5l/x. Consulta nuestra tabla README para una comparación completa de todos los modelos.

Modelos YOLOv5

  • Comienza desde pesos preentrenados. Recomendado para conjuntos de datos de tamaño pequeño a mediano (p. ej., VOC, VisDrone, GlobalWheat). Pase el nombre del modelo al --weights argumento. Los modelos se descargan automáticamente desde el última versión 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
    
  • Empezar desde cero. Recomendado para conjuntos de datos grandes (p. ej., COCO, Objects365, OIv6). Pase el YAML de la arquitectura del modelo que le interese, junto con un --weights '' argumento:

    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, primero entrene con la configuración predeterminada para establecer una línea de base de rendimiento. Puede encontrar una lista completa de los ajustes de train.py en el analizador de argumentos train.py.

  • Épocas. Comience con 300 épocas. Si esto se sobreajusta al principio, puede reducir las épocas. Si el sobreajuste no se produce después de 300 épocas, entrene durante más tiempo, es decir, 600, 1200, etc., épocas.
  • Tamaño de la imagen. COCO se entrena a una resolución nativa de --img 640, aunque debido a la gran cantidad de objetos pequeños en el conjunto de datos, puede beneficiarse del entrenamiento a resoluciones más altas, como --img 1280. Si hay muchos objetos pequeños, los conjuntos de datos personalizados se beneficiarán del entrenamiento a resolución nativa o superior. Los mejores resultados de inferencia se obtienen en la misma --img como se ejecutó el entrenamiento, es decir, si entrenas en --img 1280 también debes probar y detectar en --img 1280.
  • Tamaño del lote. Utiliza el más grande --batch-size que su hardware permita. Los tamaños de lote pequeños producen resultados deficientes normalización por lotes estadísticas y debe evitarse. Puedes usar --batch-size -1 para seleccionar automáticamente el tamaño de lote óptimo para tu GPU.
  • Tasa de aprendizaje. El programa de tasa de aprendizaje predeterminado funciona bien en la mayoría de los casos. Para una convergencia más rápida, puedes intentar usar el --cos-lr flag para habilitar la programación de la tasa de aprendizaje 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. Para las últimas épocas, considere usar --close-mosaic 10 para desactivar el aumento de mosaico, lo que puede ayudar a estabilizar el entrenamiento.
  • Hiperparámetros. Los hiperparámetros predeterminados están en hyp.scratch-low.yaml. Le recomendamos que primero entrene con los hiperparámetros predeterminados antes de pensar en 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 más alto. La reducción de los hiperparámetros de ganancia del componente de pérdida como hyp['obj'] ayudará a reducir el sobreajuste en esos componentes de pérdida específicos. Para un método automatizado de optimización de estos hiperparámetros, consulte nuestro Tutorial de evolución de hiperparámetros.
  • Entrenamiento de precisión mixta. Habilita el entrenamiento de precisión mixta con --amp para acelerar el entrenamiento y reducir el uso de memoria sin sacrificar la precisión del modelo.
  • Entrenamiento Multi-GPU. Si tiene varias GPU, utilice --device 0,1,2,3 para distribuir el entrenamiento entre ellos, lo que puede reducir significativamente el tiempo de entrenamiento.
  • Parada anticipada (Early stopping). Utilice --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, comienza con pesos preentrenados y desbloquea gradualmente las capas durante el entrenamiento para adaptar el modelo a tu tarea específica.
  • Poda de modelos. Después del entrenamiento, considera podar tu modelo para eliminar pesos redundantes y reducir el tamaño del modelo sin una pérdida significativa de rendimiento.
  • Ensamblaje de modelos. Para aplicaciones críticas, entrena varios modelos con diferentes configuraciones y combina sus predicciones para mejorar la precisión.
  • Aumento en tiempo de prueba. Habilita TTA durante la inferencia con --augment para mejorar la precisión de la predicción promediando los resultados de las versiones aumentadas de la imagen de entrada.

Lecturas adicionales

Si desea obtener más información, un buen lugar para comenzar es 'Recipe for Training Neural Networks' de Karpathy, que tiene excelentes ideas para el entrenamiento que se aplican ampliamente en todos los dominios de ML: https://karpathy.github.io/2019/04/25/recipe/

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

¡Buena suerte 🍀 y háganos saber si tiene alguna otra pregunta!

Preguntas frecuentes

¿Cómo sé si mi modelo está sobreajustando?

Tu modelo puede estar sobreajustándose si la pérdida de entrenamiento continúa disminuyendo mientras que la pérdida de validación comienza a aumentar. Supervisa el mAP de validación: si se estanca o disminuye mientras que la pérdida de entrenamiento sigue mejorando, es una señal de sobreajuste. Las soluciones incluyen añadir más datos de entrenamiento, aumentar el aumento de datos o implementar técnicas de regularización.

¿Cuál es el tamaño de lote óptimo para entrenar YOLOv5?

El tamaño de lote óptimo depende de la memoria de su GPU. Los tamaños de lote más grandes generalmente proporcionan mejores estadísticas de normalización de lote y estabilidad de entrenamiento. Utilice el tamaño de lote más grande que su hardware pueda manejar sin quedarse sin memoria. Puede utilizar --batch-size -1 para determinar automáticamente el tamaño de lote óptimo para tu configuración.

¿Cómo puedo acelerar el entrenamiento de YOLOv5?

Para acelerar el entrenamiento, pruebe a: activar el entrenamiento de precisión mixta con --amp, usando múltiples GPUs con --device 0,1,2,3, almacenando en caché su conjunto de datos con --cache, y optimizar el tamaño de tu lote. También considera usar una variante de modelo más pequeña como YOLOv5s si la precisión absoluta no es crítica.



📅 Creado hace 1 año ✏️ Actualizado hace 2 meses

Comentarios