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.
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.
- 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 640
embora, 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!