Dicas para os Melhores Resultados de Treinamento YOLOv5
📚 Este guia explica como produzir o melhor mAP e resultados de treino com YOLOv5 🚀.
Na maioria das vezes, bons resultados podem ser obtidos sem alterações nos modelos ou nas configurações de treino, desde que o seu conjunto de dados seja suficientemente grande e bem etiquetado. Se, à primeira, não obtiver bons resultados, há medidas que pode tomar para melhorar, mas recomendamos sempre que os utilizadores primeiro treinem com todas as configurações predefinidas antes de considerarem quaisquer alterações. Isto ajuda a estabelecer uma linha de base de desempenho e a identificar áreas para melhoria.
Se tiver dúvidas sobre os resultados do seu treino recomendamos que forneça a maior quantidade de informação possível se espera 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 treinamento, resultados de teste e imagens de estatísticas do conjunto de dados, como labels.png. Todos estes estão localizados no seu project/name
diretório, tipicamente yolov5/runs/train/exp
.
Reunimos um guia completo para usuários que desejam obter os melhores resultados em seus treinamentos YOLOv5 abaixo.
Conjunto de dados
- Imagens por classe. ≥ 1500 imagens por classe recomendado
- Instâncias por classe. ≥ 10000 instâncias (objetos rotulados) por classe recomendado
- Variedade de imagens. Deve ser representativa do ambiente de implantação. Para casos de uso no mundo real, recomendamos imagens de diferentes horários do dia, diferentes estações, diferentes climas, diferentes iluminações, diferentes ângulos, diferentes fontes (raspadas online, coletadas localmente, diferentes câmeras), etc.
- Consistência do rótulo. Todas as instâncias de todas as classes em todas as imagens devem ser rotuladas. A rotulagem parcial não funcionará.
- Precisão da rotulagem. As etiquetas devem envolver cada objeto de perto. Não deve haver espaço entre um objeto e sua caixa delimitadora. Nenhum objeto deve estar sem uma etiqueta.
- Verificação de rótulos. Visualizar
train_batch*.jpg
no início do treino para verificar se seus rótulos parecem corretos, ou seja, veja exemplo mosaic. - 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 a 10% de imagens de fundo para ajudar a reduzir FPs (COCO tem 1000 imagens de fundo para referência, 1% do total). Nenhum rótulo é necessário para imagens de fundo.
Seleção de Modelo
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 YOLOv5s/m, para implementações em nuvem, recomendamos YOLOv5l/x. Consulte nossa tabela 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
--weights
argumento. Os modelos são baixados automaticamente do 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 grandes conjuntos de dados (ou seja, COCO, Objects365, OIv6). Passe o YAML da arquitetura do modelo em que está interessado, juntamente com um vazio
--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, primeiro treine 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 no argparser train.py.
- Épocas. Comece com 300 épocas. Se isto sobreajustar cedo, então pode reduzir as épocas. Se o sobreajuste não ocorrer após 300 épocas, treine por mais tempo, ou seja, 600, 1200 etc. épocas.
- Tamanho da imagem. O COCO treina na resolução nativa de
--img 640
, embora, devido à grande quantidade de objetos pequenos no conjunto de dados, possa se beneficiar do treinamento em resoluções mais altas, como--img 1280
. Se houver muitos objetos pequenos, os conjuntos de dados personalizados se beneficiarão do treinamento em resolução nativa ou superior. Os melhores resultados de inferência são obtidos no mesmo--img
como o treinamento foi executado, ou seja, se você treinar em--img 1280
você também deve testar e detectar em--img 1280
. - Tamanho do lote. Use o maior
--batch-size
que o seu hardware permite. Tamanhos de lote pequenos produzem resultados ruins normalização em lote estatísticas e deve ser evitado. Você pode usar--batch-size -1
para selecionar automaticamente o tamanho ideal do lote para sua GPU. - Taxa de aprendizado. A programação de taxa de aprendizado padrão funciona bem na maioria dos casos. Para uma convergência mais rápida, você pode tentar usar o
--cos-lr
flag para ativar o agendamento da taxa de aprendizado de cosseno, que reduz gradualmente a taxa de aprendizado seguindo uma curva de cosseno ao longo das épocas. - Aumento de dados. O YOLOv5 inclui várias técnicas de aumento de dados, como o mosaic, que combina várias imagens de treinamento. Para as últimas épocas, considere usar
--close-mosaic 10
para desativar o aumento de mosaico, o que pode 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 modificar qualquer um deles. Em geral, aumentar os hiperparâmetros de aumento de dados 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, consulte nosso Tutorial de Evolução de Hiperparâmetros. - Treino com precisão mista. Ative o treinamento de precisão mista com
--amp
para 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,3
para distribuir o treinamento entre eles, o que pode reduzir significativamente o tempo de treinamento. - Paragem antecipada. Use
--patience 50
para 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
- Transfer learning. Para conjuntos de dados especializados, comece com pesos pré-treinados e descongele gradualmente as camadas durante o treino para adaptar o modelo à sua tarefa específica.
- Poda de modelo (Model pruning). 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 (Model ensemble). Para aplicações críticas, treine vários modelos com diferentes configurações e combine suas previsões para melhorar a precisão.
- Aumento de dados em tempo de teste. Ative o TTA durante a inferência com
--augment
para melhorar a precisão da previsão, fazendo a média dos resultados de versões aumentadas da imagem de entrada.
Leitura Adicional
Se você quiser saber mais, um bom lugar para começar é a 'Receita para Treinar Redes Neurais' de Karpathy, que tem ótimas ideias para treinamento que se aplicam amplamente a todos os domínios de ML: https://karpathy.github.io/2019/04/25/recipe/
Para obter informações mais detalhadas sobre as configurações e configurações 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 diga-nos se tiver mais alguma questão!
FAQ
Como sei se meu modelo está super ajustando (overfitting)?
Seu modelo pode estar sofrendo de overfitting se a perda de treinamento continuar a diminuir enquanto a perda de validação começa a aumentar. Monitore o mAP de validação - se ele estabilizar ou diminuir enquanto a perda de treinamento continua melhorando, isso é um sinal de overfitting. As soluções incluem adicionar mais dados de treinamento, aumentar o aumento de dados ou implementar técnicas de regularização.
Qual é o tamanho ideal de batch para treinar o YOLOv5?
O tamanho ideal do batch 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 seu hardware pode suportar sem ficar sem memória. Você pode usar --batch-size -1
para determinar automaticamente o tamanho ideal do lote para sua configuração.
Como posso acelerar o treinamento do YOLOv5?
Para acelerar o treinamento, tente: habilitar o treinamento de precisão mista com --amp
, usando várias GPUs com --device 0,1,2,3
, armazenando em cache seu conjunto de dados com --cache
, e otimizar o tamanho do seu lote. Considere também usar uma variante de modelo menor, como YOLOv5s, se a precisão absoluta não for crítica.