Ajuste eficiente de hiperparâmetros com Ray Tune e YOLO26#
O ajuste de hiperparâmetros é essencial para alcançar o melhor desempenho do modelo, pois permite descobrir o conjunto ideal de hiperparâmetros. Isso envolve executar experimentos com diferentes hiperparâmetros e avaliar o desempenho de cada um.
Acelere o ajuste com Ultralytics YOLO26 e Ray Tune#
Ultralytics YOLO26 incorpora o Ray Tune para ajustar hiperparâmetros, simplificando a otimização dos hiperparâmetros do modelo YOLO26. Com o Ray Tune, você pode usar estratégias avançadas de busca, paralelismo e interrupção antecipada para acelerar o processo de ajuste.
Ray Tune#
Ray Tune é uma biblioteca de ajuste de hiperparâmetros projetada para oferecer eficiência e flexibilidade. Ela oferece suporte a várias estratégias de busca, paralelismo e estratégias de interrupção antecipada, além de se integrar perfeitamente a frameworks populares de aprendizado de máquina, incluindo Ultralytics YOLO26.
Integração com Weights & Biases#
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, executa:
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]" optuna
# Optionally install and enable W&B for per-trial logging
pip install wandb
yolo settings wandb=TrueUso#
from ultralytics import YOLO
# Carregar um modelo YOLO26n
model = YOLO("yolo26n.pt")
# Iniciar o ajuste dos hiperparâmetros para o treinamento de YOLO26n no conjunto de dados COCO8
result_grid = model.tune(data="coco8.yaml", use_ray=True)Parâmetros do método tune()#
O método tune() no YOLO26 oferece uma interface fácil de usar para ajustar hiperparâmetros com o Ray Tune. Ele aceita vários argumentos que permitem personalizar o processo de ajuste. A seguir, explicamos cada parâmetro em detalhes:
| Parâmetro | Tipo | Descrição | Valor padrão |
|---|---|---|---|
data | str | O YAML do conjunto de dados usado pelo ajustador, que especifica os caminhos dos dados de validação e de treinamento, além de outras configurações específicas do conjunto de dados. Para classificação, use um diretório de conjunto de dados ou o nome de um conjunto de dados integrado (por exemplo, imagenet10). | |
space | dict, optional | Um dicionário que define o espaço de busca de hiperparâmetros para o Ray Tune. Cada chave corresponde ao nome de um hiperparâmetro, e o valor especifica o intervalo de valores a explorar durante o ajuste. Se não for fornecido, YOLO26 usa um espaço de busca padrão com vários hiperparâmetros. | |
grace_period | int, optional | O período de tolerância, em épocas, para o agendador ASHA no Ray Tune. O agendador não encerrará nenhum experimento antes desse número de épocas, permitindo que o modelo tenha um período mínimo de treinamento antes de decidir pela interrupção antecipada. | 10 |
gpu_per_trial | int, optional | O número de GPUs que o Ray aloca para cada experimento. Defina esse valor explicitamente para usar o treinamento com GPU; se omitido, os experimentos não receberão recursos de GPU. | None |
iterations | int, optional | O número máximo de experimentos a executar durante o ajuste. Esse 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. | 300 |
search_alg | str or Searcher, optional | A estratégia de busca do Ray Tune a ser usada. Você pode passar diretamente um objeto de mecanismo de busca do Ray ou usar uma string compatível, como optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax ou random. Os mecanismos de busca baseados em strings usam automaticamente a métrica de tarefa padrão e mode="max". Por padrão, é usado o TPE multivariado do Optuna com sugestões que levam o paralelismo em conta. | "optuna" |
**train_args | dict, optional | Argumentos adicionais a serem passados ao método train() durante o ajuste. Esses argumentos podem incluir configurações como o número de épocas de treinamento, o tamanho do lote e outras configurações específicas do treinamento. | {} |
Ao personalizar esses parâmetros, você pode ajustar o processo de otimização de hiperparâmetros à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 padrão do espaço de busca 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(), exceto close_mosaic, que usa tune.randint().
| 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 final da taxa de aprendizado que determina o quanto ela diminui até o fim do treinamento. |
momentum | tune.uniform(0.7, 0.98) | Fator de momentum do otimizador, que ajuda a acelerar o treinamento e a superar mínimos locais. |
weight_decay | tune.uniform(0.0, 0.001) | Parâmetro de regularização que evita o sobreajuste penalizando valores altos dos pesos. |
warmup_epochs | tune.uniform(0.0, 5.0) | Número de épocas com aumento gradual da taxa de aprendizado para estabilizar o início do treinamento. |
warmup_momentum | tune.uniform(0.0, 0.95) | Valor inicial do momentum, que aumenta gradualmente durante o período de aquecimento. |
box | tune.uniform(1.0, 20.0) | Peso do componente de perda da caixa delimitadora, que equilibra a precisão da localização no modelo. |
cls | tune.uniform(0.1, 4.0) | Peso do componente de perda de classificação, que equilibra a precisão da predição de classes no modelo. |
cls_pw | tune.uniform(0.0, 1.0) | Potência de ponderação das classes, de desativada (0.0) à ponderação completa pelo inverso da frequência (1.0). |
dfl | tune.uniform(0.4, 12.0) | Peso do componente de regressão da distância da caixa, que prioriza a localização precisa das caixas delimitadoras. |
hsv_h | tune.uniform(0.0, 0.1) | Intervalo de aumento de matiz que introduz variação de cores para ajudar o modelo a generalizar. |
hsv_s | tune.uniform(0.0, 0.9) | Intervalo de aumento de saturação, que varia a intensidade das cores para melhorar a robustez. |
hsv_v | tune.uniform(0.0, 0.9) | Intervalo de aumento do valor (brilho), que ajuda o modelo a funcionar em diversas condições de iluminação. |
degrees | tune.uniform(0.0, 45.0) | Intervalo de aumento de rotação em graus, que melhora o reconhecimento de objetos girados. |
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.95) | 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, que simula mudanças de perspectiva. |
perspective | tune.uniform(0.0, 0.001) | Intervalo de aumento de perspectiva que simula mudanças de ponto de vista em 3D. |
flipud | tune.uniform(0.0, 1.0) | Probabilidade de aumento por inversão vertical, que amplia a diversidade do conjunto de dados. |
fliplr | tune.uniform(0.0, 1.0) | Probabilidade de aumento por inversão horizontal, útil para objetos simétricos. |
bgr | tune.uniform(0.0, 1.0) | Probabilidade de aumento por troca dos canais BGR, que ajuda a obter invariância de cor. |
mosaic | tune.uniform(0.0, 1.0) | Probabilidade de aumento Mosaic, que combina quatro imagens em uma amostra de treinamento. |
mixup | tune.uniform(0.0, 1.0) | Probabilidade de aumento Mixup, que combina duas imagens e seus rótulos. |
cutmix | tune.uniform(0.0, 1.0) | Probabilidade de aumento Cutmix, que combina regiões de imagens preservando as 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 executar o processo. |
close_mosaic | tune.randint(0, 11) | Desativa o Mosaic nas últimas N épocas para estabilizar o treinamento antes de sua conclusão. |
Exemplo de espaço de busca personalizado#
Neste exemplo, mostramos como usar um espaço de busca personalizado para ajustar hiperparâmetros com o Ray Tune e o YOLO26. Ao fornecer um espaço de busca personalizado, você pode concentrar o processo de ajuste nos hiperparâmetros específicos que deseja otimizar.
from ray import tune
from ultralytics import YOLO
# Define um modelo YOLO
model = YOLO("yolo26n.pt")
# Executar o Ray Tune no modelo
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() e especificamos 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-2). Por fim, passamos argumentos adicionais de treinamento, como o número de épocas, diretamente ao método de ajuste como epochs=50.
Exemplo de algoritmo de busca#
Você pode selecionar uma estratégia de busca do Ray Tune pelo nome. Para algoritmos de busca baseados em strings, 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 Ultralytics usará o TPE multivariado do Optuna com sugestões que levam o paralelismo em conta.
from ultralytics import YOLO
# Define um modelo YOLO
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 mecanismo de busca ou substituir a métrica e o modo de otimização, passe um objeto instanciado do mecanismo de busca do Ray Tune em vez de uma string.
from ray.tune.search.optuna import OptunaSearch
from ultralytics import YOLO
# Define um modelo YOLO
model = YOLO("yolo26n.pt")
# Definir um mecanismo de busca
searcher = OptunaSearch(
metric="metrics/mAP50-95(B)",
mode="max",
)
result_grid = model.tune(
data="coco8.yaml",
epochs=50,
search_alg=searcher,
use_ray=True,
)Retomar uma sessão de ajuste de hiperparâmetros interrompida com o Ray Tune#
Você pode retomar uma sessão interrompida do Ray Tune passando resume=True. Opcionalmente, você pode passar o diretório name usado pelo Ray Tune em runs/{task} para retomar a sessão. Caso contrário, a última sessão interrompida será retomada. Não é necessário fornecer novamente iterations e space, mas você precisa fornecer novamente os demais argumentos de treinamento, incluindo data e epochs.
from ultralytics import YOLO
# Define um modelo YOLO
model = YOLO("yolo26n.pt")
# Retoma a execução anterior
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, resume=True)
# Retomar a execução do Ray Tune com o nome 'tune_exp_2'
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, name="tune_exp_2", resume=True)Processar os resultados do Ray Tune#
Após executar um experimento de ajuste de hiperparâmetros com o Ray Tune, talvez você queira realizar várias análises dos resultados obtidos. Este guia apresenta os fluxos de trabalho comuns para processar e analisar esses resultados.
Carregar os resultados do experimento do Tune a partir de um diretório#
model.tune(use_ray=True) retorna um Ray ResultGrid e salva o experimento em runs/{task}/tune ou no diretório name que você especificou. Para carregar esses resultados depois que o script original tiver sido encerrado, retome a sessão; isso restaura os experimentos salvos e retorna o mesmo ResultGrid:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
result_grid = model.tune(data="coco8.yaml", epochs=50, use_ray=True, resume=True)Análise básica no nível do experimento#
Obtenha uma visão geral do desempenho dos experimentos. Você pode verificar rapidamente se ocorreram erros durante a execução.
if result_grid.errors:
print("One or more trials failed!")
else:
print("No errors!")Análise básica no nível do experimento individual#
Acesse as configurações de hiperparâmetros de cada experimento 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}")Traçar o histórico completo das métricas relatadas para um experimento#
Você pode traçar o histórico das métricas relatadas para cada experimento e ver como elas 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["metrics/mAP50-95(B)"],
label=f"Trial {i}",
)
plt.xlabel("Training Iterations")
plt.ylabel("mAP50-95")
plt.legend()
plt.show()Resumo#
Neste guia, abordamos fluxos de trabalho comuns para analisar os resultados de experimentos executados com o Ray Tune usando o Ultralytics. As principais etapas incluem carregar os resultados do experimento a partir de um diretório, realizar análises básicas no nível do experimento e dos experimentos individuais e traçar as métricas.
Explore mais a fundo a página da documentação do Ray Tune sobre análise de resultados para aproveitar ao máximo seus experimentos de ajuste de hiperparâmetros.
Perguntas frequentes#
Para ajustar os hiperparâmetros do seu modelo Ultralytics YOLO26 usando o Ray Tune, siga estas etapas:
-
Instale os pacotes necessários:
pip install -U ultralytics "ray[tune]" optuna pip install wandb # optional for logging yolo settings wandb=True -
Carregue seu modelo YOLO26 e comece o ajuste:
from ultralytics import YOLO # Carrega um modelo YOLO26 model = YOLO("yolo26n.pt") # Iniciar o ajuste com o conjunto de dados COCO8 result_grid = model.tune(data="coco8.yaml", use_ray=True)
Isso usa as estratégias avançadas de busca e o paralelismo do Ray Tune para otimizar os hiperparâmetros do seu modelo com eficiência. Para mais informações, consulte a documentação do Ray Tune.
-
O Ultralytics YOLO26 usa os seguintes hiperparâmetros padrão para o ajuste com o Ray Tune:
Parâmetro Intervalo de valores Descrição lr0tune.uniform(1e-5, 1e-2)Taxa de aprendizado inicial lrftune.uniform(0.01, 1.0)Fator final da taxa de aprendizado momentumtune.uniform(0.7, 0.98)Momentum weight_decaytune.uniform(0.0, 0.001)Decaimento dos pesos warmup_epochstune.uniform(0.0, 5.0)Épocas de aquecimento boxtune.uniform(1.0, 20.0)Peso da perda da caixa clstune.uniform(0.1, 4.0)Peso da perda de classe cls_pwtune.uniform(0.0, 1.0)Potência de ponderação das classes dfltune.uniform(0.4, 12.0)Peso da perda da distância da caixa hsv_htune.uniform(0.0, 0.1)Intervalo de aumento de matiz translatetune.uniform(0.0, 0.9)Intervalo de aumento de translação Você pode personalizar esses hiperparâmetros de acordo com suas necessidades específicas. Para ver a lista completa e mais detalhes, consulte o guia de ajuste de hiperparâmetros.
Para integrar o Weights & Biases (W&B) ao processo de ajuste do Ultralytics YOLO26:
-
Instale o W&B:
pip install wandb wandb login yolo settings wandb=True -
Execute o ajustador:
from ultralytics import YOLO # Carregar modelo YOLO model = YOLO("yolo26n.pt") # Cada execução do Ray cria a própria execução do W&B neste projeto result_grid = model.tune(data="coco8.yaml", project="YOLO-Tuning", use_ray=True)
Esta configuração permite monitorar o processo de ajuste, acompanhar as configurações de hiperparâmetros e visualizar os resultados no W&B.
-
O Ray Tune oferece inúmeras vantagens para a otimização de hiperparâmetros:
- Estratégias avançadas de busca: Utiliza algoritmos como otimização bayesiana e HyperOpt para buscar parâmetros com eficiência.
- Paralelismo: Oferece suporte à execução paralela de várias execuções, acelerando significativamente o processo de ajuste.
- Parada antecipada: Emprega estratégias como ASHA para encerrar antecipadamente as execuções com baixo desempenho, economizando recursos computacionais.
O Ray Tune se integra perfeitamente ao Ultralytics YOLO26 e oferece uma interface fácil de usar para ajustar hiperparâmetros com eficiência. Para começar, consulte o guia de ajuste de hiperparâmetros.
Para definir um espaço de busca personalizado para ajustar os 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)Isso personaliza o intervalo de hiperparâmetros, como a taxa de aprendizado inicial e o momentum, que será explorado durante o processo de ajuste. Para configurações avançadas, consulte a seção Exemplo de espaço de busca personalizado.