Ajuste eficiente de hiperparámetros con Ray Tune y YOLOv8
El ajuste de hiperparámetros es vital para lograr el máximo rendimiento del modelo mediante la detección del conjunto óptimo de hiperparámetros. Esto implica la realización de ensayos con diferentes hiperparámetros y la evaluación del rendimiento de cada ensayo.
Acelera la puesta a punto con Ultralytics YOLOv8 y Ray Tune
Ultralytics YOLOv8 incorpora Ray Tune para el ajuste de hiperparámetros, agilizando la optimización de los hiperparámetros del modelo YOLOv8 . Con Ray Tune, puedes utilizar estrategias de búsqueda avanzadas, paralelismo y detención temprana para agilizar el proceso de ajuste.
Ray Tune
Ray Tune es una biblioteca de ajuste de hiperparámetros diseñada para ser eficiente y flexible. Admite varias estrategias de búsqueda, paralelismo y estrategias de parada temprana, y se integra perfectamente con los marcos de aprendizaje automático más populares, incluido Ultralytics YOLOv8 .
Integración con Weights & Biases
YOLOv8 también permite la integración opcional con Weights & Biases para controlar el proceso de ajuste.
Instalación
Para instalar los paquetes necesarios, ejecuta
Instalación
Utilización
Utilización
tune()
Parámetros del método
En tune()
de YOLOv8 proporciona una interfaz fácil de usar para el ajuste de hiperparámetros con Ray Tune. Acepta varios argumentos que te permiten personalizar el proceso de sintonización. A continuación encontrarás una explicación detallada de cada parámetro:
Parámetro | Tipo | Descripción | Valor por defecto |
---|---|---|---|
data |
str |
El archivo de configuración del conjunto de datos (en formato YAML) para ejecutar el sintonizador. Este archivo debe especificar las rutas de los datos de entrenamiento y validación, así como otros ajustes específicos del conjunto de datos. | |
space |
dict, optional |
Un diccionario que define el espacio de búsqueda de hiperparámetros para el Ajuste de Rayos. Cada clave corresponde a un nombre de hiperparámetro, y el valor especifica el rango de valores a explorar durante la sintonización. Si no se proporciona, YOLOv8 utiliza un espacio de búsqueda por defecto con varios hiperparámetros. | |
grace_period |
int, optional |
El período de gracia en épocas para el programador ASHA en Sintonía de Rayos. El programador no terminará ningún ensayo antes de este número de épocas, permitiendo que el modelo tenga un mínimo de entrenamiento antes de tomar una decisión sobre la parada anticipada. | 10 |
gpu_per_trial |
int, optional |
El número de GPUs a asignar por prueba durante el ajuste. Esto ayuda a gestionar el uso de GPU , especialmente en entornos multiGPU . Si no se proporciona, el sintonizador utilizará todas las GPUs disponibles. | Ninguno |
iterations |
int, optional |
El número máximo de pruebas a ejecutar durante la sintonización. Este parámetro ayuda a controlar el número total de combinaciones de hiperparámetros probadas, garantizando que el proceso de ajuste no se ejecute indefinidamente. | 10 |
**train_args |
dict, optional |
Argumentos adicionales para pasar al train() durante el ajuste. Estos argumentos pueden incluir ajustes como el número de épocas de entrenamiento, el tamaño del lote y otras configuraciones específicas del entrenamiento. |
{} |
Personalizando estos parámetros, puedes ajustar el proceso de optimización de hiperparámetros para adaptarlo a tus necesidades específicas y a los recursos informáticos disponibles.
Espacio de búsqueda por defecto Descripción
La tabla siguiente enumera los parámetros por defecto del espacio de búsqueda para el ajuste de hiperparámetros en YOLOv8 con Ray Tune. Cada parámetro tiene un rango de valores específico definido por tune.uniform()
.
Parámetro | Rango de valores | Descripción |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Tasa de aprendizaje inicial |
lrf |
tune.uniform(0.01, 1.0) |
Factor de tasa de aprendizaje final |
momentum |
tune.uniform(0.6, 0.98) |
Impulso |
weight_decay |
tune.uniform(0.0, 0.001) |
Decaimiento del peso |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Épocas de calentamiento |
warmup_momentum |
tune.uniform(0.0, 0.95) |
Momento de calentamiento |
box |
tune.uniform(0.02, 0.2) |
Caja pérdida peso |
cls |
tune.uniform(0.2, 4.0) |
Clase pérdida peso |
hsv_h |
tune.uniform(0.0, 0.1) |
Gama de aumento del tono |
hsv_s |
tune.uniform(0.0, 0.9) |
Rango de aumento de la saturación |
hsv_v |
tune.uniform(0.0, 0.9) |
Rango de aumento del valor (luminosidad) |
degrees |
tune.uniform(0.0, 45.0) |
Rango de aumento de la rotación (grados) |
translate |
tune.uniform(0.0, 0.9) |
Alcance del aumento de traducción |
scale |
tune.uniform(0.0, 0.9) |
Rango de aumento de escala |
shear |
tune.uniform(0.0, 10.0) |
Rango de aumento del cizallamiento (grados) |
perspective |
tune.uniform(0.0, 0.001) |
Gama de aumento de perspectiva |
flipud |
tune.uniform(0.0, 1.0) |
Probabilidad de aumento del volteo vertical |
fliplr |
tune.uniform(0.0, 1.0) |
Probabilidad de aumento del volteo horizontal |
mosaic |
tune.uniform(0.0, 1.0) |
Probabilidad de aumento del mosaico |
mixup |
tune.uniform(0.0, 1.0) |
Probabilidad de aumento de la confusión |
copy_paste |
tune.uniform(0.0, 1.0) |
Probabilidad de aumento de copia-pega |
Ejemplo de espacio de búsqueda personalizado
En este ejemplo, demostramos cómo utilizar un espacio de búsqueda personalizado para el ajuste de hiperparámetros con Ray Tune y YOLOv8. Al proporcionar un espacio de búsqueda personalizado, puedes centrar el proceso de ajuste en hiperparámetros específicos de interés.
Utilización
En el fragmento de código anterior, creamos un modelo YOLO con los pesos preentrenados "yolov8n.pt". A continuación, llamamos a la función tune()
especificando la configuración del conjunto de datos con "coco8.yaml". Proporcionamos un espacio de búsqueda personalizado para la tasa de aprendizaje inicial lr0
utilizando un diccionario con la clave "lr0" y el valor tune.uniform(1e-5, 1e-1)
. Por último, pasamos argumentos de entrenamiento adicionales, como el número de épocas, directamente al método de ajuste como epochs=50
.
Procesamiento de los resultados de la sintonización de rayos
Después de ejecutar un experimento de ajuste de hiperparámetros con Ray Tune, es posible que quieras realizar diversos análisis de los resultados obtenidos. Esta guía te llevará a través de flujos de trabajo comunes para procesar y analizar estos resultados.
Cargar los resultados de un experimento Tune desde un directorio
Después de realizar el experimento de ajuste con tuner.fit()
puedes cargar los resultados desde un directorio. Esto es útil, sobre todo si realizas el análisis después de que haya salido el script de entrenamiento inicial.
experiment_path = f"{storage_path}/{exp_name}"
print(f"Loading results from {experiment_path}...")
restored_tuner = tune.Tuner.restore(experiment_path, trainable=train_mnist)
result_grid = restored_tuner.get_results()
Análisis básico a nivel experimental
Obtén una visión general del rendimiento de las pruebas. Puedes comprobar rápidamente si hubo algún error durante las pruebas.
Análisis básico a nivel de prueba
Accede a las configuraciones individuales de los hiperparámetros de los ensayos y a las últimas métricas comunicadas.
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")
Trazar todo el historial de métricas notificadas de un ensayo
Puedes trazar el historial de las métricas comunicadas de cada ensayo para ver cómo evolucionan las métricas a lo largo del tiempo.
import matplotlib.pyplot as plt
for i, result in enumerate(result_grid):
plt.plot(
result.metrics_dataframe["training_iteration"],
result.metrics_dataframe["mean_accuracy"],
label=f"Trial {i}",
)
plt.xlabel("Training Iterations")
plt.ylabel("Mean Accuracy")
plt.legend()
plt.show()
Resumen
En esta documentación, cubrimos los flujos de trabajo habituales para analizar los resultados de los experimentos realizados con Ray Tune utilizando Ultralytics. Los pasos clave incluyen la carga de los resultados del experimento desde un directorio, la realización de análisis básicos a nivel de experimento y a nivel de prueba, y el trazado de métricas.
Explora más a fondo la página de documentación Analizar resultados de Ray Tune para sacar el máximo partido a tus experimentos de ajuste de hiperparámetros.
PREGUNTAS FRECUENTES
¿Cómo sintonizo los hiperparámetros de mi modelo YOLOv8 utilizando Ray Tune?
Para sintonizar los hiperparámetros de tu modelo Ultralytics YOLOv8 utilizando Ray Tune, sigue estos pasos:
-
Instala los paquetes necesarios:
-
Carga tu modelo YOLOv8 y empieza a afinar:
Esto utiliza las estrategias de búsqueda avanzada y el paralelismo de Ray Tune para optimizar eficazmente los hiperparámetros de tu modelo. Para más información, consulta la documentación de Ray Tune.
¿Cuáles son los hiperparámetros por defecto para la sintonización de YOLOv8 con Ray Tune?
Ultralytics YOLOv8 utiliza los siguientes hiperparámetros por defecto para la sintonización con Ray Tune:
Parámetro | Rango de valores | Descripción |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Tasa de aprendizaje inicial |
lrf |
tune.uniform(0.01, 1.0) |
Factor de tasa de aprendizaje final |
momentum |
tune.uniform(0.6, 0.98) |
Impulso |
weight_decay |
tune.uniform(0.0, 0.001) |
Decaimiento del peso |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Épocas de calentamiento |
box |
tune.uniform(0.02, 0.2) |
Caja pérdida peso |
cls |
tune.uniform(0.2, 4.0) |
Clase pérdida peso |
hsv_h |
tune.uniform(0.0, 0.1) |
Gama de aumento del tono |
translate |
tune.uniform(0.0, 0.9) |
Alcance del aumento de traducción |
Estos hiperparámetros pueden personalizarse para adaptarlos a tus necesidades específicas. Para obtener una lista completa y más detalles, consulta la Guía de ajuste de hiperparámetros.
¿Cómo puedo integrar Weights & Biases en la puesta a punto de mi modelo YOLOv8 ?
Para integrar Weights & Biases (W&B) con tu proceso de ajuste Ultralytics YOLOv8 :
-
Instala W&B:
-
Modifica tu script de ajuste:
Esta configuración te permitirá supervisar el proceso de ajuste, realizar un seguimiento de las configuraciones de los hiperparámetros y visualizar los resultados en W&B.
¿Por qué debo utilizar Ray Tune para la optimización de hiperparámetros con YOLOv8?
Ray Tune ofrece numerosas ventajas para la optimización de hiperparámetros:
- Estrategias avanzadas de búsqueda: Utiliza algoritmos como la Optimización Bayesiana y HyperOpt para una búsqueda eficiente de parámetros.
- Paralelismo: Admite la ejecución en paralelo de varios ensayos, lo que acelera considerablemente el proceso de ajuste.
- Detención Temprana: Emplea estrategias como ASHA para terminar antes los ensayos de bajo rendimiento, ahorrando recursos computacionales.
Ray Tune se integra perfectamente con Ultralytics YOLOv8 , proporcionando una interfaz fácil de usar para ajustar hiperparámetros de forma eficaz. Para empezar, consulta la guía Ajuste eficaz de hiperparámetros con Ray Tune y YOLOv8.
¿Cómo puedo definir un espacio de búsqueda personalizado para el ajuste de hiperparámetros de YOLOv8 ?
Para definir un espacio de búsqueda personalizado para tu YOLOv8 sintonización de hiperparámetros con Ray Tune:
from ray import tune
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
search_space = {"lr0": tune.uniform(1e-5, 1e-1), "momentum": tune.uniform(0.6, 0.98)}
result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)
Esto personaliza el rango de hiperparámetros como la tasa de aprendizaje inicial y el impulso que se explorarán durante el proceso de ajuste. Para configuraciones avanzadas, consulta la sección Ejemplo de espacio de búsqueda personalizado.