Guia da Ultralytics sobre ajuste de hiperparâmetros para YOLO#
O ajuste de hiperparâmetros no Ultralytics YOLO é uma busca automatizada e iterativa que otimiza configurações — como taxa de aprendizado, pesos das perdas e intensidade das aumentações — para maximizar métricas de desempenho de um modelo de aprendizado de máquina, como acurácia, precisão e revocação. Em vez de testar esses valores manualmente, o Ultralytics YOLO explora o espaço de hiperparâmetros com um algoritmo genético que muta e avalia configurações candidatas em várias execuções curtas de treinamento.
Assista: Como ajustar hiperparâmetros para melhorar o desempenho do modelo 🚀
O que são hiperparâmetros?#
Hiperparâmetros são configurações estruturais de alto nível do algoritmo. Eles são definidos antes da fase de treinamento e permanecem constantes durante ela. Veja alguns hiperparâmetros comumente ajustados no Ultralytics YOLO:
- Taxa de aprendizado
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 lote
batch: número de imagens processadas simultaneamente em uma passagem direta. - Número de épocas
epochs: uma época é uma passagem direta e retropropagação completas por todos os exemplos de treinamento. - Detalhes da arquitetura: como o número de canais, o número de camadas, os tipos de funções de ativação etc. Esses elementos ficam na configuração YAML do modelo, e não nos argumentos de treinamento.
Desses quatro itens, apenas a taxa de aprendizado está no espaço de busca padrão: batch, epochs e a arquitetura permanecem fixos. O ajustador também altera o cronograma, os ganhos das perdas e as aumentações listadas abaixo.
Para ver uma lista completa dos hiperparâmetros de aumento de dados usados no YOLO26, consulte a página de configurações.
Evolução genética e mutação#
O Ultralytics YOLO usa algoritmos genéticos para otimizar hiperparâmetros. Os algoritmos genéticos se inspiram nos mecanismos da seleção natural e da genética.
- Seleção: cada iteração seleciona uma entre até nove configurações com maior aptidão, ponderadas pela aptidão. Após 30 resultados, os 20% melhores resultados (até 30) também são usados para estimar a covariância dos parâmetros, cuja influência aumenta à medida que se acumulam evidências das configurações de elite.
- Mutação: cada iteração altera aproximadamente metade dos parâmetros usando passos gaussianos normalizados pelos respectivos intervalos de busca. Quando a covariância está ativa, uma parcela ponderada pela confiança, de no máximo 40%, usa passos correlacionados; a reflexão mantém esses passos dentro dos limites sem acumular valores truncados. À medida que se acumulam tentativas sem melhora, os tamanhos dos passos diminuem linearmente em até 20% ao longo de 25 tentativas e são redefinidos quando um novo melhor resultado é encontrado. A iteração 1 não tem configuração-pai e usa os hiperparâmetros de treinamento padrão como linha de base.
Preparação para o ajuste de hiperparâmetros#
Antes de começar o processo de ajuste, é importante:
- Identificar as métricas: o ajustador integrado (
use_ray=False) classifica as tentativas pela pontuaçãofitnessda tarefa, enquantouse_ray=Trueusa a métrica da tarefa. Decida quais métricas secundárias você vai analisar, como AP50 ou pontuação F1. - Definir o orçamento de ajuste: determine quantos recursos computacionais você pretende alocar. O ajuste de hiperparâmetros pode exigir muitos recursos computacionais.
Como funciona o ciclo de ajuste#
Em cada iteração, o ajustador integrado repete o seguinte ciclo:
- Inicializar os hiperparâmetros — começar com uma linha de base razoável, usando os hiperparâmetros padrão definidos pelo Ultralytics YOLO ou valores baseados no seu conhecimento do domínio ou em experimentos anteriores.
- Alterar os hiperparâmetros — a classe
Tunergera automaticamente um novo conjunto de hiperparâmetros a partir do conjunto existente com o método_mutate. - Treinar o modelo — treinar usando os hiperparâmetros alterados e, em seguida, avaliar o desempenho do treinamento com as métricas escolhidas.
- Avaliar o modelo — o processo de avaliação gera a pontuação de aptidão da iteração, que é comparada às iterações anteriores para determinar se os hiperparâmetros atuais representam uma melhoria.
- Registrar os resultados — registrar as métricas de desempenho e os hiperparâmetros correspondentes para consulta futura. O Ultralytics YOLO salva automaticamente esses resultados no formato NDJSON.
- Repetir — continuar até atingir o número definido de iterações, cada uma aproveitando o conhecimento obtido nas execuções anteriores. O ajustador integrado executa todos os
iterations; o Ray Tune informa as métricas após cada época de ajuste, permitindo que o ASHA interrompa tentativas com baixo desempenho após o período de tolerância.
Iterações e tamanho da população#
Com o ajustador integrado (use_ray=False), iterations controla o número total de tentativas sequenciais e tem o valor padrão 300. Cada tentativa treina um modelo com uma configuração de hiperparâmetros — por exemplo, iterations=40 com epochs=50 agenda 40 execuções de treinamento 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. Quando já existem tentativas anteriores, ele seleciona entre até nove das configurações com maior aptidão e altera um candidato por iteração.
Para executar tentativas em paralelo ou usar estratégias de busca mais avançadas, defina use_ray=True para usar o Ray Tune, que também tem 300 tentativas como padrão e recebe iterations como num_samples. Consulte o guia de integração do Ray Tune para obter detalhes.
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. Cada parâmetro tem um intervalo de valores específico definido por uma tupla (min, max).
| Parâmetro | Tipo | Intervalo de valores | Descrição |
|---|---|---|---|
lr0 | float | (1e-5, 1e-2) | Taxa de aprendizado inicial no começo do treinamento. Valores menores proporcionam um treinamento mais estável, mas uma convergência mais lenta |
lrf | float | (0.01, 1.0) | Fator da taxa de aprendizado final como fração de lr0. Controla o quanto a taxa de aprendizado diminui durante o treinamento |
momentum | float | (0.7, 0.98) | Fator de momentum do SGD. Valores maiores ajudam a manter uma direção de gradiente consistente e podem acelerar a convergência |
weight_decay | float | (0.0, 0.001) | Fator de regularização L2 para evitar sobreajuste. Valores maiores impõem uma regularização mais intensa |
warmup_epochs | float | (0.0, 5.0) | Número de épocas de aquecimento linear da taxa de aprendizado. Ajuda a evitar instabilidade no início do treinamento |
warmup_momentum | float | (0.0, 0.95) | Momentum inicial durante a fase de aquecimento. Aumenta gradualmente até o valor final do momentum |
box | float | (1.0, 20.0) | Peso da perda da caixa delimitadora na função de perda total. Equilibra a regressão da caixa e a classificação |
cls | float | (0.1, 4.0) | Peso da perda de classificação na função de perda total. Valores maiores dão mais ênfase à previsão correta da classe |
cls_pw | float | (0.0, 1.0) | Potência de ponderação de classes para lidar com o desequilíbrio entre classes. Valores maiores aumentam o peso das classes raras |
dfl | float | (0.4, 12.0) | Peso do termo de regressão da distância da caixa. O YOLO26 sem DFL aplica esse ganho a uma perda L1 sobre as distâncias normalizadas da caixa; valores maiores dão mais ênfase à localização precisa |
hsv_h | float | (0.0, 0.1) | Intervalo de aumento aleatório de matiz no espaço de cores HSV. Ajuda o modelo a generalizar diante de variações de cor |
hsv_s | float | (0.0, 0.9) | Intervalo de aumento aleatório de saturação no espaço HSV. Simula diferentes condições de iluminação |
hsv_v | float | (0.0, 0.9) | Intervalo de aumento aleatório de valor (brilho). Ajuda o modelo a lidar com diferentes níveis de exposição |
degrees | float | (0.0, 45.0) | Aumento máximo de rotação em graus. Ajuda o modelo a se tornar invariante à orientação dos objetos |
translate | float | (0.0, 0.9) | Aumento máximo de translação como fração do tamanho da imagem. Melhora a robustez a diferentes posições dos objetos |
scale | float | (0.0, 0.95) | Intervalo de aumento aleatório de escala. Ajuda o modelo a detectar objetos de diferentes tamanhos |
shear | float | (0.0, 10.0) | Aumento máximo de cisalhamento em graus. Adiciona distorções semelhantes às de perspectiva às imagens de treinamento |
perspective | float | (0.0, 0.001) | Intervalo de aumento aleatório de perspectiva. Simula diferentes ângulos de visualização |
flipud | float | (0.0, 1.0) | Probabilidade de inversão vertical da imagem durante o treinamento. Útil para imagens aéreas e capturadas de cima |
fliplr | float | (0.0, 1.0) | Probabilidade de inversão horizontal da imagem. Ajuda o modelo a se tornar invariante à direção dos objetos |
bgr | float | (0.0, 1.0) | Probabilidade de usar aumento BGR, que troca os canais de cor. Pode ajudar na invariância de cor |
mosaic | float | (0.0, 1.0) | Probabilidade de usar aumento mosaic, que combina 4 imagens. Especialmente útil para a detecção de objetos pequenos |
mixup | float | (0.0, 1.0) | Probabilidade de usar aumento mixup, que combina duas imagens. Pode melhorar a robustez do modelo |
cutmix | float | (0.0, 1.0) | Probabilidade de usar aumento cutmix. Combina regiões de imagens preservando as características locais |
copy_paste | float | (0.0, 1.0) | No modo flip, a fração de objetos elegíveis copiados; no modo mixup, também a probabilidade de aplicar o aumento |
close_mosaic | int | (0.0, 10.0) | Desativa o mosaic nas últimas N épocas para estabilizar o treinamento antes de terminar. O valor é alterado como um número decimal e, em seguida, arredondado para um número inteiro de épocas |
Exemplo de espaço de busca personalizado#
Veja como definir um espaço de busca e usar o método model.tune() para utilizar a classe Tuner no ajuste de hiperparâmetros do YOLO26n no COCO8 por 30 épocas com um otimizador AdamW, ignorando a geração de gráficos, o salvamento de checkpoints e a validação — exceto na época final — para acelerar o ajuste.
Este exemplo serve apenas para demonstração. Os hiperparâmetros obtidos em execuções de ajuste curtas ou em pequena escala raramente são ideais para o treinamento no mundo real. Na prática, o ajuste deve ser realizado com configurações semelhantes às do treinamento completo — incluindo conjuntos de dados, épocas e aumentações comparáveis — para garantir resultados confiáveis e transferíveis. Um ajuste rápido pode favorecer parâmetros que aceleram a convergência ou melhoram a validação no curto prazo, mas que não generalizam.
from ultralytics import YOLO
# Inicializa o modelo YOLO
model = YOLO("yolo26n.pt")
# Define o espaço de busca
search_space = {
"lr0": (1e-5, 1e-2),
"degrees": (0.0, 45.0),
}
# Ajusta os hiperparâmetros no COCO8 por 30 épocas
model.tune(
data="coco8.yaml",
epochs=30,
iterations=300,
optimizer="AdamW",
space=search_space,
plots=False,
save=False,
val=False,
)Retomar uma sessão interrompida de ajuste de hiperparâmetros#
Você pode retomar uma sessão interrompida de ajuste de hiperparâmetros passando resume=True. Opcionalmente, você pode passar o diretório name usado em runs/{task} para retomar a sessão. Sem um name, o processo retoma o diretório chamado literalmente tune, que é o nome padrão, e não a sessão executada mais recentemente; por isso, passe name para qualquer execução iniciada com um nome personalizado. Você também precisa fornecer todos os argumentos de treinamento anteriores, incluindo data, epochs, iterations e space.
from ultralytics import YOLO
# Define um modelo YOLO
model = YOLO("yolo26n.pt")
# Define o espaço de busca
search_space = {
"lr0": (1e-5, 1e-2),
"degrees": (0.0, 45.0),
}
# Retoma a execução anterior
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, resume=True)
# Retoma a execução de ajuste com o nome 'tune_exp'
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, name="tune_exp", resume=True)Resultados#
Depois de concluir o processo de ajuste de hiperparâmetros, você terá vários arquivos e diretórios com os resultados do ajuste. Veja a seguir a descrição de cada um:
Estrutura de arquivos#
Veja como será a estrutura de diretórios dos resultados. Diretórios de varredura, como multitrain/ e multitrain-2/, contêm iterações individuais de ajuste: um modelo treinado por conjunto de dados com um conjunto de hiperparâmetros, em um subdiretório nomeado de acordo com cada conjunto de dados. Para economizar espaço de armazenamento, o ajustador exclui os diretórios de execução por conjunto de dados das iterações que não são as melhores atuais. O diretório tune/ contém os resultados do ajuste de todos os treinamentos individuais de modelos:
runs/
└── detect/
├── multitrain/
│ └── coco8/
├── multitrain-2/
├── ...
└── tune/
├── best_hyperparameters.yaml
├── tune_fitness.png
├── tune_results.ndjson
├── tune_scatter_plots.png
└── weights/
├── last.pt
└── best.ptDescrições dos arquivos#
best_hyperparameters.yaml#
Este arquivo YAML contém os hiperparâmetros de melhor desempenho encontrados durante o processo de ajuste. Você pode usar este arquivo para inicializar treinamentos futuros com essas configurações otimizadas.
-
Formato: YAML
-
Uso: 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 gráfico mostra a aptidão em função do número de iterações. Ele ajuda você a visualizar o desempenho do algoritmo genético ao longo do tempo.
- Formato: PNG
- Uso: visualização do desempenho
O gráfico contém:
- Um marcador por iteração e por conjunto de dados, ou seja, uma execução com um único conjunto de dados mostra um ponto por iteração, e uma execução com vários conjuntos de dados mostra um ponto por conjunto de dados em cada iteração.
- Uma linha pontilhada de "média suavizada" calculada por suavização gaussiana (
sigma=3) dos valores de aptidão de nível superior por iteração.
tune_results.ndjson#
Um arquivo NDJSON com resultados detalhados de cada iteração de 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 usa o mesmo formato de arquivo.
- Formato: NDJSON
- Uso: acompanhamento dos resultados por iteração.
- Exemplo:
A seguir, um exemplo formatado para facilitar a leitura; no arquivo .ndjson real, cada objeto é armazenado em uma ú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/multitrain/coco8",
"coco8-grayscale": "runs/detect/multitrain/coco8-grayscale"
}
}O valor de nível superior fitness é 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. É registrado um objeto JSON por iteração concluída. Os caminhos reais save_dirs são absolutos; eles foram abreviados acima para facilitar a leitura.
tune_scatter_plots.png#
Este arquivo contém gráficos de dispersão gerados a partir de tune_results.ndjson, que ajudam você a visualizar as relações entre diferentes hiperparâmetros e métricas de desempenho. A mutação usa o intervalo configurado para cada hiperparâmetro, portanto, os valores podem evoluir a partir de padrões iguais a zero, como degrees e shear.
- Formato: PNG
- Uso: análise exploratória de dados
weights/#
Este diretório contém os modelos PyTorch salvos da iteração com melhor aptidão na execução de ajuste. Os dois arquivos vêm dessa mesma iteração:
last.pt: last.pt contém os pesos da última época de treinamento.best.pt: os pesos best.pt correspondem à iteração que alcançou a melhor pontuação de aptidão.
Com esses resultados, você pode tomar decisões mais informadas em treinamentos e análises futuros de modelos.
Conclusão#
O ajuste de hiperparâmetros no Ultralytics YOLO é simples de iniciar e poderoso nos bastidores, usando seleção ponderada pela aptidão e mutação normalizada por intervalo em um algoritmo genético. Seguir o ciclo descrito neste guia permite ajustar sistematicamente o teu modelo para obter melhor desempenho e, em seguida, reutilizar o best_hyperparameters.yaml resultante para inicializar futuras execuções de treino. Para expandir o ajuste a testes paralelos e algoritmos de pesquisa mais avançados, continua com o guia de integração do Ray Tune ou executa tarefas geridas com hiperparâmetros configuráveis e monitorização de métricas em tempo real na Ultralytics Platform através do treino na nuvem.
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 treinador. Para conhecer melhor a implementação, 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 vão de0.001a0.01— e deixa o ajuste modificá-lo para encontrar o valor ideal. Podes automatizar este processo com o métodomodel.tune(). Por exemplo:Exemplofrom ultralytics import YOLO # Inicializa o modelo YOLO model = YOLO("yolo26n.pt") # Ajusta os hiperparâmetros no COCO8 por 30 épocas 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 proporcionam um método robusto para explorar o espaço de hiperparâmetros e alcançar um desempenho altamente otimizado do modelo. Entre as principais vantagens estão:
- Pesquisa eficiente: a seleção ponderada pela aptidão preserva configurações eficazes, enquanto a mutação normalizada por intervalo explora novos candidatos.
- Evitar mínimos locais: ao introduzirem aleatoriedade, ajudam a evitar mínimos locais e garantem 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 ver como os algoritmos genéticos podem otimizar os hiperparâmetros, consulta o guia de evolução de hiperparâmetros.
O tempo necessário para ajustar 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, ajustar o YOLO26n num conjunto de dados como o COCO8 durante 30 épocas pode demorar várias horas ou dias, consoante o hardware.
Para gerir eficazmente o tempo de ajuste, define previamente um orçamento claro, conforme explicado em Preparar o ajuste 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 o ajuste de hiperparâmetros no YOLO, podes usar 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 uma visão geral abrangente.
Sim, o Ultralytics YOLO26 integra-se com o Ray Tune para otimização avançada de hiperparâmetros. O Ray Tune oferece 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 ajuste.
Para usar o Ray Tune com o YOLO26, basta definir o parâmetro
use_ray=Truena chamada do métodomodel.tune(). Para mais detalhes e exemplos, consulta o guia de integração do Ray Tune.