Prof. Adolfo Bauchspiess
LARA - Laboratório de Automação e Robótica
ENE - Departamento de Engenharia Elétrica
UnB - Universidade de Brasília






ENE0154 - Inteligência Computacional

1o  Exercício

 Reconhecimento de Caracteres com Melhoria da Tolerância a Ruídos

Introdução:

    Redes Neurais Artificiais podem ser treinadas para reconhecer uma matriz de pixeis binários, de forma análoga a um sistema de OCR (“Optical Character Recognition”). Cada imagem adquirida pelo sistema deve ser associada a um caracter de um alfabeto de caracteres válidos. A binarização dos pixeis despreza informações específicas dos contornos dos caracteres, mas reduz significativamente o universo de busca para realizar a classificação. Assume-se que no processo de aquisição de imagem OCR, um caracter com ruído é aleatoriamente gerado a partir de um caracter válido no qual alguns bits são invertidos.

    Mesmo com caracteres binários o treinamento da RNA não pode ser feito apresentando-se à rede todas as entradas possíveis  (27x9 = 9,22e18 padrões válidos para o presente exercício). Treinar a RNA apenas com os padrões que se deseja reconhecer resulta, na fase de operação, em um reconhecimento restrito uma vez que a RNA nunca “viu” a maioria esmagadora dos padrões possíveis. Cada padrão binário possível deve ser associado pela RNA ao caracter do alfabeto que lhe é mais próximo (interpolação).

   Uma RNA pode ter sua capacidade de lidar com caracteres ruidosos melhorada se for treinada especificamente para este fim. Como não é possível apresentar todos os padrões possíveis à rede e há o esquecimento progressivo intrínseco associado ao treinamento, deve se adotar um procedimento que considere a plasticidade típica das Redes Neurais Artificiais: Intercalar períodos de treinamento do alfabeto desejado com períodos reduzidos de treinamento com conjuntos distintos de caracteres “contaminados” com níveis sucessivos de ruído.

Objetivo:

    Utilizando uma rede multicamadas "feedforward" treinar um sistema que reconheça caracteres ruidosos de uma matriz 7x9.

Procedimento:

  1. Gerar os padrões de treinamento utilizando caracteres diferenciados*
  2. Inicializar a rede
  3. Programas um laço de treinamento com vários níveis diferentes de ruído (0%,10%,20%,30%,40%,50%).
  4. Ao final haverá 6 redes neurais distintas:

- RNA0: treinada só  com o alfabeto,
- RNA1: alfabeto e 10 amostras distintas do alfabeto + 10% de ruído,

- RNA2: alfateto; alfabeto+10% ruído, alfabeto+20% ruído,

- RNA3: alfateto; alfabeto+10% ruído, alfabeto+20% ruído, alfabeto+30% ruído,

....

*Cada aluno deverá criar o seu próprio um conjunto de 16 caracteres seqüenciais, e.g., iniciados pela primeira letra de seu nome.
 

Classificação de Padrões


Caracteres Originais

Caracteres com 20% de ruído

Caracteres reconhecidos 
(O caracter '0' não foi reconhecido corretamente)

Validação:

    Para validar o Classificador de Padrões deverão ser feitas simulações com 10%, 20%, 30%, 40% e 50% de ruído (distintas das utilizadas no treinamento!!).  Apresentar a porcentagem de erros de uma média de 10 (dez) alfabetos para cada nível de ruído. O gráfico (exemplo abaixo) que resume os resultados apresenta a rede treinada sem ruído para diferentes níveis de ruído e as redes treinadas cumulativamente para o ruído máximo considerado. (Uma rede treinada para 30% de ruído também deve tratar adequadamente 0%, 10% e 20% de ruído, SNR!).

    Obs:
    - A matriz de padrões pode ser gerada com gerachar.m; que por sua vez pode ser visualizada por showchar.m.
    - Um nível de 10% de ruído é obtido permutando-se o valor de 10% dos pixeis de escolhidos de forma aleatória.
    - A verificação do classificador com ruído pode ser feita por  verchar.m.
    - A inicialização default dos pesos utilizada em newff pode levar a mínimos locais.
 
 


* - % erro sem ruído; * - % erro de treinamento c/ ruído
Exemplo de Resultado do classificador neural


Bom Trabalho !!