Saltar para o conteúdo

Afinação eficiente de hiperparâmetros com Ray Tune e YOLO11

A afinação de hiperparâmetros é vital para atingir o desempenho máximo do modelo, descobrindo o conjunto ótimo de hiperparâmetros. Isto envolve a execução de ensaios com diferentes hiperparâmetros e a avaliação do desempenho de cada ensaio.

Acelerar a afinação com Ultralytics YOLO11 e Ray Tune

Ultralytics YOLO11 incorpora o Ray Tune para ajuste de hiperparâmetros, simplificando a otimização dos hiperparâmetros do modelo YOLO11 . Com o Ray Tune, é possível utilizar estratégias de pesquisa avançadas, paralelismo e paragem antecipada para acelerar o processo de afinação.

Ray Tune

Ray Tune Descrição geral

Ray Tune é uma biblioteca de ajuste de hiperparâmetros concebida para ser eficiente e flexível. Suporta várias estratégias de pesquisa, paralelismo e estratégias de paragem antecipada, e integra-se perfeitamente com estruturas populares de aprendizagem automática, incluindo Ultralytics YOLO11 .

Integração com Weights & Biases

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

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() em YOLO11 fornece uma interface fácil de usar para o ajuste de hiperparâmetros com o Ray Tune. Aceita vários argumentos que lhe permitem personalizar o processo de afinação. Segue-se uma explicação pormenorizada de cada parâmetro:

Parâmetro Tipo Descrição Valor por defeito
data str O ficheiro de configuração do conjunto de dados (em formato YAML) para executar o sintonizador. Esse arquivo deve especificar os caminhos de dados de treinamento e validação, bem como outras configurações específicas do conjunto de dados.
space dict, optional Um dicionário que define o espaço de pesquisa 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 explorar durante o ajuste. Se não for fornecido, YOLO11 usa um espaço de pesquisa padrão com vários hiperparâmetros.
grace_period int, optional O período de carência em épocas para o programador ASHA no Ray Tune. O programador não terminará nenhum ensaio antes deste número de épocas, permitindo que o modelo tenha algum treino mínimo antes de tomar uma decisão sobre a paragem antecipada. 10
gpu_per_trial int, optional O 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. Nenhum
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 afinação não é executado indefinidamente. 10
**train_args dict, optional Argumentos adicionais para passar para o train() durante a afinação. Estes argumentos podem incluir definições como o número de épocas de treino, tamanho do lotee outras configurações específicas da formação. {}

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

Espaço de pesquisa predefinido Descrição

A tabela a seguir lista os parâmetros padrão do espaço de pesquisa para o 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 de valores Descrição
lr0 tune.uniform(1e-5, 1e-1) Taxa de aprendizagem inicial
lrf tune.uniform(0.01, 1.0) Fator de taxa de aprendizagem final
momentum tune.uniform(0.6, 0.98) Momento
weight_decay tune.uniform(0.0, 0.001) Diminuição do peso
warmup_epochs tune.uniform(0.0, 5.0) Épocas de aquecimento
warmup_momentum tune.uniform(0.0, 0.95) Momento de aquecimento
box tune.uniform(0.02, 0.2) Caixa perda de peso
cls tune.uniform(0.2, 4.0) Perda de peso por classe
hsv_h tune.uniform(0.0, 0.1) Gama de aumento de tonalidade
hsv_s tune.uniform(0.0, 0.9) Gama de aumento da saturação
hsv_v tune.uniform(0.0, 0.9) Valor (brilho) intervalo de aumento
degrees tune.uniform(0.0, 45.0) Amplitude de aumento da rotação (graus)
translate tune.uniform(0.0, 0.9) Gama de aumentos de tradução
scale tune.uniform(0.0, 0.9) Gama de aumento de escala
shear tune.uniform(0.0, 10.0) Intervalo de aumento de cisalhamento (graus)
perspective tune.uniform(0.0, 0.001) Gama de aumentos de perspetiva
flipud tune.uniform(0.0, 1.0) Probabilidade de aumento da rotação vertical
fliplr tune.uniform(0.0, 1.0) Probabilidade de aumento da viragem horizontal
mosaic tune.uniform(0.0, 1.0) Probabilidade de aumento do mosaico
mixup tune.uniform(0.0, 1.0) Probabilidade de aumento da mistura
copy_paste tune.uniform(0.0, 1.0) Probabilidade de aumento de copiar-colar

Exemplo de espaço de pesquisa personalizado

Neste exemplo, demonstramos como usar um espaço de pesquisa personalizado para ajuste de hiperparâmetros com Ray Tune e YOLO11. Ao fornecer um espaço de pesquisa personalizado, pode concentrar o processo de afinação 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". De seguida, chamamos o 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 de resultados de afinação de raios

Depois de executar uma experiência de ajuste de hiperparâmetros com o Ray Tune, poderá querer efetuar várias análises dos resultados obtidos. Este guia o guiará por 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 efetuar a experiência de afinação com tuner.fit()pode carregar os resultados a partir de um diretório. Isto é útil, especialmente se estiver a efetuar a análise após o script de formação 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

Obter uma visão geral do desempenho dos ensaios. Pode 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 a nível do ensaio

Aceder 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

Pode 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.

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

FAQ

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

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

  1. Instalar os pacotes necessários:

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

    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)
    

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

Quais são os hiperparâmetros predefinidos para YOLO11 afinação com o Ray Tune?

Ultralytics YOLO11 utiliza os seguintes hiperparâmetros predefinidos para afinação com o Ray Tune:

Parâmetro Intervalo de valores Descrição
lr0 tune.uniform(1e-5, 1e-1) Taxa de aprendizagem inicial
lrf tune.uniform(0.01, 1.0) Fator de taxa de aprendizagem final
momentum tune.uniform(0.6, 0.98) Momento
weight_decay tune.uniform(0.0, 0.001) Diminuição do peso
warmup_epochs tune.uniform(0.0, 5.0) Épocas de aquecimento
box tune.uniform(0.02, 0.2) Caixa perda de peso
cls tune.uniform(0.2, 4.0) Perda de peso por classe
hsv_h tune.uniform(0.0, 0.1) Gama de aumento de tonalidade
translate tune.uniform(0.0, 0.9) Gama de aumentos de tradução

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

Como posso integrar Weights & Biases com a minha afinação do modelo YOLO11 ?

Para integrar Weights & Biases (W&B) no seu processo de afinação Ultralytics YOLO11 :

  1. Instalar a W&B:

    pip install wandb
    
  2. Modificar o 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-lhe-á monitorizar o processo de afinação, seguir as configurações dos hiperparâmetros e visualizar os resultados em W&B.

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

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

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

O Ray Tune integra-se perfeitamente com Ultralytics YOLO11 , fornecendo uma interface fácil de utilizar para afinar hiperparâmetros de forma eficaz. Para começar, consulte o guia Efficient Hyperparameter Tuning with Ray Tune e YOLO11.

Como é que posso definir um espaço de pesquisa personalizado para YOLO11 afinação de hiperparâmetros?

Para definir um espaço de pesquisa personalizado para o seu YOLO11 ajuste de hiperparâmetros com o 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 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, consulte a secção Exemplo de espaço de pesquisa personalizado.

📅C riado há 1 ano ✏️ Atualizado há 20 dias

Comentários