Departamento de Engenharia Informática Faculdade de Ciências e Tecnologia Universidade de Coimbra 2007/08 Computação Adaptativa TP2 OCR Optical Character Recognition Pedro Carvalho de Oliveira (MEI) Nº 501062444 Rui André Ponte Costa (MEI) Nº 501062452
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 grelha de desenho e carregar em Save nessa mesma secção. 1
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 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 de performance: sse Rui 2
3.1.1 Dataset Treino Pedro Memória Transferencia Numero Médio de Epocas pinv logsig learnp 2 purelin learngd 3 hardlim learnp 3 hebb logsig learnp 2 purelin learngd 3 hardlim learnp 2 Sem Memória logsig learnp 4 purelin learngd 48 hardlim learnp 4 3.1.2 Dataset Treino Rui Memória Transferencia Numero Médio de Epocas pinv logsig learnp 2 purelin learngd 3 hardlim learnp 2 hebb logsig learnp 2 purelin learngd 3 hardlim learnp 2 3
Sem Memória logsig learnp 4 purelin learngd 50 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 Memória Transferencia Valor Médio de Erro Dataset Treino Pedro Dataset Treino Rui pinv logsig learnp 48% 48% purelin learngd 38% 44% hardlim learnp 80% 78% hebb logsig learnp 100% 100% purelin learngd 88% 89% hardlim learnp 100% 100% Sem Memória logsig learnp 46% 51% purelin learngd 82% 82% 4
hardlim learnp 68% 72% 3.2.2 Dataset Validação Rui Memória Transferencia Valor Médio de Erro Dataset Treino Rui Dataset Treino Pedro pinv logsig learnp 42% 69% purelin learngd 26% 58% hardlim learnp 70% 83% hebb logsig learnp 100% 100% purelin learngd 87% 87% hardlim learnp 100% 100% Sem Memória logsig learnp 31% 61% purelin learngd 74% 86% 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. 5
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 6
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*P T ) 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 consegue aprender as associações. 7
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. 8