Dicas para os melhores resultados de treinamento com YOLOv5
📚 Este guia explica como produzir os melhores resultados de mAP e treinamento com 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 bem rotulado. Se a princípio você não obtiver bons resultados, existem etapas que você pode seguir para melhorar, mas sempre recomendamos que os usuáriostreinem primeiro com todas as configurações padrãoantes de considerar quaisquer alterações. Isso ajuda a estabelecer uma linha de base de desempenho e identificar áreas para melhoria.
Se você tiver dúvidas sobre seus resultados de treinamento,recomendamos que você forneça a maior quantidade de informações possívelse espera uma resposta útil, incluindo gráficos de resultados (perdas de treino, perdas de val, P, R, mAP), curva PR,matriz de confusão, mosaicos de treinamento, resultados de teste e imagens de estatísticas do conjunto de dados, como labels.png. Todos esses arquivos estão localizados no seuproject/namediretório, normalmenteyolov5/runs/train/exp.
Preparamos um guia completo para usuários que desejam obter os melhores resultados em seus treinamentos YOLOv5 abaixo.
Dataset
- Imagens por classe.≥ 1500 imagens por classe recomendadas
- Instâncias por classe.≥ 10000 instâncias (objetos rotulados) por classe recomendadas
- Variedade de imagens.Deve ser representativa do ambiente de implantação. Para casos de uso no mundo real, recomendamos imagens de diferentes horas do dia, diferentes estações, diferentes climas, diferentes iluminações, diferentes ângulos, diferentes fontes (coletadas online, coletadas localmente, diferentes câmeras), etc.
- Consistência de rótulos.Todas as instâncias de todas as classes em todas as imagens devem ser rotuladas. A rotulagem parcial não funcionará.
- Rótuloaccuracy.Os rótulos devem envolver estreitamente cada objeto. Não deve haver espaço entre um objeto e seubounding box. Nenhum objeto deve estar sem um rótulo.
- Disciplina de divisão de treino/val.Certifique-se de que as imagens de validação e teste nunca apareçam no conjunto de treinamento para evitar métricas excessivamente otimistas. Mantenha as distribuições de classes semelhantes entre as divisões.
- Verificação de rótulos.Veja
train_batch*.jpgno início do treino para verificar se seus rótulos parecem corretos, ou seja, veja oexemplode mosaico. - Imagens de fundo.Imagens de fundo são imagens sem objetos que são adicionadas a um conjunto de dados para reduzir Falsos Positivos (FP). Recomendamos cerca de 0-10% de imagens de fundo para ajudar a reduzir FPs (o COCO tem 1000 imagens de fundo como referência, 1% do total). Não são necessários rótulos para imagens de fundo.
Seleção de Modelo
Modelos maiores como YOLOv5x eYOLOv5x6produzirão melhores resultados em quase todos os casos, mas possuem mais parâmetros, exigem mais memória CUDA para treinar e são mais lentos para executar. Para implantaçõesmobilerecomendamos YOLOv5s/m, para implantaçõescloudrecomendamos YOLOv5l/x. Veja nossatabelano README para uma comparação completa de todos os modelos.

-
Comece com pesos pré-treinados.Recomendado para conjuntos de dados de pequeno a médio porte (ou seja,VOC, VisDrone, GlobalWheat). Passe o nome do modelo para o argumento
--weights. Os modelos são baixados automaticamente daúltima versão 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 grandes conjuntos de dados (ou seja,COCO, Objects365, OIv6). Passe o YAML da arquitetura do modelo de seu interesse, junto com um arquivo
--weights ''argumento: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,treine primeiro com as configurações padrão para estabelecer uma linha de base de desempenho. Uma lista completa das configurações de train.py pode ser encontrada notrain.pyargparser.
- Épocas.Comece com 300 épocas. Se ocorrer overfitting cedo, você pode reduzir as épocas. Seoverfittingnão ocorrer após 300 épocas, treine por mais tempo, por exemplo, 600, 1200 épocas, etc.
- Tamanho da imagem.O COCO treina na resolução nativa de
--img 640, embora devido à grande quantidade de pequenos objetos no conjunto de dados, ele possa se beneficiar de treinamento em resoluções mais altas, como--img 1280. Se houver muitos objetos pequenos, conjuntos de dados personalizados se beneficiarão do treinamento na resolução nativa ou superior. Os melhores resultados de inferência são obtidos no mesmo--imgque o usado no treinamento, ou seja, se você treinar em--img 1280você também deve testar e detectar em--img 1280. - Tamanho do lote.Use o maior
--batch-sizeque seu hardware permitir. Tamanhos de lote pequenos produzem estatísticasbatch normalizationruins e devem ser evitados. Você pode usar--batch-size -1para selecionar automaticamente o tamanho de lote ideal para sua GPU. - Taxa de aprendizado.O cronograma de taxa de aprendizado padrão funciona bem na maioria dos casos. Para uma convergência mais rápida, você pode tentar usar a flag
--cos-lrpara habilitar o agendamento de taxa de aprendizado de cosseno, que reduz gradualmente a taxa de aprendizado seguindo uma curva de cosseno ao longo das épocas. - Técnicas de .O YOLOv5 inclui várias técnicas de aumento, como mosaico, que combina várias imagens de treinamento. Para as últimas épocas, considere usar
--close-mosaic 10para desativar o aumento de mosaico, o que pode ajudar a estabilizar o treinamento. - Hiperparâmetros.Os hiperparâmetros padrão estão emhyp.scratch-low.yaml. Recomendamos que você treine com os hiperparâmetros padrão primeiro antes de pensar em modificar qualquer um. Em geral, aumentar os hiperparâmetros de aumento reduzirá e atrasará o overfitting, permitindo treinamentos mais longos e um mAP final mais alto. A redução nos hiperparâmetros de ganho do componente de perda, como
hyp['obj']ajudará a reduzir o overfitting nesses componentes de perda específicos. Para um método automatizado de otimização desses hiperparâmetros, veja nossoTutorial de Evolução de Hiperparâmetros. - Mixed precisiontreinamento.Habilite o treinamento de precisão mista com
--amppara acelerar o treinamento e reduzir o uso de memória sem sacrificar a precisão do modelo. - Treinamento Multi-GPU.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 overfitting.
Técnicas Avançadas de Otimização
- Aprendizado por transferência (Transfer learning).Para conjuntos de dados especializados, comece com pesos pré-treinados e descongele gradualmente as camadas durante o treinamento para adaptar o modelo à sua tarefa específica.
- Poda de modelo.Após o treinamento, considere podar seu modelo para remover pesos redundantes e reduzir o tamanho do modelo sem perda significativa de desempenho.
- Conjunto de modelos (Ensemble).Para aplicações críticas, treine vários modelos com configurações diferentes e combine suas previsões para maior precisão.
- Aumento durante o teste (TTA).Habilite TTA durante a inferência com
--augmentpara melhorar a precisão da previsão calculando a média dos resultados de versões aumentadas da imagem de entrada.
Leitura Adicional
Se você quiser saber mais, um bom ponto de partida é a 'Receita para Treinar' de KarpathyNeural Networks, que tem ótimas ideias para treinamento que se aplicam de forma ampla a todos os domínios de ML: https://karpathy.github.io/2019/04/25/recipe/
Para informações mais detalhadas sobre configurações e ajustes de treinamento, consulte a documentação de configurações de treinamento da Ultralytics, que fornece explicações abrangentes de todos os parâmetros disponíveis.
Boa sorte 🍀 e nos avise se tiver mais alguma dúvida!
FAQ
Como sei se o meu modelo está sofrendo de overfitting?
O seu modelo pode estar sofrendo de overfitting se a perda de treinamento continuar diminuindo enquanto a perda de validação começar a aumentar. Monitore o mAP de validação - se ele estagnar ou diminuir enquanto a perda de treinamento continuar melhorando, isso é um sinal de overfitting. As soluções incluem adicionar mais dados de treinamento, aumentar a data augmentation ou implementar técnicas de regularização.
Qual é o tamanho de batch ideal para treinar YOLOv5?
O tamanho de batch ideal depende da memória da sua GPU. Tamanhos de batch maiores geralmente fornecem melhores estatísticas de normalização de batch e estabilidade de treinamento. Use o maior tamanho de batch que o seu hardware consegue suportar sem exceder a memória. Você pode usar --batch-size -1 para determinar automaticamente o tamanho de batch ideal para a sua configuração.
Como posso acelerar o treinamento do YOLOv5?
Para acelerar o treinamento, tente: habilitar o treinamento de precisão mista com --amp, usar múltiplas GPUs com --device 0,1,2,3, fazer cache do seu dataset com --cache, e otimizar o tamanho do seu batch. Considere também usar uma variante de modelo menor como o YOLOv5s se a precisão absoluta não for crítica.
