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, descobrindo o conjunto ideal de hiperparâmetros. Isso envolve executar tentativas com diferentes hiperparâmetros e avaliar o desempenho de cada uma.
Acelere o ajuste com Ultralytics YOLO26 e Ray Tune#
Ultralytics YOLO26 incorpora o Ray Tune para a sintonia de hiperparâmetros, otimizando a otimização dos hiperparâmetros do modelo YOLO26. Com o Ray Tune, podes utilizar estratégias de busca avançadas, paralelismo e paragem antecipada para agilizar o processo de sintonia.
Ray Tune#
O Ray Tune é uma biblioteca de sintonia de hiperparâmetros concebida para eficiência e flexibilidade. Suporta várias estratégias de busca, paralelismo e estratégias de paragem antecipada, integrando-se perfeitamente com os frameworks de machine learning mais populares, incluindo o Ultralytics YOLO26.
Integração com Weights & Biases#
O YOLO26 também permite a integração opcional com o Weights & Biases para monitorizar o processo de sintonia.
Instalação#
Para instalar os pacotes necessários, execute:
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"
# Optionally install and enable W&B for per-trial logging
pip install wandb
yolo settings wandb=TrueUso#
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 a sintonia de hiperparâmetros com o Ray Tune. Aceita vários argumentos que te permitem personalizar o processo de sintonia. Abaixo encontras uma explicação detalhada de cada parâmetro:
| Parâmetro | Tipo | Descrição | Valor Padrão |
|---|---|---|---|
data | str | O YAML do conjunto de dados para executar o sintonizador, especificando os caminhos dos dados de treino e de validação de dados e outras configurações específicas do conjunto de dados. Em alternativa, a classificação aceita um diretório de conjunto de dados ou um nome de conjunto de dados incorporado (por exemplo, imagenet10). | |
space | dict, optional | Um dicionário definindo 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 a faixa 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_period | int, optional | O período de carência em épocas para o agendador ASHA no Ray Tune. O agendador não terminará nenhuma tentativa antes deste número de épocas, permitindo que o modelo tenha um treino mínimo antes de tomar uma decisão sobre a paragem antecipada. | 10 |
gpu_per_trial | int, optional | O número de GPUs que o Ray aloca para cada tentativa. Defina isto explicitamente para usar o treinamento em GPU; quando omitido, as tentativas não recebem recursos de GPU. | None |
iterations | int, optional | O número máximo de tentativas a executar 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_alg | str or Searcher, optional | Estratégia de busca do Ray Tune a utilizar. Podes passar um objeto de pesquisa do Ray diretamente ou usar uma string suportada como optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax ou random. Os pesquisadores baseados em strings usam automaticamente a métrica de tarefa predefinida e mode="max". Se não for fornecido, o Ray Tune recorre à sua estratégia de busca aleatória predefinida, BasicVariantGenerator. | None |
**train_args | dict, optional | Argumentos adicionais a passar para o método train() durante a sintonia. Estes argumentos podem incluir definições como o número de épocas de treino, o batch size e outras configurações específicas do treino. | {} |
Ao personalizar esses parâmetros, podes ajustar o processo de otimização de hiperparâmetros para atender às tuas necessidades específicas e aos recursos computacionais disponíveis.
Descrição do Espaço de Busca Padrão#
A tabela seguinte lista os parâmetros predefinidos do espaço de busca para a sintonia de hiperparâmetros no YOLO26 com o 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-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. |
lrf | tune.uniform(0.01, 1.0) | Fator de taxa de aprendizado final que determina quanto a taxa de aprendizado diminui até o final do treinamento. |
momentum | tune.uniform(0.7, 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 sobreajuste (overfitting) penalizando grandes valores de peso. |
warmup_epochs | tune.uniform(0.0, 5.0) | Número de épocas com taxa de aprendizado gradualmente crescente para estabilizar o início do treinamento. |
warmup_momentum | tune.uniform(0.0, 0.95) | Valor de momentum inicial que aumenta gradualmente durante o período de aquecimento (warmup). |
box | tune.uniform(1.0, 20.0) | Peso para o componente de perda da caixa delimitadora (bounding box), equilibrando a precisão de localização no modelo. |
cls | tune.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. |
cls_pw | tune.uniform(0.0, 1.0) | Potência de ponderação de classe, desde desativada (0.0) até ponderação de frequência inversa total (1.0). |
dfl | tune.uniform(0.4, 12.0) | Peso para o componente de regressão da distância da caixa, enfatizando a localização precisa da bounding box. |
hsv_h | tune.uniform(0.0, 0.1) | Faixa de aumento de matiz (hue) que introduz variabilidade de cor para ajudar o modelo a generalizar. |
hsv_s | tune.uniform(0.0, 0.9) | Faixa de aumento de saturação que varia a intensidade da cor para melhorar a robustez. |
hsv_v | tune.uniform(0.0, 0.9) | Faixa de aumento de valor (brilho) que ajuda o modelo a ter bom desempenho sob várias condições de iluminação. |
degrees | tune.uniform(0.0, 45.0) | Faixa de aumento de rotação em graus, melhorando o reconhecimento de objetos rotacionados. |
translate | tune.uniform(0.0, 0.9) | Faixa de aumento de translação que desloca as imagens horizontal e verticalmente. |
scale | tune.uniform(0.0, 0.95) | Faixa de aumento de escala que simula objetos a diferentes distâncias. |
shear | tune.uniform(0.0, 10.0) | Faixa de aumento de cisalhamento em graus, simulando mudanças de perspectiva. |
perspective | tune.uniform(0.0, 0.001) | Faixa 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 dataset. |
fliplr | tune.uniform(0.0, 1.0) | Probabilidade de aumento de inversão horizontal, útil para objetos simétricos. |
bgr | tune.uniform(0.0, 1.0) | Probabilidade de aumento de troca de canal BGR, ajudando com a invariância de cor. |
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 os seus rótulos. |
cutmix | tune.uniform(0.0, 1.0) | Probabilidade de aumento de cutmix que combina regiões de imagem mantendo características locais. |
copy_paste | tune.uniform(0.0, 1.0) | No modo flip, a fração de objetos elegíveis copiados para uma imagem; no modo mixup, também a probabilidade de executá-lo. |
close_mosaic | tune.randint(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, podes concentrar o processo de ajuste em hiperparâmetros específicos de interesse.
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 exemplo 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 conjunto de dados com "coco8.yaml". Fornecemos um espaço de busca personalizado para a taxa de aprendizagem inicial lr0 usando um dicionário com a chave "lr0" e o valor tune.uniform(1e-5, 1e-2). Por fim, passamos argumentos de treino adicionais, como o número de épocas diretamente para o método de sintonia como epochs=50.
Exemplo de Algoritmo de Busca#
Podes selecionar uma estratégia de busca do Ray Tune por nome. Para algoritmos de busca baseados em strings, o Ultralytics utilizará automaticamente a métrica de otimização predefinida da tarefa atual e mode="max". Se search_alg não for fornecido, o Ray Tune utiliza a sua estratégia de busca aleatória predefinida, BasicVariantGenerator.
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 precisares de personalizar o amostrador do pesquisador ou substituir a sua métrica e modo de otimização, passa um objeto de pesquisa do Ray Tune instanciado em vez de uma string.
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 o Ray Tune#
Podes retomar uma sessão do Ray Tune interrompida passando resume=True. Podes opcionalmente passar o diretório name utilizado pelo Ray Tune em runs/{task} para retomar. Caso contrário, será retomada a última sessão interrompida. Não precisas de fornecer iterations e space novamente, mas tens de fornecer o resto dos argumentos de treino novamente, incluindo data e epochs.
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 o Ray Tune, podes querer realizar várias análises nos resultados obtidos. Este guia vai orientar-te através de fluxos de trabalho comuns para processar e analisar esses resultados.
Carregando Resultados de Experimentos do Tune a partir de um Diretório#
Após executar a experiência de sintonia com tuner.fit(), podes carregar os resultados a partir de um diretório. Isto é útil, especialmente se estiveres a realizar a análise após o script de treino 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 ao Nível do Experimento#
Obtém uma visão geral de como os testes se comportaram. Podes verificar rapidamente se ocorreram erros durante os testes.
if result_grid.errors:
print("One or more trials failed!")
else:
print("No errors!")Análise Básica ao Nível do Teste#
Acede às configurações individuais de hiperparâmetros de cada teste e às últimas métricas reportadas.
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")Plotar todo o histórico de métricas reportadas para um teste#
Podes plotar o histórico de métricas reportadas 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. Os passos principais incluem carregar os resultados do experimento de um diretório, realizar análises básicas ao nível do experimento e do teste, e plotar métricas.
Explora mais consultando a página de documentação Analyze Results do Ray Tune para aproveitares ao máximo as tuas experiências de sintonia de hiperparâmetros.
FAQ#
Para ajustar os hiperparâmetros do teu modelo Ultralytics YOLO26 usando o Ray Tune, segue estes passos:
-
Instala os pacotes necessários:
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging yolo settings wandb=True -
Carrega o teu modelo YOLO26 e inicia 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)
Isto utiliza as estratégias de busca avançadas e o paralelismo do Ray Tune para otimizar eficientemente os hiperparâmetros do teu modelo. Para mais informações, consulta a documentação do Ray Tune.
-
O Ultralytics YOLO26 usa os seguintes hiperparâmetros padrão para ajuste com o Ray Tune:
Parâmetro Intervalo de Valores Descrição lr0tune.uniform(1e-5, 1e-2)Taxa de aprendizagem inicial lrftune.uniform(0.01, 1.0)Fator da taxa de aprendizagem final momentumtune.uniform(0.7, 0.98)Momentum weight_decaytune.uniform(0.0, 0.001)Weight decay warmup_epochstune.uniform(0.0, 5.0)Épocas de warmup boxtune.uniform(1.0, 20.0)Peso da perda de BBox clstune.uniform(0.1, 4.0)Peso da perda de classe cls_pwtune.uniform(0.0, 1.0)Potência de ponderação de classe dfltune.uniform(0.4, 12.0)Peso da perda de distância da caixa hsv_htune.uniform(0.0, 0.1)Intervalo de aumento de matiz (Hue) translatetune.uniform(0.0, 0.9)Intervalo de aumento de translação Estes hiperparâmetros podem ser personalizados para se adequarem às tuas necessidades específicas. Para uma lista completa e mais detalhes, consulta o guia Hyperparameter Tuning.
Para integrar o Weights & Biases (W&B) com o teu processo de ajuste do Ultralytics YOLO26:
-
Instala o W&B:
pip install wandb wandb login yolo settings wandb=True -
Executar o sintonizador:
from ultralytics import YOLO # Load YOLO model model = YOLO("yolo26n.pt") # Each Ray trial creates its own W&B run in this project result_grid = model.tune(data="coco8.yaml", project="YOLO-Tuning", 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.
-
O Ray Tune oferece inúmeras vantagens para a otimização de hiperparâmetros:
- Estratégias de Busca Avançadas: Utiliza algoritmos como Bayesian Optimization e HyperOpt para uma busca 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 o 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 sintonizar hiperparâmetros de forma eficaz. Para começar, consulta o guia Hyperparameter Tuning.
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 ser explorado durante o processo de sintonia. Para configurações avançadas, consulta a secção Custom Search Space Example.