Consejos para obtener los mejores resultados de entrenamiento
📚 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 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 tienes preguntas sobre los resultados de tu entrenamiento te recomendamos que facilites la máxima información posible si esperas 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 tu 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 entrenamientos 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 distintas horas del día, distintas estaciones, distintas condiciones meteorológicas, distintas iluminaciones, distintos ángulos, distintas fuentes (extraídas de Internet, recogidas localmente, 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 encerrar estrechamente cada objeto. No debe haber espacio entre un objeto y su cuadro delimitador. A ningún objeto debe faltarle una etiqueta.
- Verificación de la etiqueta. Ver
train_batch*.jpg
en el arranque del tren para verificar que tus 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.
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 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.
- Partir de los pesos preentrenados. Recomendado para conjuntos de datos pequeños o medianos (es decir. COV, VisDrone, GlobalWheat). Pasa el nombre del modelo a la función
--weights
argumento. Los modelos se descargan automáticamente de última versión de YOLOv5.
python train.py --data custom.yaml --weights yolov5s.pt
yolov5m.pt
yolov5l.pt
yolov5x.pt
custom_pretrained.pt
- Empieza de cero. Recomendado para grandes conjuntos de datos (es decir COCO, Objetos365, OIv6). Pasa el YAML de la arquitectura del modelo que te interesa, junto con un vacío
--weights ''
argumento:
python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
yolov5m.yaml
yolov5l.yaml
yolov5x.yaml
Ajustes de entrenamiento
Antes de modificar nada, entrena primero con los ajustes por defecto para establecer una línea de base de rendimiento. Puedes encontrar una lista completa de los ajustes de train.py en el argparser train.py.
- Épocas. Empieza con 300 épocas. Si se sobreajusta pronto, puedes reducir las épocas. Si no se produce sobreajuste después de 300 épocas, entrena durante más tiempo, es decir, 600, 1200, etc. épocas.
- Tamaño de la imagen. COCO entrena con 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 con 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 a la misma--img
a la que se realizó el entrenamiento, es decir, si entrenas a--img 1280
también debes comprobar y detectar en--img 1280
. - Tamaño del lote. Utiliza la mayor
--batch-size
que permita tu hardware. Los tamaños de lote pequeños producen estadísticas batchnorm pobres y deben evitarse. - Hiperparámetros. Los hiperparámetros por defecto están en hip.rasca-baja.yaml. Te recomendamos que entrenes 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. Reducir 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, consulta nuestro Tutorial de evolución de hiperparámetros.
Otras lecturas
Si quieres saber más, un buen lugar para empezar es la "Receta para entrenar 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/
Buena suerte 🍀 ¡y avísanos si tienes alguna otra pregunta!