Melhores práticas de aprendizagem automática e sugestões para o treino de modelos
Introdução
Um dos passos mais importantes quando se trabalha num projeto de visão computacional é o treino do modelo. Antes de chegar a esta etapa, é necessário definir os objectivos e recolher e anotar os dados. Depois de pré-processar os dados para se certificar de que estão limpos e consistentes, pode passar ao treino do seu modelo.
Ver: Dicas de treinamento de modelos | Como lidar com grandes conjuntos de dados | Tamanho do lote, GPU Utilização e Precisão mista
Então, o que é a formação de modelos? O treino de modelos é o processo de ensinar o seu modelo a reconhecer padrões visuais e a fazer previsões com base nos seus dados. Tem um impacto direto no desempenho e na precisão da sua aplicação. Neste guia, abordaremos as melhores práticas, técnicas de otimização e dicas de resolução de problemas para o ajudar a treinar eficazmente os seus modelos de visão por computador.
Como treinar um modelo de aprendizagem automática
Um modelo de visão por computador é treinado através do ajuste dos seus parâmetros internos para minimizar os erros. Inicialmente, o modelo é alimentado com um grande conjunto de imagens rotuladas. Faz previsões sobre o que está nessas imagens e as previsões são comparadas com as etiquetas ou conteúdos reais para calcular os erros. Estes erros mostram a distância entre as previsões do modelo e os valores reais.
Durante o treino, o modelo faz previsões iterativamente, calcula os erros e actualiza os seus parâmetros através de um processo denominado retropropagação. Neste processo, o modelo ajusta os seus parâmetros internos (weights and biases) para reduzir os erros. Ao repetir este ciclo várias vezes, o modelo melhora gradualmente a sua precisão. Com o tempo, aprende a reconhecer padrões complexos, como formas, cores e texturas.
Este processo de aprendizagem permite que o modelo de visão computacional execute várias tarefas, incluindo a deteção de objectos, a segmentação de instâncias e a classificação de imagens. O objetivo final é criar um modelo que possa generalizar a sua aprendizagem a imagens novas e inéditas, para que possa compreender com precisão os dados visuais em aplicações do mundo real.
Agora que sabemos o que está a acontecer nos bastidores quando treinamos um modelo, vejamos os pontos a considerar quando treinamos um modelo.
Formação em grandes conjuntos de dados
Há alguns aspectos diferentes a ter em conta quando se planeia utilizar um grande conjunto de dados para treinar um modelo. Por exemplo, pode ajustar o tamanho do lote, controlar a utilização de GPU , optar por utilizar formação em várias escalas, etc. Vamos analisar cada uma destas opções em pormenor.
Tamanho do lote e GPU Utilização
Ao treinar modelos em grandes conjuntos de dados, a utilização eficiente do seu GPU é fundamental. O tamanho do lote é um fator importante. É o número de amostras de dados que um modelo de aprendizagem automática processa numa única iteração de formação. Utilizando o tamanho máximo de lote suportado pelo seu GPU, pode tirar o máximo partido das suas capacidades e reduzir o tempo de formação do modelo. No entanto, é necessário evitar ficar sem memória GPU . Se encontrar erros de memória, reduza o tamanho do lote gradualmente até que o modelo seja treinado sem problemas.
Relativamente a YOLO11, é possível definir o batch_size
no parâmetro configuração da formação para corresponder à sua capacidade GPU . Além disso, a definição de batch=-1
no seu script de treino determinará automaticamente o tamanho do lote que podem ser processados de forma eficiente com base nas capacidades do seu dispositivo. Ao ajustar o tamanho do lote, pode tirar o máximo partido dos recursos do GPU e melhorar o processo de formação global.
Formação de subconjuntos
A formação de subconjuntos é uma estratégia inteligente que envolve a formação do seu modelo num conjunto mais pequeno de dados que representa o conjunto de dados maior. Pode poupar tempo e recursos, especialmente durante o desenvolvimento e teste inicial do modelo. Se estiver com pouco tempo ou a experimentar diferentes configurações de modelos, a formação de subconjuntos é uma boa opção.
No que diz respeito a YOLO11, pode implementar facilmente a formação de subconjuntos utilizando o fraction
parâmetro. Este parâmetro permite-lhe especificar qual a fração do seu conjunto de dados a utilizar para treino. Por exemplo, definir fraction=0.1
treinará seu modelo em 10% dos dados. Pode utilizar esta técnica para iterações rápidas e para afinar o seu modelo antes de se comprometer a treinar um modelo utilizando um conjunto de dados completo. A formação de subconjuntos ajuda-o a progredir rapidamente e a identificar potenciais problemas numa fase inicial.
Formação multi-escala
A formação multiescala é uma técnica que melhora a capacidade de generalização do seu modelo, treinando-o em imagens de diferentes tamanhos. O seu modelo pode aprender a detetar objectos a diferentes escalas e distâncias e tornar-se mais robusto.
Por exemplo, ao treinar YOLO11, pode ativar o treino multi-escala definindo o scale
parâmetro. Este parâmetro ajusta o tamanho das imagens de treino por um fator especificado, simulando objectos a diferentes distâncias. Por exemplo, definir scale=0.5
reduzirá o tamanho da imagem para metade, enquanto que scale=2.0
irá duplicá-lo. A configuração deste parâmetro permite que o seu modelo experimente uma variedade de escalas de imagem e melhore as suas capacidades de deteção em diferentes tamanhos de objectos e cenários.
Armazenamento em cache
O armazenamento em cache é uma técnica importante para melhorar a eficiência da formação de modelos de aprendizagem automática. Ao armazenar imagens pré-processadas na memória, o armazenamento em cache reduz o tempo que o GPU gasta à espera que os dados sejam carregados a partir do disco. O modelo pode receber dados continuamente sem atrasos causados por operações de E/S do disco.
O armazenamento em cache pode ser controlado durante o treinamento YOLO11 usando o cache
parâmetro:
cache=True
: Armazena as imagens do conjunto de dados na RAM, proporcionando a velocidade de acesso mais rápida, mas à custa de uma maior utilização da memória.cache='disk'
: Armazena as imagens no disco, mais lento do que a RAM mas mais rápido do que carregar dados novos de cada vez.cache=False
: Desactiva o armazenamento em cache, baseando-se inteiramente na E/S do disco, que é a opção mais lenta.
Treino de precisão misto
A formação de precisão mista utiliza tipos de vírgula flutuante de 16 bits (FP16) e 32 bits (FP32). Os pontos fortes do FP16 e do FP32 são aproveitados usando o FP16 para computação mais rápida e o FP32 para manter a precisão quando necessário. A maioria das operações da rede neural é efectuada em FP16 para beneficiar de um cálculo mais rápido e de uma menor utilização de memória. No entanto, uma cópia mestre dos pesos do modelo é mantida em FP32 para garantir a precisão durante as etapas de atualização dos pesos. É possível lidar com modelos maiores ou tamanhos de lote maiores dentro das mesmas restrições de hardware.
Para implementar o treinamento de precisão mista, você precisará modificar seus scripts de treinamento e garantir que seu hardware (como GPUs) o suporte. Muitas estruturas modernas de aprendizado profundo, como Tensorflowoferecem suporte integrado para precisão mista.
O treino de precisão mista é simples quando se trabalha com YOLO11. Pode utilizar o amp
na sua configuração de formação. Configuração amp=True
permite a formação automática de precisão mista (AMP). A formação de precisão mista é uma forma simples mas eficaz de otimizar o seu processo de formação de modelos.
Pesos pré-treinados
Usar pesos pré-treinados é uma maneira inteligente de acelerar o processo de treinamento do seu modelo. Os pesos pré-treinados vêm de modelos já treinados em grandes conjuntos de dados, dando ao seu modelo uma vantagem inicial. A aprendizagem por transferência adapta os modelos pré-treinados a tarefas novas e relacionadas. O ajuste fino de um modelo pré-treinado envolve começar com esses pesos e, em seguida, continuar o treinamento em seu conjunto de dados específico. Este método de formação resulta em tempos de formação mais rápidos e, frequentemente, num melhor desempenho, porque o modelo começa com uma sólida compreensão das caraterísticas básicas.
O pretrained
O parâmetro facilita a aprendizagem por transferência com YOLO11. Definição pretrained=True
utilizará pesos pré-treinados predefinidos ou pode especificar um caminho para um modelo pré-treinado personalizado. A utilização de pesos pré-treinados e a aprendizagem por transferência aumentam efetivamente as capacidades do seu modelo e reduzem os custos de formação.
Outras técnicas a considerar quando se lida com um grande conjunto de dados
Existem algumas outras técnicas a considerar quando se lida com um grande conjunto de dados:
- Programadores de taxas de aprendizagem: A implementação de programadores de taxas de aprendizagem ajusta dinamicamente a taxa de aprendizagem durante o treino. Uma taxa de aprendizagem bem ajustada pode evitar que o modelo ultrapasse os mínimos e melhorar a estabilidade. Ao treinar YOLO11, o
lrf
ajuda a gerir a programação da taxa de aprendizagem, definindo a taxa de aprendizagem final como uma fração da taxa inicial. - Formação distribuída: Para lidar com grandes conjuntos de dados, o treinamento distribuído pode ser um divisor de águas. É possível reduzir o tempo de treinamento distribuindo a carga de trabalho de treinamento em várias GPUs ou máquinas.
O número de épocas para treinar
Ao treinar um modelo, uma época refere-se a uma passagem completa por todo o conjunto de dados de treino. Durante uma época, o modelo processa cada exemplo no conjunto de treino uma vez e actualiza os seus parâmetros com base no algoritmo de aprendizagem. Normalmente, são necessárias várias épocas para permitir que o modelo aprenda e aperfeiçoe os seus parâmetros ao longo do tempo.
Uma questão comum que surge é como determinar o número de épocas para treinar o modelo. Um bom ponto de partida são 300 épocas. Se o modelo se ajustar demasiado cedo, pode reduzir o número de épocas. Se o sobreajuste não ocorrer após 300 épocas, pode prolongar o treino para 600, 1200 ou mais épocas.
No entanto, o número ideal de épocas pode variar com base no tamanho do conjunto de dados e nos objectivos do projeto. Os conjuntos de dados maiores podem exigir mais épocas para que o modelo aprenda eficazmente, enquanto os conjuntos de dados mais pequenos podem precisar de menos épocas para evitar o sobreajuste. Com relação a YOLO11, é possível definir o parâmetro epochs
no seu guião de formação.
Paragem antecipada
A interrupção antecipada é uma técnica valiosa para otimizar a formação de modelos. Ao monitorizar o desempenho da validação, pode interromper a formação assim que o modelo deixar de melhorar. Pode poupar recursos computacionais e evitar o sobreajuste.
O processo envolve a definição de um parâmetro de paciência que determina o número de épocas a aguardar por uma melhoria nas métricas de validação antes de parar o treino. Se o desempenho do modelo não melhorar dentro destas épocas, o treino é interrompido para evitar o desperdício de tempo e recursos.
Para YOLO11, pode ativar a paragem antecipada definindo o parâmetro patience na sua configuração de formação. Por exemplo, patience=5
significa que a formação será interrompida se não houver melhorias nas métricas de validação durante 5 épocas consecutivas. A utilização deste método garante que o processo de formação permanece eficiente e atinge um desempenho ótimo sem computação excessiva.
Escolher entre formação na nuvem e local
Existem duas opções para treinar o seu modelo: treino na nuvem e treino local.
A formação em nuvem oferece escalabilidade e hardware potente e é ideal para lidar com grandes conjuntos de dados e modelos complexos. Plataformas como Google Cloud, AWS e Azure fornecem acesso a pedido a GPUs e TPUs de elevado desempenho, acelerando os tempos de formação e permitindo experiências com modelos maiores. No entanto, o treino na nuvem pode ser dispendioso, especialmente durante longos períodos, e a transferência de dados pode aumentar os custos e a latência.
A formação local proporciona um maior controlo e personalização, permitindo-lhe adaptar o seu ambiente a necessidades específicas e evitar custos contínuos com a nuvem. Pode ser mais económico para projectos de longo prazo e, uma vez que os seus dados permanecem no local, é mais seguro. No entanto, o hardware local pode ter limitações de recursos e exigir manutenção, o que pode levar a tempos de formação mais longos para modelos grandes.
Seleção de um optimizador
Um optimizador é um algoritmo que ajusta os pesos da rede neural para minimizar a função de perda, que mede o desempenho do modelo. Em termos mais simples, o optimizador ajuda o modelo a aprender, ajustando os seus parâmetros para reduzir os erros. A escolha do otimizador correto afeta diretamente a rapidez e a precisão do aprendizado do modelo.
Também é possível ajustar os parâmetros do optimizador para melhorar o desempenho do modelo. O ajuste da taxa de aprendizagem define o tamanho dos passos ao atualizar os parâmetros. Para estabilidade, pode começar com uma taxa de aprendizagem moderada e diminuí-la gradualmente ao longo do tempo para melhorar a aprendizagem a longo prazo. Além disso, a definição do momento determina a influência que as actualizações anteriores têm nas actualizações actuais. Um valor comum para o momento é cerca de 0,9. Geralmente proporciona um bom equilíbrio.
Optimizadores comuns
Os diferentes optimizadores têm vários pontos fortes e fracos. Vamos dar uma vista de olhos a alguns optimizadores comuns.
-
SGD (Stochastic Gradient Descent):
- Actualiza os parâmetros do modelo utilizando o gradiente da função de perda em relação aos parâmetros.
- Simples e eficiente, mas pode ser lento a convergir e pode ficar preso em mínimos locais.
-
Adam (Adaptive Moment Estimation):
- Combina as vantagens do SGD com o momentum e do RMSProp.
- Ajusta a taxa de aprendizagem para cada parâmetro com base nas estimativas do primeiro e segundo momentos dos gradientes.
- Adequado para dados ruidosos e gradientes esparsos.
- Eficiente e geralmente requer menos ajustes, tornando-o um optimizador recomendado para YOLO11.
-
RMSProp (Root Mean Square Propagation):
- Ajusta a taxa de aprendizagem para cada parâmetro, dividindo o gradiente por uma média de execução das magnitudes dos gradientes recentes.
- Ajuda a resolver o problema do gradiente de fuga e é eficaz para redes neuronais recorrentes.
Para YOLO11, o optimizer
permite-lhe escolher entre vários optimizadores, incluindo SGD, Adam, AdamW, NAdam, RAdam e RMSProp, ou pode defini-lo como auto
para seleção automática com base na configuração do modelo.
Ligação à comunidade
Fazer parte de uma comunidade de entusiastas da visão computacional pode ajudá-lo a resolver problemas e a aprender mais rapidamente. Aqui estão algumas formas de se ligar, obter ajuda e partilhar ideias.
Recursos comunitários
- Problemas do GitHub: Visite o repositórioYOLO11 GitHub e use a guia Problemas para fazer perguntas, relatar bugs e sugerir novos recursos. A comunidade e os mantenedores são muito ativos e estão prontos para ajudar.
- Ultralytics Servidor Discord: Junte-se ao servidor Discord deUltralytics para conversar com outros utilizadores e programadores, obter apoio e partilhar as suas experiências.
Documentação oficial
- Ultralytics YOLO11 Documentação: Consulte a documentação oficial do YOLO11 para obter guias detalhados e dicas úteis sobre vários projectos de visão computacional.
A utilização destes recursos ajudá-lo-á a resolver desafios e a manter-se atualizado com as últimas tendências e práticas na comunidade da visão computacional.
Principais conclusões
O treinamento de modelos de visão computacional envolve seguir boas práticas, otimizar suas estratégias e resolver problemas à medida que eles surgem. Técnicas como ajuste de tamanhos de lote, treinamento de precisão mista e início com pesos pré-treinados podem fazer com que seus modelos funcionem melhor e sejam treinados mais rapidamente. Métodos como a formação de subconjuntos e a paragem antecipada ajudam-no a poupar tempo e recursos. Manter-se ligado à comunidade e acompanhar as novas tendências ajudá-lo-á a continuar a melhorar as suas competências de treino de modelos.
FAQ
Como posso melhorar a utilização de GPU quando treino um grande conjunto de dados com Ultralytics YOLO ?
Para melhorar a utilização do GPU , defina o batch_size
na sua configuração de formação para o tamanho máximo suportado pelo seu GPU. Isto garante a utilização total das capacidades do GPU, reduzindo o tempo de formação. Se encontrar erros de memória, reduza gradualmente o tamanho do lote até que a formação decorra sem problemas. Para YOLO11, a configuração batch=-1
no seu script de formação determinará automaticamente o tamanho ideal do lote para um processamento eficiente. Para mais informações, consulte a secção configuração da formação.
O que é o treino de precisão misto e como o posso ativar em YOLO11?
O treino de precisão mista utiliza tipos de vírgula flutuante de 16 bits (FP16) e 32 bits (FP32) para equilibrar a velocidade computacional e a precisão. Esta abordagem acelera o treino e reduz a utilização de memória sem sacrificar o modelo exatidão. Para ativar a formação de precisão mista em YOLO11, defina amp
parâmetro para True
na sua configuração de treino. Isto ativa o treino de precisão mista automática (AMP). Para obter mais detalhes sobre esta técnica de otimização, consulte a configuração da formação.
Como é que o treino multi-escala melhora o desempenho do modelo YOLO11 ?
O treinamento multiescala melhora o desempenho do modelo treinando em imagens de tamanhos variados, permitindo que o modelo generalize melhor em diferentes escalas e distâncias. Em YOLO11, é possível ativar o treino multiescala definindo o parâmetro scale
na configuração de treino. Por exemplo, scale=0.5
reduz o tamanho da imagem para metade, enquanto scale=2.0
duplica-o. Esta técnica simula objectos a diferentes distâncias, tornando o modelo mais robusto em vários cenários. Para obter definições e mais pormenores, consulte a configuração da formação.
Como é que posso utilizar pesos pré-treinados para acelerar o treino em YOLO11?
A utilização de pesos pré-treinados pode reduzir significativamente os tempos de treino e melhorar o desempenho do modelo, começando por um modelo que já compreende as caraterísticas básicas. Em YOLO11, é possível definir o pretrained
parâmetro para True
ou especifique um caminho para pesos personalizados pré-treinados na sua configuração de treinamento. Esta abordagem, conhecida como aprendizagem por transferência, aproveita o conhecimento de grandes conjuntos de dados para se adaptar à sua tarefa específica. Saiba mais sobre pesos pré-treinados e suas vantagens aqui.
Qual é o número recomendado de épocas para treinar um modelo e como posso defini-lo em YOLO11?
O número de épocas refere-se às passagens completas pelo conjunto de dados de treino durante o treino do modelo. Um ponto de partida típico é 300 épocas. Se o seu modelo se ajustar demasiado cedo, pode reduzir o número. Em alternativa, se não for observado um ajuste excessivo, pode prolongar o treino para 600, 1200 ou mais épocas. Para definir isso em YOLO11, use a opção epochs
no seu script de treino. Para obter conselhos adicionais sobre como determinar o número ideal de épocas, consulte esta secção sobre número de épocas.