Melhores práticas: Treinando uma rede neural de aprendizado profundo

Introdução

O determinante mais importante da eficácia do sistema de aprendizado profundo é o conjunto de dados que os desenvolvedores usam para treiná-lo. Um conjunto de dados de treinamento de alta qualidade melhora a precisão e a velocidade de inferência, ao mesmo tempo em que reduz os recursos do sistema e acelera o processo de aprendizado.

Se os desenvolvedores precisarem executar inferências de aprendizado aprofundado em um sistema com recursos altamente limitados, eles poderão otimizar a rede neural treinada de acordo e eliminar a necessidade de um sistema host. Dispositivos muito menores, como a próxima câmera FLIR® Firefly®, podem executar inferências com base na sua rede neural implantada em sua unidade de processamento integrada Movidius™ Myriad™ 2.

Este artigo descreve como desenvolver um conjunto de dados para classificar e ordenar imagens em categorias, que é o melhor ponto de partida para usuários iniciantes em aprendizado profundo.

 

De quantos dados de treinamento eu preciso?

 A quantidade de dados de treinamento necessária depende dos seguintes fatores:

  1. Número de classes de dados a distinguir, por exemplo, “Maçã”, “Folha, “Ramo”.
  2. Similaridade de classes a distinguir, por exemplo, “Maçã” vs. “Pera” é mais complexo       do que “Maça” vs. “Folha”.
  3. Variação pretendida dentro de cada classe, por exemplo, maçãs de diferentes cores e formas, para maior robustez contra variações no cenário de aplicação da vida real.
  4. Variação indesejada nos dados da imagem, por exemplo, ruído, diferenças no balanço do branco, brilho, contraste, tamanho do objeto, ângulo de visão, etc.

 

Algumas centenas de imagens podem ser suficientes para fornecer resultados aceitáveis, enquanto aplicativos mais complexos podem exigir mais de um milhão de imagens. A melhor maneira de determinar os requisitos de dados de treinamento é reunir dados e testar seu modelo com eles. Encontrar problemas como  o que você está resolvendo também pode servir de bom ponto de partida para estimar o tamanho do conjunto de dados.

Sua rede chegará a um ponto em que dados adicionais não melhoram a precisão do modelo. É improvável que seu modelo alcance 100% de precisão, independentemente do tamanho do conjunto de dados de treinamento. Entender o equilíbrio de velocidade e precisão exigido por seu aplicativo específico ajudará você a determinar se os dados de treinamento adicionais são necessários.

 

 

Testar com dados de validação

O conjunto de dados da sua imagem deve ser grande o suficiente para fornecer dados de validação, que serão usados para avaliar a precisão e a velocidade da rede conforme ela é treinada. Essas imagens devem ser selecionadas aleatoriamente no conjunto de dados para garantir que sejam representativas o máximo possível.

No caso de conjuntos de dados pequenos ou se houver disponibilidade de tempo e potência computacional suficientes, o desempenho de reconhecimento também pode ser determinado pela validação de várias dobras. Aqui, um conjunto de dados é dividido em, por exemplo, cinco segmentos aleatórios. Assim, uma rede neural é treinada com quatro segmentos e validada com o segmento restante. Este treinamento e validação são repetidos para todas as cinco combinações de segmentos de treinamento e validação. O valor médio das taxas de reconhecimento indica o desempenho esperado. O desvio padrão indica a representatividade do conjunto de dados.

 

Melhorando seu conjunto de dados

O aprendizado profundo é um processo interativo. As redes fazem previsões sobre os dados de treinamento, que são usados para melhorar a rede. Esse processo é repetido até que a rede atinja o nível desejado de precisão. Quanto maior o conjunto de dados, mais variância que pode ocorrer no aplicativo de destino é apresentada ao algoritmo de aprendizado profundo. Conjuntos de dados muito pequenos não fornecem informações suficientes para o algoritmo funcionar corretamente. Como resultado, você pode ver um bom desempenho de reconhecimento nos dados de treinamento, mas uma taxa de reconhecimento em torno da probabilidade de adivinhação nos dados de validação. Uma fase de aquisição de dados de treinamento bem planejada que produz imagens precisamente rotuladas com um mínimo de variação desnecessária reduz a quantidade de dados de treinamento necessários, acelera o treinamento e melhora a precisão e a velocidade de inferência.

 

Minimize as diferenças entre imagens de treinamento e imagens de produção

A captura de imagens com as mesmas câmeras, ótica e iluminação como o futuro sistema de produção elimina a necessidade de compensar as diferenças de geometria, iluminação e resposta espectral entre dados de treinamento e de imagem ao vivo. Câmeras de alta qualidade com sensores Pregius®, interfaces GenICam® e a rica funcionalidade GPIO facilitam a automatização da aquisição de bons conjuntos de dados de treinamento.

 

Usando ambientes controlados para reduzir o conjunto de dados

 Um bom conjunto de dados de treinamento inclui exemplos de variação quando esperado e minimiza a variação, onde pode ser eliminado pelo projeto do sistema. Por exemplo, inspecionar maçãs enquanto elas ainda estão na árvore é muito mais complexo do que inspecionar as mesmas maçãs em uma esteira transportadora. O sistema externo precisa de treinamento para reconhecer maçãs em diferentes distâncias, orientações e ângulos, e deve levar em conta a mudança de iluminação e condições climáticas. Um modelo que executa consistentemente requer um conjunto de dados muito grande.

Capturar imagens de maçãs em um ambiente controlado permite que os projetistas de sistemas eliminem muitas fontes de variação e obtenham inferência de alta precisão usando um conjunto de dados muito menor. Isso, por sua vez, reduz o tamanho da rede e permite que ela seja executada em um hardware compacto e independente, como o FLIR Firefly, desenvolvido pela Intel Movidius Myriad 2.

desc    

Fig. 1. As imagens capturadas sob condições controladas (A) têm menos variação do que as imagens capturadas sob condições não controladas (B).

 

Melhore os resultados com dados rotulados com precisão

Os rótulos são usados para testar previsões feitas durante o treinamento. Os rótulos devem representar as imagens a que pertencem; rótulos imprecisos ou “ruidosos” são um problema comum com conjuntos de dados montados usando pesquisas de imagens da Internet. Anexar rótulos aos nomes dos arquivos de imagem é uma boa ideia, pois reduz a confusão potencial ao gerenciar e usar os dados de treinamento.

       

Fig. 2. Exemplos de imagens bem selecionadas (A) e mal selecionadas (B) para a categoria “maçã”.

 

Rotular dados para segmentação é muito mais complexo e demorado do que a classificação.

Fig. Rotular imagens para segmentação é muito mais complexo do que para classificação.

 

Melhorando a qualidade e quantidade de um conjunto de dados existente

Aumento para expandir o conjunto de dados

Alguns sistemas, como os de inspeção de frutas, examinam objetos cuja orientação não é controlada. Para esses sistemas, o aumento de dados é uma maneira útil de expandir rapidamente o conjunto de dados usando transformações afins e projetivas. A transformação de cores também pode expor a rede a uma maior variedade de imagens. Os desenvolvedores devem cortar as imagens transformadas para manter as dimensões de entrada que a rede neural precisa.

Fig. 5. Exemplos de transformações, incluindo rotação, dimensionamento e corte.

Normalização para precisão aprimorada

A normalização dos dados torna o treinamento da rede neural mais eficiente.  As imagens normalizadas não parecem naturais para os humanos, mas são mais eficazes para o treinamento de redes neurais precisas. Os desenvolvedores podem normalizar valores de pixel e numéricos da mesma maneira.

          

Fig. 6. Imagem original (A) vs. imagem usando o método de normalização comum Y = (x - x.mean()) / x.std()

 

Dados sintéticos

Em situações que exigem grandes quantidades de dados de treinamento que não podem ser criados usando o aumento do conjunto de dados, os dados sintéticos são uma ferramenta poderosa. Dados sintéticos são imagens geradas artificialmente que podem ser usadas para gerar rapidamente grandes quantidades de dados segmentados perfeitamente e pré-rotulados. No entanto, apenas os dados sintéticos não são suficientes para treinar uma rede que forneça resultados precisos e reais.  Melhorar o realismo dos dados sintéticos requer pós-processamento.

 

Conclusão

Um conjunto de dados de treinamento de alta qualidade melhora a precisão e a velocidade de inferência, ao mesmo tempo em que reduz os recursos do sistema e acelera o processo de treinamento. Existem métodos para aumentar a quantidade e a qualidade do conjunto de dados. A câmera FLIR Firefly é uma ótima opção para designers que desejam minimizar o tamanho do sistema, obter inferências de alta precisão, adquirir conjuntos de dados de treinamento e implantar sua rede neural.

Saiba mais em www.flir.com/firefly.

 

Artigos Relacionados