Universidade de Coimbra 2007/08
Computação Adaptativa
TP2
OCR – Optical Character Recognition
Pedro Carvalho de Oliveira (MEI) Nº 501062444
1. Introdução
Neste trabalho é proposto desenvolver uma aplicação de OCR (Optical Character Recognition) recorrendo a duas estruturas de rede neuronal: classificador (1) ou memória associativa + classificador (2).
Na memória associativa são utilizados 2 tipos distintos de funções de aprendizagem: Pseudo-Inversa de Moore-Penrose e a Regra de Hebb. O classificador possui 3 funções de transferência: Hard Limit, Linear ou Sigmóide Logarítmica. Como função de activação possui a regra do perceptrão ou o método do gradiente, conforme a função de transferência.
2. Funcionamento da Aplicação
Ao iniciar na linha de comandos a aplicação OCRApp, surge a seguinte janela:
Imagem 1. Janela Principal
1 - A primeira acção a efectuar é carregar os dados de treino da rede neuronal. No menu Load surgem cinco casos de teste predefinidos, posteriormente discutidos na secção 3.1 deste relatório. Apos fazer o load de um deles, é possivel verificar as matrizes P e T carregadas atraves da secção Matrix (exceptuando o P do test5 dada a sua dimensão). Caso não estejamos satisfeitos com alguma dessas matrizes, podemos desenhar uma nova na
2 - Após escolhermos os varios parametros da rede neuronal existentes, clicamos em Train e, durante o treino da rede neuronal, surgirá um gráfico que mostra a evolução da performance da rede ao longo das várias epocas. 3 - Neste ponto estamos prontos para testar a rede neuronal recentemente criada. Ao desenharmos os numeros a classificar e carregar no botão do meio do rato, é-nos apresentado do lado direito a classificação obtida. Caso carreguemos o botão direito sem desenhar, será feita a classificação da matriz Test presente no ficheiro carregado. Se não estivermos satisfeitos com os resultados, podemos alterar os parametros da rede e voltar a retreinar e reclassificar.
4 - A aplicação possui tambem uma modulo de estatistica, onde podemos adquirir dados estatisticos sobre o processo de treino da rede neuronal. É possível escolher o numero de iterações pretendidas, e após termos definido as opções da rede neuronal carregar em Run. A rede definida será treinada o numero de iterações definido, sendo apresentado numericamente a média de epocas por treino e erro médio, assim como graficos que demonstram a evolução de ambos os indicadores ao longo das iterações.
3. Testes da Aplicação
De seguida apresentamos alguns dos testes efectuados à nossa aplicação.
P T Test
Test1 Rui Rui Rui Test2 Pedro Pedro Pedro Test3 Rui Rui Pedro Test4 Pedro Pedro Rui Test5 Pedro+ Rui+Outro Rui Rui
3.1 Treino
Para treino foram utilizados 2 datasets distintos, cada um correspondente à caligrafia de um dos elementos do grupo.
São apresentadas as estatísticas referentes ao treino dos diferentes tipos de rede neuronal utilizados num total de 100 iterações.
Parâmetros genéricos de treino Numero máximo de épocas: 1000 Taxa de aprendizagem: 0.3
Valor objectivo de erro: 1e-0 Função de performance: sse
3.1.1 Dataset Treino Pedro Função Aprendizagem Memória Associativa Função Transferencia Classificador Função Aprendizagem Classificador Numero Médio de Epocas logsig learnp 2 purelin learngd 3 pinv hardlim learnp 3 logsig learnp 2 purelin learngd 3 hebb hardlim learnp 2 logsig learnp 4 purelin learngd 48 Sem Memória Associativa hardlim learnp 4
3.1.2 Dataset Treino Rui
Função Aprendizagem Memória Associativa Função Transferencia Classificador Função Aprendizagem Classificador Numero Médio de Epocas logsig learnp 2 purelin learngd 3 pinv hardlim learnp 2 logsig learnp 2 purelin learngd 3 hebb
logsig learnp 4 purelin learngd 50 Sem Memória Associativa hardlim learnp 5 3.1.3 Conclusões
Todas as arquitecturas conseguem um bom desempenho em termos
temporais, sendo a única excepção a estrutura sem memoria associativa, com funções purelin+learngd. As diferenças entre o numero médio de epocas de treino dos dois datasets é minimo, talvez por o numero de casos de teste ser reduzido (apenas 5 para cada número).
3.2 Validação
Criámos 2 datasets de teste, cada um referente a um elemento do grupo. Esses datasets foram utilizados na validação das várias redes neuronais criadas através dos casos de treino da secção anterior, num total de 100 iterações.
3.2.1 Dataset Validação Pedro
Valor Médio de Erro Função Aprendizagem Memória Associativa Função Transferencia Classificador Função Aprendizagem Classificador Dataset Treino Pedro Dataset Treino Rui logsig learnp 48% 48% purelin learngd 38% 44% pinv hardlim learnp 80% 78% logsig learnp 100% 100% purelin learngd 88% 89% hebb hardlim learnp 100% 100% logsig learnp 46% 51% Sem Memória Associativa purelin learngd 82% 82%
hardlim learnp 68% 72%
3.2.2 Dataset Validação Rui
Valor Médio de Erro Função Aprendizagem Memória Associativa Função Transferencia Classificador Função Aprendizagem Classificador Dataset Treino Rui Dataset Treino Pedro logsig learnp 42% 69% purelin learngd 26% 58% pinv hardlim learnp 70% 83% logsig learnp 100% 100% purelin learngd 87% 87% hebb hardlim learnp 100% 100% logsig learnp 31% 61% purelin learngd 74% 86% Sem Memória Associativa hardlim learnp 53% 79% 3.2.3 Conclusões
Em ambos os datasets, a estrutura com memoria associativa (pinv), com funções purelin+learngd conseguiu melhores resultados. A estrutura sem memoria associativa com funções logsig+learnp tambem consegui resultados razoaveis (principalmente no segundo dataset), ficando pouco atrás nos testes efectuados.
Existe uma relativa diferença entre os valores de erro dos dois datasets, tendo o segundo dataset melhores resultados com o conjunto de treinos do seu criador, mas mostrando pouca capacidade de generalização ao classificar com maior taxa de erro o conjunto de treino adversário. Essa situação já não
acontece no primeiro dataset, que classifica com taxas identicas ambos os datasets de treino anteriormente criados.
3.3 Testes Específicos
Após termos validado as várias redes neuronais, vamos testar exaustivamente a melhor solução (memória associativa (pinv) + classificador
(purelin+learngd)). Para isso conduzimos uma série de testes para podermos concluir como as variações no dataset de teste influenciam os resultados. Numero 1
Numero 3
Numero 5
Numero 8
Numero 0
Como se pode comprovar, a memoria associativa + classificador consegue uma boa capacidade de generalização. A memória associativa faz um bom
trabalho na filtragem do input, facilitando em muito a tarefa do classificador. Apesar de a rede ter sido treinada com apenas 5 casos para cada número, conseguem-se bons resultados, principalmente em dados parcialmente imperfeitos.
4. Questionário
4.1 Data Set
a) Em que medida o data set influencia a performance do sistema classificador?
O data set tem aqui um papel crucial na medida em deve ser usado uma quantidade de dados considerável de modo a que a rede consiga ter maior flexibilidade assim como maior poder de classificação. Se rede neuronal for treinada com dados provenientes de diferentes tipos de caligrafia, esta terá uma maior flexibilidade, podendo classificar mais correctamente diferentes tipos de caligrafia. Se por outro lado a rede neuronal for testada com um só tipo de caligrafia, mas com um conjunto de dados relativamente grande (p.e. 150) consegue ser mais precisa na classificação daquela caligrafia em específico.
4.2 Estrutura da Rede Neuronal
a) Qual a estrutura que demonstra melhores resultados? Apenas o classificador ou o classificador+memória associativa?
Recorrendo a uma estrutura em que tanto o classificador como a memória associativa (MA) estão presentes a classificação dos digítos é mais eficaz. Isto deve-se ao facto de a MA servir como um filtro, isto é, se o input não for perfeito a MA tem a capacidade de devolver um output mais perfeito.
b) E quanto à função de activação: hardlim, linear ou logsig?
A melhor função de activação encontrada foi a linear, com função de aprendizagem gradiente. A logsig tambem demonstrou bons resultados.
c) Qual a performance da regra de Hebb?
A regra de Hebb (W = T*PT) aplicada à memória associativa não consegue auxiliar correctamente o classificador porque os padrões do conjunto de input não são mutuamente ortogonais, ocorrem interferências e a rede não
4.3 Resultados
a) O sistema classificador é capaz de atingir os objectivos principais (classificação de digitos)?
O sistema por nós implementado foi capaz de atingir os objectivos, no entanto ainda se verifica alguma taxa de erro, que pode ser ultrapassada recorrendo a um conjunto de dados de treino mais vasto e completo.
b) E a capacidade de generalização? O sistema classificador é suficientemente robusto para dar saidas correctas quando as entradas não são perfeitas?
Os casos de teste por nós elaborados comprovam a sua capacidade de generalização, o caso de teste 5, embora não tendo sido testado exaustivamente leva a uma maior capacidade de generalização dado ter um conjunto de dados de treino provenientes de três pessoas e comprova assim como o test3 e 4 a capacidade de generalização da rede.