YOLO Vision 2026:

Dicas para obter os melhores resultados de treino com o YOLOv5#

📚 Este guia explica como produzir o melhor mAP e resultados de treino com o YOLOv5 🚀.

Na maioria das vezes, bons resultados podem ser obtidos sem alterações nos modelos ou nas definições de treino, desde que o teu conjunto de dados seja suficientemente grande e bem rotulado. Se, à primeira, não obtiveres bons resultados, existem passos que podes seguir para melhorar, mas recomendamos sempre que os utilizadores treinem primeiro com todas as definições predefinidas antes de considerarem quaisquer alterações. Isto ajuda a estabelecer uma base de desempenho e a identificar áreas para melhoria.

Se tens dúvidas sobre os teus resultados de treino, recomendamos que forneças a máxima quantidade de informação possível se esperas uma resposta útil, incluindo gráficos de resultados (perdas de treino, perdas de validação, P, R, mAP), curva PR, confusion matrix, mosaicos de treino, resultados de teste e imagens de estatísticas do conjunto de dados, tais como labels.png. Tudo isto está localizado no teu diretório project/name, tipicamente yolov5/runs/train/exp.

Reunimos um guia completo abaixo para os utilizadores que procuram obter os melhores resultados nos seus treinos com o YOLOv5.

Conjunto de dados#

  • Imagens por classe. Recomenda-se ≥ 1500 imagens por classe
  • Instâncias por classe. Recomenda-se ≥ 10000 instâncias (objetos rotulados) por classe
  • Variedade de imagens. Deve ser representativa do ambiente implementado. Para casos de utilização no mundo real, recomendamos imagens de diferentes alturas do dia, diferentes estações do ano, diferentes condições meteorológicas, diferentes iluminações, diferentes ângulos, diferentes fontes (obtidas online, recolhidas localmente, diferentes câmaras), etc.
  • Consistência de rotulagem. Todas as instâncias de todas as classes em todas as imagens devem ser rotuladas. A rotulagem parcial não funcionará.
  • Accuracy das etiquetas. As etiquetas devem envolver de perto cada objeto. Não deve existir espaço entre um objeto e a sua bounding box. Nenhum objeto deve ficar sem etiqueta.
  • Disciplina de divisão treino/validação. Certifica-te de que as imagens de validação e teste nunca aparecem no conjunto de treino para evitar métricas excessivamente otimistas. Mantém as distribuições de classe semelhantes entre as divisões.
  • Verificação de etiquetas.train_batch*.jpg no início do treino para verificar se as tuas etiquetas parecem corretas, ou seja, vê o mosaico de example.
  • Imagens de fundo. As imagens de fundo são imagens sem objetos que são adicionadas a um conjunto de dados para reduzir Falsos Positivos (FP). Recomendamos cerca de 0-10% de imagens de fundo para ajudar a reduzir os FPs (o COCO tem 1000 imagens de fundo como referência, 1% do total). Não são necessários rótulos para imagens de fundo.

Análise da distribuição de classes do conjunto de dados COCO

Seleção do modelo#

Modelos maiores como o YOLOv5x e o YOLOv5x6 produzirão melhores resultados em quase todos os casos, mas têm mais parâmetros, requerem mais memória CUDA para treinar e são mais lentos a executar. Para implementações móveis, recomendamos o YOLOv5s/m; para implementações na cloud, recomendamos o YOLOv5l/x. Vê a table do nosso README para uma comparação completa de todos os modelos.

YOLOv5 Models

  • Começar a partir de pesos pré-treinados. Recomendado para conjuntos de dados pequenos a médios (ou seja, VOC, VisDrone, GlobalWheat). Passa o nome do modelo para o argumento --weights. Os modelos são transferidos automaticamente a partir da latest YOLOv5 release.

    python train.py --data custom.yaml --weights yolov5s.pt
    python train.py --data custom.yaml --weights yolov5m.pt
    python train.py --data custom.yaml --weights yolov5l.pt
    python train.py --data custom.yaml --weights yolov5x.pt
    python train.py --data custom.yaml --weights custom_pretrained.pt
  • Começar do zero. Recomendado para grandes conjuntos de dados (ou seja, COCO, Objects365, OIv6). Passa a arquitetura YAML do modelo em que estás interessado, juntamente com um argumento --weights '' vazio:

    python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
    python train.py --data custom.yaml --weights '' --cfg yolov5m.yaml
    python train.py --data custom.yaml --weights '' --cfg yolov5l.yaml
    python train.py --data custom.yaml --weights '' --cfg yolov5x.yaml

Definições de treino#

Antes de modificar qualquer coisa, primeiro treina com as definições predefinidas para estabelecer uma linha de base de desempenho. Podes encontrar uma lista completa das definições de train.py no argparser de train.py.

  • Epochs. Começa com 300 épocas. Se isto sofrer de sobreajuste (overfitting) precocemente, podes reduzir as épocas. Se o overfitting não ocorrer após 300 épocas, treina durante mais tempo, por exemplo, 600, 1200 épocas, etc.
  • Tamanho da imagem. O COCO treina à resolução nativa de --img 640, embora devido à elevada quantidade de pequenos objetos no conjunto de dados, possa beneficiar de treinar a resoluções mais altas, tais como --img 1280. Se houver muitos objetos pequenos, os conjuntos de dados personalizados beneficiarão de treinar à resolução nativa ou superior. Os melhores resultados de inferência são obtidos com o mesmo --img em que o treino foi executado, ou seja, se treinares em --img 1280, também deves testar e detetar em --img 1280.
  • Batch size. Usa o maior --batch-size que o teu hardware permitir. Tamanhos de lote pequenos produzem fracas estatísticas de batch normalization e devem ser evitados. Podes usar --batch-size -1 para selecionar automaticamente o tamanho de lote ideal para a tua GPU.
  • Learning rate. O agendamento da taxa de aprendizagem predefinido funciona bem na maioria dos casos. Para uma convergência mais rápida, podes tentar usar a flag --cos-lr para ativar o agendamento da taxa de aprendizagem por cosseno, que reduz gradualmente a taxa de aprendizagem seguindo uma curva de cosseno ao longo das épocas.
  • Data augmentation. O YOLOv5 inclui várias técnicas de aumento, como o mosaico, que combina várias imagens de treino. Ajusta a intensidade do aumento através do hiperparâmetro mosaic no teu ficheiro --hyp para ajudar a estabilizar o treino.
  • Hiperparâmetros. Os hiperparâmetros predefinidos encontram-se em hyp.scratch-low.yaml. Recomendamos que treines primeiro com os hiperparâmetros predefinidos antes de pensar em modificar algum. Em geral, aumentar os hiperparâmetros de aumento reduzirá e atrasará o overfitting, permitindo treinos mais longos e um mAP final mais elevado. A redução dos hiperparâmetros de ganho de componentes de perda, como hyp['obj'], ajudará a reduzir o overfitting nesses componentes de perda específicos. Para um método automatizado de otimização destes hiperparâmetros, consulta o nosso Hyperparameter Evolution Tutorial.
  • Treino com Mixed precision. O YOLOv5 ativa a Automatic Mixed Precision (AMP) automaticamente quando é detetada uma GPU suportada, acelerando o treino e reduzindo o uso de memória sem sacrificar a precisão do modelo.
  • Treino com múltiplas GPUs. Se tiveres várias GPUs, usa --device 0,1,2,3 para distribuir o treino por elas, o que pode reduzir significativamente o tempo de treino.
  • Paragem antecipada (Early stopping). Usa --patience 50 para parar o treino se as métricas de validação não melhorarem durante 50 épocas, poupando tempo e evitando o overfitting.

Técnicas avançadas de otimização#

  • Transfer learning. Para conjuntos de dados especializados, começa com pesos pré-treinados e descongela gradualmente as camadas durante o treino para adaptar o modelo à tua tarefa específica.
  • Model pruning. Após o treino, considera podar o teu modelo para remover pesos redundantes e reduzir o tamanho do modelo sem perda significativa de desempenho.
  • Model ensemble. Para aplicações críticas, treina múltiplos modelos com diferentes configurações e combina as suas previsões para melhorar a precisão.
  • Test-time augmentation. Ativa a TTA durante a inferência com --augment para melhorar a precisão da previsão fazendo a média dos resultados de versões aumentadas da imagem de entrada.

Leitura adicional#

Se quiseres saber mais, um bom ponto de partida é a 'Recipe for Training Neural Networks' de Karpathy, que tem excelentes ideias para treino que se aplicam amplamente em todos os domínios de ML: https://karpathy.github.io/2019/04/25/recipe/

Para obter informações mais detalhadas sobre definições e configurações de treino, consulta a Ultralytics train settings documentation, que fornece explicações abrangentes de todos os parâmetros disponíveis.

Boa sorte 🍀 e avisa-nos se tiveres mais alguma dúvida!

FAQ#

  • O teu modelo pode estar com overfitting se a perda de treino continuar a diminuir enquanto a perda de validação começa a aumentar. Monitoriza o mAP de validação - se estabilizar ou diminuir enquanto a perda de treino continua a melhorar, isso é um sinal de overfitting. As soluções incluem adicionar mais dados de treino, aumentar o aumento de dados ou implementar técnicas de regularização.

  • O tamanho de lote ideal depende da memória da tua GPU. Lotes maiores geralmente fornecem melhores estatísticas de normalização de lotes e estabilidade de treino. Usa o maior tamanho de lote que o teu hardware consegue processar sem ficar sem memória. Podes usar --batch-size -1 para determinar automaticamente o tamanho de lote ideal para a tua configuração.

  • Para acelerar o treino, tenta: usar múltiplas GPUs com --device 0,1,2,3, colocar o teu conjunto de dados em cache com --cache e otimizar o tamanho do teu lote (a precisão mista é ativada automaticamente em GPUs suportadas). Considera também usar uma variante de modelo mais pequena, como o YOLOv5s, se a precisão absoluta não for crítica.

Comentários