Ir para o conteúdo

Ajuste Eficiente de Hiperparâmetros com Ray Tune e YOLO11

O ajuste de hiperparâmetros é vital para alcançar 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.

Acelere o ajuste com Ultralytics YOLO11 e Ray Tune

O Ultralytics YOLO11 incorpora o Ray Tune para ajuste de hiperparâmetros, otimizando o processo de otimização dos hiperparâmetros do modelo YOLO11. Com o Ray Tune, você pode utilizar estratégias avançadas de busca, paralelismo e interrupção antecipada para acelerar o processo de ajuste.

Ray Tune

Visão Geral do Ray Tune

O Ray Tune é uma biblioteca de ajuste de hiperparâmetros projetada para eficiência e flexibilidade. Ele suporta várias estratégias de busca, paralelismo e estratégias de parada antecipada, e se integra perfeitamente com frameworks populares de machine learning, incluindo Ultralytics YOLO11.

Integração com Weights & Biases

O YOLO11 também permite a integração opcional com o Weights & Biases para monitorizar o processo de ajuste.

Instalação

Para instalar os pacotes necessários, execute:

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() método em YOLO11 fornece uma interface fácil de usar para ajuste de hiperparâmetros com Ray Tune. Ele aceita vários argumentos que permitem personalizar o processo de ajuste. Abaixo está uma explicação detalhada de cada parâmetro:

Parâmetro Tipo Descrição Valor Padrão
data str O arquivo de configuração do conjunto de dados (em formato YAML) para executar o sintonizador. Este arquivo deve especificar os caminhos de treinamento e dados de validação, bem como outras configurações específicas do conjunto de dados.
space dict, optional Um dicionário definindo o espaço de busca de hiperparâmetros para Ray Tune. Cada chave corresponde a um nome de hiperparâmetro, e o valor especifica o intervalo de valores a serem explorados durante o ajuste. Se não fornecido, YOLO11 usa um espaço de busca padrão com vários hiperparâmetros.
grace_period int, optional O período de carência em épocas para o agendador ASHA no Ray Tune. O agendador não encerrará nenhum teste antes desse número de épocas, permitindo que o modelo tenha algum treinamento mínimo antes de tomar uma decisão sobre a interrupção antecipada. 10
gpu_per_trial int, optional O número de GPUs a serem alocadas por tentativa durante o ajuste. Isso ajuda a gerenciar o uso da GPU, particularmente em ambientes multi-GPU. Se não for fornecido, o sintonizador usará todas as GPUs disponíveis. None
iterations int, optional O 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_args dict, optional Argumentos adicionais para passar para o train() método durante o ajuste. Esses argumentos podem incluir configurações como o número de épocas de treinamento, tamanho de lote, e outras configurações específicas de treinamento. {}

Ao personalizar esses parâmetros, você pode ajustar o processo de otimização de hiperparâmetros para atender às suas necessidades específicas e aos recursos computacionais disponíveis.

Descrição do Espaço de Busca Padrão

A tabela a seguir lista os parâmetros de espaço de busca padrão para ajuste de hiperparâmetros em YOLO11 com Ray Tune. Cada parâmetro tem um intervalo de valores específico definido por tune.uniform().

Parâmetro Intervalo Descrição
lr0 tune.uniform(1e-5, 1e-1) Taxa de aprendizado inicial que controla o tamanho do passo durante a otimização. Valores mais altos aceleram o treinamento, mas podem causar instabilidade.
lrf tune.uniform(0.01, 1.0) Fator final da taxa de aprendizagem que determina o quanto a taxa de aprendizagem diminui até o final do treinamento.
momentum tune.uniform(0.6, 0.98) Fator de momentum para o otimizador que ajuda a acelerar o treinamento e superar mínimos locais.
weight_decay tune.uniform(0.0, 0.001) Parâmetro de regularização que evita o overfitting, penalizando valores de peso elevados.
warmup_epochs tune.uniform(0.0, 5.0) Número de épocas com taxa de aprendizagem gradualmente crescente para estabilizar o treino inicial.
warmup_momentum tune.uniform(0.0, 0.95) Valor de momentum inicial que aumenta gradualmente durante o período de aquecimento.
box tune.uniform(0.02, 0.2) Peso para o componente de perda da caixa delimitadora, equilibrando a precisão da localização no modelo.
cls tune.uniform(0.2, 4.0) Peso para o componente de perda de classificação, equilibrando a precisão da previsão de classe no modelo.
hsv_h tune.uniform(0.0, 0.1) Intervalo de aumento de matiz que introduz variabilidade de cor para ajudar o modelo a generalizar.
hsv_s tune.uniform(0.0, 0.9) Intervalo de aumento de saturação que varia a intensidade da cor para melhorar a robustez.
hsv_v tune.uniform(0.0, 0.9) Intervalo de aumento do valor (brilho) que ajuda o modelo a ter um bom desempenho em várias condições de iluminação.
degrees tune.uniform(0.0, 45.0) Intervalo de aumento de rotação em graus, melhorando o reconhecimento de objetos rotacionados.
translate tune.uniform(0.0, 0.9) Intervalo de aumento de translação que desloca as imagens horizontal e verticalmente.
scale tune.uniform(0.0, 0.9) Intervalo de aumento de escala que simula objetos a diferentes distâncias.
shear tune.uniform(0.0, 10.0) Intervalo de aumento de cisalhamento em graus, simulando mudanças de perspectiva.
perspective tune.uniform(0.0, 0.001) Intervalo de aumento de perspectiva que simula mudanças de ponto de vista 3D.
flipud tune.uniform(0.0, 1.0) Probabilidade de aumento de inversão vertical, aumentando a diversidade do conjunto de dados.
fliplr tune.uniform(0.0, 1.0) Probabilidade de aumento de inversão horizontal, útil para objetos simétricos.
mosaic tune.uniform(0.0, 1.0) Probabilidade de aumento de mosaico que combina quatro imagens em uma amostra de treinamento.
mixup tune.uniform(0.0, 1.0) Probabilidade de aumento de Mixup que mistura duas imagens e seus rótulos.
cutmix tune.uniform(0.0, 1.0) Probabilidade de aumento Cutmix que combina regiões de imagem, mantendo as características locais, melhorando a detecção de objetos parcialmente ocluídos.
copy_paste tune.uniform(0.0, 1.0) Probabilidade de aumento de copiar e colar que transfere objetos entre imagens para aumentar a diversidade de instâncias.

Exemplo de Espaço de Busca Personalizado

Neste exemplo, demonstramos como usar um espaço de busca personalizado para ajuste de hiperparâmetros com Ray Tune e YOLO11. Ao fornecer um espaço de busca personalizado, você pode concentrar o processo de ajuste em hiperparâmetros específicos de interesse.

Utilização

from ray import tune

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

No trecho de código acima, criamos um modelo YOLO com os pesos pré-treinados "yolo11n.pt". Em seguida, chamamos o tune() método, especificando a configuração do conjunto de dados com "coco8.yaml". Fornecemos um espaço de busca personalizado para a taxa de aprendizado inicial lr0 usando 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 de ajuste como epochs=50.

Retomando uma Sessão de Ajuste de Hiperparâmetros Interrompida com Ray Tune

Você pode retomar uma sessão interrompida do Ray Tune passando resume=True. Opcionalmente, você pode passar o diretório name usado por Ray Tune em runs/{task} para retomar. Caso contrário, retomará a última sessão interrompida. Não precisa fornecer os iterations e space novamente, mas você precisa fornecer o restante dos argumentos de treinamento novamente, incluindo data e epochs.

Usando resume=True com model.tune()

from ultralytics import YOLO

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

# Resume previous run
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, resume=True)

# Resume Ray Tune run with name 'tune_exp_2'
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, name="tune_exp_2", resume=True)

Processamento dos Resultados do Ray Tune

Após executar um experimento de ajuste de hiperparâmetros com Ray Tune, você pode querer realizar várias análises sobre os resultados obtidos. Este guia o orientará pelos fluxos de trabalho comuns para processar e analisar esses resultados.

Carregando Resultados de Experimentos de Ajuste de um Diretório

Após executar o experimento de ajuste com tuner.fit(), você pode carregar os resultados de um diretório. Isso é útil, especialmente se você estiver realizando a análise após a saída do script de treinamento 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álise Básica no Nível do Experimento

Obtenha uma visão geral do desempenho das avaliações. Você pode verificar rapidamente se houve algum erro durante as avaliações.

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

Análise Básica no Nível da Tentativa

Acesse as configurações de hiperparâmetros de cada avaliação e as últimas métricas reportadas.

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

Plotagem de todo o histórico de métricas reportadas para um teste

Você pode plotar o histórico das métricas reportadas para cada tentativa 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, abordamos fluxos de trabalho comuns para analisar os resultados de experimentos executados com Ray Tune usando Ultralytics. As etapas principais incluem carregar os resultados do experimento de um diretório, realizar análises básicas no nível do experimento e no nível da avaliação e plotar métricas.

Explore mais a fundo consultando a página de documentação Analisar Resultados do Ray Tune para obter o máximo de seus experimentos de ajuste de hiperparâmetros.

FAQ

Como ajustar os hiperparâmetros do meu modelo YOLO11 usando o Ray Tune?

Para ajustar os hiperparâmetros do seu modelo Ultralytics YOLO11 usando o Ray Tune, siga estes passos:

  1. Instale os pacotes necessários:

    pip install -U ultralytics "ray[tune]"
    pip install wandb # optional for logging
    
  2. Carregue seu modelo YOLO11 e comece a ajustar:

    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)
    

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

Quais são os hiperparâmetros padrão para ajuste do YOLO11 com Ray Tune?

Ultralytics YOLO11 usa os seguintes hiperparâmetros padrão para ajuste com Ray Tune:

Parâmetro Intervalo de Valores Descrição
lr0 tune.uniform(1e-5, 1e-1) Taxa de aprendizado inicial
lrf tune.uniform(0.01, 1.0) Fator de taxa de aprendizagem final
momentum tune.uniform(0.6, 0.98) Momentum
weight_decay tune.uniform(0.0, 0.001) Decaimento do peso
warmup_epochs tune.uniform(0.0, 5.0) Épocas de aquecimento
box tune.uniform(0.02, 0.2) Peso da perda da caixa
cls tune.uniform(0.2, 4.0) Peso da perda da classe
hsv_h tune.uniform(0.0, 0.1) Intervalo de aumento de matiz
translate tune.uniform(0.0, 0.9) Intervalo de aumento de tradução

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

Como posso integrar o Weights & Biases com o ajuste do meu modelo YOLO11?

Para integrar o Weights & Biases (W&B) com o seu processo de ajuste do Ultralytics YOLO11:

  1. Instalar W&B:

    pip install wandb
    
  2. Modifique seu script de ajuste:

    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á que você monitore o processo de ajuste, rastreie as configurações de hiperparâmetros e visualize os resultados no W&B.

Por que devo usar o Ray Tune para otimização de hiperparâmetros com o YOLO11?

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

  • Estratégias de Busca Avançadas: Utiliza algoritmos como Otimização Bayesiana e HyperOpt para busca eficiente de parâmetros.
  • Paralelismo: Suporta a execução paralela de múltiplas tentativas, acelerando significativamente o processo de ajuste.
  • Parada Antecipada: Emprega estratégias como ASHA para terminar precocemente as tentativas de baixo desempenho, economizando recursos computacionais.

O Ray Tune integra-se perfeitamente com o Ultralytics YOLO11, fornecendo uma interface fácil de usar para ajustar os hiperparâmetros de forma eficaz. Para começar, consulte o guia de Ajuste de Hiperparâmetros.

Como posso definir um espaço de busca personalizado para ajuste de hiperparâmetros YOLO11?

Para definir um espaço de busca personalizado para o ajuste de hiperparâmetros do seu YOLO11 com 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)

Isso personaliza a gama de hiperparâmetros, como taxa de aprendizado inicial e momentum, a serem explorados durante o processo de ajuste. Para configurações avançadas, consulte a seção Exemplo de Espaço de Busca Personalizado.



📅 Criado há 1 ano ✏️ Atualizado há 1 mês

Comentários