Ultralytics YOLO27:

Ajuste eficiente de hiperparâmetros com Ray Tune e YOLO26#

O ajuste de hiperparâmetros é essencial para alcançar o máximo desempenho do modelo, descobrindo o conjunto ideal de hiperparâmetros. Isso envolve executar testes com diferentes hiperparâmetros e avaliar o desempenho de cada teste.

Acelera o ajuste com Ultralytics YOLO26 e Ray Tune#

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

Ray Tune#

Ray Tune hyperparameter optimization workflow

Ray Tune é uma biblioteca de ajuste de hiperparâmetros concebida para oferecer eficiência e flexibilidade. É compatível com várias estratégias de pesquisa, paralelismo e estratégias de paragem antecipada, além de se integrar perfeitamente com frameworks populares de machine learning, 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 ajuste.

Instalação#

Para instalares os pacotes necessários, executa:

Instalação
# 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=True

Utilização#

Utilização
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 utilizar para o ajuste de hiperparâmetros com o Ray Tune. Aceita vários argumentos que permitem personalizar o processo de ajuste. Abaixo encontra-se uma explicação detalhada de cada parâmetro:

ParâmetroTipoDescriçãoValor predefinido
datastrO YAML do conjunto de dados no qual executar o ajustador, especificando os caminhos para os dados de validação e de treino, além de outras definições específicas do conjunto de dados. Na classificação, é utilizado um diretório de conjunto de dados ou o nome de um conjunto de dados integrado (por exemplo, imagenet10).
spacedict, optionalUm dicionário que define o espaço de pesquisa 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, o YOLO26 utiliza um espaço de pesquisa predefinido com vários hiperparâmetros.
grace_periodint, optionalO período de tolerância em épocas para o agendador ASHA no Ray Tune. O agendador não termina nenhum teste antes deste número de épocas, permitindo que o modelo tenha um período mínimo de treino antes de tomar uma decisão sobre a paragem antecipada.10
gpu_per_trialint, optionalO número de GPUs que o Ray atribui a cada teste. Define este valor explicitamente para utilizar treino com GPU; quando omitido, os testes não recebem recursos de GPU.None
iterationsint, optionalO número máximo de testes 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.300
search_algstr or Searcher, optionalA estratégia de pesquisa do Ray Tune a utilizar. Podes passar diretamente um objeto de pesquisa do Ray ou utilizar uma cadeia de texto compatível, como optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax ou random. Os pesquisadores baseados em cadeias de texto utilizam automaticamente a métrica de tarefa predefinida e mode="max". Por predefinição, é utilizado o TPE multivariado do Optuna com sugestões cientes do paralelismo."optuna"
**train_argsdict, optionalArgumentos adicionais a passar ao método train() durante o ajuste. Estes argumentos podem incluir definições como o número de épocas de treino, o tamanho do lote e outras configurações específicas do treino.{}

Ao personalizares estes parâmetros, podes ajustar o processo de otimização de hiperparâmetros às tuas necessidades específicas e aos recursos computacionais disponíveis.

Descrição do espaço de pesquisa predefinido#

A tabela seguinte apresenta os parâmetros predefinidos do espaço de pesquisa 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().

ParâmetroIntervaloDescrição
lr0tune.uniform(1e-5, 1e-2)Taxa de aprendizagem inicial que controla o tamanho do passo durante a otimização. Valores mais elevados aceleram o treino, mas podem causar instabilidade.
lrftune.uniform(0.01, 1.0)Fator final da taxa de aprendizagem que determina quanto a taxa de aprendizagem diminui até ao final do treino.
momentumtune.uniform(0.7, 0.98)Fator de momentum do otimizador que ajuda a acelerar o treino e a ultrapassar mínimos locais.
weight_decaytune.uniform(0.0, 0.001)Parâmetro de regularização que evita o sobreajuste ao penalizar valores elevados dos pesos.
warmup_epochstune.uniform(0.0, 5.0)Número de épocas com aumento gradual da taxa de aprendizagem para estabilizar o início do treino.
warmup_momentumtune.uniform(0.0, 0.95)Valor inicial do momentum que aumenta gradualmente durante o período de aquecimento.
boxtune.uniform(1.0, 20.0)Peso do componente de perda da caixa delimitadora, equilibrando a precisão da localização no modelo.
clstune.uniform(0.1, 4.0)Peso do componente de perda de classificação, equilibrando a precisão da previsão de classes no modelo.
cls_pwtune.uniform(0.0, 1.0)Potência de ponderação das classes, desde desativada (0.0) até à ponderação completa pela frequência inversa (1.0).
dfltune.uniform(0.4, 12.0)Peso do componente de regressão da distância da caixa, enfatizando uma localização precisa da caixa delimitadora.
hsv_htune.uniform(0.0, 0.1)Intervalo de aumento da tonalidade que introduz variabilidade de cor para ajudar o modelo a generalizar.
hsv_stune.uniform(0.0, 0.9)Intervalo de aumento da saturação que varia a intensidade da cor para melhorar a robustez.
hsv_vtune.uniform(0.0, 0.9)Intervalo de aumento do valor (brilho) que ajuda o modelo a funcionar em várias condições de iluminação.
degreestune.uniform(0.0, 45.0)Intervalo de aumento da rotação em graus, melhorando o reconhecimento de objetos rodados.
translatetune.uniform(0.0, 0.9)Intervalo de aumento da translação que desloca as imagens horizontal e verticalmente.
scaletune.uniform(0.0, 0.95)Intervalo de aumento da escala que simula objetos a diferentes distâncias.
sheartune.uniform(0.0, 10.0)Intervalo de aumento da inclinação em graus, simulando alterações de perspetiva.
perspectivetune.uniform(0.0, 0.001)Intervalo de aumento da perspetiva que simula alterações do ponto de vista 3D.
flipudtune.uniform(0.0, 1.0)Probabilidade de aumento por inversão vertical, aumentando a diversidade do conjunto de dados.
fliplrtune.uniform(0.0, 1.0)Probabilidade de aumento por inversão horizontal, útil para objetos simétricos.
bgrtune.uniform(0.0, 1.0)Probabilidade de aumento por troca dos canais BGR, ajudando na invariância de cor.
mosaictune.uniform(0.0, 1.0)Probabilidade de aumento Mosaic que combina quatro imagens numa única amostra de treino.
mixuptune.uniform(0.0, 1.0)Probabilidade de aumento MixUp que combina duas imagens e as respetivas etiquetas.
cutmixtune.uniform(0.0, 1.0)Probabilidade de aumento CutMix que combina regiões de imagens mantendo as características locais.
copy_pastetune.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 o executar.
close_mosaictune.randint(0, 11)Desativa o Mosaic nas últimas N épocas para estabilizar o treino antes da conclusão.

Exemplo de espaço de pesquisa personalizado#

Neste exemplo, demonstramos como utilizar um espaço de pesquisa personalizado para o ajuste de hiperparâmetros com o Ray Tune e o YOLO26. Ao forneceres um espaço de pesquisa personalizado, podes concentrar o processo de ajuste em hiperparâmetros específicos do teu interesse.

Utilização
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 fragmento 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 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-2). Por fim, passamos argumentos de treino adicionais, como o número de épocas, diretamente ao método tune como epochs=50.

Exemplo de algoritmo de pesquisa#

Podes selecionar uma estratégia de pesquisa do Ray Tune pelo nome. Para algoritmos de pesquisa baseados em cadeias de texto, o Ultralytics utiliza automaticamente a métrica de otimização predefinida da tarefa atual e mode="max". Se search_alg não for fornecido, o Ultralytics utiliza o TPE multivariado do Optuna com sugestões cientes do paralelismo.

Utilizar `search_alg` como cadeia de texto com `model.tune()`
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 respetiva métrica e o modo de otimização, passa um objeto de pesquisa do Ray Tune instanciado em vez de uma cadeia de texto.

Utilizar o objeto `OptunaSearch` com `model.tune()`
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,
)

Retomar uma sessão interrompida de ajuste de hiperparâmetros com o Ray Tune#

Podes retomar uma sessão interrompida do Ray Tune passando resume=True. Opcionalmente, podes passar o diretório name utilizado pelo Ray Tune em runs/{task} para retomar a sessão. Caso contrário, será retomada a última sessão interrompida. Não precisas de fornecer novamente iterations e space, mas tens de fornecer novamente os restantes argumentos de treino, incluindo data e epochs.

Utilizar `resume=True` com `model.tune()`
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)

Processar resultados do Ray Tune#

Depois de executares uma experiência de ajuste de hiperparâmetros com o Ray Tune, poderás querer realizar várias análises aos resultados obtidos. Este guia apresenta os fluxos de trabalho comuns para processar e analisar esses resultados.

Carregar resultados da experiência do Tune a partir de um diretório#

O model.tune(use_ray=True) devolve um Ray ResultGrid e guarda a experiência em runs/{task}/tune, ou em name que passaste. Para carregar esses resultados após o script original ter terminado, retoma a sessão, o que restaura os testes guardados e devolve 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 ao nível da experiência#

Obtém uma visão geral do desempenho dos testes. 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 de hiperparâmetros de testes 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}")

Representar graficamente todo o histórico das métricas comunicadas de um teste#

Podes representar graficamente o histórico das métricas de cada teste para veres como 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, abordámos fluxos de trabalho comuns para analisar os resultados de experiências executadas com o Ray Tune através do Ultralytics. Os passos principais incluem carregar os resultados da experiência a partir de um diretório, realizar análises básicas ao nível da experiência e do teste e representar graficamente as métricas.

Explora mais informações na página de documentação Analyze Results do Ray Tune para tirares o máximo partido das tuas experiências de ajuste de hiperparâmetros.

Perguntas frequentes#

  • Para ajustares os hiperparâmetros do teu modelo Ultralytics YOLO26 utilizando o Ray Tune, segue estes passos:

    1. Instala os pacotes necessários:

      pip install -U ultralytics "ray[tune]" optuna
      pip install wandb # optional for logging
      yolo settings wandb=True
    2. 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 avançadas de pesquisa e o paralelismo do Ray Tune para otimizar eficientemente os hiperparâmetros do teu modelo. Para obteres mais informações, consulta a documentação do Ray Tune.

  • O Ultralytics YOLO26 utiliza os seguintes hiperparâmetros predefinidos para o ajuste com o Ray Tune:

    ParâmetroIntervalo de valoresDescrição
    lr0tune.uniform(1e-5, 1e-2)Taxa de aprendizagem inicial
    lrftune.uniform(0.01, 1.0)Fator final da taxa de aprendizagem
    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 da tonalidade
    translatetune.uniform(0.0, 0.9)Intervalo de aumento da translação

    Estes hiperparâmetros podem ser personalizados de acordo com as tuas necessidades específicas. Para obteres a lista completa e mais detalhes, consulta o guia de ajuste de hiperparâmetros.

  • Para integrares o Weights & Biases (W&B) no teu processo de ajuste do Ultralytics YOLO26:

    1. Instala o W&B:

      pip install wandb
      wandb login
      yolo settings wandb=True
    2. Executa o ajustador:

      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 permite monitorizar 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 de pesquisa avançadas: Utiliza algoritmos como a otimização bayesiana e o HyperOpt para uma pesquisa eficiente de parâmetros.
    • Paralelismo: Permite a execução paralela de vários testes, acelerando significativamente o processo de ajuste.
    • Paragem antecipada: Utiliza estratégias como a ASHA para terminar antecipadamente testes com desempenho insuficiente, poupando recursos computacionais.

    O Ray Tune integra-se perfeitamente com o Ultralytics YOLO26, fornecendo uma interface fácil de utilizar para ajustar hiperparâmetros de forma eficaz. Para começares, consulta o guia de ajuste de hiperparâmetros.

  • Para definires um espaço de pesquisa personalizado para o ajuste de hiperparâmetros do teu 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 momentum, a explorar durante o processo de ajuste. Para configurações avançadas, consulta a secção Exemplo de espaço de pesquisa personalizado.

Comentários