Prof.
Adolfo Bauchspiess |
|
|
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:
Gerar os padrões de treinamento utilizando caracteres diferenciados*
Inicializar a rede
Programas um laço de treinamento com vários níveis diferentes de ruído (0%,10%,20%,30%,40%,50%).
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 |
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.
- OCR_IC_UnB.zip
contem OCR_IC_UnB.ipynb e geraChar.py.
Os parâmetros N, Nnt,
Nnv, Nstep e epochs precisam ser escolhidos empiricamente.
*
- % erro sem ruído; * - % erro de
treinamento c/ ruído
Exemplo de Resultado
do classificador neural
Bom Trabalho !!