Ajuste de hiperparâmetros eficiente com Ray Tune e YOLO26

O ajuste de hiperparâmetros é vital para alcançar o desempenho máximo do modelo ao descobrir o conjunto ideal de hiperparâmetros. Isso envolve executar testes com diferentes hiperparâmetros e avaliar o desempenho de cada teste.

Acelere o ajuste com Ultralytics YOLO26 e Ray Tune

Ultralytics YOLO26 incorpora o Ray Tune para ajuste de hiperparâmetros, simplificando a otimização dos hiperparâmetros do modelo YOLO26. Com o Ray Tune, você pode utilizar estratégias de busca avançadas, paralelismo e parada antecipada para agilizar o processo de ajuste.

Ray Tune

Ray Tune hyperparameter optimization workflow

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

Integração com Weights & Biases

O YOLO26 também permite a integração opcional com Weights & Biases para monitorar 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 YOLO26n model
model = YOLO("yolo26n.pt")

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

Parâmetros do método tune()

O método tune() no YOLO26 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âmetroTipoDescriçãoValor Padrão
datastrO arquivo de configuração do dataset (em formato YAML) para executar o tuner. Este arquivo deve especificar os caminhos de treinamento e dados de validação, bem como outras configurações específicas do dataset.
spacedict, optionalUm dicionário que define o espaço de busca de hiperparâmetros para o 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 for fornecido, o YOLO26 usa um espaço de busca padrão com vários hiperparâmetros.
grace_periodint, optionalO 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 um treinamento mínimo antes de tomar uma decisão sobre a parada antecipada.10
gpu_per_trialint, optionalO número de GPUs a serem alocadas por teste durante o ajuste. Isso ajuda a gerenciar o uso da GPU, particularmente em ambientes com múltiplas GPUs. Se não for fornecido, o tuner usará todas as GPUs disponíveis.None
iterationsint, optionalO número máximo de testes a serem executados 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
search_algstr or Searcher, optionalEstratégia de busca do Ray Tune a ser usada. Você pode passar um objeto de busca Ray diretamente ou usar uma string suportada, como optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax ou random. Buscadores baseados em string usam automaticamente a métrica de tarefa padrão e mode="max". Se não for fornecido, o Ray Tune volta para sua estratégia de busca aleatória padrão, BasicVariantGenerator.None
**train_argsdict, optionalArgumentos adicionais para passar ao método train() durante o ajuste. Esses argumentos podem incluir configurações como o número de épocas de treinamento, tamanho do 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 do espaço de busca padrão para o ajuste de hiperparâmetros no YOLO26 com o Ray Tune. Cada parâmetro tem um intervalo de valores específico definido por tune.uniform().

ParâmetroIntervaloDescrição
lr0tune.uniform(1e-5, 1e-2)Taxa de aprendizado inicial que controla o tamanho do passo durante a otimização. Valores mais altos aceleram o treinamento, mas podem causar instabilidade.
lrftune.uniform(0.01, 1.0)Fator de taxa de aprendizado final que determina quanto a taxa de aprendizado diminui até o final do treinamento.
momentumtune.uniform(0.7, 0.98)Fator de momentum para o otimizador que ajuda a acelerar o treinamento e superar mínimos locais.
weight_decaytune.uniform(0.0, 0.001)Parâmetro de regularização que evita o overfitting ao penalizar valores de peso grandes.
warmup_epochstune.uniform(0.0, 5.0)Número de épocas com taxa de aprendizado aumentando gradualmente para estabilizar o início do treinamento.
warmup_momentumtune.uniform(0.0, 0.95)Valor de momentum inicial que aumenta gradualmente durante o período de warmup.
boxtune.uniform(1.0, 20.0)Peso para o componente de perda da caixa delimitadora (bounding box), equilibrando a precisão da localização no modelo.
clstune.uniform(0.1, 4.0)Peso para o componente de perda de classificação, equilibrando a precisão da previsão de classe no modelo.
dfltune.uniform(0.4, 12.0)Peso para o componente Distribution Focal Loss, enfatizando a localização precisa da caixa delimitadora.
hsv_htune.uniform(0.0, 0.1)Intervalo de aumento de matiz (hue) que introduz variabilidade de cor para ajudar o modelo a generalizar.
hsv_stune.uniform(0.0, 0.9)Intervalo de aumento de saturação que varia a intensidade da cor para melhorar a robustez.
hsv_vtune.uniform(0.0, 0.9)Intervalo de aumento de valor (brilho) que ajuda o modelo a ter bom desempenho sob várias condições de iluminação.
degreestune.uniform(0.0, 45.0)Intervalo de aumento de rotação em graus, melhorando o reconhecimento de objetos rotacionados.
translatetune.uniform(0.0, 0.9)Intervalo de aumento de translação que desloca as imagens horizontal e verticalmente.
scaletune.uniform(0.0, 0.95)Intervalo de aumento de escala que simula objetos em diferentes distâncias.
sheartune.uniform(0.0, 10.0)Intervalo de aumento de cisalhamento (shear) em graus, simulando mudanças de perspectiva.
perspectivetune.uniform(0.0, 0.001)Intervalo de aumento de perspectiva que simula mudanças de ponto de vista 3D.
flipudtune.uniform(0.0, 1.0)Probabilidade de aumento de inversão vertical, aumentando a diversidade do dataset.
fliplrtune.uniform(0.0, 1.0)Probabilidade de aumento de inversão horizontal, útil para objetos simétricos.
bgrtune.uniform(0.0, 1.0)Probabilidade de aumento de troca de canal BGR, ajudando na invariância de cor.
mosaictune.uniform(0.0, 1.0)Probabilidade de aumento de mosaico que combina quatro imagens em uma amostra de treinamento.
mixuptune.uniform(0.0, 1.0)Probabilidade de aumento de Mixup que mistura duas imagens e seus rótulos.
cutmixtune.uniform(0.0, 1.0)Probabilidade de aumento de Cutmix que combina regiões da imagem mantendo características locais.
copy_pastetune.uniform(0.0, 1.0)Probabilidade de aumento de copiar e colar (copy-paste) que transfere objetos entre imagens para aumentar a diversidade de instâncias.
close_mosaictune.randint(0.0, 11)Desativa o mosaico nas últimas N épocas para estabilizar o treinamento antes da conclusão.

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 YOLO26. Ao fornecer um espaço de busca personalizado, você pode concentrar o processo de ajuste em hiperparâmetros de interesse específicos.

Utilização
from ray import tune

from ultralytics import YOLO

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

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

No trecho de código acima, criamos um modelo YOLO com os pesos pré-treinados "yolo26n.pt". Em seguida, chamamos o método tune(), especificando a configuração do dataset 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-2). Finalmente, passamos argumentos de treinamento adicionais, como o número de épocas, diretamente para o método de ajuste como epochs=50.

Exemplo de algoritmo de busca

Você pode selecionar uma estratégia de busca do Ray Tune por nome. Para algoritmos de busca baseados em string, o Ultralytics usará automaticamente a métrica de otimização padrão da tarefa atual e mode="max". Se search_alg não for fornecido, o Ray Tune usa sua estratégia de busca aleatória padrão, BasicVariantGenerator.

Usando a string `search_alg` com `model.tune()`
from ultralytics import YOLO

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

result_grid = model.tune(
    data="coco8.yaml",
    epochs=50,
    search_alg="optuna",
    use_ray=True,
)

Se você precisar personalizar o amostrador do buscador ou substituir sua métrica e modo de otimização, passe um objeto de busca do Ray Tune instanciado em vez de uma string.

Usando o objeto `OptunaSearch` com `model.tune()`
from ray.tune.search.optuna import OptunaSearch

from ultralytics import YOLO

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

# Define a searcher
searcher = OptunaSearch(
    metric="metrics/mAP50-95(B)",
    mode="max",
)

result_grid = model.tune(
    data="coco8.yaml",
    epochs=50,
    search_alg=searcher,
    use_ray=True,
)

Retomando uma sessão de ajuste de hiperparâmetros interrompida com Ray Tune

Você pode retomar uma sessão do Ray Tune interrompida passando resume=True. Opcionalmente, você pode passar o diretório name usado pelo Ray Tune em runs/{task} para retomar. Caso contrário, ele retomará a última sessão interrompida. Você não precisa fornecer iterations e space novamente, mas 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("yolo26n.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)

Processando 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 levará 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 o script de treinamento inicial ter terminado.

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 em nível de experimento

Obtenha uma visão geral de como os testes se saíram. Você pode verificar rapidamente se houve algum erro durante os testes.

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

Análise básica em nível de teste

Acesse as configurações de hiperparâmetros de testes individuais e as últimas métricas relatadas.

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

Plotando todo o histórico de métricas relatadas para um teste

Você pode plotar o histórico de métricas relatadas para cada teste 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

Neste guia, cobrimos 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 em nível de experimento e de teste, e plotar métricas.

Explore mais consultando a página de documentação Analyze Results do Ray Tune para aproveitar ao máximo seus experimentos de ajuste de hiperparâmetros.

FAQ

Como ajusto os hiperparâmetros do meu modelo YOLO26 usando Ray Tune?

Para ajustar os hiperparâmetros do seu modelo Ultralytics YOLO26 usando Ray Tune, siga estas etapas:

  1. Instale os pacotes necessários:

    pip install -U ultralytics "ray[tune]"
    pip install wandb # optional for logging
  2. Carregue seu modelo YOLO26 e comece o ajuste:

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

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

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

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

ParâmetroIntervalo de ValoresDescrição
lr0tune.uniform(1e-5, 1e-2)Taxa de aprendizado inicial
lrftune.uniform(0.01, 1.0)Fator de taxa de aprendizado final
momentumtune.uniform(0.7, 0.98)Momentum
weight_decaytune.uniform(0.0, 0.001)Weight decay
warmup_epochstune.uniform(0.0, 5.0)Warmup epochs
boxtune.uniform(1.0, 20.0)Box loss weight
clstune.uniform(0.1, 4.0)Class loss weight
dfltune.uniform(0.4, 12.0)DFL loss weight
hsv_htune.uniform(0.0, 0.1)Hue augmentation range
translatetune.uniform(0.0, 0.9)Translation augmentation range

Estes hiperparâmetros podem ser personalizados para atender às tuas necessidades específicas. Para uma lista completa e mais detalhes, consulta o guia de Hyperparameter Tuning.

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

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

  1. Instala o W&B:

    pip install wandb
  2. Modifica o teu script de ajuste:

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

Esta configuração permitir-te-á monitorizar o processo de ajuste, rastrear configurações de hiperparâmetros e visualizar resultados no W&B.

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

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

  • Estratégias de Pesquisa Avançadas: Utiliza algoritmos como Bayesian Optimization e HyperOpt para uma pesquisa eficiente de parâmetros.
  • Paralelismo: Suporta a execução paralela de múltiplos testes, acelerando significativamente o processo de ajuste.
  • Paragem Precoce (Early Stopping): Emprega estratégias como ASHA para terminar precocemente testes com baixo desempenho, poupando recursos computacionais.

O Ray Tune integra-se perfeitamente com o Ultralytics YOLO26, fornecendo uma interface fácil de usar para ajustar hiperparâmetros de forma eficaz. Para começar, consulta o guia de Hyperparameter Tuning.

Como posso definir um espaço de pesquisa personalizado para o ajuste de hiperparâmetros do YOLO26?

Para definir um espaço de pesquisa personalizado para o teu ajuste de hiperparâmetros do YOLO26 com o Ray Tune:

from ray import tune

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
search_space = {"lr0": tune.uniform(1e-5, 1e-2), "momentum": tune.uniform(0.7, 0.98)}
result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)

Isto personaliza o intervalo de hiperparâmetros, como a taxa de aprendizagem inicial e o momento, a serem explorados durante o processo de ajuste. Para configurações avançadas, consulta a secção Custom Search Space Example.

Comentários