Reconhecimento de dígitos manuscritos com o dataset MNIST
Resumo: Neste trabalho implementamos uma rede neural convolucional para classificar imagens entre 10 classes, sendo cada classe um digito manuscrito entre 0 e 9. Para treinar a rede utilizamos o famoso dataset MNIST, sendo este composto de 60000 amostras para treino e 10000 para teste. A rede obteve uma acurácia superior a 98% no dataset de teste, indicando o sucesso na generalização do conhecimento adquirido no treino da rede.
Created on October 4|Last edited on October 7
Comment
Fundamentação Teórica
1. Classificação de imagens
Hoje em dia, técnicas de machine learning são utilizadas para resolver problemas nos mais variados domínios de aplicação. Uma das aplicações mais populares é o reconhecimento e classificação de imagens [1], na qual se baseia em dividir um conjunto de imagens em diferentes domínios com base em características em comum. Neste processo as redes neurais têm a função de identificar essas características e classificar o montante de imagens que compõem o dataset.
Para que a rede possa interpretar as entradas, as imagens precisam ser pré-processadas de forma a tornar legível à rede os aspectos estruturais da imagem, gerando produtos que possam ser posteriormente submetidos a outros processamentos. No caso da classificação de imagens, o pré-processamento busca padrões ou atributos que possam facilitar para a rede a classificação do conjunto de imagens.
Para que a rede possa realizar a classificação, alguns modos podem ser aplicados, para redes supervisionadas o mais comum é se basear na função de identificação estatística, de acordo com a amostra típica, métodos de treinamento que permite a geração de parâmetros de classificação de classes de acordo com regras de decisão. Para redes não supervisionadas utiliza-se um método de análise cluster, ou seja, um algoritmo geral de agrupamento no qual primeiro seleciona o modelo numérico de pontos como o centro do cluster. Cada centro representa uma categoria de acordo com alguma semelhança medida, torna cada atributo padrão nos centros do respectivo cluster representados pelo tipo.
2. Rede Neural Convolucional
Uma CNN (Convolutional Neurak Network) [2] é um algoritmo de deep learning o qual recebe imagens como entrada, impondo importância às características (features) baseado-se nos pesos (weights) e vieses (bias) definidos pelos aspectos da rede, para que o classificador possa distinguir as imagens. A arquitetura de uma CNN é baseada nos padrões dos neurônios de um cérebro humano, onde neurônios respondem individualmente à estímulos em uma área específica do campo visual chamada de campo receptor, e um conjunto desses campos interpretam a imagem.
Podemos observar como funciona uma CNN na prática com o diagrama abaixo :

Arquitetura geral de uma rede neural convolucional. Fonte: A Comprehensive Guide to Convolutional Neural Networks — the ELI5 way
Na primeira etapa, input, a rede irá receber uma imagem já pré-processada, geralmente a imagem é representada em 3 camadas, RGB ou em tons de cinza. Em seguida, na etapa de aprendizagem de características (feature learning), as features serão aprendidas pelos processos de convolução e pooling. O processo de convolução consiste em utilizar um filtro, também chamado de kernel, para percorrer várias pequenas matrizes na imagem e identificar suas características mais importantes. Quanto ao pooling, pode ser interpretado como uma camada simplificadora da camada anterior, ela atua reduzindo o tamanho dos mapas de características gerados pelas camadas de convolução, para que o processo seja otimizado no decorrer da rede. Na última etapa, na classificação, a rede usará uma MLPs (Multi-Layer Perceptron) para realizar a classificação baseando-se nas características obtidas na etapa de aprendizagem de características.
3. Dataset MNIST
O dataset MNIST [3] é uma base de dados de dígitos escritos manualmente, contendo dígitos de 0 a 9. As imagens do dataset são padronizadas para caber em uma matriz 28×28 pixels, onde cada pixel representa um nível de escala de cinza. O MNIST contém 60.000 imagens de treino e 10.000 imagens de teste. A figura abaixo mostra uma amostra do dataset.

Uma amostra com o digito 3 do dataset MNIST. Fonte: MNIST
Metodologia
Utilizamos uma rede neural convolucional para realizar a classificação das imagens do dataset MNIST entre os 10 dígitos.
A arquitetura da rede pode ser vista na figura abaixo. Para realizar o aprendizado de features, utilizamos duas camadas convolucionais com 16 e 8 filtros, respectivamente. Todas as camadas de convolução são seguidas de uma camada de ativação ReLU e max pooling. O resultado das convoluções é linearizado com uma camada flatten, e utilizado por uma MLP para classificação.

Arquitetura da rede convolucional. Fonte: Autores
Treinamos a rede por um total de 20 épocas e learning rate igual a 0.001, utilizando o otimizador Adam [4] e a função de perda categorical crossentropy.
A rede foi implementada utilizando Python com a framework Keras, juntamente com W&B para monitoramento do treino e análise. A implementação está disponível no nosso repositório do Github.
Resultados
No painel abaixo mostramos todas as predições feita pela rede no dataset de teste, contendo a imagem de entrada, a label da imagem, a predição da rede, e as probabilidades geradas pela rede para existência de cada digito na imagem.
Nos painéis abaixo mostramos a perda, acurácia e matriz de confusão ao longo das 20 épocas de treinamento.
Podemos observar pelo gráfico da perda que enquanto a perda no treino ainda estava com tendencia a reduzir com mais épocas, a perda na validação começou a aumentar apos a época 15, indicando um possível overfitting. Além disso, a rede obteve uma acurácia superior a 98% no treino e na validação. Pela matriz de confusão, a rede se confundiu poucas vezes na classificação dos dígitos.
Conclusão
Neste trabalho foi implementada uma rede neural convolucional para reconhecimento de dígitos utilizando o famoso dataset MNIST. A rede obteve uma alta acurácia de 98% no teste, indicando o sucesso da rede em generalizar o conhecimento aprendido do treino para amostras não vistas antes.
Referências
[1] Abu, Mohd Azlan & Indra, Nurul Hazirah & Abd Rahman, Abdul & Sapiee, Nor & Ahmad, Izanoordina. (2019). A study on Image Classification based on Deep Learning and Tensorflow. 12. 563-569.
[2] S. Albawi, T. A. Mohammed and S. Al-Zawi, "Understanding of a convolutional neural network," 2017 International Conference on Engineering and Technology (ICET), 2017, pp. 1-6, doi: 10.1109/ICEngTechnol.2017.8308186.
[3] Deng, L.. “The MNIST Database of Handwritten Digit Images for Machine Learning Research [Best of the Web].” IEEE Signal Processing Magazine 29 (2012): 141-142.
[4] Kingma, Diederik & Ba, Jimmy. (2014). Adam: A Method for Stochastic Optimization. International Conference on Learning Representations.
Add a comment