1
TREINAMENTO E OPERAÇÃO DIRETA EM HARDWARE DE UMA
REDE NEURAL ARTIFICIAL E SUA APLICABILIDADE NA
APROXIMAÇÃO DE FUNÇÕES P...
2
1 INTRODUÇÃO
Uma Rede Neural é uma estrutura
desenvolvida com inspiração no cérebro
humano e que visa interligar células...
3
2.2 Neurônios Artificiais
O modelo de um neurônio artificial similar à
estrutura de um neurônio natural foi
proposto por...
4
pudesse aprender a função de controle dos
motores segundo os dados de obstáculos do
percurso captados pelos elementos se...
5
trabalha com tensão nominal de 3,3V e o
sensor 5V.
Para solucionar esse problema foram
desenvolvidas interfaces de tensã...
6
utilizando o controle remoto a ele conectado.
Nesta fase, ao passo que o veículo é guiado,
a rede armazena os dados dos ...
7
Figura 8 – Representação da PMC
4 RESULTADOS
Para fins comparativos, implementou-se
uma rede embarcada no Arduino Due e ...
8
associadas ao comando dos motores
orientados pelo controle sem fio) verificou-
se que a rede é capaz de generalizar a fu...
Próximos SlideShares
Carregando em…5
×

ArtigoFinal_v02

118 visualizações

Publicada em

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
118
No SlideShare
0
A partir de incorporações
0
Número de incorporações
8
Ações
Compartilhamentos
0
Downloads
1
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

ArtigoFinal_v02

  1. 1. 1 TREINAMENTO E OPERAÇÃO DIRETA EM HARDWARE DE UMA REDE NEURAL ARTIFICIAL E SUA APLICABILIDADE NA APROXIMAÇÃO DE FUNÇÕES PARA CONDUÇÃO AUTÔNOMA DE VEÍCULO APÓS SUPERVISIONAMENTO Tiago Correa Prata1 Um treinamento de Rede Neural consiste na modificação dos pesos das conexões das entradas com os neurônios e também entre neurônios. Os pesos iniciais são aleatórios e são modificados de forma iterativa e neste trabalho serão modificados utilizando um algoritmo de aprendizado supervisionado. Usualmente as Redes Neurais são implementadas em simulações computacionais, porém este trabalho visa principalmente realizar a fase de treinamento e operação da rede de forma embarcada, sendo ambas as fases implementadas diretamente em uma plataforma de hardware chamada Arduino Due. A rede desenvolvida é aplicada à condução de um pequeno veículo e visa fazer a aproximar as funções de acionamento dos motores com base nos dados coletados pelo conjunto de sensores do veículo durante a fase de aprendizagem. Palavras-chave: Treinamento em hardware. Redes Neurais Artificiais. Arduino. A Neural Network training consists of changing the weights of the connections of the inputs to the neurons and between neurons. The initial weights are random and modified iteratively and in this work they will be modified using a supervised learning algorithm. Neural Networks are usually implemented in computer simulations, however, this work aims mainly performing the training and operation phase of the embedded network. Both phases are implemented directly in a hardware platform called Arduino Due. The developed network is applied to driving a small vehicle and aims to approximate the functions of driving the motors based on data collected by the sensor array of the vehicle during the learning phase. Palavras-chave: Training hardware. Artificial Neural Networks. Arduino. 1 Aluno do curso de Eng. de Controle e Automação do Instituto Federal de Educação, Ciência e Tecnologia de São Paulo Campus São Paulo. E-mail: <tiagoprata@ymail.com>
  2. 2. 2 1 INTRODUÇÃO Uma Rede Neural é uma estrutura desenvolvida com inspiração no cérebro humano e que visa interligar células computacionais simples denominadas “neurônios”, de modo que esta rede possa interpretar sinais elétricos e apresentar uma resposta adequada para o sistema (HAYKIN, 2001). A aplicação desenvolvida no presente trabalho pode ser classificada como pertencente à área de Automação de Veículos Não-Tripulados e de Controle Automático, pois utiliza uma rede neural embarcada conectada a sensores de proximidade para a coleta de informações do ambiente, processamento dos dados e identificação, com base em um treinamento realizado no próprio dispositivo, da função de acionamento dos motores que controlam a direção de um veículo. O ambiente físico escolhido para embarcar a rede neural foi a plataforma de prototipagem eletrônica Arduino Due. Sua escolha deveu-se a cinco fatores principais: modelo do microcontrolador contido na placa (AT91SAM3X8E – ARM Cortex-M3); velocidade de clock (84 MHz); número de pinos de entrada e saída; acervo bibliográfico existente; e por ter uma linguagem de programação baseada em C/C++, que possibilita a criação de objetos e classes. 2 REDES NEURAIS Segundo Haykin, uma rede neural artificial é uma máquina que é projetada para modelar a maneira como o cérebro realiza uma tarefa particular ou função de interesse. As redes neurais artificiais têm seus primeiros estudos datados de 1943, porém só passaram a ser fortemente pesquisadas no início dos anos 90 e ainda possuem um potencial de pesquisa imenso. Sua teoria baseia-se nos neurônios biológicos (PIÃO, 2012), que serão descritos a seguir. 2.1 Neurônio Biológico Os neurônios são as células constituintes do cérebro e, tipicamente, são de cinco a seis vezes mais lentos que as portas lógicas em silício, contudo, devido ao número espantosamente elevado de neurônios no cérebro, permitem que o cérebro realize algumas operações, como o reconhecimento de imagens mais rapidamente que computadores (MITCHELL, 1997). A interação entre estes neurônios se dá através de sinapses. As sinapses são unidades estruturais e funcionais que medeiam as interações entre os neurônios. Uma sinapse converte um sinal elétrico pré-sináptico em um sinal químico e então volta em um sinal elétrico e sua principal função é transmitir ou barrar o envio da informação vinda do axônio. Figura 1 – Neurônio biológico Fonte: http://www.infoescola.com/wp- content/uploads/2010/01/neur%C3%B4nio.gif O funcionamento de um neurônio biológico (figura 1) pode ser melhor compreendido se este for subdividido em três partes: dendritos, núcleo e axônio. Os dendritos são responsáveis por captar a informação vinda dos outros neurônios. As informações advindas de todas as entradas são acumuladas no núcleo da célula e, por fim, caso o neurônio seja ativado, o impulso nervoso resultante é enviado ao axônio que é o responsável por transmitir o sinal às próximas células (SOUSA, 2011).
  3. 3. 3 2.2 Neurônios Artificiais O modelo de um neurônio artificial similar à estrutura de um neurônio natural foi proposto por McCulloch e Pitts, em 1943, e, como visto na figura 2, é um modelo bastante simples, porém ainda é o modelo mais usado em arquiteturas de redes neurais artificias, pois reproduz algumas características de um neurônio biológico. (PIÃO, 2012). Figura 2 – Modelo não-linear de neurônio Fonte: HAYKIN, S. Redes Neurais – Princípios e Práticas. Porto Alegre: Bookman, 2001. p.36 Ainda segundo Pião, as entradas representam os pulsos recebidos pelos neurônios biológicos, estes podendo ser advindos de outro neurônio ou mesmo de fatores externos; os pesos representam a sensibilidade da membrana pós-sináptica dos neurônios biológicos; a soma do produto das entradas pelos seus pesos é efetuada no bloco somador; o parâmetro bias representa o limiar de disparo do neurônio biológico, e a subtração deste representa a comparação do potencial pós-sináptico com o limiar de disparo; a saída ‘u’ é equivalente ao pulso de saída do neurônio biológico; a função de ativação representa a concentração de neurotransmissores da membrana pré- sináptica do neurônio biológico; e, por fim, a saída ‘y’ equivale a saída final do neurônio biológico. Os sinais de entrada são ponderados de acordo com os pesos de suas conexões, e essa ponderação é feita através da multiplicação dos valores da entrada pelo peso. Todas as entradas são somadas após a ponderação, e então este valor é submetido a uma função de ativação, determinando o limiar de disparo da saída do neurônio. Para o funcionamento eficiente desta rede artificial, é necessário que os pesos de ponderação estejam com valores capazes de balancear bem os valores de entrada. Para isso é necessário que a rede seja ‘treinada’. O processo de treinamento é feito apresentando à rede diversas amostras dos parâmetros de entrada, juntamente com a saída que é desejada para que a rede possa mapear os valores de saída de acordo com entradas recebidas. Quanto maior for número de exemplos apresentados no treinamento, melhor a rede será treinada. 2.3 Perceptron de múltiplas camadas Uma Rede Neural é uma rede formada pela conexão de vários dos neurônios citados anteriormente (também conhecidos como Perceptron). Neurônios diferentes ligados às mesmas entradas e às mesmas saídas são considerados neurônios pertencentes a uma mesma camada, e quando uma rede neural é formada por várias camadas de neurônios Perceptron, está é considerada uma Rede Perceptron de Múltiplas Camadas, ou PMC. As redes PMC são redes versáteis que possuem inúmeras aplicações, tais como aproximação de funções, reconhecimento de padrões, identificação e controle de processos, previsão de séries temporais, otimização de sistemas. (HAYKIN, 2001). 3 METODOLOGIA Este trabalho visa a construção de uma rede PMC para a aproximação de funções, sendo que tanto seu treinamento quanto sua execução sejam feitos diretamente em hardware, sem conexão a um computador para o cálculo dos pesos. Esta rede foi aplicada à condução de um pequeno veículo dotado de um conjunto de sensores para que
  4. 4. 4 pudesse aprender a função de controle dos motores segundo os dados de obstáculos do percurso captados pelos elementos sensores. 3.1 Aspectos computacionais A plataforma Arduino, apesar de sua vasta comunidade de desenvolvedores, não possui uma biblioteca de fácil acesso para a criação e desenvolvimento de Redes Neurais Artificiais, e, por esse motivo, percebeu-se a oportunidade de desenvolver algo que viesse a ser útil não apenas neste trabalho, mas também em trabalhos futuros que desejem utilizar a plataforma Arduino como hardware no qual uma Rede Neural esteja embarcada, inclusive por outros pesquisadores. Sendo assim, a etapa inicial deste projeto foi o de desenvolvimento desta biblioteca. As características do modelo do neurônio Perceptron e sua forma de aplicação nas redes neurais, juntamente com o fato de a linguagem de programação C++ ser orientada a objeto, possibilitaram tornar o Neurônio uma classe de objeto programável. Ou seja, a partir da biblioteca criada torna-se possível a criação de vetores e matrizes de neurônios de forma a construir uma rede neural com uma linha de comando. Como foi dito anteriormente, a camada de uma rede neural é um conjunto de neurônios que compartilham das mesmas entradas e saídas, sendo assim, um vetor de neurônios com essas características pode ser encarado como uma Camada. Partindo deste princípio surgiu na biblioteca a classe de Camadas. Por fim, a biblioteca desenvolvida apresenta um conjunto de funções para desenvolvimento de uma rede PMC, possibilitando que a alteração de poucos parâmetros tais como a topologia, ou função dos neurônios de uma camada, que permitam reestruturar inteiramente a rede. Desenvolver a rede neural sobre o conceito computacional de objeto foi vital para que os testes de diferentes topologias de rede fossem viáveis ao longo do projeto. Atualmente esta biblioteca encontra-se disponível no site: https://github.com/TiagoPrata/Neuronio Outro aspecto computacional importante para o desenvolvimento do projeto foi a existência de uma biblioteca para a integração de um controle sem fio ao Arduino. Este controle foi utilizado no processo de treinamento e será mais detalhado a seguir. 3.2 Aspectos de hardware Para que o treinamento e execução desta rede neural pudessem ser visualizados de forma prática, foi construído um veículo de pequeno porte, munido com 8 sensores ultrassônicos e dois motores DC de 5V para controle e direcionamento do mesmo. O sensor utilizado foi o HC-SR04 (figura 3). Nele, além dos terminais de alimentação (Vcc e Gnd), há outros dois terminais, Trig e Echo, que são responsáveis pelo disparo do sinal do sensor e pela indicação da sua resposta, respectivamente. Figura 3 – Sensor ultrassônico HC-SR04 Uma vez que o terminal Trig é disparado, o alto-falante do sensor dispara um sinal sonoro e o terminal Echo mantem-se em nível lógico 1 até que este sinal ecoado seja recebido, dessa forma é possível avaliar a distância de um objeto de acordo com o tempo que o sinal de resposta demora para atingir o sensor. Apesar da fácil utilização este sensor apresenta incompatibilidade de tensão com o Arduino Due, uma vez que esse Arduino
  5. 5. 5 trabalha com tensão nominal de 3,3V e o sensor 5V. Para solucionar esse problema foram desenvolvidas interfaces de tensão utilizando transistores MOSFET 2N7000 e resistores como mostrado no diagrama da figura 4. Figura 4 – Interface entre sensor ultrassônico e Arduino Para o acionamento dos motores utilizou-se o drive TB6612FNG (figura 5), pois através dele foi possível realizar o acionamento dos motores utilizando sinais PWM. A tabela 1 descreve os terminais do drive e indica suas funções. Figura 5 – Drive de acionamento dos motores Pino Descrição GND Terra do drive VCC Alimentação do drive (3.3V) AO1 Saída para Motor A AO2 BO1 Saída para Motor B BO2 VMOT Alimentação do motor GND Terra do motor PWMA Acionamento PWM do motor A AIN2 Terminais que definem sentido de rotação do motor AAIN1 STBY Utilizado para desligar o drive BIN1 Terminais que definem sentido de rotação do motor ABIN2 PWMB Acionamento PWM do motor B GND Terra do drive Tabela 1 – Terminais do drive TB6612FNG Na figura 6 é possível verificar o veículo construído. Figura 6 – Veículo construído Para a utilização do controle remoto descrito anteriormente foi necessária a associação de um microcontrolador ATMEGA328P ao Arduino Due. Este microcontrolador é responsável; por coletar os dados recebidos através do controle remoto e enviá-los para o Arduino. A comunicação entre eles foi feita utilizando protocolo I²C. (http://www.i2c- bus.org/) 3.3 Funcionamento Inicialmente, durante a fase de treinamento da rede, o veículo deve ser conduzido
  6. 6. 6 utilizando o controle remoto a ele conectado. Nesta fase, ao passo que o veículo é guiado, a rede armazena os dados dos sensores ultrassônicos e também os sinais que são enviados para os motores; estes sinais são do tipo PWM, pois podem modificar a tensão aplicada variando a largura do pulso de onda. Os dados coletados pelos sensores são utilizados como os sinais de entrada da rede e os sinais dos motores são a saída desejada para o treinamento. Antes que esses sinais possam ser lidos pela rede neural eles devem ser pré-processados, pois a rede tem um melhor desempenho trabalhando com valores entre 0 e 1. (NUNES, 2010) Os sinais advindos dos sensores ultrassônicos são, inicialmente, inteiros com 5 casas, portanto para adequá-los a entrada da rede deve-se utilizar a divisão simples a seguir: 𝐸𝑛𝑡𝑟𝑎𝑑𝑎𝑖 = (𝑆𝑖𝑛𝑎𝑙 𝑑𝑜 𝑠𝑒𝑛𝑠𝑜𝑟)𝑖 100000 O sinal PWM originado do Arduino e que é enviado para o motor tem uma resolução de 8 bits, ou seja, pode variar entre 0 e 255, porém, além disso há mais dois bits (que são associados aos pinos xIN1 e xIN2 do drive TB6612FNG, e onde ‘x’ pode ser o motor A ou B) que definem o sentido de rotação dos motores. Como o sinal tratado deve variar entre 0 e 1 definiu-se que: entre 0 e 1 3⁄ é a variação do sinal PWM para o motor girando no sentido horário; entre 1 3⁄ e 2 3⁄ é a faixa em que o motor está parado; e entre 2 3⁄ e 1 é a variação do sinal PWM para o motor girando no sentido anti-horário. Como exemplificado na figura a seguir. Figura 7 – Adequação do sinal PWM Esta rede, portanto, tem como objetivo fazer uma aproximação de função onde os valores lidos nos sensores ultrassônicos são as variáveis de entrada e o sinal PWM resultante dos comandos enviados pelo controle sem fio é o valor de saída da função a ser generalizada pela Rede Neural. Desta forma, foram implementadas diretamente em hardware, duas Redes Neurais semelhantes; uma para o sinal PWM do motor A e outra para o sinal PWM do motor B, assim como indicado abaixo. 𝑃𝑊𝑀𝐴 = 𝑓𝐴(𝑠1, 𝑠2, 𝑠3, 𝑠4, 𝑠5, 𝑠6, 𝑠7, 𝑠8) 𝑃𝑊𝑀 𝐵 = 𝑓𝐵(𝑠1, 𝑠2, 𝑠3, 𝑠4, 𝑠5, 𝑠6, 𝑠7, 𝑠8) A figura 8 mostra uma representação da rede desenvolvida, onde sua topologia segue o método de Kolmogorov (NUNES, 2010): 𝑁 = 2. 𝐸 + 1 Onde N é o número de neurônios na camada escondida e E o número de entradas. Como temos 8 sinais de entrada, teremos 17 neurônios na camada escondida.
  7. 7. 7 Figura 8 – Representação da PMC 4 RESULTADOS Para fins comparativos, implementou-se uma rede embarcada no Arduino Due e outra projetada em MatLab, rodando em um computador com processador Intel Core 2 Duo, 4Gb de memória RAM e Windows 8, ambas com a mesma topologia de rede e com os mesmos valores de treinamento. Inicialmente verificou-se que a rede embarcada necessita de algumas interações a mais para alcançar o critério de parada, porém sua velocidade de treinamento foi aproximadamente 20% superior em comparação com a rede neural executada no computador citado. Ambas tiveram margem de acerto de 99,8% quando aplicadas a um banco de dados controlado para comparação do funcionamento dos processos de treinamento das redes. A figura 9 mostra um gráfico comparativo entre os dados obtidos no processo de treinamento com o banco de dados de controle. Figura 9 – Dados obtidos nos treinamentos A linha azul mostra os valores desejados de saída da rede; em vermelho estão os valores obtidos pelo treinamento no MatLab; e a cor verde mostra os valores obtidos com a PMC embarcada em Arduino. 5 CONCLUSÃO Ao aplicar-se a rede neural embarcada os dados de treinamento deste projeto (informações coletadas pelo conjunto sensor
  8. 8. 8 associadas ao comando dos motores orientados pelo controle sem fio) verificou- se que a rede é capaz de generalizar a função de condução do veículo. Uma dificuldade encontrada na construção foi o fato de o processador ARM Cortex-M3 não conseguir realizar tarefas em paralelo. Isso dificulta muito a precisão da coleta de dados, pois há um atraso causado pelo seu processamento sequencial, pois o momento que ocorre a leitura dos dados dos sensores não é o mesmo da coleta de dados dos motores, assim as informações de entradas coletadas podem não condizer com a saída desejada. Contudo a rede neural embarcada foi treinada e executada com sucesso e com um desempenho equivalente ao de um treinamento realizado em computador. 6 REFERENCIAS HAYKIN, Simon. Redes Neurais – Princípios e Práticas. Porto Alegre: Bookman, 2001. PIÃO, S. S. Implementação de rede neural artificial em FPGA utilizando VHDL. EESC/USP, 2012. SOUSA, M. A. A; TORRES, T. F. J. Implementação direta de uma rede neural artificial em hardware e sua aplicabilidade no reconhecimento de padrões para separação de frutas. São Paulo: Sinergia, vol. 12, n. 1, p. 50-58, 2011. MITCHELL, Tom M. Machine Learning. McGraw-Hill, First Edition, 1997. NUNES, Ivan; SPATTI, Danilo; FLAUZINO, Rogério. Redes Neurais Artificiais para engenharia e ciências aplicadas. São Paulo: Artliber, 2010.

×