Skip to content

GustavoSantosCS/Character-Identification

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Neural Network - Character Identification

Equipe

  • Gustavo de Carvalho Santos
  • Paulo Henrique Rodrigues

Problema

Reconhecimento de números de 0 à 9 através imagens em uma rede neural. Escolhemos este problema, por se tratar de uma aplicação que está cada vez mais presente no dia a dia, como por exemplo o reconhecimento de placas de veículos com base em imagens. Outra característica que nos desafiou a escolher e formular este problema, é a maneira infinita de possibilidades de escrever qualquer número, onde cada pessoa possui sua própria característica de escrita e como seria a identificação desta escrita numérica.

Dataset

THE MNIST DATABASE - http://yann.lecun.com/exdb/mnist/

Dataset composto por uma coleção de imagens de dígitos manuscritos.
O banco de dados MNIST contém 60.000 imagens de treinamento e 10.000 imagens de teste.

Exemplo do dataset MNIST

Técnica

A solução para o problema descrito neste trabalho é a criação de um aplicativo Android nativo, onde o usuário escreve um dígito, é gerado uma imagem com o dígito escrito e redimensionado para 28x28 pixels. A imagem é dimensionada neste tamanho, pois são as dimensões das imagens compostas no banco de dados Mnist, permitindo uma comparação real e padrão com o dataset.

Após a Geração da imagem, a mesma é fornecida como parâmetro a um método que executa a Rede Neural escrita em Python através da Biblioteca TensorFlow, onde resulta o dígito que a rede neural processou e definiu como mais parecido de acordo com o dataset

A rede neural possui a seguinte estrutura:

Resultados obtidos

Foi feita uma pesquisa com o objetivo de obter modelos de redes neurais já utilizados para suprir a necessida.

Três modelos foram selecionados!

Modelo 1

Autor: Ellie Birbeck

Disponivel: Aqui

Modelo 2

Autor: TensorFlow

Disponivel Aqui

Modelo 3

Autor: Fernando Amaral

Disponivel no curso

Todos os três modelos foram treinados com as seguintes configurações:

  • Numero de Eras: 7
  • Divisão do Dataset: 60.000 imagens para treinamento e 10.000 para testes
  • Foram feitos 5 treinamentos sendo que a cada treinamento os pesos dos neurônios da rede eram zerados

Esse experimento tinha como objetivo escolher as duas melhores redes neurais, tendo como métrica de análise: (i) a media da acurácia; (ii) o desvio padrão da acurácia.

Os seguinte resultados foram obtidos:

  • Modelo 1 teve uma acurácia media de 0,94 e um desvio padrão de 0,0035;
  • Modelo 2 teve uma acurácia media de 0,98 e um desvio padrão de 0,15;
  • Modelo 3 teve uma acurácia media de 0,56 e um desvio padrão de 0,0024;

Com os resultados obtidos o Modelo 1 e o Modelo 2 foram os escolhidos para os experimentos. Os experimentos tinham como objetivo adicionar e remover camadas e incrementar ou decrementar o dropout das camadas. Todos os exprementos realizado estão documentados aqui. Não foram testados todos as combinações possíveis, sempre que uma modificação apresentava variações positivas, a característica modifica era modifica novamente para um novo experimento. Em caso de resultados piores que o origina não se seguia com os experimentos.

Praticamente todos exprimento não apresentaram mudanças significativas na media da acurácia. A variavel que mais teve mudança foi o desvio padrão.

A configuração do Modelo Escolhido:

Tanto o Modelo 1 como o Modelo 2 possuem acurácias medias alta e que pouco flutuaram durante os experimentos! A maioria das flutuações eram para valores piores. O modelo de maior destaque foi o modelo apresentado na figura acima. Esse é uma variação do Modelo do Tensorflow, tem como diferencia um dropout de 10% em vez dos 20% do modelo original. Outro fator que influenciou na escolha foi o tamanho da rede neural. Os dois modelos apresentaram resultados muitos proximos, logo optou-se pela rede de menor tamanho, conforme a indicação da literatura.

Instruções de uso do software

Na pasta APK/release, localizada neste repositório, baixar o arquivo app-release.apk, e instalar em um smartphone Android, lembrando que devesse autorizar a instalação de aplicativo de outras fontes. Após instalação abrirá o aplicativo conforme a tela a seguir:

Vídeo

https://web.microsoftstream.com/video/fcb67f3e-0ab4-46a3-9590-0f2898b743f1