Meet YOLO26: next-gen vision AI.

Link to this sectionComo fazer o ajuste fino (fine-tuning) do YOLO em um conjunto de dados personalizado#

Fine-tuning adapta um modelo pré-treinado para reconhecer novas classes começando de pesos aprendidos em vez de uma inicialização aleatória. Em vez de treinar do zero por centenas de épocas, o fine-tuning aproveita características pré-treinadas do COCO e converge em dados personalizados em uma fração do tempo.

Este guia cobre o fine-tuning do YOLO26 em conjuntos de dados personalizados, desde o uso básico até técnicas avançadas como congelamento de camadas e treinamento em dois estágios.

Link to this sectionFine-Tuning vs. Treinamento do zero#

Um modelo pré-treinado já aprendeu características visuais gerais - detecção de bordas, reconhecimento de textura, compreensão de formas - a partir de milhões de imagens. O Transfer learning via fine-tuning reutiliza esse conhecimento e ensina ao modelo apenas como são as novas classes, motivo pelo qual ele converge mais rápido e requer menos dados. Treinar do zero descarta tudo isso e força o modelo a aprender tudo desde padrões de nível de pixel, o que demanda significativamente mais recursos.

Ajuste FinoTreinamento do zero
Pesos iniciaisPré-treinado no COCO (80 classes)Inicialização aleatória
ComandoYOLO("yolo26n.pt")YOLO("yolo26n.yaml")
ConvergênciaMais rápida - a backbone já está treinadaMais lenta - todas as camadas aprendem do zero
Requisitos de dadosMenores - características pré-treinadas compensam a falta de dadosMaiores - o modelo deve aprender todas as características apenas a partir do conjunto de dados
Quando usarClasses personalizadas com imagens naturaisDomínios fundamentalmente diferentes do COCO (médico, satélite, radar)
O fine-tuning não requer código extra

Quando um arquivo .pt é carregado com YOLO("yolo26n.pt"), os pesos pré-treinados são armazenados no modelo. Chamar .train(data="custom.yaml") logo depois transfere automaticamente todos os pesos compatíveis para a nova arquitetura do modelo, reinicializa quaisquer camadas que não correspondam (como a cabeça de detecção quando o número de classes difere) e inicia o treinamento. Nenhum carregamento manual de pesos, manipulação de camadas ou código personalizado de transfer learning é necessário.

Link to this sectionComo funciona a transferência de pesos pré-treinados#

Quando um modelo pré-treinado passa por fine-tuning em um conjunto de dados com um número diferente de classes (por exemplo, de 80 classes do COCO para 5 classes personalizadas), a Ultralytics realiza uma transferência de pesos consciente da forma (shape-aware):

  1. Backbone e neck transferem totalmente - estas camadas extraem características visuais gerais e suas formas são independentes do número de classes.
  2. Cabeça de detecção é parcialmente reinicializada - as camadas de saída de classificação (cv3, one2one_cv3) possuem formas vinculadas à contagem de classes (80 vs 5), portanto, não podem ser transferidas e são inicializadas aleatoriamente. As camadas de regressão de caixa (cv2, one2one_cv2) na cabeça possuem formas fixas, independentemente da contagem de classes, portanto, são transferidas normalmente.
  3. A vasta maioria dos pesos é transferida ao alterar a contagem de classes. Por exemplo, o fine-tuning do YOLO26n do COCO (80 classes) para um conjunto de dados de 5 classes transfere 606 de 708 tensores de peso: apenas as camadas de classificação dependentes da contagem de classes são reinicializadas, enquanto a backbone, o neck e os ramos de regressão de caixa permanecem intactos.

Para conjuntos de dados com o mesmo número de classes que o modelo pré-treinado (por exemplo, fazer fine-tuning de pesos pré-treinados no COCO em outro conjunto de dados de 80 classes), 100% dos pesos são transferidos, incluindo a cabeça de detecção.

Link to this sectionExemplo básico de fine-tuning#

Exemplo
from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # load pretrained model
model.train(data="custom.yaml", epochs=50, imgsz=640)

Link to this sectionEscolhendo um tamanho de modelo#

Modelos maiores têm mais capacidade, mas também mais parâmetros para atualizar, o que pode aumentar o risco de overfitting quando os dados de treinamento são limitados. Começar com um modelo menor (YOLO26n ou YOLO26s) e aumentar a escala apenas se as métricas de validação estagnarem é uma abordagem prática. O tamanho ideal do modelo depende da complexidade da tarefa, do número de classes, da diversidade do conjunto de dados e do hardware disponível para implementação. Veja a página do modelo YOLO26 completa para tamanhos disponíveis e benchmarks de desempenho.

Link to this sectionSeleção de otimizador e taxa de aprendizado#

A configuração padrão optimizer=auto seleciona o otimizador e a taxa de aprendizado com base no número total de iterações de treinamento:

  • < 10.000 iterações (pequenos conjuntos de dados ou poucas épocas): AdamW com uma taxa de aprendizado baixa, calculada automaticamente
  • > 10.000 iterações (grandes conjuntos de dados): MuSGD (um otimizador híbrido Muon+SGD) com lr=0.01

Para a maioria das tarefas de fine-tuning, a configuração padrão funciona bem sem qualquer ajuste manual. Considere definir o otimizador explicitamente quando:

  • O treinamento está instável (picos de perda ou divergência): tente optimizer=AdamW, lr0=0.001 para uma convergência mais estável
  • Fazendo fine-tuning de um modelo grande em um conjunto de dados pequeno: uma taxa de aprendizado menor como lr0=0.001 ajuda a preservar as características pré-treinadas
O otimizador automático substitui o lr0 manual

Quando optimizer=auto, os valores de lr0 e momentum são ignorados. Para controlar a taxa de aprendizado manualmente, defina o otimizador explicitamente: optimizer=SGD, lr0=0.005.

Link to this sectionCongelando camadas#

O congelamento impede que camadas específicas sejam atualizadas durante o treinamento. Isso acelera o treinamento e reduz o overfitting quando o conjunto de dados é pequeno em relação à capacidade do modelo.

O parâmetro freeze aceita um inteiro ou uma lista. Um inteiro freeze=10 congela as primeiras 10 camadas (índices 0-9), o que cobre a maior parte da backbone do YOLO26. A backbone abrange as camadas 0-10, então freeze=10 deixa o bloco C2PSA final (camada 10) treinável; use freeze=11 para congelar toda a backbone. Uma lista pode conter índices de camada como freeze=[0, 3, 5] para congelamento parcial da backbone, ou strings de nome de módulo como freeze=["23.cv2", "23.one2one_cv2"] para controle refinado sobre ramos específicos dentro de uma camada (aqui, ambos os ramos de regressão de caixa da cabeça de detecção).

Exemplo
model.train(data="custom.yaml", epochs=50, freeze=10)

A profundidade correta de congelamento depende de quão semelhante o domínio de destino é aos dados pré-treinados e de quantos dados de treinamento estão disponíveis:

CenárioRecomendaçãoFundamentação
Grande conjunto de dados, domínio semelhantefreeze=None (padrão)Dados suficientes para adaptar todas as camadas sem overfitting
Pequeno conjunto de dados, domínio semelhantefreeze=10Preserva as características da backbone, reduz os parâmetros treináveis
Conjunto de dados muito pequenofreeze=23Apenas a cabeça de detecção é treinada, minimizando o risco de overfitting
Domínio muito diferente do COCOfreeze=NoneAs características da backbone podem não ser transferidas bem e precisam de retreinamento

A profundidade de congelamento também pode ser tratada como um hiperparâmetro - tentar alguns valores (0, 5, 10) e comparar o mAP de validação é uma forma prática de encontrar a melhor configuração para um conjunto de dados específico.

Link to this sectionPrincipais hiperparâmetros para fine-tuning#

O fine-tuning geralmente requer menos ajustes de hiperparâmetros do que o treinamento do zero. Os parâmetros que mais importam são:

  • epochs: O fine-tuning converge mais rápido do que o treinamento do zero. Comece com um valor moderado e use patience para parar precocemente quando as métricas de validação estagnarem.
  • patience: O padrão de 100 foi projetado para execuções de treinamento longas. Reduzi-lo para 10-20 evita desperdício de tempo em execuções que já convergiram.
  • warmup_epochs: O warmup padrão (3 épocas) aumenta gradualmente a taxa de aprendizado a partir de zero, o que evita que grandes atualizações de gradiente danifiquem as características pré-treinadas nas iterações iniciais. Manter o padrão é recomendado mesmo para fine-tuning.

Para a lista completa de parâmetros de treinamento, veja a referência de configuração de treinamento.

Link to this sectionFine-tuning em dois estágios#

O fine-tuning em dois estágios divide o treinamento em duas fases. O primeiro estágio congela a backbone e treina apenas o neck e a cabeça, permitindo que as camadas de detecção se adaptem às novas classes sem interromper as características pré-treinadas. O segundo estágio descongela todas as camadas e treina o modelo completo com uma taxa de aprendizado menor para refinar a backbone para o domínio de destino.

Esta abordagem é particularmente útil quando o domínio de destino difere significativamente do COCO (imagens médicas, imagens aéreas, microscopia), onde a backbone pode precisar de adaptação, mas treinar tudo de uma vez causa instabilidade. Para descongelamento automático com uma abordagem baseada em callback, veja Congelando e descongelando a backbone.

Fine-tuning em dois estágios
from ultralytics import YOLO

# Stage 1: freeze backbone, train head and neck
model = YOLO("yolo26n.pt")
model.train(data="custom.yaml", epochs=20, freeze=10, name="stage1", exist_ok=True)

# Stage 2: unfreeze all, fine-tune with lower lr
model = YOLO("runs/detect/stage1/weights/best.pt")
model.train(data="custom.yaml", epochs=30, lr0=0.001, name="stage2", exist_ok=True)

Link to this sectionProblemas comuns#

Link to this sectionModelo não produz previsões#

  • Dados de treinamento insuficientes: treinar com pouquíssimas amostras é a causa mais comum - o modelo não consegue aprender ou generalizar com poucos dados. Garanta exemplos diversos suficientes por classe antes de investigar outras causas.
  • Verifique os caminhos do conjunto de dados: caminhos incorretos no data.yaml silenciosamente produzem zero rótulos. Execute yolo detect val model=yolo26n.pt data=custom.yaml antes de treinar para confirmar se os rótulos são carregados corretamente.
  • Limite de confiança mais baixo: se existem previsões, mas elas estão sendo filtradas, tente conf=0.1 durante a inferência.
  • Verifique a contagem de classes: certifique-se de que nc no data.yaml corresponda ao número real de classes nos arquivos de rótulo.

Link to this sectionmAP de validação estagna precocemente#

  • Adicione mais dados: o fine-tuning se beneficia significativamente de dados de treinamento adicionais, especialmente exemplos diversos com ângulos, iluminação e planos de fundo variados.
  • Verifique o equilíbrio de classes: classes sub-representadas terão AP baixo. Use cls_pw para aplicar ponderação de classe de frequência inversa (comece com cls_pw=0.25 para desequilíbrio moderado, aumente para 1.0 para desequilíbrio severo).
  • Reduza a augmentação: para conjuntos de dados muito pequenos, a augmentação pesada pode prejudicar mais do que ajudar. Tente mosaic=0.5 ou mosaic=0.0.
  • Aumente a resolução: para conjuntos de dados com objetos pequenos, tente imgsz=1280 para preservar detalhes.

Link to this sectionO desempenho degrada nas classes originais após o fine-tuning#

Isso é conhecido como esquecimento catastrófico - o modelo perde o conhecimento aprendido anteriormente quando ajustado exclusivamente em novos dados. O esquecimento é quase inevitável sem incluir imagens do conjunto de dados original junto com os novos dados. Para mitigar isso:

  • Mescle conjuntos de dados: inclua exemplos das classes originais junto com as novas classes durante o fine-tuning. Esta é a única maneira confiável de evitar o esquecimento.
  • Congele backbone e neck: congelar tanto a backbone quanto o neck para que apenas a cabeça de detecção treine ajuda em execuções curtas de fine-tuning com uma taxa de aprendizado muito baixa.
  • Treine por menos épocas: quanto mais tempo o modelo treina exclusivamente em novos dados, mais o esquecimento aumenta.

Link to this sectionFAQ#

Link to this sectionQuantas imagens preciso para fazer o fine-tuning do YOLO?#

Não há um mínimo fixo - os resultados dependem da complexidade da tarefa, do número de classes e de quão semelhante o domínio é ao COCO. Imagens mais diversas (iluminação, ângulos, planos de fundo variados) importam mais do que a quantidade bruta. Comece com o que você tem e aumente a escala se as métricas de validação forem insuficientes.

Link to this sectionComo faço o fine-tuning do YOLO26 em um conjunto de dados personalizado?#

Carregue um arquivo .pt pré-treinado e chame .train() com o caminho para um data.yaml personalizado. A Ultralytics lida automaticamente com transferência de peso, reinicialização da cabeça de detecção e seleção de otimizador. Veja a seção Exemplo básico de fine-tuning para o exemplo completo de código.

Link to this sectionPor que meu modelo YOLO ajustado não está detectando nada?#

As causas mais comuns são caminhos incorretos no data.yaml (que produzem silenciosamente zero rótulos), uma incompatibilidade entre nc no YAML e os arquivos de rótulo reais, ou um limite de confiança alto demais. Veja Problemas comuns para uma lista de verificação completa de solução de problemas.

Link to this sectionQuais camadas do YOLO devo congelar para o fine-tuning?#

Depende do tamanho do conjunto de dados e da semelhança do domínio. Para pequenos conjuntos de dados com um domínio semelhante ao COCO, congelar a backbone (freeze=10) evita o overfitting. Para domínios muito diferentes do COCO, deixar todas as camadas descongeladas (freeze=None) permite que a backbone se adapte. Veja Congelando camadas para recomendações detalhadas.

Link to this sectionComo evito o esquecimento catastrófico ao fazer o fine-tuning do YOLO em novas classes?#

Inclua exemplos das classes originais nos dados de treinamento junto com as novas classes. Se isso não for possível, congelar mais camadas (freeze=10 ou superior) e usar uma taxa de aprendizado menor ajuda a preservar o conhecimento pré-treinado. Veja O desempenho degrada nas classes originais para mais detalhes.

Colaboradores

Comentários