Dicas para obter os melhores resultados no treino do YOLOv5#
📚 Este guia explica como obter os melhores resultados de mAP e de treino com o YOLOv5 🚀.
Na maioria das vezes, é possível obter bons resultados sem alterar os modelos nem as definições de treino, desde que o teu conjunto de dados seja suficientemente grande e esteja bem etiquetado. Se não obtiveres bons resultados à primeira, podes tomar algumas medidas para melhorar, mas recomendamos sempre que comeces por treinar com todas as definições predefinidas antes de considerar alterações. Isto ajuda a estabelecer uma linha de base de desempenho e a identificar áreas de melhoria.
Se tiveres dúvidas sobre os teus resultados de treino, recomendamos que forneças o máximo de informação possível se esperas obter 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 ficheiros estão localizados no teu diretório project/name, normalmente em yolov5/runs/train/exp.
Elaborámos abaixo um guia completo para utilizadores que pretendam obter os melhores resultados nos seus treinos do YOLOv5.
Conjunto de dados#
- Imagens por classe. Recomenda-se ≥ 1500 imagens por classe
- Instâncias por classe. Recomenda-se ≥ 10000 instâncias (objetos etiquetados) por classe
- Variedade das imagens. Deve ser representativa do ambiente de implementação. Para casos de utilização no mundo real, recomendamos imagens de diferentes horas do dia, estações do ano, condições meteorológicas, condições de iluminação, ângulos e fontes (extraídas da Internet, recolhidas localmente, de câmaras diferentes), entre outras.
- Consistência das etiquetas. Todas as instâncias de todas as classes em todas as imagens devem estar etiquetadas. A etiquetagem parcial não funciona.
- Precisão das etiquetas. As etiquetas devem delimitar rigorosamente cada objeto. Não deve existir espaço entre um objeto e a sua caixa delimitadora. Nenhum objeto deve ficar sem etiqueta.
- Disciplina na divisão treino/validação. Garante que as imagens de validação e de teste nunca aparecem no conjunto de treino, para evitar métricas excessivamente otimistas. Mantém distribuições de classes semelhantes entre as divisões.
- Verificação das etiquetas. Visualiza
train_batch*.jpgno início do treino para verificar se as tuas etiquetas aparecem corretamente, por exemplo, observa o mosaico de exemplo. - Imagens de fundo. As imagens de fundo são imagens sem objetos, 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 FP (o COCO tem 1000 imagens de fundo como referência, 1% do total). Não são necessárias etiquetas para as imagens de fundo.
Seleção do modelo#
Modelos maiores, como o YOLOv5x e o YOLOv5x6, produzem 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 YOLOv5s/m; para implementações na nuvem, recomendamos YOLOv5l/x. Consulta a tabela do nosso README para uma comparação completa de todos os modelos.

-
Começar a partir de pesos pré-treinados. Recomendado para conjuntos de dados pequenos a médios (por exemplo, VOC, VisDrone, GlobalWheat). Passa o nome do modelo ao argumento
--weights. Os modelos são transferidos automaticamente a partir da versão 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çar do zero. Recomendado para conjuntos de dados grandes (por exemplo, COCO, Objects365, OIv6). Passa a arquitetura do modelo YAML que te interessa, 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
Definições de treino#
Antes de modificares qualquer coisa, começa por treinar com as definições predefinidas para estabelecer uma linha de base de desempenho. Podes encontrar uma lista completa das definições de train.py no argparser de train.py.
- Épocas. Começa com 300 épocas. Se ocorrer sobreajuste precocemente, podes reduzir o número de épocas. Se não ocorrer sobreajuste após 300 épocas, treina durante mais tempo, por exemplo, 600, 1200, etc. épocas.
- Tamanho da imagem. O COCO é treinado na resolução nativa de
--img 640, embora, devido à grande 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 na resolução nativa ou numa resolução superior. Os melhores resultados de inferência são obtidos com o mesmo--imgusado no treino; por exemplo, se treinares com--img 1280, também deves testar e detetar com--img 1280. - Tamanho do lote. Usa o maior
--batch-sizepermitido pelo teu hardware. Devem evitar-se tamanhos de lote pequenos, pois produzem estatísticas de normalização do lote fracas. Podes usar--batch-size -1para selecionar automaticamente o tamanho de lote ideal para a tua GPU. - Taxa de aprendizagem. A programação predefinida da taxa de aprendizagem funciona bem na maioria dos casos. Para uma convergência mais rápida, podes experimentar a flag
--cos-lrpara ativar a programação da taxa de aprendizagem por 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 o mosaico, que combina várias imagens de treino. Ajusta a intensidade do aumento através do hiperparâmetro
mosaicno teu ficheiro--hyppara ajudar a estabilizar o treino. - Hiperparâmetros. Os hiperparâmetros predefinidos encontram-se 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 reduz e atrasa o sobreajuste, permitindo treinos mais longos e um mAP final mais elevado. Reduzir hiperparâmetros de ganho dos componentes da perda, como
hyp['obj'], ajudará a reduzir o sobreajuste nesses componentes específicos da perda. Para obteres um método automático de otimização destes hiperparâmetros, consulta o nosso Tutorial sobre evolução de hiperparâmetros. - Treino com precisão mista. O YOLOv5 ativa automaticamente a precisão mista automática (AMP) quando é detetada uma GPU compatível, acelerando o treino e reduzindo a utilização de memória sem sacrificar a precisão do modelo.
- Treino com várias GPU. Se tiveres várias GPU, usa
--device 0,1,2,3para distribuir o treino entre elas, o que pode reduzir significativamente o tempo de treino. - Paragem antecipada. Usa
--patience 50para interromper 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, começa com pesos pré-treinados e descongela gradualmente as camadas durante o treino para adaptar o modelo à tua tarefa específica.
- Poda do modelo. Após o treino, considera podar o modelo para remover pesos redundantes e reduzir o tamanho do modelo sem uma perda significativa de desempenho.
- Ensemble de modelos. Para aplicações críticas, treina vários modelos com configurações diferentes e combina as suas predições para melhorar a precisão.
- Aumento no momento do teste. Ativa o TTA durante a inferência com
--augmentpara melhorar a precisão das predições, calculando a média dos resultados de versões aumentadas da imagem de entrada.
Leitura adicional#
Se quiseres saber mais, um bom ponto de partida é a «Receita para treinar redes neuronais» de Karpathy, que contém excelentes ideias de treino aplicáveis de forma abrangente a todos os domínios de ML: https://karpathy.github.io/2019/04/25/recipe/
Para obteres informações mais detalhadas sobre as definições e configurações de treino, consulta a documentação das definições de treino da Ultralytics, que fornece explicações abrangentes de todos os parâmetros disponíveis.
Boa sorte 🍀 e diz-nos se tiveres mais alguma pergunta!
Perguntas frequentes#
O teu modelo pode estar a sofrer sobreajuste 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 sobreajuste. As soluções incluem adicionar mais dados de treino, aumentar o aumento de dados ou implementar técnicas de regularização.
O tamanho de lote ideal depende da memória da tua GPU. Tamanhos de lote maiores geralmente fornecem melhores estatísticas de normalização do lote e maior estabilidade de treino. Usa o maior tamanho de lote que o teu hardware consiga suportar sem ficar sem memória. Podes usar
--batch-size -1para determinar automaticamente o tamanho de lote ideal para a tua configuração.Para acelerar o treino, experimenta: usar várias GPU com
--device 0,1,2,3, colocar o teu conjunto de dados em cache com--cachee otimizar o tamanho do lote (a precisão mista é ativada automaticamente em GPU compatíveis). Considera também usar uma variante de modelo mais pequena, como o YOLOv5s, se a precisão absoluta não for crítica.
