Meet YOLO26: next-gen vision AI.

Link to this sectionDicas 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 tiveres dúvidas sobre os teus resultados de treino, recomendamos que forneças a maior 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, matriz de confusão, mosaicos de treino, resultados de teste e imagens de estatísticas do conjunto de dados, como labels.png. Todos estes elementos estão localizados 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.

Link to this sectionConjunto 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á.
  • Precisão da rotulagem. Os rótulos devem envolver estreitamente cada objeto. Não deve existir espaço entre um objeto e a sua caixa delimitadora. Não devem faltar rótulos em nenhum objeto.
  • 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 rótulos.train_batch*.jpg no início do treino para verificar se os teus rótulos parecem corretos, por exemplo, vê o mosaico exemplo.
  • 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

Link to this sectionSeleçã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. Consulta a tabela no nosso README para uma comparação completa de todos os modelos.

YOLOv5 Models

  • Começa com pesos pré-treinados. Recomendado para conjuntos de dados de tamanho pequeno a médio (por exemplo, VOC, VisDrone, GlobalWheat). Passa o nome do modelo para o argumento --weights. Os modelos são transferidos automaticamente a partir do lançamento mais recente do YOLOv5.

    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ça do zero. Recomendado para conjuntos de dados grandes (por exemplo, COCO, Objects365, OIv6). Passa o YAML da arquitetura 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

Link to this sectionDefinições de treino#

Antes de modificares algo, treina primeiro com as definições predefinidas para estabelecer uma base de desempenho. Uma lista completa das definições do train.py pode ser encontrada no argparser do train.py.

  • Épocas. Começa com 300 épocas. Se isto causar overfitting precocemente, podes reduzir as épocas. Se o overfitting não ocorrer após 300 épocas, treina por mais tempo, por exemplo, 600, 1200, etc. épocas.
  • Tamanho da imagem. O COCO treina com uma resolução nativa de --img 640, embora, devido à elevada quantidade de objetos pequenos no conjunto de dados, possa beneficiar de treino em resoluções mais elevadas, como --img 1280. Se existirem muitos objetos pequenos, os conjuntos de dados personalizados beneficiarão de treino em resolução nativa ou superior. Os melhores resultados de inferência são obtidos com o mesmo --img usado no treino; ou seja, se treinares com --img 1280, deves também testar e detetar com --img 1280.
  • Tamanho do lote. Usa o maior --batch-size que o teu hardware permitir. Tamanhos de lote pequenos produzem estatísticas de normalização de lote pobres e devem ser evitados. Podes usar --batch-size -1 para selecionar automaticamente o tamanho de lote ideal para o teu GPU.
  • Taxa de aprendizagem. O agendamento da taxa de aprendizagem predefinido funciona bem na maioria dos casos. Para uma convergência mais rápida, podes tentar usar o sinalizador --cos-lr para ativar o agendamento de taxa de aprendizagem de cosseno, que reduz gradualmente a taxa de aprendizagem seguindo uma curva de cosseno ao longo das épocas.
  • Aumento de dados. O YOLOv5 inclui várias técnicas de aumento, como mosaico, que combina múltiplas imagens de treino. Ajusta a força do aumento através do hiperparâmetro mosaic no teu ficheiro --hyp para ajudar a estabilizar o treino.
  • Hiperparâmetros. Os hiperparâmetros predefinidos estão em hyp.scratch-low.yaml. Recomendamos que treines primeiro com os hiperparâmetros predefinidos antes de pensares 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 da componente de perda, como hyp['obj'], ajudará a reduzir o overfitting nessas componentes de perda específicas. Para um método automatizado de otimização destes hiperparâmetros, consulta o nosso Tutorial de Evolução de Hiperparâmetros.
  • Treino de precisão mista. O YOLOv5 ativa a Precisão Mista Automática (AMP) automaticamente quando um GPU suportado é detetado, acelerando o treino e reduzindo o consumo de memória sem sacrificar a precisão do modelo.
  • Treino com múltiplos GPUs. Se tiveres múltiplos GPUs, usa --device 0,1,2,3 para distribuir o treino entre eles, o que pode reduzir significativamente o tempo de treino.
  • Paragem precoce. 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.

Link to this sectionTécnicas avançadas de otimização#

  • Aprendizagem por transferência. 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.
  • Poda de modelo. Após o treino, considera podar o teu modelo para remover pesos redundantes e reduzir o tamanho do modelo sem perda significativa de desempenho.
  • Ensemble de modelos. Para aplicações críticas, treina múltiplos modelos com configurações diferentes e combina as suas previsões para melhorar a precisão.
  • Aumento em tempo de teste. Ativa TTA durante a inferência com --augment para melhorar a precisão da previsão, calculando a média dos resultados a partir de versões aumentadas da imagem de entrada.

Link to this sectionLeitura adicional#

Se quiseres saber mais, um bom ponto de partida é a 'Receita para Treinar Redes Neuronais' de Karpathy, que contém excelentes ideias para treino que se aplicam amplamente em todos os domínios de ML: https://karpathy.github.io/2019/04/25/recipe/

Para informações mais detalhadas sobre as definições e configurações de treino, consulta a documentação de definições de treino da Ultralytics, que fornece explicações abrangentes de todos os parâmetros disponíveis.

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

Link to this sectionFAQ#

Link to this sectionComo sei se o meu modelo está com overfitting?#

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.

Link to this sectionQual é o tamanho de lote ideal para treinar o YOLOv5?#

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

Link to this sectionComo posso acelerar o treino do YOLOv5?#

Para acelerar o treino, tenta: usar múltiplos 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 suportados). 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