Saltar al contenido

Modelo de entrenamiento con Ultralytics YOLO

Ultralytics YOLO ecosistema e integraciones

Introducción

Entrenar un modelo de aprendizaje profundo implica alimentarlo con datos y ajustar sus parámetros para que pueda hacer predicciones precisas. El modo Entrenar de Ultralytics YOLOv8 está diseñado para un entrenamiento eficaz y eficiente de los modelos de detección de objetos, utilizando plenamente las capacidades del hardware moderno. Esta guía pretende cubrir todos los detalles que necesitas para empezar a entrenar tus propios modelos utilizando el sólido conjunto de funciones de YOLOv8.



Observa: Cómo entrenar un modelo YOLOv8 con tu conjunto de datos personalizado en Google Colab.

¿Por qué elegir Ultralytics YOLO para la formación?

He aquí algunas razones de peso para optar por el modo Tren de YOLOv8:

  • Eficiencia: Saca el máximo partido a tu hardware, tanto si utilizas una sola GPU como si escalas varias.
  • Versatilidad: Entrénate en conjuntos de datos personalizados, además de en otros fácilmente disponibles como COCO, VOC e ImageNet.
  • Fácil de usar: interfaces sencillas pero potentes en CLI y Python para una experiencia de formación sencilla.
  • Flexibilidad de hiperparámetros: Una amplia gama de hiperparámetros personalizables para afinar el rendimiento del modelo.

Características principales del Modo Tren

Las siguientes son algunas características notables del modo Tren de YOLOv8:

  • Descarga automática de conjuntos de datos: Los conjuntos de datos estándar como COCO, VOC e ImageNet se descargan automáticamente en el primer uso.
  • Soporte Multi-GPU: Escala tus esfuerzos de entrenamiento sin problemas a través de múltiples GPUs para agilizar el proceso.
  • Configuración de hiperparámetros: La opción de modificar hiperparámetros mediante archivos de configuración YAML o argumentos CLI .
  • Visualización y seguimiento: Seguimiento en tiempo real de las métricas de formación y visualización del proceso de aprendizaje para una mejor comprensión.

Consejo

  • YOLOv8 conjuntos de datos como COCO, VOC, ImageNet y muchos otros se descargan automáticamente en el primer uso, es decir yolo train data=coco.yaml

Ejemplos de uso

Entrena YOLOv8n en el conjunto de datos COCO128 durante 100 épocas con un tamaño de imagen de 640. El dispositivo de entrenamiento se puede especificar mediante la opción device argumento. Si no se pasa ningún argumento GPU device=0 se utilizará si está disponible, de lo contrario device=cpu se utilizarán. Consulta la sección Argumentos más abajo para ver una lista completa de los argumentos de entrenamiento.

Ejemplo de entrenamiento con una sola GPU y CPU

El dispositivo se determina automáticamente. Si hay una GPU disponible, se utilizará; de lo contrario, el entrenamiento se iniciará en la CPU.

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.yaml')  # build a new model from YAML
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # build from YAML and transfer weights

# Train the model
results = model.train(data='coco128.yaml', epochs=100, imgsz=640)
# Build a new model from YAML and start training from scratch
yolo detect train data=coco128.yaml model=yolov8n.yaml epochs=100 imgsz=640

# Start training from a pretrained *.pt model
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640

# Build a new model from YAML, transfer pretrained weights to it and start training
yolo detect train data=coco128.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640

Formación Multi-GPU

El entrenamiento Multi-GPU permite una utilización más eficiente de los recursos de hardware disponibles, distribuyendo la carga de entrenamiento entre varias GPU. Esta función está disponible tanto a través de la API Python como de la interfaz de línea de comandos. Para activar el entrenamiento multi-GPU, especifica los ID de dispositivo GPU que deseas utilizar.

Ejemplo de entrenamiento multi-GPU

Para entrenar con 2 GPUs, dispositivos CUDA 0 y 1 utiliza los siguientes comandos. Amplía a GPUs adicionales según sea necesario.

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)

# Train the model with 2 GPUs
results = model.train(data='coco128.yaml', epochs=100, imgsz=640, device=[0, 1])
# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640 device=0,1

Formación Apple M1 y M2 MPS

Con la compatibilidad con los chips Apple M1 y M2 integrados en los modelos Ultralytics YOLO , ahora es posible entrenar tus modelos en dispositivos que utilicen el potente marco Metal Performance Shaders (MPS). El MPS ofrece una forma de alto rendimiento de ejecutar tareas de cálculo y procesamiento de imágenes en el silicio personalizado de Apple.

Para activar el entrenamiento en los chips Apple M1 y M2, debes especificar "mps" como dispositivo al iniciar el proceso de entrenamiento. A continuación se muestra un ejemplo de cómo puedes hacerlo en Python y a través de la línea de comandos:

Ejemplo de formación MPS

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)

# Train the model with 2 GPUs
results = model.train(data='coco128.yaml', epochs=100, imgsz=640, device='mps')
# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640 device=mps

Al tiempo que se aprovecha la potencia de cálculo de los chips M1/M2, esto permite un procesamiento más eficiente de las tareas de entrenamiento. Para una orientación más detallada y opciones de configuración avanzadas, consulta la documentación dePyTorch MPS.

Reanudación de los cursos interrumpidos

Reanudar el entrenamiento a partir de un estado previamente guardado es una función crucial cuando se trabaja con modelos de aprendizaje profundo. Esto puede resultar útil en varias situaciones, como cuando el proceso de entrenamiento se ha interrumpido inesperadamente, o cuando deseas continuar entrenando un modelo con nuevos datos o durante más épocas.

Cuando se reanuda el entrenamiento, Ultralytics YOLO carga los pesos del último modelo guardado y también restaura el estado del optimizador, el programador de la tasa de aprendizaje y el número de épocas. Esto te permite continuar el proceso de entrenamiento sin problemas desde donde se dejó.

Puedes reanudar fácilmente el entrenamiento en Ultralytics YOLO configurando resume argumento para True al llamar al train y especificando la ruta de acceso al método .pt que contiene los pesos del modelo parcialmente entrenado.

A continuación se muestra un ejemplo de cómo reanudar un entrenamiento interrumpido utilizando Python y a través de la línea de comandos:

Ejemplo de formación para el currículum

from ultralytics import YOLO

# Load a model
model = YOLO('path/to/last.pt')  # load a partially trained model

# Resume training
results = model.train(resume=True)
# Resume an interrupted training
yolo train resume model=path/to/last.pt

Estableciendo resume=Truela train continuará el entrenamiento desde donde lo dejó, utilizando el estado almacenado en el archivo "ruta/a/último.pt". Si la función resume se omite o se establece en Falsela train iniciará una nueva sesión de entrenamiento.

Recuerda que los puntos de control se guardan al final de cada época por defecto, o a intervalos fijos utilizando la opción save_period por lo que debes completar al menos 1 época para reanudar una carrera de entrenamiento.

Ajustes del tren

Los ajustes de entrenamiento de los modelos YOLO abarcan diversos hiperparámetros y configuraciones utilizados durante el proceso de entrenamiento. Estos ajustes influyen en el rendimiento, la velocidad y la precisión del modelo. Los ajustes de entrenamiento clave incluyen el tamaño del lote, la velocidad de aprendizaje, el impulso y el decaimiento del peso. Además, la elección del optimizador, la función de pérdida y la composición del conjunto de datos de entrenamiento pueden influir en el proceso de entrenamiento. El ajuste cuidadoso y la experimentación con estos ajustes son cruciales para optimizar el rendimiento.

Argumento Por defecto Descripción
model None Especifica el archivo modelo para el entrenamiento. Acepta una ruta a .pt modelo preentrenado o un .yaml archivo de configuración. Esencial para definir la estructura del modelo o inicializar los pesos.
data None Ruta al archivo de configuración del conjunto de datos (por ejemplo, coco128.yaml). Este archivo contiene parámetros específicos del conjunto de datos, incluidas las rutas a los datos de entrenamiento y validación, los nombres de las clases y el número de clases.
epochs 100 Número total de épocas de entrenamiento. Cada época representa una pasada completa por todo el conjunto de datos. Ajustar este valor puede afectar a la duración del entrenamiento y al rendimiento del modelo.
time None Tiempo máximo de entrenamiento en horas. Si se establece, anula la opción epochs para que el entrenamiento se detenga automáticamente tras la duración especificada. Útil para situaciones de entrenamiento con limitaciones de tiempo.
patience 100 Número de épocas que hay que esperar sin que mejoren las métricas de validación antes de detener el entrenamiento anticipadamente. Ayuda a evitar el sobreajuste deteniendo el entrenamiento cuando el rendimiento se estabiliza.
batch 16 Tamaño del lote para el entrenamiento, que indica cuántas imágenes se procesan antes de actualizar los parámetros internos del modelo. AutoLote (batch=-1) ajusta dinámicamente el tamaño del lote en función de la disponibilidad de memoria en la GPU.
imgsz 640 Tamaño de imagen objetivo para el entrenamiento. Todas las imágenes se redimensionan a esta dimensión antes de introducirlas en el modelo. Afecta a la precisión del modelo y a la complejidad computacional.
save True Permite guardar los puntos de control del entrenamiento y los pesos finales del modelo. Útil para reanudar el entrenamiento o el despliegue del modelo.
save_period -1 Frecuencia con la que se guardan los puntos de control del modelo, especificada en épocas. Un valor de -1 desactiva esta función. Útil para guardar modelos provisionales durante sesiones de entrenamiento largas.
cache False Activa el almacenamiento en caché de las imágenes del conjunto de datos en la memoria (True/ram), en disco (disk), o desactívalo (False). Mejora la velocidad de entrenamiento reduciendo la E/S de disco a costa de un mayor uso de memoria.
device None Especifica el dispositivo o dispositivos de cálculo para el entrenamiento: una única GPU (device=0), varias GPU (device=0,1), CPU (device=cpu), o MPS para el silicio de Apple (device=mps).
workers 8 Número de subprocesos de trabajo para la carga de datos (por RANK si el entrenamiento es Multi-GPU). Influye en la velocidad de preprocesamiento de datos y alimentación del modelo, especialmente útil en configuraciones multi-GPU.
project None Nombre del directorio del proyecto donde se guardan los resultados del entrenamiento. Permite almacenar de forma organizada los distintos experimentos.
name None Nombre de la ejecución de entrenamiento. Se utiliza para crear un subdirectorio dentro de la carpeta del proyecto, donde se almacenan los registros de entrenamiento y los resultados.
exist_ok False Si es Verdadero, permite sobrescribir un directorio de proyecto/nombre existente. Útil para la experimentación iterativa sin necesidad de borrar manualmente las salidas anteriores.
pretrained True Determina si se inicia el entrenamiento a partir de un modelo preentrenado. Puede ser un valor booleano o una cadena de ruta a un modelo específico desde el que cargar los pesos. Mejora la eficacia del entrenamiento y el rendimiento del modelo.
optimizer 'auto' Elección del optimizador para el entrenamiento. Las opciones incluyen SGD, Adam, AdamW, NAdam, RAdam, RMSProp etc., o auto para una selección automática basada en la configuración del modelo. Afecta a la velocidad de convergencia y a la estabilidad.
verbose False Activa la salida detallada durante el entrenamiento, proporcionando registros detallados y actualizaciones del progreso. Útil para depurar y supervisar de cerca el proceso de entrenamiento.
seed 0 Establece la semilla aleatoria para el entrenamiento, garantizando la reproducibilidad de los resultados entre ejecuciones con las mismas configuraciones.
deterministic True Fuerza el uso de algoritmos deterministas, lo que garantiza la reproducibilidad, pero puede afectar al rendimiento y la velocidad debido a la restricción de algoritmos no deterministas.
single_cls False Trata todas las clases de los conjuntos de datos multiclase como una sola clase durante el entrenamiento. Útil para tareas de clasificación binaria o cuando te centras en la presencia del objeto más que en la clasificación.
rect False Permite el entrenamiento rectangular, optimizando la composición del lote para un relleno mínimo. Puede mejorar la eficacia y la velocidad, pero puede afectar a la precisión del modelo.
cos_lr False Utiliza un programador de la tasa de aprendizaje coseno, que ajusta la tasa de aprendizaje siguiendo una curva coseno a lo largo de las épocas. Ayuda a gestionar la tasa de aprendizaje para una mejor convergencia.
close_mosaic 10 Desactiva el aumento de datos en mosaico en las últimas N épocas para estabilizar el entrenamiento antes de finalizarlo. El valor 0 desactiva esta función.
resume False Reanuda el entrenamiento desde el último punto de control guardado. Carga automáticamente los pesos del modelo, el estado del optimizador y el recuento de épocas, continuando el entrenamiento sin problemas.
amp True Permite el entrenamiento Automático de Precisión Mixta (AMP), reduciendo el uso de memoria y posiblemente acelerando el entrenamiento con un impacto mínimo en la precisión.
fraction 1.0 Especifica la fracción del conjunto de datos que se utilizará para el entrenamiento. Permite entrenar con un subconjunto del conjunto de datos completo, útil para experimentos o cuando los recursos son limitados.
profile False Permite perfilar las velocidades de ONNX y TensorRT durante el entrenamiento, útil para optimizar el despliegue del modelo.
freeze None Congela las N primeras capas del modelo o capas especificadas por índice, reduciendo el número de parámetros entrenables. Útil para el ajuste fino o el aprendizaje por transferencia.
lr0 0.01 Tasa de aprendizaje inicial (es decir SGD=1E-2, Adam=1E-3) . El ajuste de este valor es crucial para el proceso de optimización, ya que influye en la rapidez con que se actualizan las ponderaciones del modelo.
lrf 0.01 Tasa de aprendizaje final como fracción de la tasa inicial = (lr0 * lrf), que se utiliza junto con los programadores para ajustar el ritmo de aprendizaje a lo largo del tiempo.
momentum 0.937 Factor de impulso para SGD o beta1 para optimizadores Adam, que influye en la incorporación de gradientes pasados en la actualización actual.
weight_decay 0.0005 Término de regularización L2, que penaliza los pesos grandes para evitar el sobreajuste.
warmup_epochs 3.0 Número de épocas para el calentamiento de la tasa de aprendizaje, aumentando gradualmente la tasa de aprendizaje desde un valor bajo hasta la tasa de aprendizaje inicial para estabilizar el entrenamiento desde el principio.
warmup_momentum 0.8 Impulso inicial para la fase de calentamiento, ajustándose gradualmente al impulso establecido durante el periodo de calentamiento.
warmup_bias_lr 0.1 Tasa de aprendizaje de los parámetros de sesgo durante la fase de calentamiento, que ayuda a estabilizar el entrenamiento del modelo en las épocas iniciales.
box 7.5 Peso del componente de pérdida de caja en la función de pérdida, que influye en el énfasis que se pone en predecir con precisión las coordenadas de la caja delimitadora.
cls 0.5 Peso de la pérdida de clasificación en la función de pérdida total, que afecta a la importancia de la predicción correcta de la clase en relación con otros componentes.
dfl 1.5 Peso de la pérdida focal de distribución, utilizado en algunas versiones de YOLO para una clasificación de grano fino.
pose 12.0 Peso de la pérdida de pose en los modelos entrenados para la estimación de la pose, lo que influye en la importancia de predecir con precisión los puntos clave de la pose.
kobj 2.0 Ponderación de la pérdida de objetividad del punto clave en los modelos de estimación de la pose, equilibrando la confianza en la detección con la precisión de la pose.
label_smoothing 0.0 Aplica el suavizado de etiquetas, suavizando las etiquetas duras a una mezcla de la etiqueta objetivo y una distribución uniforme sobre las etiquetas, puede mejorar la generalización.
nbs 64 Tamaño nominal del lote para la normalización de la pérdida.
overlap_mask True Determina si las máscaras de segmentación deben solaparse durante el entrenamiento, aplicable en tareas de segmentación de instancias.
mask_ratio 4 Relación de reducción de la muestra para las máscaras de segmentación, que afecta a la resolución de las máscaras utilizadas durante el entrenamiento.
dropout 0.0 Tasa de abandono para la regularización en tareas de clasificación, que evita el sobreajuste omitiendo aleatoriamente unidades durante el entrenamiento.
val True Activa la validación durante el entrenamiento, lo que permite evaluar periódicamente el rendimiento del modelo en un conjunto de datos distinto.
plots False Genera y guarda gráficos de las métricas de entrenamiento y validación, así como ejemplos de predicción, proporcionando una visión visual del rendimiento del modelo y de la progresión del aprendizaje.

Ajustes de aumento e hiperparámetros

Las técnicas de aumento son esenciales para mejorar la solidez y el rendimiento de los modelos YOLO introduciendo variabilidad en los datos de entrenamiento, lo que ayuda a que el modelo generalice mejor a los datos no vistos. La tabla siguiente describe la finalidad y el efecto de cada argumento de aumento:

Argumento Tipo Por defecto Gama Descripción
hsv_h float 0.015 0.0 - 1.0 Ajusta el tono de la imagen en una fracción de la rueda de color, introduciendo variabilidad cromática. Ayuda al modelo a generalizarse en diferentes condiciones de iluminación.
hsv_s float 0.7 0.0 - 1.0 Altera la saturación de la imagen en una fracción, afectando a la intensidad de los colores. Útil para simular diferentes condiciones ambientales.
hsv_v float 0.4 0.0 - 1.0 Modifica el valor (brillo) de la imagen en una fracción, lo que ayuda a que el modelo funcione bien en distintas condiciones de iluminación.
degrees float 0.0 -180 - +180 Gira la imagen aleatoriamente dentro del intervalo de grados especificado, mejorando la capacidad del modelo para reconocer objetos en diversas orientaciones.
translate float 0.1 0.0 - 1.0 Traslada la imagen horizontal y verticalmente una fracción del tamaño de la imagen, lo que ayuda a aprender a detectar objetos parcialmente visibles.
scale float 0.5 >=0.0 Escala la imagen por un factor de ganancia, simulando objetos a diferentes distancias de la cámara.
shear float 0.0 -180 - +180 Corta la imagen en un grado determinado, imitando el efecto de los objetos vistos desde distintos ángulos.
perspective float 0.0 0.0 - 0.001 Aplica una transformación de perspectiva aleatoria a la imagen, mejorando la capacidad del modelo para comprender los objetos en el espacio tridimensional.
flipud float 0.0 0.0 - 1.0 Da la vuelta a la imagen con la probabilidad especificada, aumentando la variabilidad de los datos sin afectar a las características del objeto.
fliplr float 0.5 0.0 - 1.0 Voltea la imagen de izquierda a derecha con la probabilidad especificada, útil para aprender objetos simétricos y aumentar la diversidad del conjunto de datos.
mosaic float 1.0 0.0 - 1.0 Combina cuatro imágenes de entrenamiento en una, simulando diferentes composiciones de escena e interacciones de objetos. Muy eficaz para la comprensión de escenas complejas.
mixup float 0.0 0.0 - 1.0 Mezcla dos imágenes y sus etiquetas, creando una imagen compuesta. Mejora la capacidad de generalización del modelo introduciendo ruido de etiquetas y variabilidad visual.
copy_paste float 0.0 0.0 - 1.0 Copia objetos de una imagen y los pega en otra, útil para aumentar las instancias de objetos y aprender la oclusión de objetos.
auto_augment str randaugment - Aplica automáticamente una política de aumento predefinida (randaugment, autoaugment, augmix), optimizando las tareas de clasificación mediante la diversificación de las características visuales.
erasing float 0.4 0.0 - 1.0 Borra aleatoriamente una parte de la imagen durante el entrenamiento de clasificación, animando al modelo a centrarse en características menos obvias para el reconocimiento.

Estos valores pueden ajustarse para satisfacer los requisitos específicos del conjunto de datos y la tarea en cuestión. Experimentar con distintos valores puede ayudar a encontrar la estrategia de aumento óptima que conduzca al mejor rendimiento del modelo.

Información

Para más información sobre las operaciones de aumento del entrenamiento, consulta la sección de referencia.

Registro

Al entrenar un modelo YOLOv8 , puede que te resulte valioso hacer un seguimiento del rendimiento del modelo a lo largo del tiempo. Aquí es donde entra en juego el registro. Ultralytics' YOLO proporciona soporte para tres tipos de registradores - Comet, ClearML, y TensorBoard.

Para utilizar un registrador, selecciónalo en el menú desplegable del fragmento de código anterior y ejecútalo. El registrador elegido se instalará e inicializará.

Comet

Comet es una plataforma que permite a los científicos de datos y a los desarrolladores rastrear, comparar, explicar y optimizar experimentos y modelos. Proporciona funcionalidades como métricas en tiempo real, diferencias de código y seguimiento de hiperparámetros.

Para utilizar Comet:

Ejemplo

# pip install comet_ml
import comet_ml

comet_ml.init()

Recuerda iniciar sesión en tu cuenta de Comet en su sitio web y obtener tu clave API. Tendrás que añadirla a tus variables de entorno o a tu script para registrar tus experimentos.

ClearML

ClearML es una plataforma de código abierto que automatiza el seguimiento de los experimentos y ayuda a compartir eficazmente los recursos. Está diseñada para ayudar a los equipos a gestionar, ejecutar y reproducir su trabajo de ML de forma más eficiente.

Para utilizar ClearML:

Ejemplo

# pip install clearml
import clearml

clearml.browser_login()

Después de ejecutar este script, tendrás que acceder a tu cuenta ClearML en el navegador y autenticar tu sesión.

TensorBoard

TensorBoard es un conjunto de herramientas de visualización para TensorFlow. Te permite visualizar tu gráfico TensorFlow , trazar métricas cuantitativas sobre la ejecución de tu gráfico y mostrar datos adicionales como imágenes que pasan por él.

Para utilizar TensorBoard en Google Colab:

Ejemplo

load_ext tensorboard
tensorboard --logdir ultralytics/runs  # replace with 'runs' directory

Para utilizar TensorBoard localmente, ejecuta el siguiente comando y visualiza los resultados en http://localhost:6006/.

Ejemplo

tensorboard --logdir ultralytics/runs  # replace with 'runs' directory

Esto cargará TensorBoard y lo dirigirá al directorio donde están guardados tus registros de entrenamiento.

Después de configurar tu registrador, puedes proceder al entrenamiento de tu modelo. Todas las métricas de entrenamiento se registrarán automáticamente en la plataforma que elijas, y podrás acceder a estos registros para controlar el rendimiento de tu modelo a lo largo del tiempo, comparar diferentes modelos e identificar áreas de mejora.



Creado 2023-11-12, Actualizado 2024-02-25
Autores: Burhan-Q (1), Laughing-q (1), glenn-jocher (9)

Comentarios