/smile-detector

Smile Detector using CNN with Keras

Primary LanguageJupyter Notebook

Smile Detector using CNN with Keras

Execução (Run)

Primeiro instale as bibliotecas necessárias executando o comando abaixo (recomendo utilizar o python3.6 que foi a versão usada no desenvolvimento):

pip install -r req.txt

Depois, extraia o arquivo que contém as imagens lfwcrop_grey.zip.

Pronto, agora basta executar o arquivo app.py,

python app.py

ou executar o jupyter notebook App.ipynb.

Overview

Foi utilizado a linguagem python para o desenvolvimento do programa e o banco de dados LFWcrop Face Dataset. Abaixo algumas imagens do banco de dados:

Primeiramente foi relizado a leitura dos documentos .txt que indicava quais imagens deveriam ser usadas no teste. Assim foi gerados 2 listas, uma com nomes das imagens com pessoas sorrindo e outra que não, em seguida foi dividido cada lista em dados de treinamento, teste e validação. Obtendo assim 6 listas:

  • train_smile

  • test_smile

  • val_smile

  • train_nosmile

  • test_nosmile

  • val_nosmile

O próximo passo foi criar as pastas que receberá as imagens de cada lista, então é criado os diretorios Train, Test e Val e dentro de cada uma foi criado mais duas pasta smile e nosmile. Em seguida, é feito uma copia da imagens do dataset original e é movido essas copias para as pastas de acordo com a lista que ela pertence.

É realizado esse procedimento para que os dados estejam de acordo com o que a função de pré processamento ImageDataGenerator.flow_from_directory do pacote Keras solicita, foi usado esse método pois ele auxilia no pré processamento da imagens. Além disso, devido o nosso conjunto de dados não ser muito grande, realizamos também com essa função o aumento artificialmente do conjunto de dados.

Para realizar a predição a fim de saber se as imagens são de pessoas sorrindo ou não, foi utilizando modelo de Rede Neural Convolucional (CNN) em que podemos ver resumo da rede abaixo:

Foi colocado para relizar o treinamento durante 10 epocas, porém devido para um parâmetro adicionado EarlyStopping em que ele para o treinamento caso a métrica loss esteja aumentando ao invés de estar diminuindo, que pode ser um sinal de overfitting, assim o treinamento foi parado na quinta época de treinamento.

Após o treinamento, o modelo obteve precisão na classificação de 98,91% nos dados de treinamento, 96,46% nos dados de validação e 96,04% nos dados de teste.

Especificações da máquina utilizada para o treinamento

  • OS: Ubuntu 16.04 x64
  • RAM: 8Gb
  • Processador: Intel Core i5 2.5GHz x4
  • GPU: Nvidia GeForce 940MX 2G

O código foi executado tanto na GPU Nvidia quanto na CPU Intel.

Tempo de treinamento usando CPU: Cerca de 4 minutos e 22 segundos por época

Tempo de treinamento usando GPU: Cerca de 48 segundos por época