Ultralytics YOLO27:

Guia de ajuste de hiperparâmetros do Ultralytics YOLO#

O ajuste de hiperparâmetros no Ultralytics YOLO é uma pesquisa automatizada e iterativa que otimiza definições — como a taxa de aprendizagem, os pesos da perda e a intensidade da augmentação — para maximizar métricas de desempenho de um modelo de machine learning, como exatidão, precisão e revocação. Em vez de testar estes valores manualmente, o Ultralytics YOLO explora o espaço de hiperparâmetros com um algoritmo genético que sofre mutações e avalia configurações candidatas ao longo de muitas execuções curtas de treino.



Watch: How to Tune Hyperparameters for Better Model Performance 🚀

O que são hiperparâmetros?#

Os hiperparâmetros são definições estruturais de alto nível do algoritmo. São definidos antes da fase de treino e permanecem constantes durante a mesma. Eis alguns hiperparâmetros normalmente ajustados no Ultralytics YOLO:

  • Taxa de aprendizagem lr0: determina o tamanho do passo em cada iteração ao avançar em direção a um mínimo na função de perda.
  • Tamanho do batch batch: número de imagens processadas simultaneamente numa passagem para a frente.
  • Número de épocas epochs: uma época é uma passagem completa para a frente e para trás por todos os exemplos de treino.
  • Especificidades da arquitetura: como o número de canais, o número de camadas, os tipos de funções de ativação, etc. Estes elementos encontram-se na configuração YAML do modelo, e não nos argumentos de treino.

Destes quatro, apenas a taxa de aprendizagem está no espaço de pesquisa predefinido: batch, epochs e a arquitetura permanecem fixos. O sintonizador também altera o agendamento, os ganhos da perda e as augmentations listadas abaixo.

Hyperparameter optimization search space visualization

Para obter uma lista completa dos hiperparâmetros de augmentação utilizados no YOLO26, consulta a página de configurações.

Evolução e mutação genética#

O Ultralytics YOLO utiliza algoritmos genéticos para otimizar hiperparâmetros. Os algoritmos genéticos são inspirados no mecanismo da seleção natural e da genética.

  • Seleção: em cada iteração, é selecionada uma das até nove configurações com maior aptidão, ponderadas pela aptidão. Após 30 resultados, os 20% melhores de todos os resultados (até 30) também estimam a covariância dos parâmetros, com uma influência que aumenta à medida que se acumulam evidências das configurações de elite.
  • Mutação: em cada iteração, cerca de metade dos parâmetros sofre mutação através de passos gaussianos normalizados pelos respetivos intervalos de pesquisa. Quando a covariância está ativa, uma proporção ponderada pela confiança de, no máximo, 40% utiliza passos correlacionados, com reflexão para devolver esses passos aos limites sem acumular valores truncados. À medida que se acumulam ensaios sem melhoria, os tamanhos dos passos diminuem linearmente até 20% ao longo de 25 ensaios e são repostos quando é encontrado um novo melhor resultado. A iteração 1 não tem progenitor e utiliza os hiperparâmetros de treino predefinidos como base.

Preparação para o ajuste de hiperparâmetros#

Antes de iniciares o processo de ajuste, é importante:

  1. Identificar as métricas: o sintonizador integrado (use_ray=False) classifica os ensaios pela pontuação fitness da tarefa, enquanto use_ray=True utiliza a métrica da tarefa. Decide quais as métricas secundárias que vais analisar, como AP50 ou a pontuação F1.
  2. Definir o orçamento do ajuste: determina quantos recursos computacionais estás disposto a alocar. O ajuste de hiperparâmetros pode exigir muitos recursos computacionais.

Como funciona o ciclo de ajuste#

Em cada iteração, o sintonizador integrado repete o seguinte ciclo:

  1. Inicializar os hiperparâmetros — começa com uma base razoável, seja os hiperparâmetros predefinidos pelo Ultralytics YOLO, seja valores baseados no teu conhecimento do domínio ou em experiências anteriores.
  2. Aplicar mutações aos hiperparâmetros — a classe Tuner produz automaticamente um novo conjunto de hiperparâmetros a partir do conjunto existente, através do seu método _mutate.
  3. Treinar o modelo — treina utilizando os hiperparâmetros modificados e avalia o desempenho do treino com as métricas escolhidas.
  4. Avaliar o modelo — o processo de avaliação produz a pontuação de aptidão da iteração, que é comparada com as iterações anteriores para determinar se os hiperparâmetros atuais representam uma melhoria.
  5. Registar os resultados — regista as métricas de desempenho e os hiperparâmetros correspondentes para referência futura. O Ultralytics YOLO guarda automaticamente estes resultados no formato NDJSON.
  6. Repetir — continua até atingir o número definido de iterações, com cada iteração a basear-se no conhecimento adquirido nas execuções anteriores. O sintonizador integrado executa todos os iterations; o Ray Tune comunica as métricas após cada época de ajuste, permitindo que o ASHA interrompa ensaios fracos após o seu período de tolerância.

Iterações e tamanho da população#

Com o sintonizador integrado (use_ray=False), iterations controla o número total de ensaios sequenciais e tem o valor predefinido de 300. Cada ensaio treina um modelo com uma configuração de hiperparâmetros — por exemplo, iterations=40 com epochs=50 agenda 40 execuções de treino independentes de 50 épocas, e não uma execução de 50 épocas com uma população separada de 40 candidatos.

O algoritmo genético integrado não tem um parâmetro explícito de tamanho da população. Depois de existirem ensaios anteriores, seleciona até nove das configurações com maior aptidão e aplica mutação a um candidato por iteração.

Para ensaios paralelos ou estratégias de pesquisa mais avançadas, define use_ray=True para utilizar o Ray Tune, que usa o mesmo valor predefinido de 300 ensaios e recebe iterations como num_samples. Consulta o guia de integração do Ray Tune para obter mais informações.

Espaço de pesquisa predefinido#

A tabela seguinte apresenta os parâmetros do espaço de pesquisa predefinido para o ajuste de hiperparâmetros no YOLO26. Cada parâmetro tem um intervalo de valores específico definido por um tuplo (min, max).

ParâmetroTipoIntervalo de valoresDescrição
lr0float(1e-5, 1e-2)Taxa de aprendizagem inicial no início do treino. Valores mais baixos proporcionam um treino mais estável, mas uma convergência mais lenta
lrffloat(0.01, 1.0)Fator da taxa de aprendizagem final como fração de lr0. Controla quanto a taxa de aprendizagem diminui durante o treino
momentumfloat(0.7, 0.98)Fator de momentum do SGD. Valores mais altos ajudam a manter uma direção consistente do gradiente e podem acelerar a convergência
weight_decayfloat(0.0, 0.001)Fator de regularização L2 para evitar sobreajuste. Valores maiores impõem uma regularização mais forte
warmup_epochsfloat(0.0, 5.0)Número de épocas do aquecimento linear da taxa de aprendizagem. Ajuda a evitar instabilidade no início do treino
warmup_momentumfloat(0.0, 0.95)Momentum inicial durante a fase de aquecimento. Aumenta gradualmente até ao valor final de momentum
boxfloat(1.0, 20.0)Peso da perda das caixas delimitadoras na função de perda total. Equilibra a regressão das caixas e a classificação
clsfloat(0.1, 4.0)Peso da perda de classificação na função de perda total. Valores mais altos dão ênfase à previsão correta da classe
cls_pwfloat(0.0, 1.0)Potência de ponderação das classes para lidar com o desequilíbrio entre classes. Valores mais altos aumentam o peso das classes raras
dflfloat(0.4, 12.0)Peso do termo de regressão da distância da caixa. O YOLO26 sem DFL aplica este ganho a uma perda L1 nas distâncias normalizadas da caixa; valores mais altos dão ênfase a uma localização precisa
hsv_hfloat(0.0, 0.1)Intervalo de augmentação aleatória da tonalidade no espaço de cores HSV. Ajuda o modelo a generalizar entre variações de cor
hsv_sfloat(0.0, 0.9)Intervalo de augmentação aleatória da saturação no espaço HSV. Simula diferentes condições de iluminação
hsv_vfloat(0.0, 0.9)Intervalo de augmentação aleatória do valor (brilho). Ajuda o modelo a lidar com diferentes níveis de exposição
degreesfloat(0.0, 45.0)Rotação máxima da augmentação, em graus. Ajuda o modelo a tornar-se invariante à orientação dos objetos
translatefloat(0.0, 0.9)Translação máxima da augmentação como fração do tamanho da imagem. Melhora a robustez à posição dos objetos
scalefloat(0.0, 0.95)Intervalo de augmentação de escala aleatória. Ajuda o modelo a detetar objetos de diferentes tamanhos
shearfloat(0.0, 10.0)Cisalhamento máximo da augmentação, em graus. Adiciona distorções semelhantes à perspetiva às imagens de treino
perspectivefloat(0.0, 0.001)Intervalo de augmentação de perspetiva aleatória. Simula diferentes ângulos de visão
flipudfloat(0.0, 1.0)Probabilidade de inversão vertical da imagem durante o treino. Útil para imagens aéreas ou obtidas de cima
fliplrfloat(0.0, 1.0)Probabilidade de inversão horizontal da imagem. Ajuda o modelo a tornar-se invariante à direção dos objetos
bgrfloat(0.0, 1.0)Probabilidade de utilizar augmentação BGR, que troca os canais de cor. Pode ajudar na invariância às cores
mosaicfloat(0.0, 1.0)Probabilidade de utilizar augmentação mosaic, que combina 4 imagens. Especialmente útil para a deteção de objetos pequenos
mixupfloat(0.0, 1.0)Probabilidade de utilizar augmentação mixup, que combina duas imagens. Pode melhorar a robustez do modelo
cutmixfloat(0.0, 1.0)Probabilidade de utilizar augmentação cutmix. Combina regiões da imagem mantendo as características locais
copy_pastefloat(0.0, 1.0)No modo flip, a fração de objetos elegíveis copiados; no modo mixup, também a probabilidade de a aplicar
close_mosaicint(0.0, 10.0)Desativa o mosaic nas últimas N épocas para estabilizar o treino antes da conclusão. Sofre mutação como um float e é depois arredondado para um número inteiro de épocas

Exemplo de espaço de pesquisa personalizado#

Eis como definir um espaço de pesquisa e utilizar o método model.tune() para usar a classe Tuner no ajuste de hiperparâmetros do YOLO26n no COCO8 durante 30 épocas, com um otimizador AdamW e ignorando a criação de gráficos, os checkpoints e a validação, exceto na época final, para um ajuste mais rápido.

Aviso

Este exemplo destina-se apenas a demonstração. Os hiperparâmetros obtidos a partir de execuções de ajuste curtas ou de pequena escala raramente são ideais para o treino no mundo real. Na prática, o ajuste deve ser realizado com definições semelhantes às do treino completo — incluindo conjuntos de dados, épocas e augmentations comparáveis — para garantir resultados fiáveis e transferíveis. O ajuste rápido pode enviesar os parâmetros para uma convergência mais rápida ou ganhos de validação de curto prazo que não generalizam.

Exemplo
from ultralytics import YOLO

# Initialize the YOLO model
model = YOLO("yolo26n.pt")

# Define search space
search_space = {
    "lr0": (1e-5, 1e-2),
    "degrees": (0.0, 45.0),
}

# Tune hyperparameters on COCO8 for 30 epochs
model.tune(
    data="coco8.yaml",
    epochs=30,
    iterations=300,
    optimizer="AdamW",
    space=search_space,
    plots=False,
    save=False,
    val=False,
)

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

Podes retomar uma sessão de ajuste de hiperparâmetros interrompida passando resume=True. Opcionalmente, podes passar o diretório name utilizado em runs/{task} para retomar. Sem um name, retoma o diretório com o nome literal tune, que é o nome predefinido e não o da sessão executada mais recentemente; por isso, passa name para qualquer execução iniciada com um nome personalizado. Também tens de fornecer todos os argumentos de treino anteriores, incluindo data, epochs, iterations e space.

Utilizar `resume=True` com `model.tune()`
from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo26n.pt")

# Define search space
search_space = {
    "lr0": (1e-5, 1e-2),
    "degrees": (0.0, 45.0),
}

# Resume previous run
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, resume=True)

# Resume tuning run with name 'tune_exp'
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, name="tune_exp", resume=True)

Resultados#

Depois de concluíres com êxito o processo de ajuste de hiperparâmetros, obterás vários ficheiros e diretórios que encapsulam os resultados do ajuste. A seguir descreve-se cada um:

Estrutura de ficheiros#

Eis o aspeto da estrutura de diretórios dos resultados. Diretórios de treino como train/ e train-2/ contêm iterações individuais do ajuste, ou seja, um modelo treinado com um conjunto de hiperparâmetros. O diretório tune/ contém os resultados do ajuste de todos os treinos de modelos individuais:

runs/
└── detect/
    ├── train/
    ├── train-2/
    ├── ...
    └── tune/
        ├── best_hyperparameters.yaml
        ├── tune_fitness.png
        ├── tune_results.ndjson
        ├── tune_scatter_plots.png
        └── weights/
            ├── last.pt
            └── best.pt

Descrições dos ficheiros#

best_hyperparameters.yaml#

Este ficheiro YAML contém os hiperparâmetros com melhor desempenho encontrados durante o processo de ajuste. Podes utilizar este ficheiro para inicializar treinos futuros com estas definições otimizadas.

  • Formato: YAML

  • Utilização: resultados dos hiperparâmetros

  • Exemplo:

    # 558/900 iterations complete ✅ (45536.81s)
    # Results saved to /usr/src/ultralytics/runs/detect/tune
    # Best fitness=0.64297 observed at iteration 498
    # Best fitness metrics are {'metrics/precision(B)': 0.87247, 'metrics/recall(B)': 0.71387, 'metrics/mAP50(B)': 0.79106, 'metrics/mAP50-95(B)': 0.62651, 'val/box_loss': 2.79884, 'val/cls_loss': 2.72386, 'val/l1_loss': 0.68503, 'fitness': 0.64297}
    # Best fitness model is /usr/src/ultralytics/runs/detect/tune/weights
    # Best fitness hyperparameters are printed below.
    
    lr0: 0.00269
    lrf: 0.00288
    momentum: 0.73375
    weight_decay: 0.00015
    warmup_epochs: 1.22935
    warmup_momentum: 0.1525
    box: 18.27875
    cls: 1.32899
    dfl: 0.56016
    hsv_h: 0.01148
    hsv_s: 0.53554
    hsv_v: 0.13636
    degrees: 0.0
    translate: 0.12431
    scale: 0.07643
    shear: 0.0
    perspective: 0.0
    flipud: 0.0
    fliplr: 0.08631
    mosaic: 0.42551
    mixup: 0.0
    copy_paste: 0.0

tune_fitness.png#

Este é um gráfico que apresenta a aptidão em função do número de iterações. Ajuda-te a visualizar o desempenho do algoritmo genético ao longo do tempo.

  • Formato: PNG
  • Utilização: visualização do desempenho

Hyperparameter Tuning Fitness vs Iteration

O gráfico contém:

  • Um marcador por iteração e por conjunto de dados, pelo que uma execução com um único conjunto de dados apresenta um ponto por iteração, enquanto uma execução com vários conjuntos de dados apresenta um ponto por conjunto de dados e por iteração.
  • Uma linha pontilhada de "média suavizada" calculada através de suavização gaussiana (sigma=3) sobre os valores de aptidão de nível superior de cada iteração.

tune_results.ndjson#

Um ficheiro NDJSON que contém os resultados detalhados de cada iteração do ajuste. Cada linha é um objeto JSON com a aptidão agregada, os hiperparâmetros ajustados e as métricas por conjunto de dados. O ajuste com um único conjunto de dados e com vários conjuntos de dados utiliza o mesmo formato de ficheiro.

  • Formato: NDJSON
  • Utilização: acompanhamento dos resultados por iteração.
  • Exemplo:

Segue-se um exemplo formatado para facilitar a leitura; no ficheiro .ndjson real, cada objeto é armazenado numa única linha.

{
    "iteration": 1,
    "fitness": 0.48628,
    "hyperparameters": {
        "lr0": 0.01,
        "lrf": 0.01,
        "momentum": 0.937,
        "weight_decay": 0.0005
    },
    "datasets": {
        "coco8": {
            "metrics/precision(B)": 0.65666,
            "metrics/recall(B)": 0.85,
            "metrics/mAP50(B)": 0.85086,
            "metrics/mAP50-95(B)": 0.64104,
            "val/box_loss": 1.57958,
            "val/cls_loss": 1.04986,
            "val/l1_loss": 1.32641,
            "fitness": 0.64104
        },
        "coco8-grayscale": {
            "metrics/precision(B)": 0.6582,
            "metrics/recall(B)": 0.51667,
            "metrics/mAP50(B)": 0.59106,
            "metrics/mAP50-95(B)": 0.33152,
            "val/box_loss": 1.95424,
            "val/cls_loss": 1.64059,
            "val/l1_loss": 1.70226,
            "fitness": 0.33152
        }
    },
    "save_dirs": {
        "coco8": "runs/detect/coco8",
        "coco8-grayscale": "runs/detect/coco8-grayscale"
    }
}

O fitness de nível superior é a média aritmética dos valores fitness por conjunto de dados. No ajuste com um único conjunto de dados, o dicionário datasets tem uma entrada cujo fitness é igual ao fitness de nível superior. É registado um objeto JSON por cada iteração concluída. Os caminhos save_dirs reais são absolutos; são abreviados acima para facilitar a leitura.

tune_scatter_plots.png#

Este ficheiro contém gráficos de dispersão gerados a partir de tune_results.ndjson, ajudando-te a visualizar as relações entre diferentes hiperparâmetros e métricas de desempenho. A mutação utiliza o intervalo configurado de cada hiperparâmetro, pelo que os valores podem evoluir a partir de predefinições com valor zero, como degrees e shear.

  • Formato: PNG
  • Utilização: análise exploratória de dados

Hyperparameter tuning results scatter plot analysis

weights/#

Este diretório contém os modelos PyTorch guardados da iteração com melhor aptidão da execução de ajuste. Ambos os ficheiros provêm dessa mesma iteração:

  • last.pt: last.pt contém os pesos da última época de treino.
  • best.pt: os pesos best.pt correspondem à iteração que alcançou a melhor pontuação de aptidão.

Com estes resultados, podes tomar decisões mais informadas para futuros treinos e análises de modelos.

Conclusão#

O ajuste de hiperparâmetros no Ultralytics YOLO é simples de iniciar e poderoso nos bastidores, utilizando seleção ponderada pela aptidão e mutação normalizada pelo intervalo num algoritmo genético. Seguir o ciclo descrito neste guia permite-te ajustar sistematicamente o modelo para obter um melhor desempenho e reutilizar o best_hyperparameters.yaml resultante para inicializar futuras execuções de treino. Para dimensionar o ajuste entre ensaios paralelos e algoritmos de pesquisa mais avançados, continua com o guia de integração do Ray Tune ou executa trabalhos geridos com hiperparâmetros configuráveis e acompanhamento de métricas em tempo real na Ultralytics Platform, através do treino na cloud.

Para definições que nenhum argumento expõe, como taxas de aprendizagem por camada ou uma métrica de aptidão personalizada, cria uma subclasse do trainer. Para obter informações mais aprofundadas, explora o código-fonte da classe Tuner. Se tiveres perguntas ou pedidos de funcionalidades, contacta-nos no GitHub ou no Discord.

Perguntas frequentes#

  • Define um valor inicial com o parâmetro lr0 — os valores comuns variam entre 0.001 e 0.01 — e deixa que o ajuste o modifique para encontrar o valor ideal. Podes automatizar este processo com o método model.tune(). Por exemplo:

    Exemplo
    from ultralytics import YOLO
    
    # Initialize the YOLO model
    model = YOLO("yolo26n.pt")
    
    # Tune hyperparameters on COCO8 for 30 epochs
    model.tune(data="coco8.yaml", epochs=30, iterations=300, optimizer="AdamW", plots=False, save=False, val=False)

    Para mais detalhes, consulta a página de configuração do Ultralytics YOLO.

  • Os algoritmos genéticos no Ultralytics YOLO26 fornecem um método robusto para explorar o espaço de hiperparâmetros, resultando num desempenho do modelo altamente otimizado. Os principais benefícios incluem:

    • Pesquisa eficiente: a seleção ponderada pela aptidão preserva configurações fortes, enquanto a mutação normalizada pelo intervalo explora novos candidatos.
    • Evitar mínimos locais: ao introduzir aleatoriedade, ajudam a evitar mínimos locais, garantindo uma melhor otimização global.
    • Métricas de desempenho: adaptam-se com base numa pontuação de aptidão específica da tarefa (mAP50-95 para deteção).

    Para veres como os algoritmos genéticos podem otimizar os hiperparâmetros, consulta o guia de evolução de hiperparâmetros.

  • O tempo necessário para a otimização de hiperparâmetros com o Ultralytics YOLO depende em grande medida de vários fatores, como o tamanho do conjunto de dados, a complexidade da arquitetura do modelo, o número de iterações e os recursos computacionais disponíveis. Por exemplo, a otimização do YOLO26n num conjunto de dados como o COCO8 durante 30 épocas pode demorar várias horas ou dias, dependendo do hardware.

    Para gerir eficazmente o tempo de otimização, define antecipadamente um orçamento claro para a otimização, conforme explicado em Preparar a otimização de hiperparâmetros. Isto ajuda a equilibrar a alocação de recursos e os objetivos de otimização.

  • Ao avaliar o desempenho do modelo durante a otimização de hiperparâmetros no YOLO, podes utilizar várias métricas importantes:

    • AP50: a precisão média com um limiar de IoU de 0,50.
    • Pontuação F1: a média harmónica da precisão e da revocação.
    • Precisão e revocação: métricas individuais que indicam a exatidão do modelo ao identificar verdadeiros positivos em comparação com falsos positivos e falsos negativos.

    Estas métricas ajudam-te a compreender diferentes aspetos do desempenho do teu modelo. Consulta o guia de métricas de desempenho do Ultralytics YOLO para obteres uma visão geral abrangente.

  • Sim, o Ultralytics YOLO26 integra-se com o Ray Tune para a otimização avançada de hiperparâmetros. O Ray Tune disponibiliza algoritmos de pesquisa sofisticados, como a otimização Bayesiana e o Hyperband, além de capacidades de execução paralela para acelerar o processo de otimização.

    Para utilizar o Ray Tune com o YOLO26, basta definir o parâmetro use_ray=True na chamada ao método model.tune(). Para mais detalhes e exemplos, consulta o guia de integração do Ray Tune.

Comentários