Você está na página 1de 22

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN

COORDENAO DE ENGENHARIA ELETRNICA (COELE)


ENGENHARIA ELETRNICA

JEU TONETE
ROGRIO LUIS FONTANRIO

IMPLEMENTAO DE REDE NEURAL PERCEPTRON EM FPGA


USANDO VHDL

TOLEDO - PR
2016

JEU TONETE
ROGRIO LUIS FONTANRIO

IMPLEMENTAO DE REDE NEURAL PERCEPTRON EM FPGA


USANDO VHDL

Trabalho

apresentado

como

parte

integrante das atividades avaliativas da


disciplina Lgica Reconfigurvel.
Professor: Felipe Pfirmer.

TOLEDO - PR
2016

LISTA DE ILUSTRAES

Figura 1 - Diagrama de blocos da rede Perceptron. .................................................... 9


Figura 2 - Entrada em forma matricial. ...................................................................... 10
Figura 3 - Entrada em forma linear............................................................................ 10
Figura 4 - Sada alvo, cdigo ASCII. ......................................................................... 11
Figura 5 Matriz de pesos sinpticos para a rede neural Perceptron. ..................... 11
Figura 6 BIAS para os neurnios da rede neural. .................................................. 11
Figura 7 Kit de FPGA DE0 Terasic. ........................................................................ 12
Figura 8 RTL Viewer do componente TopLayer. .................................................... 13
Figura 9 - RTL Viewer de um componente Neuronio. ............................................... 15
Figura 11 - RTL Viewer do componente Perceptron.vhd .......................................... 17
Figura 10 - RTL Viewer de um componente ParallelTransfer.................................... 18

SUMRIO

1 INTRODUO .....................................................................................................4
2 REDES NEURAIS PERCEPTRON ......................................................................5
3 DESENVOLVIMENTO DE UMA REDE PARA RECONHECIMENTO DE
CARACTERES .......................................................................................................8
3.1 PARMENTROS DA REDE NEURAL ..............................................................8
3.2 TREINAMENTO DA REDE ...............................................................................9
3.2.1 Entradas .........................................................................................................9
3.2.2 Alvo .................................................................................................................10
3.2.3 Resultados ......................................................................................................11
4 IMPLEMENTAO DA REDE NEURAL NA FPGA ............................................12
4.1 COMPONENTES CRIADOS .............................................................................13
5 CONCLUSO .......................................................................................................20
REFERNCIAS .......................................................................................................21

1 INTRODUO

O campo de estudo de Redes neurais artificiais uma importante rea de


pesquisa para o setor da engenharia eletrnica, pois as mesmas podem ser aplicadas
na resoluo de diversos problemas de engenharia, como identificao de padres,
analise de resultados, etc.
Um dos maiores problemas na utilizao de redes neurais a quantidade de
clculos que ela precisa executar para se obter os resultados desejados.
Considerando que ela consuma um grande valor de processamento, proposto nesse
trabalho a utilizao de FPGAs para essa tarefa.
As FPGAs sendo um chip com hardware programado nos permite a criao
de CIs para aplicaes especificas, resultando numa maior otimizao de sua
estrutura e tambm em uma grande velocidade de execuo de suas tarefas. Com o
intuito de otimizar a execuo de uma rede neural, decidiu criar uma utilizando FPGA.
Este trabalho tem como objetivo a implementao de uma rede neural artificial
sem realimentao (feedforward) que realize o reconhecimento de caracteres
alfabticos (somente vogais) e faa a codificao desse mesmo caractere em seu
respectivo valor da tabela ASCII.
Para isso ser montada uma rede Perceptron e utilizando a ferramenta
NNTools do MatLab ser feito o treinamento da mesma. Aps a obteno do valor dos
pesos, ser montada uma essa rede em uma FPGA e testada com os valores de
treinamento e com alguns poucos erros.

2 REDES NEURAIS PERCEPTRON

Redes Neurais Artificiais so tcnicas computacionais que apresentam um


modelo matemtico inspirado na estrutura neural de organismos inteligentes e que
adquirem conhecimento atravs da experincia. Uma grande rede neural artificial
pode ter centenas ou milhares de unidades de processamento; j o crebro de um
mamfero pode ter muitos bilhes de neurnios.
O sistema nervoso formado por um conjunto extremamente complexo de
clulas, os neurnios. Eles tm um papel essencial na determinao do
funcionamento e comportamento do corpo humano e do raciocnio. Os neurnios so
formados pelos dendritos, que so um conjunto de terminais de entrada, pelo corpo
central, e pelos axnios que so longos terminais de sada.

Figura 1 - Constituintes da clula neuronal - esquema.

Os neurnios se comunicam atravs de sinapses. Sinapse a regio onde


dois neurnios entram em contato e atravs da qual os impulsos nervosos so
transmitidos entre eles. Os impulsos recebidos por um neurnio A, em um
determinado momento, so processados, e atingindo um dado limiar de ao, o
neurnio A dispara, produzindo uma substncia neurotransmissora que flui do corpo
celular para o axnio, que pode estar conectado a um dendrito de um outro neurnio
B. O neurotransmissor pode diminuir ou aumentar a polaridade da membrana pssinptica, inibindo ou excitando a gerao dos pulsos no neurnio B. Este processo
depende de vrios fatores, como a geometria da sinapse e o tipo de neurotransmissor.
Uma rede neural artificial composta por vrias unidades de processamento,
cujo funcionamento bastante simples. Essas unidades, geralmente so conectadas

por canais de comunicao que esto associados a determinado peso. As unidades


fazem operaes apenas sobre seus dados locais, que so entradas recebidas pelas
suas conexes. O comportamento inteligente de uma Rede Neural Artificial vem das
interaes entre as unidades de processamento da rede.

A operao de uma unidade de processamento, proposta por McCullock e


Pitts em 1943, pode ser resumida da seguinte maneira:

Sinais so apresentados entrada;

Cada sinal multiplicado por um nmero, ou peso, que indica a sua


influncia na sada da unidade;

feita a soma ponderada dos sinais que produz um nvel de atividade;

Se este nvel de atividade exceder um certo limite (threshold) a unidade


produz uma determinada resposta de sada.

Figura 2 -Esquema de unidade McCullock - Pitts.

A propriedade mais importante das redes neurais a habilidade de aprender


de seu ambiente e com isso melhorar seu desempenho. Isso feito atravs de um
processo iterativo de ajustes aplicado a seus pesos, o treinamento. O aprendizado
ocorre quando a rede neural atinge uma soluo generalizada para uma classe de
problemas.
Denomina-se algoritmo de aprendizado a um conjunto de regras bem
definidas para a soluo de um problema de aprendizado. Existem muitos tipos de
algoritmos de aprendizado especficos para determinados modelos de redes neurais,

estes algoritmos diferem entre si principalmente pelo modo como os pesos so


modificados.
Outro fator importante a maneira pela qual uma rede neural se relaciona
com o ambiente. Nesse contexto existem os seguintes paradigmas de aprendizado:

Aprendizado Supervisionado, quando utilizado um agente externo


que indica rede a resposta desejada para o padro de entrada;

Aprendizado No Supervisionado (auto-organizao), quando no


existe um agente externo indicando a resposta desejada para os
padres de entrada;

Reforo, quando um crtico externo avalia a resposta fornecida pela


rede.

3 DESENVOLVIMENTO

DE

UMA

REDE

PARA

RECONHECIMENTO

DE

CARACTERES

O reconhecimento visual de caracteres vem sendo um dos grandes problemas


da atualidade, uma vez que cada vez mais se torna necessrio que um sistema digital
consiga entender o que as lentes de suas cmeras captam apenas no formato de
imagem.
Esse desafio vem sendo enfrentado de diversas formas diferentes por todo
mundo (dependendo de cada pesquisador, cientista, e etc.) e um dos mtodos
comumente encontrado o de dividir a imagem captura em milhares de pixels e tratalos em grupo individuais para conseguir ter um reconhecimento da imagem em sua
totalidade.
Tendo o conhecimento desse mtodo de anlise e da teoria de redes neurais
foi decido criar um programa que conseguisse identificar caracteres no formato 4x5
pixels e os codificasse no valor binrio que os representa na tabela ASCII.
A problemtica principal receber uma matriz de 1 e 0 que representa uma
das 5 vogais do alfabeto e devolver um cdigo em ASCII que representa aquela
mesma vogal. Decidiu-se utilizar somente vogais em funo do tempo escasso e da
complexidade necessria para construir e testar uma rede neural que conseguisse
identificar todo o alfabeto.

3.1 PARMENTROS DA REDE NEURAL

Como citado acima, foi utilizado a rede neural do tipo Perceptron por sua
adaptao ao problema e sua convergncia. A escolha desse tipo de rede foi feita
comparando o desempenho desta com a do tipo Mltiplas Camadas (nomeada como
FeedForward BackPropagtion no MatLab), que no ofereceu desempenho satisfatrio
com relao aos erros independentemente do nmero de neurnios usados na
primeira camada.
Foi utilizado a ferramenta NNTOOL presente no Matlab, ferramenta esta que
auxiliou a criao e o treinamento da nossa rede neural.

Os parmetros para qual a nossa rede foi configurada so:

Tipo da rede: Perceptron;

Funo de transferncia: HARDLIM;

Funo de aprendizado: LEARNP;

Nmero de entradas: 20;

Nmero de sadas: 8;

Nmero de neurnios: 8;

Figura 3 - Diagrama de blocos da rede Perceptron.

3.2 TREINAMENTO DA REDE

3.2.1 Entradas

Como entrada do nosso treinamento representamos cada caractere como


uma matriz binria 4x5, nela tentou-se imitar a construo grfica de letras pixels a
pixels, simulando como ocorre realmente nas telas e displays em geral.
Para adaptar essa entrada na nossa rede dispomos a entrada, que era
matricial, em forma de uma nica linha de vinte bits.

10

Figura 4 - Entrada em forma matricial.

Figura 5 - Entrada em forma linear.

3.2.2 Alvo

A sada do nosso sistema o cdigo binrio ASCII para os caracteres vogais


maisculos e est representado na figura abaixo, contendo sete bits.

11

Figura 6 - Sada alvo, cdigo ASCII.

3.2.3 Resultados

Ao convergir para um erro nulo, para as entradas e sadas desejadas, obtido


como resultado do treinamento uma matriz contendo os pesos sinpticos para a rede
neural e tambm uma matriz de bias. Esses dados sero posteriormente agregados
ao cdigo VHDL para implementao da rede na FPGA.

Figura 7 Matriz de pesos sinpticos para a rede neural Perceptron.

Figura 8 BIAS para os neurnios da rede neural.

12

4 IMPLEMENTAO DA REDE NEURAL NA FPGA

Para o projeto foi utilizado o kit DE0 da Terasic que contm a FPGA Cyclone
3 da Altera com 6 mil elementos lgicos e o software de programao foi o Quartus 2
v13.

Figura 9 Kit de FPGA DE0 Terasic.

Basicamente foi desenvolvido dois componentes referentes a rede neural:


neuronio.vhd e perceptron.vdh. Para a aplicao dos dados optou-se usar as chaves
da placa de desenvolvimento, por isso foi criado o componente parallelTransfer.vhd
que faz a leituras dos bits de cada entrada e joga em um buffer de entradas que ser
aplicada a rede Perceptron. Fora esses componentes foi criado o componente
toplayer chamado circuit.vhd que faz a instanciao da rede neural e do sistema de
transferncia de dados.
No kit DE0 a rede teve o seguinte mapeamento de pinos:
DE0 switches
sw3
sw2
sw0

FPGA Pins
G4
H6
J6

Input
ce
clk
dataInput

13

DE0 switches
LEDG7
LEDG6
LEDG5
LEDG4
LEDG3
LEDG2
LEDG1
LEDG0

FPGA Pins
C2
C1
E1
F2
H1
J3
J2
J1

Output
dataOutput(7)
dataOutput(6)
dataOutput(5)
dataOutput(4)
dataOutput(3)
dataOutput(2)
dataOutput(1)
dataOutput(0)

4.1 COMPONENTES CRIADOS

circuit.vhd
O componente toplayer circuit.vhd instancia alm da rede neural, um
componente que direciona uma entrada de dados para um vetor de dados que
aplicado a rede e um debounce para o boto de clock.

Figura 10 RTL Viewer do componente TopLayer.

neurnio_def.vhd
O arquivo neurnio_def contm as principais definies para a criao de um
neurnio, como a quantidade de entradas, o nmero de bits que cada entrada contm,
nmero de bit que cada dado de peso e o tipo que a entrada e sada. Possui tambm
definies para os tipos de dados usados no projeto. A utilizao de novos tipos com
tamanhos genricos muito til para a reutilizao do cdigo para outras redes de
diferentes tamanhos.

14

Neuronio.vhd
Este componente contm a implementao de um neurnio artificial com
funo de ativao HARDLIM. Ele recebe um vetor de entrada de dados que ser
multiplicado pelos pesos sinpticos, o resultado disso somado juntamente com o
BIAS.

A representao do componente depende muito dos paramentos genricos


entregues a ele, mas se assemelha a figura a baixo.

15

Figura 11 - RTL Viewer de um componente Neuronio.

Perceptron.vhd
O componente perceptron instancia todos os componentes neurnios da rede.
Nele definido os pesos sinpticos aplicados a cada neurnio tanto quanto o BIAS do
mesmo. Tem com entrada um array de dados com tamanho igual quantidade de
entradas da rede e um array de dados de sadas com a quantidade de neurnios.

16

17

Figura 12 - RTL Viewer do componente Perceptron.vhd

18

ParallelTransfer.vhd
O arquivo parallelTransfer.vhd usado para a transferncia de dados para
a rede neural. Ele utiliza um pino para Chip Enable (CE), um pino para Clock (CLK), e
N pinos para o dado. Aps colocar o CE para nvel baixo, ele zera o indexador
referente a quantos dados sero lidos, e assim comea uma nova leitura. Ele ento
espera uma subida de CLK para ento ler os dados e assim armazenar esse dado de
N bits na primeira posio de um vetor. Aps isso, mantem se o CE em nvel baixo
at o final de toda a transferncia de dados e a cada subida de CLK um novo dado
adicionado ao vetor. A sada desse arquivo um vetor de dados que ser usado no
TopLayer para ser a entrada da rede neural.

Figura 13 - RTL Viewer de um componente ParallelTransfer.

19

20

5 CONCLUSO

Com o projeto podemos concluir que vivel desenvolver uma rede neural
em uma FPGA. Aplicamos uma rede consideravelmente simples, mas com bastante
entradas, e analisamos o seu comportamento para as entradas de maior interesse. A
rede na FPGA se comportou de modo esperado, acertando a resposta para os dados
treinados e inclusive para alguns com introduo de pequenos erros.
Assim percebemos que uma boa soluo para certos problemas, utilizar
uma rede neural no supervisionada treinada em algum outro software para a
obteno dos pesos sinpticos combinada com a FPGA para executar a rede no modo
a frente.
Assim a rede consegue executar os seus vrios clculos com um
processamento consideravelmente rpido, pois o mesmo est aplicado em um
hardware especifico.
Todo o projeto foi um bom estudo inicial sobre esse assunto que pode ser
estudado mais a fundo em outros projetos, como a aplicao de outros problemas e
outros tipos de redes, como a Multicamadas.

21

REFERNCIAS

BERG, Alexandre Cruz; MULLER, Daniel Nehme. Reconhecimento de Caracteres

Usando Redes Neurais. Porto Alegre, julho de 1993.

RIPLEY, B. D. Pattern Recognition and Neural Networks. University of Oxford,


1996.

A obteno de texturas na sntese de imagens realsticas num ambiente limitado.


Disponvel em: http://www.lume.ufrgs.br/handle/10183/24181. Acesso em: 05/07/16.

HAYKIN, Simon S. Redes neurais: Princpios e prtica. Trad. Paulo Martins Engel.
2ed. Porto Alegre. Bookman, 2001.

KOVCS, Zsolt L. Redes neurais artificiais: Fundamentos e Aplicaes. 4ed. So


Paulo, Editora Livraria da Fsica, 2002.