• Nenhum resultado encontrado

Reconhecimento de Imagens Utilizando Redes Neurais

No documento DISSERTAÇÃO DE MESTRADO (páginas 93-98)

Utilização do Ambiente

6.1.2. Reconhecimento de Imagens Utilizando Redes Neurais

# Módulo “slave” utilizado para o cálculo de π class Slave { } {

code C "slave";

connector_par Data input; }

# Instanciação dos módulos usados pela aplicação Master master $N;

Slave slave[$N];

# Ligação dos módulos instanciados

forall i $N { link master.output[$i] slave[$i].input } }

# Instanciação da aplicação com um número de escravos variável Calc_Pi calc_pi variable;

6.1.2. Reconhecimento de Imagens Utilizando Redes Neurais

Para demonstrar as capacidades de modularização e paralelização do ambiente P-RIO, é descrita, a seguir, uma aplicação que reconhece as imagens obtidas por uma câmara de vídeo, mediante a utilização de um sistema invariante à translação, rotação e ao escalonamento da imagem a reconhecer [16], [46]. Para um melhor entendimento da aplicação, o sistema pode ser dividido em duas etapas: Pré-processamento e Classificação (figura 18).

A etapa de pré-processamento está baseada em procedimentos comuns da área de processamento digital de sinais (filtros, transformações, convoluções, etc.), o que implica uma elevada utilização de CPU, assim como uma alta repetição das operações dentro da matriz bidimensional que representa a imagem a classificar. Detalhes desta etapa são apresentados na

figura 19. Imagem Processamento Classificador Neural Pré

Figura 18. Reconhecimento de Imagens

Filtro de Mediana Detecção de Bordas Process. Homomór. Coorden. Polares Coef. H. Circulares Trans. de Mellin

Figura 19. Etapa de Pré-processamento

O processo parte de uma imagem em formato raster de 256x256 pixels com 256 níveis de cinza. Nesta imagem é aplicado um filtro de mediana para atenuar o ruído espúrio, e é feita a detecção de bordas através do Algoritmo de Sobel para obter a posição do objeto no campo de visão. Paralelamente, aplica-se à imagem inicial um processamento homomórfico por multiplicação para eliminar distorções causadas pela fonte de iluminação. Após esta etapa, e levando em conta os resultados obtidos na etapa de detecção de bordas, é feita a transformação da imagem para coordenadas polares, de modo a facilitar a obtenção dos coeficientes harmônicos circulares da imagem[43]. Finalmente, aplica-se a Transformada de Mellin[62] aos coeficientes harmônicos circulares, obtendo-se uma matriz de 128x512 coeficientes complexos que serão apresentados ao classificador.

A etapa de classificação, por outro lado, está baseada na utilização de redes neurais artificiais. Graças à capacidade que estas estruturas têm para extrair informações de conjuntos de dados complexos, as redes neurais têm revolucionado as aplicações de reconhecimento e classificação de padrões. Devido a isto, o classificador é uma rede neural que utiliza o modelo

Back-Propagation[49], com uma taxa de aprendizado variável ao longo do treinamento. A rede tem 16384 entradas e duas camadas com 100 e 5 neurônios respectivamente. No sistema implementado, tanto o processo de aprendizado como o de reconhecimento através da rede neural, precisam de um elevado tempo de CPU, sendo desejável a sua paralelização por motivos de desempenho.

...

...

...

center imagen mellin net median edges neural edges edges neural neural neural g_i g_c

Figura 20. Configuração da Aplicação no Ambiente P-RIO

Em uma primeira versão desta aplicação pode-se verificar que na etapa de pré-processamento, a tarefa de detecção de bordas, consumia aproximadamente 70% do tempo total de máquina. Aproveitando as abstrações de alto nível existentes no ambiente P-RIO, foi realizada a paralelização desta etapa mediante a construção de módulos que encapsulam as funções de processamento e permitem a sua execução concorrente em um ambiente heterogêneo de rede. Desta forma, a etapa de pré-processamento fica estruturada como vários componentes interconectados (figura 20), muitos dos quais podem ser executados simultaneamente e divididos em módulos menores, os quais por sua vez, podem ser executados paralelamente ao designá-los a processadores distintos. Isto requereu poucas mudanças no código original, sendo utilizados até 5 processadores em um teste inicial da aplicação.

um número determinado de blocos (figura 20), cada um dos quais contém um subconjunto dos neurônios presentes em toda a rede. Ao executar todos os N blocos simultaneamente, permite-se o processamento paralelo de um grande número de neurônios, permite-sendo apenas seqüencializados pelo processamento em camadas diferentes. Este esquema que funciona muito bem em redes neurais com um grande número de neurônios por camada, não é totalmente aplicável a redes com um número pequeno de neurônios, já que no último caso, o tempo gasto na troca de mensagens pode ser maior que o tempo gasto no processamento mesmo.

A listagem do arquivo de configuração para esta aplicação, escrito na respectiva linguagem de configuração, é mostrada a seguir:

# Definição dos tipos de pinos usados pela aplicação

pin_class Imagen out { async byte 256 int 0 } pin_class Center out { async int 3 int 0 } pin_class EdgesC out { sync int 2 int 2 }

pin_class Coefic out { async double 65 int 0 } pin_class Weight out { async double 11 int 0 } # Definição de um conector composto usado na detecção de bordas connector_class Edges {

pin Imagen imagen; pin EdgesC edge; }

# Aplicação para o Reconhecimento de Imagens Utilizando Redes Neurais Artificiais class Application { I } {

# Módulo que gera a imagem a reconhecer, sendo I o nome da imagem class Imagen { I } {

code C "imagen $I";

connector Imagen output; }

# Módulo composto para encontrar o centro da imagem class Center { N } {

# Conectores necessários externamente pelo módulo composto connector_par Imagen input;

connector Center output; connector Imagen imagen;

# Módulo básico para o cálculo do centro da imagem class Median { N } {

code C "center $N";

connector_par Imagen input; connector Imagen imagen; connector Center answer; connector Edges output[$N]; }

# Módulo replicado para o cálculo do centro da imagem class Edges { N } {

code C "edges $N";

par connector Edges input; }

# Instanciação dos módulos básicos Median med $N on Hydrus; Edges edges[$N];

# Conexão dos módulos instanciados

forall i $N {link med.output[$i] edges[$i].input} # Exportação dos conectores internos à classe

attach med.input input; attach med.answer output; attack med.imagen imagen; }

# Módulo básico para determinar os Coeficientes de Mellin class Generate_Mellin { } {

code C "g_mellin";

connector_par Imagen input; connector_par Center center; connector Imagen imagen; connector Coefic output; }

# Módulo Composto que implementa a Rede Neural class Neural_Net { N } {

# Conector exportado pelo módulo composto connector_par Coefic input;

# Módulo usado para implementar a camada de entrada class NeuroneIn { M T } {

code C "neural weights $M $T"; connector_par Coefic input; connector Weight output; }

# Módulo utilizado como camada de saída class NeuroneOut { M T } {

code C "neural weights $M $T"; connector_par Weight input; connector Dummy output; }

# Instanciação dos módulos básicos e o grupo de comunicação NeuroneIn neural[$N] "$i 64";

NeuroneOut neural "10 10"; group Coefic group_image; # Conexão dos módulos instanciados forall i $N {

link group_image neural[$i].input; link neural[$i].output neural.input; }

# Exportação dos conectores internos à classe attach group_image input;

}

# Instanciação dos módulos usados pela aplicação e grupo de comunicação Center center 10;

Neural_Net net 10; Imagen imagen $I;

Generate_Mellin mellin { } on Octans; group Imagen new_imagen;

# Ligação dos módulos instanciados na aplicação link imagen.output new_imagen; link new_imagen center.input; link new_imagen mellin.input; link center.output mellin.center; link mellin.output net.input; }

# Instanciação da aplicação mesma com o nome da imagem variável Application application variable;

No documento DISSERTAÇÃO DE MESTRADO (páginas 93-98)

Documentos relacionados