Máquina Associadora de Eventos - MAE
Índice
- 1 Manual da MAE
- 1.1 Introdução
- 1.2 Instalando a MAE
- 1.3 Framework MAE
- 1.4 Tutorial
- 1.4.1 Uma Aplicação Exemplo – Reconhecimento de Faces
- 1.4.2 Base de Dados de Entrada – AR Face Database
- 1.4.3 Arquitetura da Aplicação MAE face_recog_planar
- 1.4.4 Descrição da face_recog_planar em NADL
- 1.4.5 Compilando e Rodando a face_recog_planar
- 1.4.6 Interface do Usuário com a face_recog_planar
- 1.4.7 Funções do Usuário Associadas à Aplicação face_recog_planar
- 1.4.8 Controlando a face_recog_planar via CSL
- 1.5 Especificação da NADL
- 1.6 Especificação da CSL
- 1.7 Funções do Usuário
- 1.8 Implementação da MAE
Manual da MAE
Introdução
- O que é a MAE?
- Histórico
Instalando a MAE
Nesta seção descreveremos o roteiro de instalação da MAE passo-a-passo nos ambientes utilizados no LCAD (Windows Xp, Ubuntu, Fedora). No entanto ainda é possível instalá-la em qualquer sistema LINUX/WINDOWS seguindo os passos aqui citados, porém algumas diferenças na instação entre distribuições diferentes podem surgir, ficando a cargo do usuário resolvê-las.
No Windows
- Baixando a MAE
- Baixe um cliente SVN. Recomendamos o TortoiseVN.
- Faça checkout do repositório http://www.lcad.inf.ufes.br/svn/MAE no diretório 'C:\MAE'. É necessário ter permissão de acesso ao repositório. Caso você não tenha, entre em contato com a administração do LCAD.
- Dependências (bibliotecas)
Instale os seguintes pacotes para o Windows (caso o link não seja mais válido, procure no Google):
Obs.: Manter os parâmetros default dos instaladores.
Baixe o arquivo zip WINGLUT.zip Abra o zip e:
- Copie os arquivos libglu32.a, libglut.a e libglut32.a para o diretório C:\Dev-Cpp\lib
- Copie o arquivo glut.h para o diretório C:\Dev-Cpp\include\GL
- Copie os arquivos glu32.dll, glut32.dll e opengl32.dll para o diretório C:\Windows\System32 (se o Windows disser que eles já existem lá, mande sobreescrever; é recomendado fazer um backup das cópias das dlls no diretório para que o caso de erros acontecerem).
- Compilando a MAE
Setar a variável de ambiente PATH para apontar para os diretórios C:\Dev-Cpp\bin, MAE\bin e C:\Program Files\GnuWin32\bin (caso esse path seja diferente na sua máquina, mudar os scripts Makefile.win).
- Entrar no prompt de comando do DOS;
- Acessar o diretório raiz da MAE;
- Executar o script de compilação da MAE via os comandos:
- make –f Makefile.win clean
- make –f Makefile.win
- Saída
- A libnet_conn.a gerada no diretório MAE\lib;
- O netcomp.exe no diretório MAE\bin.
- Compilando os Exemplos
- Entrar no prompt de comando do DOS;
- Acessar o diretório raiz do exemplo da MAE;
- Executar o script de compilação do exemplo via os comandos:
- make –f Makefile.win clean
- make –f Makefile.win
- Saída
- A DLL do exemplo é gerada no diretório MAE\lib;
- O EXE do exemplo é gerado no diretório do exemplo.
- Gerando DLLs de Aplicações MAE
No Linux
- Baixando a MAE
- Dependências (bibliotecas)
- Compilando a MAE
- Compilando os Exemplos
Framework MAE
Arquitetura da MAE
Network Architecture Description Language
==== Control Script Language
Tutorial
Uma Aplicação Exemplo – Reconhecimento de Faces
Base de Dados de Entrada – AR Face Database
Arquitetura da Aplicação MAE face_recog_planar
Descrição da face_recog_planar em NADL
Compilando e Rodando a face_recog_planar
Interface do Usuário com a face_recog_planar
Funções do Usuário Associadas à Aplicação face_recog_planar
Controlando a face_recog_planar via CSL
Especificação da NADL
O conteúdo dos arquivos com a definição léxica e sintática da linguagem NADL se encontra nos arquivos netcomp_lex.l e netcomp_yacc.y no diretório <diretório da MAE>/src. Nesta seção será descrita resumidamente os comandos da linguagem utilizados.
Variáveis
Constantes
Camadas Neurais
Uma neuron_layer é, basicamente, uma matriz de neurônios que são utilizadas para implementar as camadas de neurônios (células simples, células complexas, células de MT, etc.). A sintaxe para especificar uma neuron_layer é mostrada abaixo:
neuron_layer <nome><dimensão> with <tipo de saída> outputs;
<nome> : Nome pelo qual a neuron_layer poderá ser referenciada. <dimensão> : Dimensão da neuron_layer. Definida entre colchetes. Exemplo da dimensão de uma neuron_layer bidimensional 10x10 com um total de 100 neurônios: [10][10].
<tipo de saída> : Define o tipo de saída dos neurônios de uma neuron_layer. Pode ser: b&w, grayscale, grayscale_float e color. Quando as saídas são definidas como b&w elas podem assumir os valores 0 ou 1 apenas, representando, o preto e o branco. Quando as saídas são definidas como grayscale elas podem assumir valores inteiros de 0 à 255, representando uma escala de cinza com 256 valores. Quando as saídas são definidas como grayscale_float elas podem assumir qualquer valor de ponto flutuante, entretanto para a visualização, é selecionado o maior valor em módulo (|s_max|) da saída dos neurônios desta neuron_layer, e este valor é utilizado para realizar uma discretização na visualização: a parte positiva, definida pelo intervalo [0, |s_max|], é discretizada e visualizada como 256 níveis de verde, enquanto que a parte negativa, definida pelo intervalo [-|s_max|, 0[, é discretizada e visualizada como 256 níveis de vermelho. Caso só possua valores positivos, a visualização é feita em escala de cinza. Quando as saídas são definidas como color, elas podem assumir um valor RGB de 24 bits, com 8 bits por cor.
Entrada
Através do comando input, é criada uma neuron_layer com nome, dimensão e saída especificadas, entretanto, um tratamento especial é dada nestas neuron_layer’s. É criada uma janela para cada input gerada que mostra o estado dos neurônios desta input, e podem ser associadas duas funções, uma para geração e outra para manipulação da input. A neron_layer criada pela input pode ser manipulada por eventos de mouse e teclado. A sintaxe para especificar uma input é mostrada abaixo:
input <nome><dimensão> with <tipo de saída> outputs [produced by <função geradora>] [controled by <função de controle>];
<nome> : Nome pelo qual a input poderá ser referenciada.
<dimensão> : Dimensão da input. Possui a mesma descrição do parâmetro <dimensão> da neuron_layer, citado anteriormente.
<tipo de saída> : Define o tipo de saída dos neurônios de uma input. Podem ser: b&w, grayscale, grayscale_float e color. Possui a mesma descrição do parâmetro <tipo de saída> da neuron_layer, citado anteriormente.
<função geradora> : O objetivo da função de geração é inicializar parâmetros da input, criar sua janela, associá-la às funções de controle de mouse, teclado, além do controle de atualização do conteúdo da janela. Podem-se passar quantos parâmetros forem necessários para a função de geração, desde que sejam constantes, expressões aritméticas ou nomes de objetos já definidos no arquivo de definição. Nesta função, normalmente é definida como a input receberá as informações de entrada, por exemplo, de um arquivo de entrada. A declaração de uma função de geração é opcional. Se não for definida, a função pré-estabelecida na biblioteca MAE será utilizada, que é a que trata de imagens estáticas. Esta função procura no diretório em que está sendo executada a aplicação MAE, um arquivo com o mesmo nome da input com extensão .in. Uma string na primeira linha deste arquivo deve informar o nome de um arquivo .bmp contendo a imagem estática a ser usada como entrada. Os valores de cada pixel deste arquivo são passados para os neurônios da input.
<função de controle> : Também é opcional. O objetivo da função de controle é fornecer o código necessário para tratar a interação da input com o usuário, por exemplo, eventos de clique de mouse sobre a janela de visualização da input. Podem-se passar quantos parâmetros quiser, desde que sejam constantes, expressões aritméticas ou nomes de objetos já definidos no arquivo de definição.
Saida
Uma output é apenas uma visualização das saídas de uma neuron_layer. Através de uma output, pode-se fornecer uma interação do usuário com uma determinada neuron_layer, semelhante a input. A sintaxe para especificar uma output é mostrada abaixo:
output <nome><dimensão> [handled by <função manipuladora>];
<nome> : Nome pelo qual a output poderá ser referenciada.
<dimensão> : Dimensão da output. Possui a mesma descrição do parâmetro <dimensão> da neuron_layer, citado anteriormente.
<função manipuladora> : A declaração desta função é opcional. O objetivo da função manipuladora é fornecer o código necessário para tratar a interação da output, e portanto com a neuron_layer na qual está associada (vide comando output_connect), com o usuário. Podem-se passar quantos parâmetros quiser, desde que sejam constantes, expressões aritméticas ou nomes de objetos já definidos no arquivo de definição.
Filtros
Este comando define que uma ou mais neuron_layers, terão suas saídas processadas e, o resultado deste processamento será a entrada de uma outra neuron_layer. Esta é a definição de filtro para a MAE. Alguns filtros mais utilizados, por exemplo, um filtro que computa a soma da saída de um conjunto de neuron_layer’s colocando o resultado numa outra neuron_layer, estão implementados no arquivo <diretório da MAE>/src/filter.c, entretanto podem ser implementados filtros específicos para uma determinada aplicação, bastando que seja codificada no arquivo de funções do usuário que será descrito posteriormente. A sintaxe do comando filter é mostrada abaixo:
filter <neuron_layer’s de entrada> with <nome do filtro><parâmetros> producing <neuron_layer de saída>;
<neuron_layer’s de entrada> : Nome das neuron_layer’s que são entrada para o filtro. Caso tenha mais de uma neuron_layer, deverão ser separadas por vírgula.
<nome do filtro> : Nome do filtro, que deve ser o mesmo nome da função que o implementa.
<parâmetros> : Conjunto de parâmetros passado para a função que implementa o filtro, cuja sintaxe é semelhante à sintaxe do comando printf da linguagem C.
<neuron_layer de saída> : Nome da neuron_layer que receberá a saída do processamento do filtro.
Associações
O comando set atribui um valor a uma variável global qualquer da aplicação MAE, definida em seu código fonte. A sintaxe do comando set é mostrada abaixo:
set <variável> = <valor>;
<variável> : Nome da variável global.
<valor> : Valor a ser atribuído na variável global.
Conexão entre Camadas Neurais
Conexão com Saídas
Comando utilizado para associar uma output com uma neuron_layer que, para isto, devem possuir as mesmas dimensões. A sintaxe do comando output_connect é mostrada abaixo:
output_connect <nome da neuro_layer> to <nome da output>;
<nome da neuron_layer> : Nome da neuron_layer que terá a saída de seus neurônios mostrada na output.
<nome da output> : Nome da output que mostrará a saída dos neurônios da neuron_layer.