• Nenhum resultado encontrado

Arquitetura do módulo de convolução para visão computacional baseada em FPGA

N/A
N/A
Protected

Academic year: 2021

Share "Arquitetura do módulo de convolução para visão computacional baseada em FPGA"

Copied!
138
0
0

Texto

(1)

i

CARLOS CAETANO DE ALMEIDA

61/2015

CAMPINAS 2015

ARQUITETURA DO MÓDULO DE CONVOLUÇÃO PARA

VISÃO COMPUTACIONAL BASEADA EM FPGA

(2)
(3)

iii

UNIVERSIDADE ESTADUAL DE CAMPINAS

FACULDADE DE ENGENHARIA MECÂNICA

CARLOS CAETANO DE ALMEIDA

Orientador: Prof. Dr. Eurípedes Guilherme de Oliveira Nóbrega

Assinatura do Orientador

CAMPINAS 2015

Dissertação apresentada à Faculdade de

Engenharia Mecânica da Universidade

Estadual de Campinas como parte dos

requisitos exigidos para a obtenção do

título

de

Mestre

em

Engenharia

Mecânica, na Área de Mecânica dos

Sólidos e Projeto Mecânico.

ESTE EXEMPLAR CORRESPONDE À VERSÃO FINAL DA DISSERTAÇÃO DEFENDIDA PELO ALUNO CARLOS CAETANO DE ALMEIDA E ORIENTADO PELO PROF. DR. EURÍPEDES GUILHERME DE OLIVEIRA NÓBREGA.

ARQUITETURA DO MÓDULO DE CONVOLUÇÃO PARA VISÃO

COMPUTACIONAL BASEADA EM FPGA

(4)

iv

(5)

v

(6)
(7)

vii

Resumo

Esta dissertação apresenta o estudo de uma arquitetura para o processamento digital de imagens, desenvolvido através de dispositivos de hardware programável, no caso FPGA, para a implementação eficiente no domínio do tempo do algoritmo da convolução discreta, que permita sua integração em redes neurais de convolução com múltiplas camadas, conhecidas como ConvNets, visando sua aplicação na área de visão computacional.

A implementação em software pode acarretar elevado custo computacional de muitos algoritmos, o que pode não atender às restrições de aplicações em tempo real, logo o uso de implementações em FPGA torna-se uma ferramenta atraente. A convolução 2D na área de visão computacional é um desses algoritmos. O uso de FPGA permite a adoção de execução concorrente para os algoritmos, por ser em hardware, possibilitando que as redes de convolução possam vir a ser adotadas em sistemas embarcados de visão computacional.

Neste trabalho de pesquisa foram estudadas duas soluções. Na primeira foi implementado no FPGA o processador soft core NIOS II®, e programado o algoritmo. Na segunda solução, foi desenvolvida uma configuração em que o algoritmo foi implementado diretamente em hardware, sem a necessidade de um microprocessador tradicional. Os resultados mostram que uma redução expressiva do tempo de processamento pode ser esperada em aplicações reais. Na continuidade do trabalho, deverá ser implementado e testado o algoritmo completo como parte de uma aplicação de redes ConvNets.

Palavras-Chave: Convolução Discreta, Processamento de Imagens, Visão Computacional,

(8)

viii

Abstract

This research work presents a study of the architecture applied to image processing, using programmable hardware devices, in this case FPGA, to an efficient implementation of the time domain discrete convolution algorithm, which enables its integration into multiple layers networks, known as ConvNets, aiming applications of computational vision.

For some algorithms, the software implementation can imply high computational costs, which may not satisfy specific real time restrictions, which turns FPGA adoption an attractive solution. Image processing application of 2D convolution is one of these algorithms. Hardware implementation using FPGA can adopt algorithm concurrency, habilitating convolution nets to be adopted in embedded systems for computer vision applications.

In this research work, two different solutions were studied. In the first solution, a soft core NIOS II® processor was implemented in a FPGA, and the convolution algorithm programmed. In the second solution, a complete hardware implemented algorithm was developed, exempting the need for a regular processor. Results show that an expressive processing time reduction may be expected in real applications. In the continuity of the research work, a complete ConvNet will be implemented and the convolution algorithm application tested in a more realistic condition.

(9)

ix SUMÁRIO Resumo ... vii Abstract ... viii Agradecimentos ... xiii Lista de Ilustrações ... xv

Lista de Tabelas ... xvii

Lista de Abreviaturas, Siglas e Termos em Inglês ... xix

Lista de Símbolos ... xxi

1. INTRODUÇÃO E JUSTIFICATIVA ... 1 1.1 OBJETIVOS ... 3 1.1.1 Objetivo Geral ... 3 1.1.2 Objetivos Específicos ... 3 1.2 ESTRUTURA DA DISSERTAÇÃO ... 4 2. REVISÃO BIBLIOGRÁFICA ... 5 2.1 Introdução ... 5

2.2 FPGA (Field Programmable Gate Array) ... 5

2.2.1 Ferramentas de Desenvolvimento ... 7

2.3 Linguagens de Descrição de Hardware e VHDL ... 7

2.4 Amostragem e Quantização ... 9

2.5 Arquitetura do Hardware ...10

2.6 Processador (RNC) ...11

2.7 Análise dos Tempos da Solução em Software ...14

2.8 Implementação em Hardware do Algoritmo para Aceleração do Tempo de Resposta ...15

2.9 Resultado do Algoritmo em Software e em Hardware ...17

3. MATERIAIS E MÉTODOS ...22

3.1 Aplicação do ACD ...23

3.1.1 Formulação Matemática ...24

3.1.2 O Fluxo de Dados ...25

3.1.2.1 Processamentos Realizados usando o MATLAB®: ...26

3.1.2.2 Processamento no FPGA usando o NIOS II®: ...27

(10)

x

3.2 Implementação no MATLAB® ...28

3.3 Implementação do NIOS II® ...30

3.3.1 Análise das Conexões ...32

3.3.2 Diagrama Esquemático do Microcontrolador ...35

3.3.3 O Fluxo de Dados e Módulo de Convolução ...36

3.4 Implementação em VHDL ...39

3.4.1 Hardware ACD e Periféricos ...39

3.4.2 Módulo de Processamento de Imagens ...40

4. RESULTADOS E DISCUSSÕES ...46

4.1 Implementação no MATLAB® ...46

4.2 Implementação do NIOS II® ...50

4.3 Implementação do VHDL...50

4.4 Análise de Recursos usando o FPGA ...51

4.5 Justificativa da Solução Proposta para Acelerar os Tempos de Resposta ...52

4.6 Análise de Desempenho Usando a Implementação em Software e em Hardware ...52

4.7 Comparação das Imagens de Saída Lena no MATLAB®, NIOS II® e VHDL ...53

5. CONCLUSÕES E SUGESTÕES PARA TRABALHOS FUTUROS ...55

REFERÊNCIAS ...57

APÊNDICE A - QUARTUS E HARDWARE ACD ...65

APÊNDICE B - CÓDIGOS EM VHDL ...72

APÊNDICE C - CÓDIGOS EM C/C++ ...102

(11)

xi

A Deus

Aos meus pais Clotilde Caetano e José Carlos de Almeida (in memoriam)

Aos amigos e companheiros que confiaram em meu trabalho

(12)
(13)

xiii

Agradecimentos

A Deus que esteve presente em minha vida me orientando e guiando com sua sabedoria.

Ao meu orientador, Prof. Dr. Eurípedes Guilherme de Oliveira Nóbrega, por seus conselhos, apoio e orientação durante minha formação acadêmica. Sua confiança e dedicação permitiram transpor os desafios deste trabalho de pesquisa e promover meu crescimento pessoal, acadêmico e profissional.

À minha mãe Clotilde Caetano de Almeida pelo apoio e carinho, fundamentais para facilitar os desafios que a vida me impôs.

À Coordenação de Pós-Graduação, professores e funcionários da Faculdade de Engenharia Mecânica da Universidade Estadual de Campinas.

Aos amigos que me acompanharam, entre eles, Adriano Gonçalves, Alexander Denarelli, Almiro Franco, Ana Paula Caetano, Angela Elias, Antônio Cunha, Caio Elias, Cristian Pimenta, Cristiano Emidio, Dalia Gallardo, Daniela Gabeloni, Diogo Pereira Costa, Edson Espósito, Guilherme Saldanha, Ivone Setti, Joel Oliveira, Jonatas Miranda, Jonathan Gazzola, José Francisco Lopes da Silva, Lucineia Ribeiro, Luiz Paulo Oliveira, Maira Costa, Marcelo Nery, Maricélia Roberta Jimenez, Mayra Cristina Monteiro (in memoriam), Michael dos Santos, Misael Victor, Paulo Roberto Delfino, Pedro Henrique Oliveira, Rafael Baccaglini, Renato Kuteken, Rita de Cássia Silva, Rose Burgon, Sílvia Helena Allane Franchetti, Sônia Lima, Sueli Santos, Tânia Margareth Silva e Wellington Gomes.

Em especial, gostaria de agradecer aos amigos de grupo de pesquisa Alexandre Tomazati, Danilo Morais Pagano, Fernando Ortolano, Frank Alexis Canahuire Cabello, Helói Genari, Klaus Raizer, Nilson Inocente, Vornei Augusto Grella, Wendell Diniz e Wilson Prates.

Por fim gostaria de agradecer à CAPES pela concessão da bolsa de estudos, o que permitiu que eu me dedicasse ao mestrado e contribuísse, mesmo que um pouco, com o processo de desenvolvimento científico do Brasil.

(14)
(15)

xv

Lista de Ilustrações

Figura 1. Estrutura de um FPGA (BROWN; VRANESIC, 2000) Adaptado ... 6

Figura 2. Imagem com Diferentes Níveis de Cinza. Da Esquerda para Direita, de Cima para Baixo: 16, 8, 4 e 2 Níveis de Cinza. Fonte: (GONZALEZ e WOODS, 2001)... 10

Figura 3. Convolução 2D para K=3, onde K é a Largura do Kernel e W é a Largura da Imagem. Diagrama adaptado de (FARABET; POULET; LECUN, 2011) ... 11

Figura 4. Arquitetura de um RNC adaptada de (FAREBET ET AL, 2011)... 12

Figura 5. Exemplo de ConvNet ... 13

Figura 6. Instrução Lógica Customizada no NIOS II® adaptado de (LIAO; ZHOU; FAN, 2010) 15 Figura 7. Exemplo do Processador de Stream (Farabet et al. 2009). ... 16

Figura 8. Tempo de Processamento (ms) por Número de Conexões no ConvNet (em milhões) para RNC e Computadores Normais (Farabet et al. 2009). ... 18

Figura 9. Tempo de Processamento (ms) pelo Tamanho do Kernel Utilizado para RNC e Computadores Normais (Farabet et al. 2009). ... 19

Figura 10. Frames por Segundo em Função do Tamanho da Imagem Quadrada para Programas em CPU, FPGA e ASIC (Farabet et al. 2009). ... 20

Figura 11. Frames por Segundo em Função do Tamanho do Kernel para Programas em CPU, FPGA e ASIC (Farabet et al. 2009). ... 20

Figura 12. Vista Superior FPGA Terasic Cyclone IV De2i-150 (Altera® co.) ... 22

Figura 13. Vista Inferior FPGA Terasic Cyclone IV De2i-150 (Altera® co.) ... 23

Figura 14. Convolução 2D... 24

Figura 15. Funcionamento do Sistema: Fluxo de Dados da Aquisição à Visualização. ... 25

Figura 16. Procedimento para o Desenvolvimento das Implementações ... 26

Figura 17. Matriz da Imagem Gray ... 29

Figura 18. Matriz de Convolução Gerada a partir da Convolução da Imagem Gray com o Kernel ... 30

Figura 19. Kernels: K1 para Detecção de Bordas e K2 para Destacar Relevo ... 30

Figura 20. Diagrama em Blocos com Todos os Módulos do Microcontrolador, Módulo ACD implementado em Linguagem C/C++ e MATLAB® e Barramento Avalon ... 31

(16)

xvi

Figura 22. Implementação do Microcontrolador no QSYS. ... 34

Figura 23. Microcontrolador Desenvolvido no QSYS ... 35

Figura 24. Microcontrolador Desenvolvido no QSYS e Conexões com NIOS II ® ... 36

Figura 25. Diagrama de Blocos com Processador, Módulo ACD Implementado em NIOS II® e o Barramento Avalon... 37

Figura 26. Diagrama em Blocos do Hardware ACD e Periféricos ... 39

Figura 27. Dados da Imagem na Memória MIF ... 41

Figura 28. Módulo de Memória MIF do Hardware ACD ... 42

Figura 29. Modelsim: Waveform da Aquisição de Dados da Imagem ... 42

Figura 30. Imagem Processada pelo Hardware de Aquisição de Dados ... 43

Figura 31. Módulo de Processamento de Imagens em Hardware ... 43

Figura 32. Processamento Hardware ACD no FPGA ... 44

Figura 33. Módulo de Filtragem e UART do Hardware ACD ... 45

Figura 34. Imagem de Entrada Colorida RGB ... 46

Figura 35. Obtenção da Imagem Gray a partir da Imagem RGB de Entrada no MATLAB® ... 47

Figura 36. Imagem Convertida para Gray ... 47

Figura 37. Transformação da Imagem de Entrada RGB para Gray e Posterior Tratamento com os Kernels K1 e K2 ... 48

Figura 38. Imagem Filtrada com o Kernel para Detecção de Bordas K1 ... 49

Figura 39. Imagem Filtrada com o Kernel para Destacar Relevo K2 ... 49

Figura 40. Recursos Utilizados com o NIOS II® no FPGA ... 50

Figura 41. Recursos Utilizados com o VHDL no FPGA ... 51

Figura 42. Tempo de Processamento de Imagens em Software X Hardware ... 53

(17)

xvii

Lista de Tabelas

Tabela 1. Comparação entre a implementação por Software e por Instrução Customizada ... 17 Tabela 2. Performance e Recursos Utilizados ... 52

(18)
(19)

xix

Lista de Abreviaturas, Siglas e Termos em Inglês

ACD Algoritmo de Convolução Discreta

ASIC Circuito Integrado de Aplicação Específica (Application Specific Integrated Circuit) CHIP Circuito Integrado (Circuit High Integrating Process)

CNC Controle Numérico Computadorizado

CNN Rede Neural Convolucional (Convolutional Neural Network) CONVNETS Redes Neurais de Convolução (Convolutional Neural Networks) CPU Unidade Central de Processamento (Central Processing Unit) DMC Departamento de Mecânica Computacional

DSP Processamento de Sinal Digital (Digital Signal Processing) FEM Faculdade de Engenharia Mecânica

FPGA Arranjo de Porta Programável em Campo (Field Programmable Gate Array) GPU Unidade de Processamento Gráfico (Graphics Processing Unit)

MIF Arquivo de Inicialização de Memória (Memory Initialization File) PIPELINE Busca de uma ou mais instruções além da próxima a ser executada

QSYS Ferramenta de Integração de Sistemas da Altera® (Altera®’s System Integration Tool) RAM Memória de Acesso Aleatório (Random Access Memory)

RCP Processador de Rede de Convolução Programável RNAs Redes Neurais Artificiais

RNC Rede Neural de Convolução

SDRAM Memória Síncrona de Acesso Dinâmico Randômico (Synchronous Dynamic Random Access Memory)

SIMD Múltiplos Dados com Instrução Única (Single Instruction, Multiple Data)

UART Receptor Transmissor Assíncrono Universal (Universal Asynchronous Receiver-Transmitter)

ULA Unidade Lógica e Aritmética

VALU Vetor de Unidade Lógica e Aritmética (Vector Arithmetic and Logic Unit)

VHDL Linguagem de Descrição de Hardware VHSIC

(VHSIC Hardware Description Language)

(20)
(21)

xxi

Lista de Símbolos

Kernel do filtro utilizado

Valor da posição (m,n) da matriz W referente ao filtro de Kernel K x K Valor da posição ij da matriz referente à imagem de entrada

Valor da posição ij da matriz referente à imagem de saída Posição da matriz Z referente ao plano de saída

(22)

xxii

(23)

1

1. INTRODUÇÃO E JUSTIFICATIVA

A partir do século XVIII, pode-se observar que a ciência ingressou em um processo de evolução constante, culminando no desenvolvimento de novas tecnologias que transformaram a vida da humanidade e a forma de produção de mercadorias. Durante a 1ª revolução industrial, o carvão utilizado como fonte de energia permitiu o desenvolvimento da máquina a vapor e da locomotiva, sendo determinantes no transporte de insumos, pessoas e produtos acabados. Na 2ª revolução industrial houve o desenvolvimento técnico, científico e de trabalho que ocorreu principalmente na Segunda Guerra Mundial, tendo como base para o desenvolvimento tecnológico desse período o aço, a eletricidade, o petróleo, a metalurgia, a eletromecânica, o motor a explosão e a petroquímica, possibilitando grande expansão da indústria, principalmente a automobilística. Durante a 3ª revolução industrial, a partir da década de 1970, tem-se como base a alta tecnologia através da informática, microeletrônica, telecomunicações, robótica, da máquina CNC (Controle Numérico Computadorizado) e da biotecnologia (RIFKIN, 2012; MELLO, COSTA, 1993).

Recentes passos na evolução dos dispositivos eletrônicos têm trazido grande avanço na fabricação de chips, possibilitando o surgimento do DSP (Digital Signal Processing) em sistemas sofisticados de comunicação, aplicados na detecção de sinais sísmicos e processamento de imagens (ANTONIOU, 2006) e também na implementação de circuitos integrados reconfiguráveis ou programáveis, entre os quais os FPGA's (Field-Programmable Gate Arrays), que são compostos de uma grande quantidade de módulos programáveis, que podem ser configurados no campo, emulando o comportamento de qualquer circuito digital, permitindo o desenvolvimento de sistemas extremamente complexos (BAILEY, 2011). Por serem circuitos eletrônicos, permitem assim que algoritmos sejam embarcados e prototipados de maneira concorrente, incrementando o desempenho em oposição à regra de uma instrução de cada vez por processador, conhecida como "gargalo" de Von Neumann (SEBESTA, 2012). A literatura referente ao processamento de imagem utilizando-se FPGA's está bastante difundida atualmente, devido à importância deste tipo de tecnologia em sistemas embarcados.O uso de FPGA’s em sistemas embarcados permite combinar a flexibilidade do software com a velocidade do hardware, no que se chama de computação reconfigurável, podendo implementar desde processamentos simples, até circuitos como controlador de vídeo,

(24)

2

incluindo memória RAM e elementos de apoio, ou ainda incorporar processamentos complexos e exigentes computacionalmente (RUSSO ET AL. 2012).

Através do FPGA é possível desenvolver algoritmos de processamento de imagem de alto desempenho (CROOKES ET AL, 2002), podendo unir o processamento paralelo no desenvolvimento de circuitos dedicados como decodificadores de áudio e vídeo (ZONGQING, 2008).

O processamento de imagem refere-se a qualquer processo pelo qual as entradas e as saídas são imagens (GONZALEZ e WOODS, 2001), visando a sua melhoria e a extração de determinadas características (ACHARYA e RAY, 2005). O processamento de imagens e a visão computacional evoluiram muito nas últimas décadas e as aplicações comerciais dessas tecnologias estão se tornando economicamente atraentes, mas a complexidade de aplicações, como a análise de cena por exemplo, dirigiu a pesquisa para implementação de um algoritmo eficiente, com a adoção de FPGA's no uso do processamento concorrente, ou de GPU (Unidade de Processamento Gráfico), buscando o paralelismo do processamento em software (CROOKES ET AL, 2002; RAIZER ET AL, 2009).

Uma metodologia que tem se revelado eficiente para diversas aplicações de processamento digital de sinais são as redes neurais de convolução (RNC), conhecidas como ConvNets (KIM e CASPER, 2013). São redes com múltiplas camadas, que implementam filtros baseados na convolução discreta, adicionados de funções sigmodais, permitindo o processamento não linear de sinais (HAYES, 1999).

As redes neurais de convolução são similares às redes neurais artificiais (RNA), que utilizam técnicas computacionais apresentando um modelo matemático baseado na estrutura neural de organismos inteligentes, adquirindo conhecimento através da experiência. No entanto uma RNC apresenta algoritmos com algumas diferenças fundamentais se comparada com uma RNA (LECUN; KAVUKCUOGLU; FARABET, 2011). Suas funções podem abranger uma ampla gama de aplicações, como análise de alteração genética (NING ET AL, 2005), detecção e reconhecimento de faces (SOCHER ET AL 2011; GARCIA e DELAKIS 2004, LAWRENCE ET AL, 1997), conversão de texto manuscrito (LECUN; BOTTOU; BENGIO, 1998), a análise de cena (FARABET ET AL, 2012), geoprocessamento, controle de qualidade em processos industriais, meteorologia e pesquisas em astronomia (AIZAWA; SAKAUE; SUENAGA, 2004). Na área da Medicina, o uso de imagens tornou-se de grande

(25)

3

importância no diagnóstico médico, através de técnicas avançadas como a tomografia computadorizada, ressonância magnética (ASSUMPÇÃO, 2013) e outros.

No processamento de imagens, os algoritmos são em geral implementados em software e assim o desempenho computacional pode não ser adequado ou não atender requisitos de aplicações em tempo real. Neste caso, a convolução 2D pode ser aplicada de forma concorrente e/ou paralela, o que pode ser conseguido explorando-se o potencial dos FPGA’s, obtendo-se assim desempenho potencialmente muito superior. Métodos implementados em FPGA com aplicações de visão computacional para as RNC's têm sido publicados nos últimos anos, desde o trabalho de FARABET ET AL. (2009).

Em diversas aplicações nas áreas de processamento digital de imagens e visão computacional, a etapa de filtragem é um componente essencial, sendo uma das primeiras etapas de processamento (ROSTEN e DRUMMOND, 2006).

Esta dissertação tem como objetivo apresentar um estudo da arquitetura para uma implementação digital eficiente da parte central das RNC's, que é o algoritmo de convolução discreta (ACD).

1.1 OBJETIVOS

1.1.1 Objetivo Geral

O presente trabalho de pesquisa tem como objetivo o estudo de uma arquitetura de hardware, através de FPGA, que implemente o algoritmo discreto de convolução visando futuras aplicações em tempo real da visão computacional.

1.1.2 Objetivos Específicos

Para atingir o objetivo geral, foi necessário:

 Levantar o referencial teórico aplicado processamento de imagens em FPGA.

 Propor uma solução paralela baseada em hardware para um Algoritmo de Convolução Discreta.

 Desenvolver a programação em MATLAB®

(26)

4

 Implementar o projeto em FPGA.  Validar o design através de simulação.

 Comparar os resultados obtidos pelo FPGA com os resultados obtidos pelo MATLAB® como forma de avaliação da confiabilidade do método desenvolvido.  Realizar comparações de desempenho entre implementações em FPGA e em

MATLAB®.

1.2 ESTRUTURA DA DISSERTAÇÃO

Este trabalho de pesquisa está estruturado da seguinte forma: o primeiro capítulo trata da contextualização do tema, apontando os objetivos geral e específicos. No segundo capítulo, será apresentada a revisão bibliográfica necessária ao desenvolvimento do projeto, sendo descritos conceitos relacionados ao FPGA e processamento de imagens. No terceiro capítulo tem-se a descrição da solução proposta detalhada, a metodologia e materiais utilizados. Os resultados e discussões serão apresentados no quarto capítulo, por fim, no quinto capítulo, serão apresentadas as conclusões e sugestões para trabalhos futuros desta dissertação.

(27)

5

2. REVISÃO BIBLIOGRÁFICA

2.1 Introdução

As ConvNets são baseadas nas Redes Neurais Biológicas, tendo sua arquitetura desenvolvida através de filtros de convolução intercalados, com a finalidade de segmentação, detecção e reconhecimento de padrões de acordo com a aplicação. O projeto pode ser aplicado para sistemas de visão, robôs de pequeno porte e outras aplicações embarcadas que requerem baixo consumo de energia (FARABET ET AL. 2012).

A configuração implementada explora o paralelismo e com isso pode-se obter grande eficiência na execução dos algoritmos através do FPGA. É normalmente necessário o uso de um módulo de memória externa para o carregamento (PAGANO, 2012).

O sistema desenvolvido é baseado em uma rede neural de convolução (RNC), apresentada por (FARABET ET AL. 2009). Ele pode ser analisado como um processador SIMD (Single Instruction, Multiple Data). Possui um vetor de instruções que contém as operações elementares de um algoritmo de convolução.

Tais instruções são otimizadas ao nível de hardware, assim a implementação de uma RNC consiste em reprogramar as camadas do processador, sem a necessidade de mudar a configuração lógica do FPGA.

2.2 FPGA (Field Programmable Gate Array)

FPGA é um dispositivo lógico programável que utiliza uma rede de portas lógicas e chaves programáveis organizadas em forma de matriz e respectivas interligações, que podem ser configurados possibilitando a criação de uma grande quantidade de circuitos digitais através da conexão desses componentes, cuja programação é realizada pelo cliente e não pelo fabricante (WOODS ET AL, 2008).

O FPGA permite implementar desde uma simples lógica combinacional até blocos de memórias e estruturas mais complexas, como um microcontrolador, sendo capaz de rotear cada bloco lógico de forma a conectá-los da melhor maneira possível, garantindo assim o funcionamento do circuito projetado (PEDRONI, 2004; WOODS ET AL. 2008).

(28)

6

A Figura 1 apresenta a estrutura básica do FPGA, que pode variar conforme o fabricante, contudo é composta, basicamente, dos seguintes recursos:

 Blocos lógicos programáveis de n entradas (blocos lógicos), onde n varia conforme fabricante e família do FPGA.

 Amplificadores de corrente de entrada e saída.

 Chaves de conexão que funcionam como uma rede para interligar os diversos blocos lógicos existentes.

 Memória RAM interna em alguns dispositivos.

 Registradores (blocos lógicos) ou flip-flops para o armazenamento de informações.

Figura 1. Estrutura de um FPGA (BROWN; VRANESIC, 2000) Adaptado

De acordo com (ALTERA®, 2011D, 2010A), o FPGA moderno possibilita a utilização de circuitos adicionais com funções específicas que são comumente encontradas no desenvolvimento de circuitos digitais, tais como performance counter, barramento de dados, Jtag, PLL (Phased Locked Loop) e memórias.

Sistemas reconfiguráveis em um único chip são cada vez mais utilizados de forma embarcada, devido ao aumento de desempenho e velocidade que esses dispositivos

(29)

7

apresentam, bem como na facilidade em sua programação através de linguagens de descrição de hardware (PERRY, 2002; ORDONEZ; PENTEADO e SILVA, 2006).

Processadores embarcados em FPGA´s podem ser utilizados conforme a necessidade de uma aplicação específica e com fácil personalização, unindo o hardware e software para redução de custos, maior desempenho e flexibilidade (RAIZER, 2010; TOMAZATI, 2009).

2.2.1 Ferramentas de Desenvolvimento

O trabalho aqui descrito foi desenvolvido através do kit de desenvolvimento Terasic DE2i-150 que utiliza o FPGA Cyclone IV da Altera®. Esta placa apresenta diversos dispositivos, periféricos e acessórios, como RS232, HDMI, Entrada de Som, SD, Memória, VGA, Ethernet (ALTERA®, 2011d, 2010a), facilitando assim o desenvolvimento de sistemas embarcados.

Para a programação do kit Terasic DE2i-150, foram utilizados os seguintes softwares, todos fornecidos pela Altera®:

 Quartus II v13.1 SP1: Utilizado na implementação dos códigos em VHDL para a descrição e síntese do hardware.

 NIOS II®

Software Build Tools for Eclipse: Ambiente de programação em C/C++, que permite criar o software que será executado pelo processador NIOS II®, desenvolvido no Quartus 13.1.

 Qsys (ALTERA®

, 2011f): Utilizado para o desenvolvimento e configuração do processador NIOS II® e seus periféricos.

2.3 Linguagens de Descrição de Hardware e VHDL

A linguagem VHDL (Very High Speed Integrated Circuit Hardware Description Language) foi desenvolvida inicialmente como uma forma para documentar os projetos de circuitos integrados de altíssima velocidade (VHSIC), com o objetivo de descrever a estrutura e funcionalidade dos circuitos integrados, possibilitando a simulação dos circuitos projetados.

O Departamento de Defesa Norte Americano investiu nessa linguagem de forma a possibilitar os avanços tecnológicos na área, contribuindo em meados de 1990 na

(30)

8

padronização do VHDL pelo IEEE, passando a ser chamado de VHSIC Hardware Description Language (LIPSETT; SCHAEFER; USSERY, 1989).

A sintaxe do VHDL tem origem da linguagem ADA que, por sua vez, teve origem do PASCAL. O VHDL é uma linguagem com descrições de operações executadas de forma concorrente, exceto no sequenciamento das instruções em blocos especiais.

Um projeto escrito em VHDL é dividido em duas partes: a descrição do comportamento (Architecture) e da interface (Entity), juntamente com a declaração das bibliotecas e pacotes utilizados, conforme destacada abaixo:

 Entidades: É qualquer componente VHDL que tenha um conjunto de portas de comunicação, com entradas e saídas, sendo descrita por palavras reservadas, como por exemplo: IN, OUT, INOUT, ENTITY, PORT. Uma entidade descreve e/ou declara entradas e saídas de um circuito (interfaces).

 Arquitetura: É um conjunto de primitivas em VHDL que farão a descrição do hardware, isto é, o modo como o circuito deve operar (relação entre interfaces), definindo estrutura (conexões) ou comportamento (ações).

 Pacotes e Bibliotecas: Possibilitam agregar, em um determinado projeto, funções e definições de tipos de dados previamente definidos.

 Processos: Podem ser síncronos ou assíncronos, dependentes ou não de um sinal de clock e utiliza palavras reservadas como: PROCESS, BEGIN e END PROCESS. Consiste no modelo de um componente que possui uma lista de sensitividade, isto é, possui uma lista de sinais dos quais depende. Os processos descritos em uma arquitetura são sempre concorrentes, porém o fluxo dentro de um processo é sequencial.

Dentre as vantagens da utilização de uma linguagem de descrição de hardware (CARRO, 2001), pode-se destacar:

 A codificação serve como documentação explicitando os objetivos do projeto.  Possuem regras sintáticas e semânticas bem definidas, não permitindo dupla

interpretação.

 Padronização da linguagem resulta em portabilidade, tornando o código reutilizável em outros ambientes de desenvolvimento.

(31)

9

2.4 Amostragem e Quantização

De acordo com (ACHARYA e RAY, 2005), o entendimento dos processos de amostragem e quantização é de suma importância em processamento de imagens. Entende-se como amostragem a discretização no espaço, enquanto a quantização se refere à discretização em amplitude, de acordo com (GONZALEZ e WOODS,2009).

Para que uma imagem possa ser tratada computacionalmente, ela deve ser digitalizada, e para isso, faz-se necessário a realização de quantização e amostragem da imagem analógica. O processo de amostragem consiste na conversão da imagem analógica em uma matriz de imagem com M x N pontos (pixels), definindo a resolução da imagem. A amostragem mais frequente é chamada de uniformemente espaçada, sendo cada amostra tomada em intervalos iguais, porém existem também outras técnicas de amostragem que utilizam espaçamento de tamanhos direfentes, sendo menos comuns (ASSUMPÇÃO, 2013).

Quanto maiores os valores de M e N maior será a resolução da imagem, estando diretamente relacionada à qualidade da imagem, que também depende fortemente dos requisitos de determinada aplicação. Contudo, uma maior resolução implica em uma maior complexidade computacional, necessária para realizar tratamentos na imagem e também um maior custo de armazenamento (FILHO e NETO, 1999).

De acordo com a Figura 2 é possível comparar uma mesma imagem com diferentes quantizações, ilustrando os efeitos da redução do número de níveis de cinza sobre a qualidade da imagem. Quanto menor o número de níveis de cinza, mais perceptível é o surgimento de uma imperfeição na imagem, conhecida como falso contorno (FILHO e NETO, 1999).

Na quantização, cada valor de pixel assume um valor inteiro, na faixa de 0 a 2n -1, sendo n é o número de tons de cinza. A imagem resultante terá 2n possíveis tons de cinza, desta forma n é o número de bits necessários para representar cada pixel.

(32)

10

Figura 2. Imagem com Diferentes Níveis de Cinza. Da Esquerda para Direita, de Cima para Baixo: 16, 8, 4 e 2 Níveis de Cinza. Fonte: (GONZALEZ e WOODS, 2001)

A quantização mais frequente consiste em tomar o valor mínimo e o valor máximo dos pixels da imagem, e dividir este segmento em intervalos iguais de acordo com o número de bits definido para armazenar uma amostra. Utiliza-se normalmente o valor de n igual a 8, o que equivale a um byte, representando uma variação de 0 a 255 nos tons da imagem (ASSUMPÇÃO, 2013).

2.5 Arquitetura do Hardware

A arquitetura do hardware está representada na Figura 3 cujo diagrama mostra a implementação do algoritmo da convolução, conforme será exemplificada posteriormente.

(33)

11

Figura 3. Convolução 2D para K=3, onde K é a Largura do Kernel e W é a Largura da Imagem. Diagrama adaptado de (FARABET; POULET; LECUN, 2011)

Na Figura 3 pode-se observar que as multiplicações são realizadas em paralelo, com o uso de nove multiplicadores simultâneos, e os valores dos resultados são somados e guardados em acumuladores. A implementação de operações de processamento de imagens no FPGA tem como ênfase as operações de vizinhança na aplicação de um kernel, que tem a função de um determinado filtro. Com isto a realização da convolução 2D se torna mais rápida e prática (SRIRAM e KEARNEY, 2007) obtendo-se cada linha da matriz de imagem final ao mesmo tempo (BENKRID, 1999).

2.6 Processador (RNC)

A ConvNet é uma rede neural que consiste em várias etapas que têm módulos de processamento repetitivos envolvendo basicamente duas funções, respectivamente, uma convolução e uma subamostragem. Em cada fase há um módulo de banco de filtros, um cálculo de função não-linear e um módulo de agrupamento espacial (LECUN; KAVUKCUOGLU; FARABET, 2010).

(34)

12

O banco de filtros e a função não-linear correspondem à seguinte transformação, muito semelhante a uma rede neural artificial tradicional.

(2.1)

Cada entrada e saída é uma matriz 2D de dimensões e , incluindo o filtro e a função não-linear e é o kernel do filtro utilizado na operação de

convolução representado por “*”.

A convolução é a unidade de processamento base de filtro, responsável pelo principal custo computacional de todo o processo. Para se familiarizar com uma arquitetura completa para uma aplicação de RNC, um processador de rede de convolução programável (RCP), desenvolvido por (FARABET ET AL. 2009), é apresentado na Figura 3.

Este tipo de arquitetura pode ser analisado como um processador SIMD (Single Instruction, Multiple Data) e tem um vetor de instruções contendo operações elementares de uma ConvNet. Tais instruções são hardwares otimizados, de modo que a aplicação de uma RCP consiste em reprogramar os elementos das camadas do processador, sem a necessidade de alterar a configuração lógica do FPGA. A Figura 4 mostra os módulos que compõem um RCP.

(35)

13

O sistema utilizado é uma rede neural de convolução (RNC), apresentado por FARABET ET AL. (2009). Para programar as operações elementares de uma RCP, suas instruções determinam o software layer do processador, sem a necessidade de mudar a configuração lógica do FPGA.

Pode-se notar na Figura 4 que a RCP possui uma câmera como entrada de dados, e a tela como saída de informações. A memória externa é usada para entrada e saída dos dados e também pelo sistema de processamento. Para tanto, há uma interface que utiliza um árbitro que seleciona a prioridade de cada módulo, tanto para a leitura como escrita de dados na memória, controlando assim o múltiplo acesso aos dados (ALTERA® , 2011D, 2010A).

O driver de Entrada/Saída da memória providencia a latência de acesso requerida para a memória externa, o que permite a RCP a ter completo acesso de leitura/escrita na mesma memória utilizada pela VALU (Video Arithmetic Logic Unit), conforme visto na Figura 4.

A unidade de controle da RCP é baseada em uma máquina de estados. A diferença dessa para uma unidade de controle complexa é que os cálculos não são realizados pela unidade de processamento central, mas pela VALU que pode ler/escrever dados de/para a interface de dados, de forma assíncrona.

O programa funciona com a utilização de oito camadas, sendo três de convolução, três de subamostragem e duas de finalização. Seu funcionamento está ilustrado na Figura 5.

(36)

14

A rede convolucional é formada por múltiplos estágios e composta de várias fases. A entrada e saída de cada etapa são conjuntos de matrizes chamados mapas de características (LECUN; KAVUKCUOGLU; FARABET, 2011).

De acordo com FARABET ET AL (2010), A primeira camada (C1) recebe a imagem a ser processada, após sua normalização, e gera seis convoluções diferentes utilizando kernels desejados na imagem de entrada, produzindo assim seis mapas de características.

A segunda camada (S2), gera um agrupamento e subamostragem de cada mapa da camada anterior.

A terceira camada (C3), computa características de níveis mais altos usando novos filtros de convolução e somando os resultados, gerando assim novos mapas.

A próxima camada (S4), faz o mesmo procedimento de S2, mas agora para os mapas gerados por C3.

A camada (C5) faz o mesmo procedimento de C3, mas agora utilizando os mapas gerados por S4. Em (F6), o mapa gerado representa um mapa de picos de ativação para cada categoria. O (F7) é fixo e simplesmente combina as categorias anteriores em um resultado simples.

2.7 Análise dos Tempos da Solução em Software

Utilizando o processador embarcado NIOS II® da Altera®, LIAO, ZHOU e FAN (2010) fizeram o reconhecimento de folhas utilizando implementação por software (FARABET ET AL. 2009), com isto obteve-se o como resultado:

Elementos Lógicos Utilizados: 6973 Registradores Utilizados: 4474 Tempo de Processamento: 991 ms

Assim o resultado em tempo de processamento da solução obtido foi superior ao encontrado com a utilização de outras implementações, diferentes da realizada por software.

(37)

15

2.8 Implementação em Hardware do Algoritmo para Aceleração do Tempo de Resposta

Como justificativa da solução proposta para acelerar os tempos de resposta e análise em tempo da solução usando a implementação em hardware do algoritmo, LIAO, ZHOU e FAN (2010) propuseram a utilização de instruções customizadas para a realização da mesma experimentação, com o reconhecimento de folhas. A utilização de tais instruções foi possível devido ao NIOS II® que apresenta tal opção além de blocos lógicos customizados. A utilização dessa estrutura foi pensada a fim de reduzir uma sequência complexa de instruções padrões em uma única instrução de software implementada em hardware. A instrução customizada é mostrada na Figura 6.

Figura 6. Instrução Lógica Customizada no NIOS II® adaptado de (LIAO; ZHOU; FAN, 2010)

FARABET ET AL. (2009, 2013) apresentaram uma arquitetura desenhada para aumentar o data throughput pela adição de unidades de vetor de processamento paralelo múltiplo e permitindo fluxos de dados individuais para operar sem problemas dentro de blocos de processamento. Um exemplo do Processador de Stream é mostrado na Figura 7.

(38)

16

Figura 7. Exemplo do Processador de Stream (Farabet et al. 2009).

Assim, a implementação através de FPGA e ASIC é o caminho mais fácil para gerar um software compatível com redes de reconhecimento de objeto. A arquitetura de hardware apresentada pode ser usada para acelerar a execução dos algoritmos de visão.

FARABET ET AL. (2009, 2012) demonstraram também que há um limite com o bandwidth para a memória externa da implementação em FPGA. Assim, gerando uma placa própria customizada consegue-se velocidades maiores de execução do reconhecimento. Pois há uma limitação do bandwidth em 1 GB/s, fazendo o programa rodar com uma taxa de 6 frames por segundo. Utilizando a própria placa customizada, o bandwidth aumenta para 7,2 GB/s, a frequência pode ser maior e a taxa de frame é multiplicada por 2.

A sugestão da implementação de um RNC é devido à utilização de um vetor de instruções que contém as operações elementares de um algoritmo de convolução. Tais instruções são muito otimizadas no nível de hardware, assim a implementação de uma RNC consiste em apenas reprogramar o software layer do processador, sem a necessidade de mudar a configuração lógica do FPGA.

Utilizando apenas implementações de convolução, comparando a RNC com a implementação em um computador normal, para Kernels pequenos (7x7) a RNC é 7 vezes mais rápida e para Kernels maiores (17x17 aproximadamente) ela é trinta vezes mais rápida. A RNC é cerca de cem vezes mais rápida se comparada com uma implementação padrão em software. Toda análise foi feita com uma imagem em escala de cinza para a mesma análise com uma monoescala, o tempo pode ser dividido por um fator de 1,5.

(39)

17

Existem outros fatores que podem ser analisados, segundo FARABET ET AL. (2009, 2011) para melhorar ainda mais a velocidade do reconhecimento. Esses fatores são:

1. Transformar o gerador de convolução em uma rede de unidades elementares (como multiplicadores, mapeadores não lineares) flexível e programável para poder gerar várias convoluções de diferentes tamanhos ao mesmo tempo;

2. Transformar as operações na VALU cascateadas, criando diferentes caminhos nesta rede, o que reduz a latência;

3. Colocar os filtros kernels em um cache na rede antes do processamento e realizar a leitura antecipada do fluxo de dados durante o processamento.

2.9 Resultado do Algoritmo em Software e em Hardware

Pode-se analisar o tempo de execução e comparar com diversos fatores. A Tabela 1 mostra a diferença de tempo na utilização da implementação por software e por instrução customizada.

Tabela 1. Comparação entre a implementação por Software e por Instrução Customizada

Tipo Total de Elementos Lógicos

Total de

Registradores Tempo de Processamento (ms)

Custom Instruction 10.808 4.545 140

(40)

18

Na Figura 8 e na Figura 9 pode-se observar a variação da velocidade de processamento comparada entre a utilização de computadores normais (otimizados e não otimizados) e a utilização do RNC. A Figura 8 mostra também a diferença do tempo para computar um ConvNet comparada com número de conexões no ConvNet (em milhões), sendo que o tamanho da entrada é fixo em 512x384, o Kernel é fixo em 7x7 e o pooling é fixo em 2x2, observa-se que o tempo aumenta diretamente com o número de conexões.

Figura 8. Tempo de Processamento (ms) por Número de Conexões no ConvNet (em milhões) para RNC e Computadores Normais (Farabet et al. 2009).

A Figura 9 mostra a variação do tempo para fazer a convolução de uma imagem de 640x480 com o tamanho do kernel utilizado, nota-se também que é diretamente proporcional, mas um ponto interessante a notar é que para kernel muito pequeno (1x1) o resultado teórico do computador normal é mais interessante que o RNC.

(41)

19

Figura 9. Tempo de Processamento (ms) pelo Tamanho do Kernel Utilizado para RNC e Computadores Normais (Farabet et al. 2009).

Na Figura 10 e na Figura 11 pode-se analisar a comparação dos quadros por segundo para o processamento em CPU, FPGA e ASIC. A Figura 10 relaciona os frames por segundo com o tamanho das imagens processadas, mantendo um kernel constante de 9x9, já a Figura 11 relaciona os frames por segundo com o tamanho dos filtros de kernel, para figuras de tamanho fixo de 500x500 pixels.

(42)

20

Figura 10. Frames por Segundo em Função do Tamanho da Imagem Quadrada para Programas em CPU, FPGA e ASIC (Farabet et al. 2009).

Figura 11. Frames por Segundo em Função do Tamanho do Kernel para Programas em CPU, FPGA e ASIC (Farabet et al. 2009).

(43)

21

A utilização da ConvNet proporciona a oportunidade de trabalhar com o reconhecimento de imagens em tempo real, o que significa um salto muito grande no desenvolvimento de trabalhos de veículos autônomos.

A implementação da nova tecnologia de ASIC pode, ainda, gerar uma diminuição na potência, já que ela pode funcionar utilizando 1W e o FPGA utiliza 15W de pico, com isto, trabalhos de visão inteligente e robôs de baixo custo tornam-se possíveis, já que utiliza pouca energia, e tem o reconhecimento em tempo real. As ConvNets podem ser programadas ainda para realizarem uma grande variedade de tarefas, como visão baseada em obstáculos (FARABET ET AL. 2009, 2013).

(44)

22

3. MATERIAIS E MÉTODOS

Este capítulo apresenta a metodologia para os ensaios experimentais incluídos nesta dissertação.

Como a meta deste projeto é o estudo de uma arquitetura para sistemas embarcados, o trabalho de pesquisa foi implementado em um FPGA Altera® Cyclone IV GX no kit DE2i-150, que pode ser observado em sua vista superior na Figura 12 e inferior na Figura 13.

Figura 12. Vista Superior FPGA Terasic Cyclone IV De2i-150 (Altera® co.)

É comum no processamento de imagens a manipulação da informação desejada através da convolução entre o kernel respectivo e a matriz de dados que representa a imagem. O kernel pode ser entendido como uma matriz de ordem muito menor do que a matriz da imagem, o qual deve ser aplicado sucessivamente até processar toda a imagem.

(45)

23

Figura 13. Vista Inferior FPGA Terasic Cyclone IV De2i-150 (Altera® co.)

Entre os requisitos deste trabalho está o desenvolvimento de um projeto de arquitetura de hardware de baixo custo e baixo consumo de energia, flexível e com um bom desempenho computacional para possíveis aplicações em tempo real.

Para avaliar o desempenho, será feita a comparação no processamento de imagens entre o software MATLAB® e os hardwares em FPGA com uma versão implementada através da programação do processador NIOS II® e uma versão completamente em VHDL.

O algoritmo de convolução será assim testado com duas implementações diferentes: a primeira com o desenvolvimento de um processador dedicado que funcionará com as instruções através de linguagem C/C++ e plataforma Eclipse, a segunda será utilizar todas as instruções desenvolvidas em hardware através da linguagem VHDL.

3.1 Aplicação do ACD

Como evidenciado no capítulo anterior, a aplicação de algoritmos eficientes para a convolução é de grande importância no processamento de imagens pelas redes neurais de convolução, principalmente no que se refere ao desenvolvimento dos diversos kernels que têm a função de filtragem da imagem, isolando assim regiões que apresentam determinadas características como, por exemplo, detecção de bordas e nitidez. Neste caso, para testar os

(46)

24

algoritmos desenvolvidos, serão usados filtros tradicionais e bem conhecidos, evitando assim o trabalho fora do escopo de treinar redes neurais com diferentes funções.

3.1.1 Formulação Matemática

A maior parte do esforço computacional de uma RNC é, portanto, relativo ao cálculo da convolução 2D (Algoritmo de convolução discreta). Assim, para maior eficiência, adota-se o cálculo das multiplicações da convolução em paralelo, realizando-se a seguir a soma das multiplicações.

Adotou-se, portanto, a seguinte formulação digital para o cálculo da convolução, que é um pouco diferente da formulação tradicional, porém está de acordo com o processamento de uma RNC (FARABET ET AL, 2009), incorporando ao mesmo tempo a parte mais exigente em termos de eficiência: (3.1)

Onde xij é o valor da posição ij da matriz referente à imagem de entrada, wmn representa a

matriz referente ao kernel, yij é um viés que será combinado com o resultado e zij é o

valor de saída na matriz respectiva. Note que a variação dos índices i e j dependem do tamanho original da matriz 2D da imagem respectiva a ser processada.

Apresenta-se na Figura 14 um esclarecimento para o processo da convolução conforme foi usada na implementação do algoritmo respectivo.

(47)

25

A Figura 14 ilustra a convolução entre uma imagem e um dado kernel. Considerando-se que o kernel é repreConsiderando-sentado por uma matriz de dimensão 3 , a imagem será completamente processada como várias submatrizes de mesma dimensão, retiradas sucessivamente da matriz de dados da imagem. Cada submatriz será multiplicada pelo kernel respectivo conforme apresentado na Figura 14. A convolução é completada através da repetição do processo até que o kernel tenha passado sobre todos os possíveis pixels da matriz de origem. O resultado final da convolução é uma versão filtrada da matriz da imagem. Não é usual o uso de complementação das bordas para o processo, perdendo-se assim um certo número de pixels a cada transformação.

3.1.2 O Fluxo de Dados

A Figura 15 apresenta o diagrama do fluxo de dados para o sistema desenvolvido, em uma visão global. Inicialmente o sinal de vídeo ou imagem é capturado e armazenado na memória de um computador tradicional, passando para a memória do sistema implementado para o algoritmo da convolução, onde os dados serão processados e posteriormente reenviados para serem exibidos.

Figura 15. Funcionamento do Sistema: Fluxo de Dados da Aquisição à Visualização.

A Figura 16 apresenta um diagrama de blocos detalhado para o processamento de imagens nas duas implementações desenvolvidas usando FPGA (respectivamente baseada no NIOS II® e programada através de VHDL) e também no código desenvolvido no software MATLAB®.

(48)

26

Figura 16. Procedimento para o Desenvolvimento das Implementações

As imagens aplicadas neste trabalho de pesquisa, foram obtidas por meio de banco de dados de imagens padronizadas (COMPUTER VISION GROUP, 2014) e também através de máquina fotográfica digital de 14 Megapixels.

Conforme a Figura 16 pode-se destacar o seguinte fluxo de dados no design do hardware e software:

3.1.2.1 Processamentos Realizados usando o MATLAB®:

 Desenvolvimento de código para converter a matriz de imagem RGB para uma matriz de imagem com níveis de cinza (GRAY). Isso permite trabalhar com apenas uma camada ao invés de três camadas no sistema RGB, diminuindo o tempo de processamento.

 Geração do arquivo de imagem em níveis de cinza no formato TXT para ser processado no FPGA, nas duas implementações.

 Aplicação do operador de suavização gaussiano na imagem, que corresponde a um kernel convoluído com a matriz de imagem convertida em cinza, o que

(49)

27

serve como pré-processamento para as imagens a serem processadas, conforme Apêndice D.

3.1.2.2 Processamento no FPGA usando o NIOS II®:

 Configuração do processador NIOS II®

no ambiente QSYS com os demais dispositivos essenciais ao processamento.

 Compilação da configuração do NIOS II®

gerando um arquivo de extensão QIP que representa o projeto do microncontrolador desenvolvido e que será utilizado no ambiente QUARTUS®.

 O projeto é convalidado através da simulação do seu funcionamento no MULTISIM®.

 Codificar o algoritmo de convolução em linguagem C/C++ visando a aplicação do kernel de suavização de imagens gaussiano à matriz da imagem gerada no MATLAB®.

 Compilar a codificação no Eclipse a ser usada no microcontrolador no QUARTUS® para ser utilizado no FPGA.

 É gerada então pelo NIOS II®

a imagem processada. Essa matriz será comparada com a matriz respectiva gerada pelo MATLAB® para verificação dos resultados, conforme Apêndice C.

3.1.2.3 Processamento no FPGA usando VHDL:

 Inicialmente, o arquivo da matriz de imagem em níveis de cinza deve ser transformado em um vetor de dados para ser compatível com o armazenamento na memória interna do FPGA.

 Codificar em VHDL o operador de suavização gaussiano usando o kernel respectivo.

 Compilar o algoritmo descrito em VHDL no ambiente computacional QUARTUS®

(50)

28

 Simular no MULTISIM®

o sistema desenvolvido, fazendo uso da ferramenta waveform editor para criar estímulos que permitam a compreensão completa dos aspectos eletrônicos de baixo nível envolvidos, por exemplo sincronização.  Após o funcionamento regular esperado ser constatado, o código é transmitido

ao FPGA e usado para realizar a filtragem respectiva.

 A matriz da imagem processada é então comparada com a matriz de imagem gerada pelo MATLAB® para verificação dos resultados, conforme Apêndice B.

3.2 Implementação no MATLAB®

Há diversas aplicações na engenharia e na ciência que exigem a identificação correta de bordas, como por exemplo, nos processos de manufatura automatizados equipados com câmeras para detectar componentes na montagem do produto, bem como o reconhecimento de padrões.

Na robótica, um robô pode se comportar de uma certa maneira em resposta a estímulos visuais. Pode-se também processar e extrair características relevantes em um conjunto de imagens, através da detecção de bordas antes da utilização do algoritmo de reconhecimento de padrões e assim alcançar resultados superiores de desempenho.

Pode-se utilizar vários tipos de kernel no ACD de acordo com a finalidade e característica que se deseja analisar.

Através do software MATLAB®, diversos tipos de filtros e suas aplicações, podem ser testados de acordo com o objetivo desejado. No desenvolvimento do projeto, a imagem GRAY foi transformada em uma matriz de pixels que representa essa imagem através de números, que varia de 0 a 255 conforme ilustra a Figura 17.

(51)

29

Figura 17. Matriz da Imagem Gray

Na sequência a matriz de imagem GRAY passa pelo processo de convolução com a matriz de kernel do filtro pré-definido para a extração de uma determinada característica desejada, nesse caso extração de bordas e suavização da imagem, o que pode ser visto na Figura 18 e na Figura 19.

(52)

30

Figura 18. Matriz de Convolução Gerada a partir da Convolução da Imagem Gray com o Kernel

Figura 19. Kernels: K1 para Detecção de Bordas e K2 para Destacar Relevo

3.3 Implementação do NIOS II®

A arquitetura interna detalhada do periférico desenvolvido é representada na Figura 20. Pode-se observar a presença dos periféricos no barramento Avalon e o ACD desenvolvido em

(53)

31

software com linguagem de programação C/C++, juntamente com o barramento Avalon para comparações quanto ao desempenho e processamento de imagens.

Figura 20. Diagrama em Blocos com Todos os Módulos do Microcontrolador, Módulo ACD implementado em Linguagem C/C++ e MATLAB® e Barramento Avalon

É importante a escolha adequada do barramento e de seus componentes para melhor desempenho do sistema como um todo. O barramento Avalon permite que as informações sejam lidas, processadas e escritas nos componentes vinculados ao barramento e entrarão na memória interna a medida que o processador fizer uso do hardware desenvolvido.

Para a leitura das informações processadas, o processador irá retirar os dados da memória SDRAM, que estão ordenados segundo o algoritmo de convolução.

A discussão dos resultados consistirá na análise comparativa do desempenho e qualidade da imagem de um ACD desenvolvido em software através do MATLAB®, em hardware através do FPGA usando NIOS II® e através do FPGA usando VHDL.

(54)

32

3.3.1 Análise das Conexões

O processador desenvolvido foi projetado com a finalidade de controlar todos os periféricos necessários ao funcionamento do sistema.

Utilizando a ferramenta QSYS, os elementos presentes no processador são instanciados um a um e conectados de forma coerente, conforme podemos observar na Figura 21 e na Figura 22 que representam as janelas de criação do processador e sua conexão com os demais periféricos.

(55)

33

O processador ALTERA® NIOS II® (ALTERA®, 2010b) é um soft core que possui arquitetura de 32 bits, contendo três versões que estão disponíveis para serem utilizadas: econômico, padrão e rápido. A versão utilizada neste trabalho de pesquisa foi a padrão.

O processador desenvolvido foi projetado com a finalidade de controlar todos os periféricos necessários ao funcionamento do sistema.

Após adição à biblioteca de periféricos, deve-se instanciar um periférico do tipo criado e realizar a sua conexão com o barramento desejado, que neste caso foi o barramento de dados do processador NIOS II®.

Utilizando o software QSYS, uma extensão do Quartus II (ALTERA®, 2011f), os elementos presentes no processador (sysid, jtag_uart, onchip_memory, sdram_controller, pll_DE2115, performance_counter) são instanciados um a um e conectados de forma coerente, conforme pode-se observar na Figura 22 que ilustra a janela de criação do processador e sua conexão com os demais periféricos, possibilitando ao usuário personalizar sua lógica diretamente na unidade lógica aritmética (ULA) do processador.

As conexões de desenvolvimento do hardware no QSYS não são feitas de maneira intuitiva, havendo necessidade de conhecimento sobre o funcionamento de todos os dispositivos disponíveis no software.

(56)

34

Figura 22. Implementação do Microcontrolador no QSYS.

Após adicionado no QSYS e gerado o sistema, há necessidade de compilação no QUARTUS® para ser utilizado no FPGA. O próximo passo é criar o modelo de software em linguagem C/C++ que irá acessar este periférico do processador através de comandos diretos de escrita e leitura de dados em endereços de memória.

O algoritmo ACD desenvolvido funciona juntamente com o processador que foi personalizado através do QSYS no FPGA, cuja função é realizar cálculos de convolução necessários para se obter um filtro gaussiano, com a função de suavizar a imagem.

(57)

35

3.3.2 Diagrama Esquemático do Microcontrolador

Após compilação do hardware desenvolvido no QSYS é gerado o microcontrolador representado na Figura 23. Esta forma de visualização é possível através do software QUARTUS II® onde podemos ver as entradas e saídas utilizadas na arquitetura desenvolvida.

Figura 23. Microcontrolador Desenvolvido no QSYS

A Figura 24 representa o microcontrolador desenvolvido no QSYS com as conexões com o NIOS II®

(58)

36

Figura 24. Microcontrolador Desenvolvido no QSYS e Conexões com NIOS II ®

3.3.3 O Fluxo de Dados e Módulo de Convolução

Inicialmente o sinal de vídeo ou imagem é adquirido e armazenado na memória do periférico desenvolvido, passando para o sistema de processamento do ACD onde os dados serão processados através da rede de convolução, na sequência, os dados processados são exibidos.

O pipeline desenvolvido para o processamento do ACD foi realizado utilizando estágios, representando a descrição genérica de um conjunto de elementos lógicos e componentes genéricos, ou seja, a técnica de hardware que permite a busca de uma ou mais instruções além da próxima a ser executada, sendo colocadas em uma fila de memória dentro do processador onde aguardam o momento de serem executadas.

A Figura 25 apresenta a implementação do módulo personalizado para o cálculo do ACD. A utilização do algoritmo de convolução discreta é possível, após a sua integração ao

(59)

37

processador NIOS II®, sendo realizado através da criação de interfaces para o barramento Avalon.

Figura 25. Diagrama de Blocos com Processador, Módulo ACD Implementado em NIOS II® e o Barramento Avalon

No desenvolvimento do circuito, foram utilizados vários periféricos, sendo o barramento Avalon o meio pelo qual o processador NIOS II® e todos os demais periféricos utilizam para se comunicar.

Para melhor compreensão, é importante fazer a seguir uma descrição rápida de cada periférico existente no microcontrolador:

ACD é o módulo responsável pelo processamento da imagem, fazendo os cálculos de

convolução da imagem com um determinado kernel.

Jtag Uart é um periférico cuja função é o download do software desenvolvido para a

(60)

38

NIOS II® Processor é um processador configurado na versão rápida, para melhor

eficiência no processamento e aquisição de dados.

SDRAM Controller possibilita que os sinais sejam gerados para a memória externa de

forma coerente, garantindo os requisitos de tempos, possui uma interface com endereços que abrangem os 32MB de memória.

SysID é um periférico que identifica o processador e os demais componentes do

sistema, possui um registrador com um identificador único que pode ser gerado automaticamente ou manualmente.

Performance Counter é um periférico que permite mensurar dois ou mais eventos em termos de pulsos de clocks, através dele podemos descobrir o tempo de processamento dos dados.

PLL_DE2115 (Phased Locked Loop) é um componente externo ao sistema

desenvolvido no QSYS, esse dispositivo é responsável por multiplicar o sinal de clock de 50MHz, gerando qualquer valor de sinal de clock necessário para o hardware funcionar.

On-Chip Memory é a memória localizada dentro do próprio FPGA, usada normalmente para manter as instruções e dados usados pelo processador a cada instrução, ao invés de um dispositivo de memória externa.

SDRAM Memory (Synchronous Dynamic Random Access Memory) é o módulo de

memória externa, é uma memória de acesso dinâmico randômico (DRAM) que é sincronizada com o barramento do sistema.

USB-Blaster é driver responsável pela transferência de dados via USB entre o PC e os

dispositivos da Altera®, como o FPGA.

Os dados referentes a imagem ou vídeo são deslocados no registrador de deslocamento Shift Register, essas informações simultaneamente serão armazenadas numa matriz de imagem e deslocadas para a memória RAM, fazendo com que a imagem seja armazenada e processada de forma paralela.

A matriz de imagem é convoluída com a matriz de kernel que tem a função de um determinado filtro desejado de forma simultânea, ou seja, tem-se a entrada de dados da matriz de imagem, deslocamento dessas informações e o processo de convolução tudo ao mesmo tempo, isto é possível devido ao paralelismo do FPGA (MAX, 2004; MAYYA; ZARKA; ALKAD, 2010), fazendo com que o seu processamento seja mais rápido, diferente do que

(61)

39

acontece se todo esse processo ocorresse apenas de forma serial, o processador realiza uma leitura da saída do módulo, que já contém o resultado, baseado em multiplicações e adições em hardware (PEDRONI, 2004; KILTS, 2007).

Através da integração entre o processador e o módulo de convolução ACD obtemos um sistema ótimo para a realização da convolução (PAGANO, 2012).

3.4 Implementação em VHDL

3.4.1 Hardware ACD e Periféricos

Conforme a Figura 26, os dados são lidos das memórias internas pelo controlador projetado responsável pelas conexões entre os elementos do módulo desenvolvido e o barramento de dados do processador, conforme Apêndice A.

Figura 26. Diagrama em Blocos do Hardware ACD e Periféricos

O pipeline desenvolvido para o processamento do ACD foi realizado utilizando estágios, representando a descrição genérica de um conjunto de elementos lógicos e componentes genéricos, sendo colocadas em uma fila de memória dentro do processador onde aguardam o momento de serem executadas.

Referências

Documentos relacionados

É analisada também a curva de resfriamento do bloco de aço, o coeficiente de transferência de calor, o fluxo do fluido no tanque, a evolução da temperatura no tanque e como

O Fórum de Integração Estadual: Repensando o Ensino Médio se efetiva como ação inovadora para o debate entre os atores internos e externos da escola quanto às

O USO INDEVIDO DOS ESPAÇOS PÚBLICOS: ESTACIONAMENTOS PRIVATIVOS EM CALÇADAS E PASSEIOS DE USO COMUM Plinio Bitencourt Finamor RESUMO O presente artigo tem como objetivo apresentar

As principais características técnicas são a ArchestrA Graphics, vista na solução da Sysmaker, que passam pela aquisição de dados, histórico, gráficos, relatórios,

Por último, temos o vídeo que está sendo exibido dentro do celular, que é segurado e comentado por alguém, e compartilhado e comentado no perfil de BolsoWoman no Twitter. No

Consulte a Secção 11 para obter informações pormenorizadas sobre sintomas e efeitos na saúde.. Classificação conforme Regulamentação (EC) 1272/2008 [CLP/GHS] SECÇÃO

servidores, software, equipamento de rede, etc, clientes da IaaS essencialmente alugam estes recursos como um serviço terceirizado completo...

Este trabalho busca reconhecer as fragilidades e potencialidades do uso de produtos de sensoriamento remoto derivados do Satélite de Recursos Terrestres Sino-Brasileiro