Dicas para obter os melhores resultados no treinamento do YOLOv5#
📚 Este guia explica como obter os melhores resultados de mAP e treinamento com o YOLOv5 🚀.
Na maioria das vezes, é possível obter bons resultados sem alterar os modelos ou as configurações de treinamento, desde que seu conjunto de dados seja suficientemente grande e esteja bem rotulado. Se você não obtiver bons resultados de início, há medidas que podem ajudar a melhorá-los, mas recomendamos sempre que primeiro treine com todas as configurações padrão antes de considerar qualquer alteração. Isso ajuda a estabelecer uma linha de base de desempenho e identificar áreas que podem ser melhoradas.
Se tiver dúvidas sobre os resultados do treinamento, recomendamos que você forneça o máximo de informações possível para receber uma resposta útil. Inclua gráficos de resultados (perdas de treinamento, perdas de validação, P, R, mAP), curva PR, matriz de confusão, mosaicos de treinamento, resultados de teste e imagens com estatísticas do conjunto de dados, como labels.png. Tudo isso fica no diretório project/name, normalmente em yolov5/runs/train/exp.
Preparamos abaixo um guia completo para quem quer obter os melhores resultados no treinamento do YOLOv5.
Conjunto de dados#
- Imagens por classe. Recomendamos ≥ 1500 imagens por classe
- Instâncias por classe. Recomendamos ≥ 10000 instâncias (objetos rotulados) por classe
- Variedade de imagens. As imagens devem ser representativas do ambiente de implantação. Para casos de uso no mundo real, recomendamos imagens de diferentes horários do dia, estações do ano, condições climáticas, condições de iluminação, ângulos e fontes (extraídas da internet, coletadas localmente, de diferentes câmeras) etc.
- Consistência dos rótulos. Todas as instâncias de todas as classes em todas as imagens devem ser rotuladas. A rotulagem parcial não funciona.
- Precisão dos rótulos. Os rótulos devem delimitar cada objeto com precisão. Não deve haver espaço entre um objeto e sua caixa delimitadora. Nenhum objeto pode ficar sem rótulo.
- Critérios para a divisão entre treinamento e validação. Garanta que as imagens de validação e teste nunca apareçam no conjunto de treinamento, para evitar métricas excessivamente otimistas. Mantenha distribuições de classes semelhantes entre as divisões.
- Verificação dos rótulos. Visualize
train_batch*.jpgno início do treinamento para verificar se os rótulos estão corretos, ou seja, confira o mosaico de exemplo. - Imagens de fundo. Imagens de fundo são imagens sem objetos que são adicionadas ao conjunto de dados para reduzir os falsos positivos (FP). Recomendamos que cerca de 0-10% das imagens sejam de fundo para ajudar a reduzir os FPs (o COCO tem 1000 imagens de fundo como referência, 1% do total). Não são necessários rótulos para as imagens de fundo.
Seleção do modelo#
Modelos maiores, como o YOLOv5x e o YOLOv5x6, produzirão melhores resultados em quase todos os casos, mas têm mais parâmetros, exigem mais memória CUDA para o treinamento e são mais lentos na execução. Para implantações móveis, recomendamos o YOLOv5s/m; para implantações na nuvem, recomendamos o YOLOv5l/x. Consulte a tabela do nosso README para ver uma comparação completa de todos os modelos.

-
Comece com pesos pré-treinados. Recomendado para conjuntos de dados pequenos a médios (por exemplo, VOC, VisDrone, GlobalWheat). Passe o nome do modelo ao argumento
--weights. Os modelos são baixados automaticamente 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 -
Comece do zero. Recomendado para conjuntos de dados grandes (por exemplo, COCO, Objects365, OIv6). Passe a arquitetura do modelo em YAML que você deseja usar, junto 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
Configurações de treinamento#
Antes de modificar qualquer coisa, primeiro treine com as configurações padrão para estabelecer uma linha de base de desempenho. A lista completa das configurações de train.py está disponível no analisador de argumentos de train.py.
- Épocas. Comece com 300 épocas. Se ocorrer sobreajuste logo no início, você pode reduzir o número de épocas. Se o sobreajuste não ocorrer após 300 épocas, treine por mais tempo, por exemplo, 600, 1200 etc. épocas.
- Tamanho da imagem. O COCO é treinado na resolução nativa de
--img 640, mas, devido à grande quantidade de objetos pequenos no conjunto de dados, pode se beneficiar do treinamento em resoluções mais altas, como--img 1280. Se houver muitos objetos pequenos, os conjuntos de dados personalizados podem se beneficiar do treinamento na resolução nativa ou em uma resolução maior. Os melhores resultados de inferência são obtidos usando o mesmo--imgusado no treinamento; ou seja, se você treinar em--img 1280, também deverá testar e detectar em--img 1280. - Tamanho do lote. Use o maior
--batch-sizeque seu hardware permitir. Lotes pequenos produzem estatísticas ruins de normalização em lote e devem ser evitados. Você pode usar--batch-size -1para selecionar automaticamente o tamanho de lote ideal para sua GPU. - Taxa de aprendizado. A programação padrão da taxa de aprendizado funciona bem na maioria dos casos. Para uma convergência mais rápida, você pode tentar usar a flag
--cos-lrpara ativar a programação da taxa de aprendizado cosseno, que reduz gradualmente a taxa de aprendizado seguindo uma curva cosseno ao longo das épocas. - Aumento de dados. O YOLOv5 inclui várias técnicas de aumento de dados, como mosaico, que combina várias imagens de treinamento. Ajuste a intensidade do aumento de dados por meio do hiperparâmetro
mosaicno arquivo--hyppara ajudar a estabilizar o treinamento. - Hiperparâmetros. Os hiperparâmetros padrão estão em hyp.scratch-low.yaml. Recomendamos que você treine primeiro com os hiperparâmetros padrão antes de pensar em modificá-los. Em geral, aumentar os hiperparâmetros de aumento de dados reduz e retarda o sobreajuste, permitindo treinamentos mais longos e um mAP final mais alto. Reduzir os hiperparâmetros de ganho dos componentes de perda, como
hyp['obj'], ajudará a reduzir o sobreajuste nesses componentes específicos da perda. Para otimizar esses hiperparâmetros automaticamente, consulte nosso Tutorial de evolução de hiperparâmetros. - Treinamento com precisão mista. O YOLOv5 ativa automaticamente a precisão mista automática (AMP) quando detecta uma GPU compatível, acelerando o treinamento e reduzindo o uso de memória sem comprometer a precisão do modelo.
- Treinamento em várias GPUs. Se você tiver várias GPUs, use
--device 0,1,2,3para distribuir o treinamento entre elas, o que pode reduzir significativamente o tempo de treinamento. - Parada antecipada. Use
--patience 50para interromper o treinamento se as métricas de validação não melhorarem por 50 épocas, economizando tempo e evitando o sobreajuste.
Técnicas avançadas de otimização#
- Aprendizado por transferência. Para conjuntos de dados especializados, comece com pesos pré-treinados e, opcionalmente, congele camadas com
--freezepara adaptar o modelo à sua tarefa específica. - Poda de modelos. Depois do treinamento, considere podar o modelo para remover pesos redundantes e reduzir seu tamanho sem uma perda significativa de desempenho.
- Ensemble de modelos. Para aplicações críticas, treine vários modelos com configurações diferentes e combine as previsões deles para melhorar a precisão.
- Aumento de dados no teste. Ative o TTA durante a inferência com
--augmentpara melhorar a precisão das previsões, calculando a média dos resultados de versões aumentadas da imagem de entrada.
Leitura adicional#
Se quiser saber mais, um bom ponto de partida é o texto de Karpathy, “Receita para treinar redes neurais”, que apresenta ótimas ideias de treinamento aplicáveis a todos os domínios de ML: https://karpathy.github.io/2019/04/25/recipe/
Boa sorte 🍀 e conte para nós se tiver outras dúvidas!
Perguntas frequentes#
Seu modelo pode estar com sobreajuste se a perda de treinamento continuar diminuindo enquanto a perda de validação começar a aumentar. Monitore o mAP de validação: se estabilizar ou diminuir enquanto a perda de treinamento continua melhorando, isso é um sinal de sobreajuste. Entre as soluções estão adicionar mais dados de treinamento, aumentar o aumento de dados ou implementar técnicas de regularização.
O tamanho de lote ideal depende da memória da sua GPU. Em geral, lotes maiores oferecem estatísticas melhores de normalização em lote e mais estabilidade no treinamento. Use o maior tamanho de lote que seu hardware consegue processar sem ficar sem memória. Você pode usar
--batch-size -1para determinar automaticamente o tamanho de lote ideal para sua configuração.Para acelerar o treinamento, tente usar várias GPUs com
--device 0,1,2,3, armazenar em cache seu conjunto de dados com--cachee otimizar o tamanho do lote (a precisão mista é ativada automaticamente em GPUs compatíveis). Considere também usar uma variante menor do modelo, como o YOLOv5s, se a precisão absoluta não for essencial.
