Salta para o conteúdo

Efficient Hyperparameter Tuning with Ray Tune and YOLO11

O ajuste de hiperparâmetros é vital para atingir o desempenho máximo do modelo, descobrindo o conjunto ideal de hiperparâmetros. Isso envolve a execução de testes com diferentes hiperparâmetros e a avaliação do desempenho de cada teste.

Accelerate Tuning with Ultralytics YOLO11 and Ray Tune

Ultralytics YOLO11 incorporates Ray Tune for hyperparameter tuning, streamlining the optimization of YOLO11 model hyperparameters. With Ray Tune, you can utilize advanced search strategies, parallelism, and early stopping to expedite the tuning process.

Ray Tune

Ray Tune Descrição geral

Ray Tune is a hyperparameter tuning library designed for efficiency and flexibility. It supports various search strategies, parallelism, and early stopping strategies, and seamlessly integrates with popular machine learning frameworks, including Ultralytics YOLO11.

Integração com Weights & Biases

YOLO11 also allows optional integration with Weights & Biases for monitoring the tuning process.

Instalação

Para instalar os pacotes necessários, executa:

Instalação

# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"

# Optionally install W&B for logging
pip install wandb

Utilização

Utilização

from ultralytics import YOLO

# Load a YOLO11n model
model = YOLO("yolo11n.pt")

# Start tuning hyperparameters for YOLO11n training on the COCO8 dataset
result_grid = model.tune(data="coco8.yaml", use_ray=True)

tune() Parâmetros do método

O tune() method in YOLO11 provides an easy-to-use interface for hyperparameter tuning with Ray Tune. It accepts several arguments that allow you to customize the tuning process. Below is a detailed explanation of each parameter:

ParâmetroTipoDescriçãoValor por defeito
datastrThe dataset configuration file (in YAML format) to run the tuner on. This file should specify the training and validation data paths, as well as other dataset-specific settings.
spacedict, optionalA dictionary defining the hyperparameter search space for Ray Tune. Each key corresponds to a hyperparameter name, and the value specifies the range of values to explore during tuning. If not provided, YOLO11 uses a default search space with various hyperparameters.
grace_periodint, optionalThe grace period in epochs for the ASHA scheduler in Ray Tune. The scheduler will not terminate any trial before this number of epochs, allowing the model to have some minimum training before making a decision on early stopping.10
gpu_per_trialint, optionalO número de GPUs a alocar por tentativa durante o ajuste. Isso ajuda a gerenciar o uso do GPU , particularmente em ambientes com váriosGPU . Se não for fornecido, o sintonizador usará todas as GPUs disponíveis.Não tens
iterationsint, optionalO número máximo de tentativas a serem executadas durante o ajuste. Este parâmetro ajuda a controlar o número total de combinações de hiperparâmetros testadas, garantindo que o processo de ajuste não seja executado indefinidamente.10
**train_argsdict, optionalArgumentos adicionais para passar para o train() method during tuning. These arguments can include settings like the number of training epochs, batch size, and other training-specific configurations.{}

Ao personalizar estes parâmetros, podes afinar o processo de otimização de hiperparâmetros para se adequar às tuas necessidades específicas e aos recursos computacionais disponíveis.

Espaço de pesquisa predefinido Descrição

The following table lists the default search space parameters for hyperparameter tuning in YOLO11 with Ray Tune. Each parameter has a specific value range defined by tune.uniform().

ParâmetroIntervalo de valoresDescrição
lr0tune.uniform(1e-5, 1e-1)Initial learning rate
lrftune.uniform(0.01, 1.0)Fator de taxa de aprendizagem final
momentumtune.uniform(0.6, 0.98)Momentum
weight_decaytune.uniform(0.0, 0.001)Diminuição do peso
warmup_epochstune.uniform(0.0, 5.0)Épocas de aquecimento
warmup_momentumtune.uniform(0.0, 0.95)Aquecimento
boxtune.uniform(0.02, 0.2)Caixa perda de peso
clstune.uniform(0.2, 4.0)Perda de peso por classe
hsv_htune.uniform(0.0, 0.1)Gama de aumento de tonalidade
hsv_stune.uniform(0.0, 0.9)Gama de aumento da saturação
hsv_vtune.uniform(0.0, 0.9)Valor (brilho) intervalo de aumento
degreestune.uniform(0.0, 45.0)Amplitude de aumento da rotação (graus)
translatetune.uniform(0.0, 0.9)Gama de aumentos de tradução
scaletune.uniform(0.0, 0.9)Escala de aumento de escala
sheartune.uniform(0.0, 10.0)Intervalo de aumento de cisalhamento (graus)
perspectivetune.uniform(0.0, 0.001)Gama de aumentos de perspetiva
flipudtune.uniform(0.0, 1.0)Probabilidade de aumento da rotação vertical
fliplrtune.uniform(0.0, 1.0)Probabilidade de aumento da rotação horizontal
mosaictune.uniform(0.0, 1.0)Probabilidade de aumento do mosaico
mixuptune.uniform(0.0, 1.0)Probabilidade de aumento da mistura
copy_pastetune.uniform(0.0, 1.0)Copia e cola a probabilidade de aumento

Exemplo de espaço de pesquisa personalizado

In this example, we demonstrate how to use a custom search space for hyperparameter tuning with Ray Tune and YOLO11. By providing a custom search space, you can focus the tuning process on specific hyperparameters of interest.

Utilização

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo11n.pt")

# Run Ray Tune on the model
result_grid = model.tune(
    data="coco8.yaml",
    space={"lr0": tune.uniform(1e-5, 1e-1)},
    epochs=50,
    use_ray=True,
)

In the code snippet above, we create a YOLO model with the "yolo11n.pt" pretrained weights. Then, we call the tune() especificando a configuração do conjunto de dados com "coco8.yaml". Fornecemos um espaço de pesquisa personalizado para a taxa de aprendizagem inicial lr0 utilizando um dicionário com a chave "lr0" e o valor tune.uniform(1e-5, 1e-1). Finalmente, passamos argumentos de treino adicionais, como o número de épocas, diretamente para o método tune como epochs=50.

Processamento dos resultados da afinação de raios

Depois de executar uma experiência de ajuste de hiperparâmetros com o Ray Tune, podes querer efetuar várias análises dos resultados obtidos. Este guia irá guiar-te através de fluxos de trabalho comuns para processar e analisar esses resultados.

Carregar resultados de experiências de afinação a partir de um diretório

Depois de executar a experiência de afinação com tuner.fit()podes carregar os resultados a partir de um diretório. Isto é útil, especialmente se estiveres a efetuar a análise depois de o script de treino inicial ter saído.

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álise básica ao nível da experiência

Obtém uma visão geral do desempenho dos ensaios. Podes verificar rapidamente se houve algum erro durante os ensaios.

if result_grid.errors:
    print("One or more trials failed!")
else:
    print("No errors!")

Análise básica do nível de julgamento

Acede a configurações de hiperparâmetros de ensaios individuais e às últimas métricas comunicadas.

for i, result in enumerate(result_grid):
    print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")

Traçando todo o histórico de métricas relatadas para um estudo

Podes traçar o histórico das métricas comunicadas para cada ensaio para ver como as métricas evoluíram ao longo do tempo.

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()

Resumo

Nesta documentação, abordámos fluxos de trabalho comuns para analisar os resultados de experiências executadas com o Ray Tune utilizando Ultralytics. Os principais passos incluem o carregamento dos resultados da experiência a partir de um diretório, a realização de análises básicas ao nível da experiência e ao nível do ensaio e a representação gráfica de métricas.

Explora mais, consultando a página de documentos Analisar resultados do Ray Tune para tirar o máximo partido das tuas experiências de ajuste de hiperparâmetros.

FAQ

How do I tune the hyperparameters of my YOLO11 model using Ray Tune?

To tune the hyperparameters of your Ultralytics YOLO11 model using Ray Tune, follow these steps:

  1. Instala os pacotes necessários:

    pip install -U ultralytics "ray[tune]"
    pip install wandb  # optional for logging
    
  2. Load your YOLO11 model and start tuning:

    from ultralytics import YOLO
    
    # Load a YOLO11 model
    model = YOLO("yolo11n.pt")
    
    # Start tuning with the COCO8 dataset
    result_grid = model.tune(data="coco8.yaml", use_ray=True)
    

Utiliza as estratégias de pesquisa avançadas e o paralelismo do Ray Tune para otimizar eficazmente os hiperparâmetros do seu modelo. Para obter mais informações, consulta a documentação do Ray Tune.

What are the default hyperparameters for YOLO11 tuning with Ray Tune?

Ultralytics YOLO11 uses the following default hyperparameters for tuning with Ray Tune:

ParâmetroIntervalo de valoresDescrição
lr0tune.uniform(1e-5, 1e-1)Taxa de aprendizagem inicial
lrftune.uniform(0.01, 1.0)Fator de taxa de aprendizagem final
momentumtune.uniform(0.6, 0.98)Momentum
weight_decaytune.uniform(0.0, 0.001)Diminuição do peso
warmup_epochstune.uniform(0.0, 5.0)Épocas de aquecimento
boxtune.uniform(0.02, 0.2)Caixa perda de peso
clstune.uniform(0.2, 4.0)Perda de peso por classe
hsv_htune.uniform(0.0, 0.1)Gama de aumento de tonalidade
translatetune.uniform(0.0, 0.9)Gama de aumentos de tradução

Esses hiperparâmetros podem ser personalizados para atender às tuas necessidades específicas. Para obter uma lista completa e mais detalhes, consulte o guia Ajuste de hiperparâmetros.

How can I integrate Weights & Biases with my YOLO11 model tuning?

To integrate Weights & Biases (W&B) with your Ultralytics YOLO11 tuning process:

  1. Instala a W&B:

    pip install wandb
    
  2. Modifica o teu guião de afinação:

    import wandb
    
    from ultralytics import YOLO
    
    wandb.init(project="YOLO-Tuning", entity="your-entity")
    
    # Load YOLO model
    model = YOLO("yolo11n.pt")
    
    # Tune hyperparameters
    result_grid = model.tune(data="coco8.yaml", use_ray=True)
    

Esta configuração permitir-te-á monitorizar o processo de afinação, seguir as configurações dos hiperparâmetros e visualizar os resultados em W&B.

Why should I use Ray Tune for hyperparameter optimization with YOLO11?

O Ray Tune oferece inúmeras vantagens para a otimização de hiperparâmetros:

  • Estratégias de pesquisa avançadas: Utiliza algoritmos como o Bayesian Optimization e o HyperOpt para uma pesquisa eficiente de parâmetros.
  • Paralelismo: Suporta a execução paralela de vários ensaios, acelerando significativamente o processo de afinação.
  • Interrompe precocemente: Utiliza estratégias como o ASHA para terminar precocemente ensaios com fraco desempenho, poupando recursos computacionais.

Ray Tune seamlessly integrates with Ultralytics YOLO11, providing an easy-to-use interface for tuning hyperparameters effectively. To get started, check out the Efficient Hyperparameter Tuning with Ray Tune and YOLO11 guide.

How can I define a custom search space for YOLO11 hyperparameter tuning?

To define a custom search space for your YOLO11 hyperparameter tuning with Ray Tune:

from ray import tune

from ultralytics import YOLO

model = YOLO("yolo11n.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)

Personaliza o intervalo de hiperparâmetros, como a taxa de aprendizado inicial e o momento a ser explorado durante o processo de ajuste. Para configurações avançadas, consulta a secção Exemplo de espaço de pesquisa personalizado.

📅 Created 11 months ago ✏️ Updated 22 days ago

Comentários