- Gustavo de Carvalho Santos
- Paulo Henrique Rodrigues
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.
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
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:
Foi feita uma pesquisa com o objetivo de obter modelos de redes neurais já utilizados para suprir a necessida.
Três modelos foram selecionados!
Disponivel: Aqui
Disponivel Aqui
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.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:
https://web.microsoftstream.com/video/fcb67f3e-0ab4-46a3-9590-0f2898b743f1