Skip to content

Latest commit

 

History

History
118 lines (80 loc) · 5.05 KB

README.md

File metadata and controls

118 lines (80 loc) · 5.05 KB

Stratus

Cloud-Based Deep Learning for Handwritten Digit Recognition

About | Overview | Demo | Features | Tech Stack | Architecture | Installation | Evaluation | Future Directions

stratus

About

Authors: Ruida Zeng, Aadarsh Jha, Ashwin Kumar, Terry Luo
Professor & Faculty Mentor: Dr. Aniruddha Gokhale, Professor of Computer Science, Vanderbilt University
Vanderbilt University Fall 2021 Immersion Vanderbilt ProjectProgram Information

Overview

Stratus is a cloud-deployed, end-to-end deep learning solution designed to recognize handwritten digits in real time. This project integrates cloud computing and distributed deep learning principles to deliver a scalable, production-grade pipeline for digit recognition. It leverages an ensemble of cloud-based tools and modern full-stack technologies to streamline real-time predictions via a web interface.

Demo

Try the live demo at stratus-final.ml

Overview

Stratus is an end-to-end, full-stack application built for handwritten digit classification. Users draw a digit in the web interface, which is then sent to the cloud infrastructure where the deep learning model makes a prediction. The cloud-based backend processes and returns the result in real time.

The system combines:

  • Deep Learning for accurate digit recognition using the MNIST dataset.
  • Cloud Computing for distributed, scalable processing.
  • Full-Stack Architecture with a user-friendly web interface.

Features

  • End-to-End Machine Learning Pipeline: From user input to model prediction, all components are integrated and productionized.
  • Distributed Architecture: Scales to handle variable user traffic with load balancing and real-time data processing.
  • Intuitive User Interface: A canvas for digit drawing, real-time feedback, and prediction probability graph.

Tech Stack

  • Front-end: HTML, JavaScript
  • Back-end: Python Flask, Apache Kafka
  • Data Processing: Apache Spark ML
  • Cloud Infrastructure: Chameleon Cloud, Kubernetes, Docker
  • Orchestration & Automation: Ansible, Vagrant
  • Database: CouchDB
  • Web Server: Nginx

Architecture

The Stratus architecture comprises three main components:

  1. Cloud-Based Infrastructure: Managed through Docker and Kubernetes across multiple VMs, ensuring scalability and robustness.
  2. Full-Stack Web Application: A user interface to draw digits and view predictions, with Flask managing backend requests.
  3. Deep Learning Model: A Convolutional Neural Network (CNN) trained on the MNIST dataset, deployed via Spark for distributed model inference.

Installation and Setup

Prerequisites

  • Python 3.x
  • Docker, Kubernetes, Ansible, Vagrant, Nginx, CouchDB

Installation

  1. Clone the repository:

    git clone https://github.com/ruidazeng/stratus.git
    cd stratus
  2. Set up Virtual Machines:

    vagrant up
  3. Deploy services using Ansible:

    ansible-playbook playbook_demo_master.yml
  4. Run the Flask server:

    python3 fullstack-python/app.py

Usage

After deployment, navigate to the live link or access the application locally on localhost:5000. Draw a digit on the canvas and press "Predict" to see the model's prediction along with a probability graph.

Evaluation

The project has been rigorously tested for:

  • Model Accuracy: Achieved 97.4% accuracy on the MNIST dataset.
  • Load Balancing: Stress tests were conducted to determine the optimal user load for fast and reliable predictions.
  • Response Time: System is optimized for minimal response time under various user loads.

For more details on testing and evaluation, see the technical report.

Future Directions

Potential improvements include:

  • Support for multi-digit recognition.
  • Enhanced model robustness and accuracy for varied input styles.
  • Real-world deployment in a large-scale production environment.

License

This project is licensed under the MIT License. See the LICENSE file for details.

For questions, feel free to reach out via GitHub Issues or email.