Saltar para o conteúdo

Dicas para obter melhores resultados de treino

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 existir espaço entre um objeto e a sua caixa delimitadora. Nenhum objeto deve estar sem etiqueta.
  • 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
                                             yolov5m.pt
                                             yolov5l.pt
                                             yolov5x.pt
                                             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
                                                      yolov5m.yaml
                                                      yolov5l.yaml
                                                      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 tamanhos de lote pequenos produzem estatísticas de norma de lote fracas e devem ser evitados.
  • 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.

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/

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

📅C riado há 1 ano ✏️ Atualizado há 2 meses

Comentários