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
Neste guia, abordamos fluxos de trabalho comuns para analisar os resultados de experimentos executados com o Ray Tune usando Ultralytics. As principais etapas incluem o carregamento dos resultados do experimento de um diretório, a realização de análises básicas no nível do experimento e no nível da tentativa e a plotagem de 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 loggingCarregue 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 wandbModifique 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.