SlideShare uma empresa Scribd logo
1 de 8
Baixar para ler offline
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
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
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
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
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
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
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
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.

Mais conteúdo relacionado

Mais procurados

Redes neurais e lógica fuzzy
Redes neurais e lógica fuzzyRedes neurais e lógica fuzzy
Redes neurais e lógica fuzzyRenato Ximenes
 
Aula introducao-redes-neurais
Aula introducao-redes-neuraisAula introducao-redes-neurais
Aula introducao-redes-neuraisLeo Laurett
 
[José Ahirton Lopes] Apresentação MLP
[José Ahirton Lopes] Apresentação MLP[José Ahirton Lopes] Apresentação MLP
[José Ahirton Lopes] Apresentação MLPAhirton Lopes
 
Redes Neurais Aplicacoes
Redes Neurais AplicacoesRedes Neurais Aplicacoes
Redes Neurais Aplicacoessemanact2007
 
Redes Neurais Artificiais
Redes Neurais ArtificiaisRedes Neurais Artificiais
Redes Neurais ArtificiaisMarcos Castro
 
Banner sic 02
Banner sic 02Banner sic 02
Banner sic 02siridakis
 
Inteligência Computacional Unidade 02 – Redes Neuronais Artificiais
Inteligência Computacional Unidade 02 – Redes Neuronais ArtificiaisInteligência Computacional Unidade 02 – Redes Neuronais Artificiais
Inteligência Computacional Unidade 02 – Redes Neuronais ArtificiaisLeonardo Goliatt
 
Inteligência Computacional Unidade 01 – Introdução
Inteligência Computacional Unidade 01 – IntroduçãoInteligência Computacional Unidade 01 – Introdução
Inteligência Computacional Unidade 01 – IntroduçãoLeonardo Goliatt
 
Desenvolvimento de Rede Neural SOM: Um Estudo de Caso para Segmentação de Perfis
Desenvolvimento de Rede Neural SOM: Um Estudo de Caso para Segmentação de PerfisDesenvolvimento de Rede Neural SOM: Um Estudo de Caso para Segmentação de Perfis
Desenvolvimento de Rede Neural SOM: Um Estudo de Caso para Segmentação de PerfisManoel Jorge Ribeiro Neto
 
Poster sic-ufrgs
Poster sic-ufrgsPoster sic-ufrgs
Poster sic-ufrgsssleandro
 
Classificação não supervisionada - Kohonen
Classificação não supervisionada - KohonenClassificação não supervisionada - Kohonen
Classificação não supervisionada - KohonenAndré Andrade
 
Redes Neurais Artificiais
Redes Neurais ArtificiaisRedes Neurais Artificiais
Redes Neurais ArtificiaisRicardo Zalla
 
Aplicação das Redes Neuronais Artificiais do software STATISTICA 7.0: O caso ...
Aplicação das Redes Neuronais Artificiais do software STATISTICA 7.0: O caso ...Aplicação das Redes Neuronais Artificiais do software STATISTICA 7.0: O caso ...
Aplicação das Redes Neuronais Artificiais do software STATISTICA 7.0: O caso ...Ricardo Brasil
 
Rede Neural MLP para reconhecimento de Faces
Rede Neural MLP para reconhecimento de FacesRede Neural MLP para reconhecimento de Faces
Rede Neural MLP para reconhecimento de FacesAdilmar Dantas
 
Machine Learning e Redes Neuronais
Machine Learning e Redes NeuronaisMachine Learning e Redes Neuronais
Machine Learning e Redes Neuronaiseurosigdoc acm
 
Detecção de Faces - Redes Neurais *MLP
Detecção de Faces - Redes Neurais *MLPDetecção de Faces - Redes Neurais *MLP
Detecção de Faces - Redes Neurais *MLPAdilmar Dantas
 
Redes Neuronais Artificiais
Redes Neuronais ArtificiaisRedes Neuronais Artificiais
Redes Neuronais Artificiaiseurosigdoc acm
 

Mais procurados (20)

Redes neurais e lógica fuzzy
Redes neurais e lógica fuzzyRedes neurais e lógica fuzzy
Redes neurais e lógica fuzzy
 
Aula introducao-redes-neurais
Aula introducao-redes-neuraisAula introducao-redes-neurais
Aula introducao-redes-neurais
 
[José Ahirton Lopes] Apresentação MLP
[José Ahirton Lopes] Apresentação MLP[José Ahirton Lopes] Apresentação MLP
[José Ahirton Lopes] Apresentação MLP
 
Redes Neurais Aplicacoes
Redes Neurais AplicacoesRedes Neurais Aplicacoes
Redes Neurais Aplicacoes
 
Redes Neurais Artificiais
Redes Neurais ArtificiaisRedes Neurais Artificiais
Redes Neurais Artificiais
 
Banner sic 02
Banner sic 02Banner sic 02
Banner sic 02
 
Inteligência Computacional Unidade 02 – Redes Neuronais Artificiais
Inteligência Computacional Unidade 02 – Redes Neuronais ArtificiaisInteligência Computacional Unidade 02 – Redes Neuronais Artificiais
Inteligência Computacional Unidade 02 – Redes Neuronais Artificiais
 
20120305 - presentation
20120305 - presentation20120305 - presentation
20120305 - presentation
 
Inteligência Computacional Unidade 01 – Introdução
Inteligência Computacional Unidade 01 – IntroduçãoInteligência Computacional Unidade 01 – Introdução
Inteligência Computacional Unidade 01 – Introdução
 
Desenvolvimento de Rede Neural SOM: Um Estudo de Caso para Segmentação de Perfis
Desenvolvimento de Rede Neural SOM: Um Estudo de Caso para Segmentação de PerfisDesenvolvimento de Rede Neural SOM: Um Estudo de Caso para Segmentação de Perfis
Desenvolvimento de Rede Neural SOM: Um Estudo de Caso para Segmentação de Perfis
 
Poster sic-ufrgs
Poster sic-ufrgsPoster sic-ufrgs
Poster sic-ufrgs
 
Classificação não supervisionada - Kohonen
Classificação não supervisionada - KohonenClassificação não supervisionada - Kohonen
Classificação não supervisionada - Kohonen
 
Sistemas Cognitivos
Sistemas CognitivosSistemas Cognitivos
Sistemas Cognitivos
 
Redes Neuronais
Redes NeuronaisRedes Neuronais
Redes Neuronais
 
Redes Neurais Artificiais
Redes Neurais ArtificiaisRedes Neurais Artificiais
Redes Neurais Artificiais
 
Aplicação das Redes Neuronais Artificiais do software STATISTICA 7.0: O caso ...
Aplicação das Redes Neuronais Artificiais do software STATISTICA 7.0: O caso ...Aplicação das Redes Neuronais Artificiais do software STATISTICA 7.0: O caso ...
Aplicação das Redes Neuronais Artificiais do software STATISTICA 7.0: O caso ...
 
Rede Neural MLP para reconhecimento de Faces
Rede Neural MLP para reconhecimento de FacesRede Neural MLP para reconhecimento de Faces
Rede Neural MLP para reconhecimento de Faces
 
Machine Learning e Redes Neuronais
Machine Learning e Redes NeuronaisMachine Learning e Redes Neuronais
Machine Learning e Redes Neuronais
 
Detecção de Faces - Redes Neurais *MLP
Detecção de Faces - Redes Neurais *MLPDetecção de Faces - Redes Neurais *MLP
Detecção de Faces - Redes Neurais *MLP
 
Redes Neuronais Artificiais
Redes Neuronais ArtificiaisRedes Neuronais Artificiais
Redes Neuronais Artificiais
 

ArtigoFinal_v02

  • 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 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 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 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 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 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 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 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.