Salta para o conteúdo

Dicas para obteres melhores resultados no 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, no início, não obtiveres bons resultados, há medidas que podes tomar para melhorar, mas recomendamos sempre que os utilizadores treinem primeiro com todas as predefinições antes de considerarem quaisquer alterações. Isso ajuda a estabelecer uma linha de base de desempenho e a identificar áreas de melhoria.

Se tiveres dúvidas sobre os resultados do teu treino recomendamos que forneças o máximo de informações possível se esperas uma resposta útil, incluindo gráficos de resultados (perdas de treino, perdas de valor, P, R, mAP), curva PR, matriz de confusão, mosaicos de treino, resultados de testes e imagens de estatísticas do conjunto de dados, como labels.png. Todos estes estão localizados no teu project/name 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 no mundo 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 online, recolhidas localmente, diferentes câmaras), etc.
  • Consistência de etiquetas. Todas as instâncias de todas as classes em todas as imagens têm de 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. Vê train_batch*.jpg no início do comboio para verificar se as tuas etiquetas estão correctas, ou seja, vê 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 implantações móveis, recomendamos o YOLOv5s/m, para implantações na nuvem, recomendamos o YOLOv5l/x. Consulta a nossa tabela README para uma comparação completa de todos os modelos.

YOLOv5 Modelos

  • Começa com 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 argumenta. Os modelos são descarregados automaticamente do Última versão do YOLOv5.
python train.py --data custom.yaml --weights yolov5s.pt
                                             yolov5m.pt
                                             yolov5l.pt
                                             yolov5x.pt
                                             custom_pretrained.pt
  • Começa do zero. Recomendado para grandes conjuntos de dados (i.e. COCO, Objectos365, OIv6). Passa o YAML da arquitetura do modelo em que estás interessado, juntamente com um --weights '' argumenta:
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 treina 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. Começa com 300 épocas. Se o overfitting ocorrer cedo, podes reduzir as épocas. Se o sobreajuste não ocorrer após 300 épocas, treina 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 objectos pequenos no conjunto de dados, possa beneficiar do treino em resoluções mais elevadas, como --img 1280. Se existirem muitos objectos pequenos, os conjuntos de dados personalizados beneficiarão do treino na resolução nativa ou superior. Os melhores resultados de inferência são obtidos com a mesma --img como o treino foi realizado, ou seja, se treinares a --img 1280 deves também testar e detetar em --img 1280.
  • Tamanho do lote. Utiliza o maior --batch-size que o teu 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 treines primeiro com os hiperparâmetros predefinidos antes de pensares em modificar qualquer um deles. Em geral, o aumento dos hiperparâmetros de aumento reduzirá e atrasará o ajuste excessivo, permitindo treinamentos mais longos e um mAP final mais alto. 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, vê o nosso Tutorial de evolução de hiperparâmetros.

Ler mais

Se quiseres saber mais, um bom ponto de partida é o livro "Recipe for Training Neural Networks" de Karpathy, que tem ideias fantásticas para a formação 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!



Criado em 2023-11-12, Atualizado em 2024-01-12
Autores: glenn-jocher (3)

Comentários