Cinco etapas para criar e implantar redes neurais profundas de aprendizado

Usar Aprendizado profundo para simplificar e acelerar a implementação de visão de máquina.

Introdução

O ditado "uma imagem vale mais do que mil palavras" nunca soou tão real no mundo da visão de máquina como hoje. Com o aprendizado de máquina, milhares e até mesmo milhões de linhas de código podem ser substituídas por uma simples rede neural treinada com imagens e muito pouco código.

A grande novidade é que o aprendizado profundo não é mais um método disponível somente para pesquisadores ou pessoas com habilidades altamente especializadas e/ou grandes orçamentos. Atualmente, muitas ferramentas são gratuitas, tutoriais são fáceis de encontrar, o custo de hardware é baixo e até mesmo dados de treinamento estão disponíveis sem qualquer custo. Isso apresenta oportunidades e ameaças à medida que surgem novos participantes para desafiar nomes estabelecidos e impulsionar inovação. Essa situação também oferece oportunidades para seus sistemas de visão de máquina fazer coisas antes inimagináveis, por exemplo, o aprendizado profundo pode ser usado para reconhecer anomalias inesperadas, geralmente muito difíceis ou quase impossíveis de atingir com código tradicional.

Um benefício que vale a pena destacar da implantação de redes neurais de aprendizado profundo é que isso permite que decisões complexas sejam tomadas na borda com hardware mínimo e muito pouco poder de processamento - ARM de baixo custo e sistemas baseados em FPGA, além de novas câmeras de inferência como a FLIR Firefly DL tornam isso possível.

Neste artigo, você aprenderá:

  • Glossário básico usado em aprendizado profundo
  • Tipos de tarefas de visão de máquina para os quais o aprendizado profundo é mais adequado
  • As cinco etapas para desenvolver e implantar uma rede neural para inferência na borda
  • Ferramentas disponíveis e estruturas para iniciar
  • Dicas sobre como facilitar o processo
  • Deficiências potenciais de aprendizado profundo a considerar

O que é Aprendizado profundo: Pontos fundamentais

O Aprendizado profundo é um subconjunto do aprendizado de máquina inspirado no funcionamento do cérebro humano. O que torna o aprendizado "profundo" é o fato de que há várias "camadas" de neurônios de vários pesos que ajudam uma rede neural a tomar sua decisão. O aprendizado profundo pode ser subdividido em dois estágios: treinamento e inferência.

Durante a fase de treinamento, você define o número de neurônios e camadas que comporão sua rede neural e a expõe a dados de treinamento rotulados. Com esses dados, a rede neural aprende sozinha o que é "bom" e o que é "ruim". Por exemplo, se você estiver classificando frutas, deve mostrar para a rede neural imagens de frutas rotuladas como de "Grau A", "Grau B", "Grau C" e assim por diante. A rede neural assim decide as propriedades de cada grau, como tamanho, forma, cor, uniformidade da cor etc. Não é necessário definir manualmente essas características ou mesmo programar o que é muito grande ou muito pequeno; a rede se treina sozinha. Após a conclusão da etapa de treinamento, o resultado é uma rede neural treinada.

O processo de avaliar novas imagens usando uma rede neural para tomar decisões chama-se inferência. Quando você apresenta uma nova imagem à rede neural treinada, ela fornecerá uma inferência (ou seja, uma resposta), como "Grau A com 95% de confiança".

Cinco etapas para desenvolver um aplicativo de aprendizado profundo

De forma ampla, o desenvolvimento de um aplicativo de aprendizado profundo é feito em cinco etapas. Uma descrição de alto nível de cada etapa é apresentada a seguir:

Etapa 1] Identificar a função apropriada do aprendizado profundo

No mundo do aprendizado profundo, as tarefas são classificadas em várias funções. Aquelas que consideramos mais comuns para visão de máquina são:

Classificação

A primeira e mais básica aplicação do aprendizado profundo é a classificação. O processo envolve classificar imagens em classes diferentes e agrupá-las com base em propriedades comuns. Como por exemplo, você pode usar a classificação para separar uma peça defeituosa de uma peça em boas condições em uma linha de produção para fins de controle de qualidade ou enquanto conduz inspeções de solda em PCB, como ilustrado na Fig. 1 abaixo (usando uma câmera de inferência FLIR Firefly DL).

flir-firefly-pcb_solder_inspection.jpg

Fig.1. Classificação usada para identificar soldagens defeituosas usando uma FLIR Firefly DL.

Detecção e Localização

Outra tarefa de aprendizado profundo ideal para visão de máquina chama-se detecção e localização. Usando essa função, é possível identificar recursos em uma imagem e fornecer coordenadas delimitadoras de caixas para determinar sua posição e tamanho. Por exemplo, isso pode ser usado para detectar uma pessoa violando um parâmetro de segurança ao redor de robôs em uma linha de produção ou para identificar uma única peça defeituosa no sistema de transporte de uma linha de produção/montagem.

Segmentação

O terceiro tipo de aprendizado profundo é a segmentação, geralmente usada para identificar quais pixels de uma imagem correspondem a quais objetos. A segmentação é ideal para aplicações em que determinar o contexto d um objeto e o relacionamento entre objetos é necessário (por exemplo, veículos autônomos / Sistemas avançados de assistência a condutores, popularmente chamados ADAS).

Fig.2 Detecção, localização e segmentação usados para identificar objetos em seus locais

Detecção de anomalia

Este tipo de tarefa de aprendizado profundo pode ser usado para identificar regiões que não correspondem a um padrão. Um exemplo típico de uma aplicação em que a detecção de anomalia pode agregar valor seria o controle de estoque e gestão de inventário de supermercados, como ilustrado na Fig. 4. Esta aplicação envolve usar uma câmera de inferência para detectar e destacar prateleiras vazias ou próximas do ponto de reabastecimento, fornecendo notificações em tempo real e aumentando a eficiência.

Etapa 2] Selecionar sua estrutura

Após determinar a função de aprendizado profundo que pretende usar, será necessário um conjunto de ferramentas ou toolset (os desenvolvedores chamam essas estruturas de "framework") mais adequado às suas necessidades. Essas estruturas fornecerão a opção de redes neurais iniciais e ferramentas de treinamento e teste de rede.

Com algumas das maiores empresas de tecnologia do mundo competindo por posições dominantes no mercado de aprendizado profundo, estruturas como TensorFlow da Google, Caffe2 do Facebook e OpenVino da Intel (todas gratuitas) demonstram o volume impressionante de investimento e recursos fluindo no mercado de aprendizado profundo. Do outro lado do espectro, também temos o Pytorch, uma solução de código aberto que agora é parte do Facebook. Essas ferramentas são fáceis de usar e fornecem excelente documentação (incluindo exemplos), assim até um usuário novato pode treinar e implantar uma rede neural com esforço mínimo.

Para discutirmos todas as estruturas disponíveis, precisaríamos de um artigo separado, mas os seguintes itens litam as principais vantagens e desvantagens de três das estruturas mais populares:

Pytorch

  • Simples e fácil de usar
  • Usado em muitos projetos de pesquisa.
  • Geralmente não é usado em grandes implantações.
  • Compatibilidade plena somente com Python.

TensorFlow

  • Grande base de usuários com boa documentação
  • Curva de aprendizado maior comparada ao Pytorch.
  • Oferece implantação de produção escalável e compatível com implantação móvel.

Caffe2

  • Leve, o que se traduz em uma implantação eficiente.
  • Uma das estruturas mais antigas (bibliotecas amplamente compatíveis com CNNs e visão de computador).
  • Mais adequado para dispositivos móveis usando OpenCV.

A rede neural que escolher eventualmente dependerá da complexidade da tarefa e da velocidade que sua inferência precisa ser executada. Por exemplo, é possível escolher uma rede neural com mais camadas e mais neurônios, mas a inferência seria executada mais lentamente. Geralmente, uma rede neural treinada exige muito pouco poder computacional e pode fornecer resultados em questão de milissegundos. Isso permite que inferências de aprendizado profundo sejam executadas na borda com placas ARM de baixa potência ou inferência na borda, com câmeras de inferência especialmente fabricadas, como a FLIR Firefly DL.

Além disso, mesmo as empresas com falta de recursos e funcionários para aprender e implementar uma solução de aprendizado profundo podem confiar em consultores terceirizados, que podem ajudar várias partes interessadas por meio do ciclo inteiro de desenvolvimento, da conceitualização à implantação. Um dos exemplos seria a Enigma Pattern (https://www.enigmapattern.com).

Etapa 3] Preparar dados de treinamento para a rede neural

Dependendo dos tipos de dados que desejar avaliar, será necessário ter um repositório de imagens com o máximo de características que espera usar na sua avaliação e elas precisam ser adequadamente rotuladas. Por exemplo, se sua rede neural precisar identificar uma solda boa de outra ruim, seriam necessárias centenas de variações de como é uma solda boa e o mesmo número de variações de como é uma solda ruim, com rótulos que as identifiquem como tal.

Há vários caminhos para se obter um conjunto de dados de imagens:

  • Para casos comuns, é possível encontrar disponível para compra on-line (em alguns casos até gratuitamente) um conjunto de dados pré-rotulados que correspondam aos seus requisitos específicos.
  • Gerar dados sintéticos pode ser uma opção eficiente para várias aplicações, principalmente por que a rotulagem não é necessária. Empresas como a Cvedia; apoiada pela FLIR (https://www.cvedia.com) empregam tecnologia de simulação e teoria de visão de computação avançada para criar pacotes de treinamento sintéticos de alta fidelidade. Esses conjuntos de dados são anotados e otimizados para treinamento algorítmico.
  • Se as primeiras duas opções não estiverem disponíveis, seria necessário fazer suas próprias imagens e rotulá-las individualmente. Este processo é facilitado por várias ferramentas disponíveis no mercado (algumas ferramentas e técnicas para reduzir o prazo de desenvolvimento são discutidas brevemente a seguir).

Dicas úteis:

No processo de criação do próprio código de aprendizado profundo, vários desenvolvedores abrem o código de suas soluções e as compartilham gratuitamente. Uma dessas ferramentas que é particularmente útil se seu conjunto de dados não tiver sido pré-rotulado chama-se LabelImg; uma ferramenta de anotação de imagens gráficas que ajuda a rotular objetos em caixas delimitadoras dentro das imagens (https://github.com/tzutalin/labelImg). Alternativamente, todo o processo pode ser terceirizado.

Outra forma de reduzir a etapa de preparação de dados compreende aumentar uma imagem em várias imagens diferentes executando processamento de imagem (girar, redimensionar, esticar, clarear/escurecer… etc.). Isso também economizaria tempo de desenvolvimento já que o processo de captura de dados de treinamento e rotulagem de imagens pode ser repassado a um usuário novato.

Além disso, se você tiver limitações específicas de hardware ou preferências, isso se torna ainda mais importante, porque as ferramentas de aprendizado profundo discutidas na próxima seção são compatíveis com um conjunto finito de hardware e geralmente não são intercambiáveis.

Etapa 4] Treinar e validar a rede neural para garantir precisão

Após os dados terem sido preparados, será necessário treinar, testar e validar a precisão de sua rede neural. Esta etapa envolve configurar e executar os scripts no seu computador até que o processo de treinamento forneça níveis aceitáveis de precisão para o seu caso de uso específico. Recomenda-se como melhor prática manter os dados de treinamento e de teste separados, para garantir que os dados de teste com os quais você avaliar não sejam usados durante o treinamento.

Esse processo pode ser acelerado aproveitando o aprendizado de transferência: o processo envolve o uso de uma rede pré-treinada e sua reconfiguração para outra tarefa. Já que muitas camadas em uma rede neural profunda executam extração de recursos, essas camadas não precisam ser retreinadas para classificar novos objetos. Como tal, é possível aplicar técnicas de transferência de aprendizado a redes pré-treinadas como ponto inicial e somente retreinar algumas camadas em vez de treinar toda a rede. Estruturas populares como Caffe2 e TensorFlow fornecem isso gratuitamente.

Além disso, adicionar novos recursos a ser detectados a uma rede neural já treinada é tão fácil quanto adicionar imagens extras a um conjunto de imagens defeituosas e aplicar aprendizado de transferência para retreinar a rede. Isso é significativamente mais fácil e mais rápido do que programação baseada em lógica, quando é necessário adicionar a nova lógica ao código, recompilar e executar enquanto garante que o código recém-adicionado não introduz erros indesejados.

Se você não tem conhecimento de código para treinar sua própria rede neural, há várias GUI (Interfaces gráficas de usuária) baseadas em software que funcionam com estruturas diferentes. Essas ferramentas tornam o processo de treinamento e desenvolvimento bastante intuitivo, mesmo para usuários menos experientes. Matrox MIL é um exemplo do mundo de visão de máquina.

Etapa 5] Implantar a rede neural e executar inferência em novos dados

A última etapa compreende implantar sua rede neural treinada no hardware selecionado para executar testes e coletar dados em campo. As primeiras fases de inferência idealmente deveriam ser usadas no campo para coletar dados de teste adicionais que possam ser usados como dados de treinamento para iterações futuras.

A seção seguinte fornece um resumo breve de métodos típicos de implantação com algumas vantagens e desvantagens associadas:

Implantação em nuvem

  • Economia significativa em custo de hardware
  • Capacidade para expandir rapidamente
  • Capacidade de implantar e propagar mudanças em vários locais
  • Necessidade de conexão de internet é uma das principais desvantagens
  • Latência mais alta comparada com implantação de borda (devido ao volume de transferências de dados entre o hardware local e a nuvem)
  • Confiabilidade mais baixa (problemas de conexão podem causar falhas críticas)

Edge (PC padrão)

  • Ideal para aplicações de alto desempenho
  • Altamente personalizável (criado com peças relevantes para a aplicação)
  • Preço flexível (componentes podem ser selecionados com base na aplicação)
  • Custo mais alto
  • Geralmente, pegada significativamente maior

Edge (ARM, FPGA e Câmeras de inferência como a FLIR Firefly DL)

  • Baixo consumo de energia
  • Economia significativa em hardware periférico
  • Alta confiabilidade
  • Ideal para aplicações que exigem múltiplas câmeras em um sistema (ajuda a descarregar os requisitos de processamento em várias câmeras).
  • Seguro (hardware pode ser isolado de outras interferências)
  • Ideal para aplicações que exigem tamanho compacto
  • Não adequado para tarefas com alta demanda computacional
  • A solução baseada em VPU apresenta desempenho/taxa de potência mais elevada comparada com soluções FPGA
  • A solução FPGA apresenta melhor desempenho comparado à solução baseada em VPU

Imagem: Um exemplo de uma câmera de inferência DL – FLIR Firefly DL

Deficiências potenciais de aprendizado profundo

Agora que fizemos uma abordagem geral do processo de desenvolvimento e implantação, seria pertinente avaliar também algumas deficiências.

  • O aprendizado profundo é uma caixa preta para a maioria e é muito difícil ilustrar realmente / entender como a rede neural toma a sua decisão. Isso pode parecer inconsequente para algumas aplicações, mas empresas dos setores médico, de saúde e ciências da vida têm requisitos rigorosos de documentação para que produtos sejam aprovados pela FDA ou por suas contrapartes de outras regiões. Na maioria dos casos, é necessário estar ciente de como seu software funciona e dos requisitos de documentar toda a operação em detalhes.
  • Outra questão a considerar ao implantar o aprendizado profundo é o fato de ser muito difícil otimizar sua rede neural de maneira previsível. Muitas redes neurais que estão sendo treinadas e usadas no momento aproveitam do aprendizado de transferência para retreinar redes existentes enquanto muito pouca otimização acontece.
  • Até mesmo pequenos erros de rotulagem de dados de treinamento que podem ocorrer frequentemente devido a erro humano podem reduzir a precisão da rede neural. Além disso, é extremamente tedioso depurar os problemas já que teria que revisar todos os seus dados de treinamento individualmente para encontrar o rótulo incorreto.

Além dessas deficiências, muitas aplicações são conceitualmente mais adequadas para solução baseada em lógica. Por exemplo, se o seu problema estiver bem definido, determinado e previsível, usar soluções baseadas em lógica pode oferecer melhores resultados comparado a aprendizado profundo. Exemplos típicos incluem leitura de código de barras, alinhamento de peças, medições precisas etc.

Conclusão

Mesmo com algumas das deficiências destacadas acima, os benefícios potenciais acumulados do aprendizado profundo superam em muito os pontos negativos (desenvolvimento rápido, capacidade de solucionar problemas complexos, facilidade de uso e de implantação, apenas para citar alguns). Além disso, aprimoramentos constantes estão sendo feitos no campo de aprendizado profundo que superam essas deficiências. Por exemplo, mapas de ativação podem ser usados para verificar visualmente quais pixels na imagem estão sendo considerados quando uma rede neural está tomando uma decisão, de modo que possamos entender melhor como a rede chegou àquela conclusão. E mais, com o aumento da adoção, muitas empresas agora estão desenvolvendo suas próprias redes neurais em vez de confiar no aprendizado de transferência, melhorando assim o desempenho e personalizando a solução para problemas específicos. Mesmo em aplicações adequadas para programação baseada em lógica, o aprendizado profundo pode auxiliar a lógica subjacente para aumentar a precisão geral do sistema. Como observação final, está ficando mais fácil e mais barato que do nunca começar a desenvolver seu próprio sistema de aprendizado profundo: clique aqui para saber como criar um sistema de classificação DL por menos de US$ 600.

Estamos aqui para ajudar!

Entre em contato com um especialista em câmeras hoje mesmo.

Contato

Artigos Relacionados