/EMNIST

A project designed to explore CNN and the effectiveness of RCNN on classifying the EMNIST dataset.

Primary LanguagePythonMIT LicenseMIT

EMNIST

Developed by @coopss

Description

This project was intended to explore the properties of convolution neural networks (CNN) and see how they compare to recurrent convolution neural networks (RCNN). This was inspired by a paper I read that details the effectiveness of RCNNs in object recognition as they perform or even out perform their CNN counterparts with fewer parameters. Aside from exploring CNN/RCNN effectiveness, I built a simple interface to test the more challenging EMNIST dataset dataset (as opposed to the MNIST dataset)

Current Implementation
  • Multistack CNN
  • Web-applet testing environment
    • Touch screen compatible
    • Works best when letter takes up a good portion of the canvas
  • Read in .mat file
  • Currently training on the byclass dataset (direct download link)
    • See paper for more info
Todo
  • Update gif with new webapp
  • Train more models
    • RCNN
    • Optimize hyperparameters
    • Add a noise (gaussian or likewise) layer to input in an attempt to boost accuracy
  • Move webapp to a host service like PythonAnywhere

Environment

Anaconda: Python 3.5.3

  • Tensorflow or tensorflow-gpu (See here for more info)
  • Keras
  • Flask
  • Numpy
  • Scipy

Note: All dependencies for current build can be found in dependencies.txt

Usage

A training program for classifying the EMNIST dataset

usage: training.py [-h] --file [--width WIDTH] [--height HEIGHT] [--max MAX] [--epochs EPOCHS] [--verbose]
Required Arguments:
-f FILE, --file FILE  Path .mat file data
Optional Arguments
-h, --help            show this help message and exit
--width WIDTH         Width of the images
--height HEIGHT       Height of the images
--max MAX             Max amount of data to use
--epochs EPOCHS       Number of epochs to train on
--verbose         Enables verbose printing

A webapp for testing models generated from training.py on the EMNIST dataset

usage: server.py [-h] [--bin BIN] [--host HOST] [--port PORT]
Optional Arguments:
-h, --help   show this help message and exit
--bin BIN    Directory to the bin containing the model yaml and model h5 files
--host HOST  The host to run the flask server on
--port PORT  The port to run the flask server on