Saltar para o conteúdo

Dicas para obter os melhores resultados do treino YOLOv5

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

Na maioria das vezes, podem ser obtidos bons resultados sem alterações aos modelos ou às definições de treino, desde que o conjunto de dados seja suficientemente grande e bem rotulado. Se, à partida, não obtiver bons resultados, existem medidas que pode tomar para melhorar, mas recomendamos sempre que os utilizadores treinem primeiro com todas as predefinições antes de considerarem quaisquer alterações. Isto ajuda a estabelecer uma linha de base de desempenho e a identificar áreas que podem ser melhoradas.

Se tiver dúvidas sobre os resultados do seu treino recomendamos que forneça o máximo de informações possível se espera uma resposta útil, incluindo gráficos de resultados (perdas de comboio, perdas de valor, 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 eles estão localizados no seu project/name diretório, normalmente yolov5/runs/train/exp.

Reunimos abaixo um guia completo para os utilizadores que pretendem obter os melhores resultados nas suas formações em YOLOv5 .

Conjunto de dados

  • Imagens por turma. ≥ 1500 imagens por turma recomendadas
  • Instâncias por classe. ≥ 10000 instâncias (objectos etiquetados) por classe recomendadas
  • Variedade de imagens. Deve ser representativa do ambiente implementado. Para casos de utilização real, recomendamos imagens de diferentes horas do dia, diferentes estações do ano, diferentes condições meteorológicas, diferentes iluminações, diferentes ângulos, diferentes fontes (recolhidas em linha, recolhidas localmente, diferentes câmaras), etc.
  • Consistência de etiquetas. Todas as instâncias de todas as classes em todas as imagens devem ser etiquetadas. A etiquetagem parcial não funciona.
  • Precisão das etiquetas. As etiquetas devem envolver cada objeto de perto. Não deve haver espaço entre um objeto e a sua caixa delimitadora. Não deve faltar uma etiqueta a nenhum objeto.
  • Verificação do rótulo. Ver train_batch*.jpg no início do comboio para verificar se as etiquetas estão corretas, ou seja, ver exemplo mosaico.
  • Imagens de fundo. As imagens de fundo são imagens sem objectos que são adicionadas a um conjunto de dados para reduzir os falsos positivos (FP). Recomendamos cerca de 0-10% de imagens de fundo para ajudar a reduzir os FPs (COCO tem 1000 imagens de fundo para referência, 1% do total). Não são necessárias etiquetas para as imagens de fundo.

Análise COCO

Seleção de modelos

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

YOLOv5 Modelos

  • Iniciar a partir de pesos pré-treinados. Recomendado para conjuntos de dados de pequena e média dimensão (ou seja COV, VisDrone, GlobalWheat). Passa o nome do modelo para a função --weights argumento. Os modelos são descarregados automaticamente do última versão 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çar do zero. Recomendado para grandes conjuntos de dados (i.e. COCO, Objectos365, OIv6). Passe o YAML da arquitetura do modelo em que está interessado, juntamente com um --weights '' argumento:
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 formação

Antes de modificar qualquer coisa, primeiro treine com as configurações padrão para estabelecer uma linha de base de desempenho. Uma lista completa das definições do train.py pode ser encontrada no argparser do train.py.

  • Épocas. Comece com 300 épocas. Se o ajuste excessivo ocorrer cedo, pode reduzir as épocas. Se o sobreajuste não ocorrer após 300 épocas, treine durante mais tempo, ou seja, 600, 1200, etc. épocas.
  • Tamanho da imagem. O COCO treina com uma resolução nativa de --img 640embora, devido à elevada quantidade de pequenos objectos no conjunto de dados, possa beneficiar da formação em resoluções mais elevadas, como --img 1280. Se existirem muitos objectos pequenos, os conjuntos de dados personalizados beneficiarão da formação com resolução nativa ou superior. Os melhores resultados de inferência são obtidos com a mesma --img como o treino foi efectuado, ou seja, se treinar a --img 1280 deve também testar e detetar em --img 1280.
  • Tamanho do lote. Utilizar o maior --batch-size que o seu hardware permite. Os lotes pequenos produzem fracos normalização de lotes estatísticas e deve ser evitada. Pode utilizar --batch-size -1 para selecionar automaticamente o tamanho de lote ideal para a sua GPU.
  • Taxa de aprendizagem. A programação da taxa de aprendizagem padrão funciona bem na maioria dos casos. Para uma convergência mais rápida, pode tentar utilizar a opção --cos-lr para ativar a programação da taxa de aprendizagem cosseno, que reduz gradualmente a taxa de aprendizagem seguindo uma curva cosseno ao longo das épocas.
  • Aumento dos dados. YOLOv5 inclui várias técnicas de aumento, como o mosaico, que combina várias imagens de treino. Para as últimas épocas, considere a utilização de --close-mosaic 10 para desativar o aumento do mosaico, que pode ajudar a estabilizar a formação.
  • Hiperparâmetros. Os hiperparâmetros predefinidos estão em hyp.scratch-low.yaml. Recomendamos que treine primeiro com os hiperparâmetros predefinidos antes de pensar em modificar qualquer um deles. Em geral, o aumento dos hiperparâmetros de aumento reduzirá e atrasará o sobreajuste, permitindo treinos mais longos e um mAP final mais elevado. A redução dos hiperparâmetros de ganho do componente de perda como hyp['obj'] ajudará a reduzir o sobreajuste nesses componentes de perda específicos. Para um método automatizado de otimização destes hiperparâmetros, consulte o nosso Tutorial de evolução de hiperparâmetros.
  • Treino de precisão misto. Permitir a formação de precisão mista com --amp para acelerar o treino e reduzir a utilização de memória sem sacrificar a precisão do modelo.
  • Treino GPU . Se tiver várias GPUs, use --device 0,1,2,3 para distribuir a formação entre eles, o que pode reduzir significativamente o tempo de formação.
  • Paragem antecipada. Utilização --patience 50 para parar o treino se as métricas de validação não melhorarem durante 50 épocas, poupando tempo e evitando o sobreajuste.

Técnicas avançadas de otimização

  • Aprendizagem por transferência. Para conjuntos de dados especializados, comece com pesos pré-treinados e descongele gradualmente as camadas durante o treino para adaptar o modelo à sua tarefa específica.
  • Poda do modelo. Após o treino, considere a possibilidade de podar o seu modelo para remover pesos redundantes e reduzir o tamanho do modelo sem perda significativa de desempenho.
  • Conjunto de modelos. Para aplicações críticas, treine vários modelos com configurações diferentes e combine as suas previsões para melhorar a precisão.
  • Aumento do tempo de teste. Ativar a TTA durante a inferência com --augment para melhorar a precisão da previsão, calculando a média dos resultados das versões aumentadas da imagem de entrada.

Ler mais

Se quiser saber mais, um bom ponto de partida é a "Receita para Treinar Redes Neuronais" de Karpathy, que tem óptimas ideias para o treino que se aplicam amplamente a todos os domínios de ML: https://karpathy.github.io/2019/04/25/recipe/

Para obter informações mais pormenorizadas sobre as definições e configurações de treino, consulte a documentação sobre as definições de treino doUltralytics , que fornece explicações exaustivas sobre todos os parâmetros disponíveis.

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

FAQ

Como posso saber se o meu modelo está a sofrer de sobreajuste?

O seu modelo pode estar a sofrer de sobreajuste se a perda de treino continuar a diminuir enquanto a perda de validação começa a aumentar. Monitorize o mAP de validação - se este atingir um patamar ou diminuir enquanto a perda de treino continua a melhorar, é um sinal de sobreajuste. As soluções incluem adicionar mais dados de treinamento, aumentar o aumento de dados ou implementar técnicas de regularização.

Qual é a dimensão ideal do lote para treinar YOLOv5?

O tamanho ideal do lote depende da memória GPU . Tamanhos de lote maiores geralmente fornecem melhores estatísticas de normalização de lote e estabilidade de treinamento. Use o maior tamanho de lote que seu hardware pode manipular sem ficar sem memória. É possível usar --batch-size -1 para determinar automaticamente o tamanho ideal do lote para a sua configuração.

Como posso acelerar o treino YOLOv5 ?

Para acelerar o treino, experimente: ativar o treino de precisão mista com --amputilizando várias GPUs com --device 0,1,2,3, armazenando em cache o seu conjunto de dados com --cachee otimizar o tamanho do lote. Considere também a utilização de uma variante de modelo mais pequena, como o YOLOv5s, se a precisão absoluta não for crítica.

📅C riado há 1 ano ✏️ Atualizado há 8 dias

Comentários