Ir al contenido

Consejos para obtener los mejores resultados del entrenamiento YOLOv5

📚 Esta guía explica cómo producir 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 la configuración de entrenamiento, siempre que el conjunto de datos sea lo suficientemente grande y esté bien etiquetado. Si al principio no obtienes buenos resultados, hay pasos que puedes dar 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 una línea de base de rendimiento y a detectar áreas de mejora.

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

A continuación hemos elaborado una guía completa para los usuarios que deseen obtener los mejores resultados en sus cursos de formación en YOLOv5 .

Conjunto de datos

  • Imágenes por clase. ≥ 1500 imágenes por clase recomendadas
  • Instancias por clase. ≥ 10000 instancias (objetos etiquetados) por clase recomendadas.
  • Variedad de imágenes. Debe ser representativa del entorno desplegado. Para casos de uso en el mundo real, recomendamos imágenes de diferentes horas del día, diferentes estaciones, diferentes condiciones meteorológicas, diferentes iluminaciones, diferentes ángulos, diferentes fuentes (extraídas de Internet, recopiladas localmente, diferentes 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 encerrar estrechamente cada objeto. No debe haber espacio entre un objeto y su cuadro delimitador. No debe faltar ninguna etiqueta en ningún objeto.
  • Verificación de etiquetas. Ver train_batch*.jpg en el arranque del tren para verificar que sus etiquetas aparecen correctamente, es decir, ver 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 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). No se requieren etiquetas para las imágenes de fondo.

Análisis COCO

Selección de modelos

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 entrenarse y son más lentos de ejecutar. Para implantaciones móviles recomendamos YOLOv5s/m, para implantaciones en la nube recomendamos YOLOv5l/x. Consulta nuestra tabla LÉEME para ver una comparación completa de todos los modelos.

YOLOv5 Modelos

  • Partir de los pesos preentrenados. Recomendado para conjuntos de datos pequeños y medianos (es decir. COV, VisDrone, GlobalWheat). Pase el nombre del modelo a la --weights argumento. Los modelos se descargan automáticamente del ú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 de cero. Recomendado para grandes conjuntos de datos (por ejemplo COCO, Objetos365, OIv6). Pasa el YAML de la arquitectura del modelo que te interesa, 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 formación

Antes de modificar nada, entrena primero con la configuración por defecto para establecer una línea base de rendimiento. Puede encontrar una lista completa de los ajustes de train.py en el argparser de train.py.

  • Épocas. Empiece con 300 épocas. Si se sobreajusta pronto, puede reducir las épocas. Si no se produce sobreajuste después de 300 épocas, entrene durante más tiempo, es decir, 600, 1200, etc. épocas.
  • Tamaño de la imagen. COCO se entrena con una resolución nativa de --img 640aunque debido a la gran cantidad de objetos pequeños en el conjunto de datos puede beneficiarse de un entrenamiento a resoluciones más altas como --img 1280. Si hay muchos objetos pequeños, los conjuntos de datos personalizados se beneficiarán de un entrenamiento a resolución nativa o superior. Los mejores resultados de inferencia se obtienen a --img como se realizó el entrenamiento, es decir, si se entrena a --img 1280 también debe comprobar y detectar en --img 1280.
  • Tamaño del lote. Utilice el mayor --batch-size que permite su hardware. Los lotes pequeños producen normalización por lotes estadísticas y debe evitarse. Puede utilizar --batch-size -1 para seleccionar automáticamente el tamaño de lote óptimo para su GPU.
  • Ritmo de aprendizaje. El programa de velocidad de aprendizaje por defecto funciona bien en la mayoría de los casos. Para una convergencia más rápida, puede intentar utilizar el parámetro --cos-lr para activar 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 el uso de --close-mosaic 10 para desactivar el aumento del mosaico, que puede ayudar a estabilizar el entrenamiento.
  • Hiperparámetros. Los hiperparámetros por defecto están en hip.rasca-baja.yaml. Recomendamos entrenar primero con los hiperparámetros por defecto antes de pensar en modificar ninguno. En general, aumentar los hiperparámetros de aumento reducirá y retrasará el sobreajuste, permitiendo entrenamientos más largos y un mAP final más alto. La reducción de los hiperparámetros de aumento del componente de pérdida como hyp['obj'] ayudará a reducir el sobreajuste en esos componentes de pérdida específicos. Para obtener un método automatizado de optimización de estos hiperparámetros, consulte nuestro Tutorial de evolución de hiperparámetros.
  • Entrenamiento de precisión mixto. Permitir la formación de precisión mixta con --amp para acelerar el entrenamiento y reducir el uso de memoria sin sacrificar la precisión del modelo.
  • Entrenamiento GPU . Si tiene varias GPU, utilice --device 0,1,2,3 distribuir la formación entre ellos, lo que puede reducir considerablemente el tiempo de formación.
  • Parada temprana. 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, comience con pesos preentrenados y vaya descongelando capas durante el entrenamiento para adaptar el modelo a su tarea específica.
  • Poda del modelo. Después del entrenamiento, considere la posibilidad de podar el modelo para eliminar pesos redundantes y reducir el tamaño del modelo sin una pérdida significativa de rendimiento.
  • Conjunto de modelos. Para aplicaciones críticas, entrene múltiples modelos con diferentes configuraciones y combine sus predicciones para mejorar la precisión.
  • Aumento del tiempo de prueba. Activar TTA durante la inferencia con --augment para mejorar la precisión de la predicción promediando los resultados de versiones aumentadas de la imagen de entrada.

Lecturas complementarias

Si quieres saber más, un buen lugar para empezar es la "Receta para el entrenamiento de redes neuronales" de Karpathy, que tiene grandes ideas para el entrenamiento que se aplican ampliamente a todos los dominios de ML: https://karpathy.github.io/2019/04/25/recipe/

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

Buena suerte 🍀 ¡y avísanos si tienes alguna otra duda!

PREGUNTAS FRECUENTES

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

Su modelo puede estar sobreajustado si la pérdida de entrenamiento sigue disminuyendo mientras que la pérdida de validación empieza a aumentar. Controle el mAP de validación: si se estanca o disminuye mientras la pérdida de entrenamiento sigue mejorando, es un signo de sobreajuste. Las soluciones incluyen añadir más datos de entrenamiento, aumentar los 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 GPU . Los tamaños de lote más grandes suelen proporcionar mejores estadísticas de normalización de lotes 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 su configuración.

¿Cómo puedo acelerar el entrenamiento de YOLOv5 ?

Para acelerar el entrenamiento, pruebe a: activar el entrenamiento de precisión mixta con --amputilizando varias GPU con --device 0,1,2,3almacenando en caché el conjunto de datos con --cachey optimizar el tamaño de los lotes. Considere también el uso de una variante de modelo más pequeño como YOLOv5s si la precisión absoluta no es crítica.

Creado hace 1 año ✏️ Actualizado hace 7 días

Comentarios