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
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:
-
Instale os pacotes necessários:
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging
-
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:
-
Instalar W&B:
pip install wandb
-
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.