All Projects → Xilinx → Bnn Pynq

Xilinx / Bnn Pynq

Licence: bsd-3-clause
Quantized Neural Networks (QNNs) on PYNQ

Projects that are alternatives of or similar to Bnn Pynq

Financedatareader
Financial data reader
Stars: ✭ 501 (-1.76%)
Mutual labels:  jupyter-notebook
Svcca
Stars: ✭ 506 (-0.78%)
Mutual labels:  jupyter-notebook
Tensorflow Eager Tutorials
Simple tutorials for building neural networks with TensorFlow Eager mode.
Stars: ✭ 509 (-0.2%)
Mutual labels:  jupyter-notebook
Dbda Python
Doing Bayesian Data Analysis, 2nd Edition (Kruschke, 2015): Python/PyMC3 code
Stars: ✭ 502 (-1.57%)
Mutual labels:  jupyter-notebook
Generative Adversarial Networks
Introduction to generative adversarial networks, with code to accompany the O'Reilly tutorial on GANs
Stars: ✭ 505 (-0.98%)
Mutual labels:  jupyter-notebook
Coursera Deep Learning
Solutions to all quiz and all the programming assignments!!!
Stars: ✭ 505 (-0.98%)
Mutual labels:  jupyter-notebook
Simpleitk Notebooks
Jupyter notebooks for learning how to use SimpleITK
Stars: ✭ 502 (-1.57%)
Mutual labels:  jupyter-notebook
Data science delivered
Observations from Ian on successfully delivering data science products
Stars: ✭ 510 (+0%)
Mutual labels:  jupyter-notebook
Robustness
A library for experimenting with, training and evaluating neural networks, with a focus on adversarial robustness.
Stars: ✭ 506 (-0.78%)
Mutual labels:  jupyter-notebook
Show attend and tell.tensorflow
Stars: ✭ 508 (-0.39%)
Mutual labels:  jupyter-notebook
Realtime multi Person pose estimation
Code repo for realtime multi-person pose estimation in CVPR'17 (Oral)
Stars: ✭ 4,760 (+833.33%)
Mutual labels:  jupyter-notebook
Cat Localizer
Localize your cat at home with BLE beacon, ESP32s, and Machine Learning
Stars: ✭ 503 (-1.37%)
Mutual labels:  jupyter-notebook
Labml
🔎 Monitor deep learning model training and hardware usage from your mobile phone 📱
Stars: ✭ 508 (-0.39%)
Mutual labels:  jupyter-notebook
Stanford Cs229
🤖 Exercise answers to the problem sets from the 2017 machine learning course cs229 by Andrew Ng at Stanford
Stars: ✭ 503 (-1.37%)
Mutual labels:  jupyter-notebook
Python Reference
Python Quick Reference
Stars: ✭ 509 (-0.2%)
Mutual labels:  jupyter-notebook
Make money with tensorflow 2.0
This is the code for "Make Money with Tensorflow 2.0" by Siraj Raval
Stars: ✭ 503 (-1.37%)
Mutual labels:  jupyter-notebook
Julia Mit
Tutorials and information on the Julia language for MIT numerical-computation courses.
Stars: ✭ 505 (-0.98%)
Mutual labels:  jupyter-notebook
Cookbook and code
Stars: ✭ 511 (+0.2%)
Mutual labels:  jupyter-notebook
Keras ocr
用keras实现OCR定位、识别
Stars: ✭ 508 (-0.39%)
Mutual labels:  jupyter-notebook
Scipy 2016 Sklearn
Scikit-learn tutorial at SciPy2016
Stars: ✭ 508 (-0.39%)
Mutual labels:  jupyter-notebook

BNN-PYNQ PIP INSTALL Package

This repo contains the pip install package for Quantized Neural Network (QNN) on PYNQ. Two different network topologies are here included, namely CNV and LFC as described in the FINN Paper . Now, there are multiple implementations available supporting different precision for weights and activation:

  • 1 bit weights and 1 bit activation (W1A1) for CNV and LFC
  • 1 bit weights and 2 bit activation (W1A2) for CNV and LFC
  • 2 bit weights and 2 bit activation (W2A2) for CNV

We support 3 boards for hardware acceleration which are Pynq-Z1, Pynq-Z2 and Ultra96 (with PYNQ image).

Citation

If you find BNN-PYNQ useful, please cite the FINN paper:

@inproceedings{finn,
author = {Umuroglu, Yaman and Fraser, Nicholas J. and Gambardella, Giulio and Blott, Michaela and Leong, Philip and Jahre, Magnus and Vissers, Kees},
title = {FINN: A Framework for Fast, Scalable Binarized Neural Network Inference},
booktitle = {Proceedings of the 2017 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays},
series = {FPGA '17},
year = {2017},
pages = {65--74},
publisher = {ACM}
}

Quick Start

Please refer to PYNQ Getting Started guide to set-up your PYNQ Board.

In order to install it to your PYNQ, connect to the board, open a terminal and type:

sudo pip3 install git+https://github.com/Xilinx/BNN-PYNQ.git (on PYNQ v2.3 and later versions, tested up to v2.5)
sudo pip3.6 install git+https://github.com/Xilinx/BNN-PYNQ.git (on PYNQ v2.2 and earlier)

This will install the BNN package to your board, and create a bnn directory in the Jupyter home area. You will find the Jupyter notebooks to test the networks in this directory.

Repo organization

The repo is organized as follows:

  • bnn: contains the LfcClassifier and CnvClassifier python class description
    • src: contains the sources of the different precision networks, the libraries to rebuild them, and scripts to train and pack the weights:
      • library: FINN library for HLS QNN descriptions, host code, script to rebuilt and drivers for the PYNQ and Ultra96 (please refer to README for more details)
      • network: HLS top functions for QNN topologies (CNV and LFC) with different implementations for weight and activation precision, host code and make script for HW and SW build (please refer to README for more details)
      • training: scripts to train on the Cifar10, GTSRB and MNIST datasets and scripts to pack the weights in a binary format which can be read by the overlay
    • bitstreams: contains the bitstreams for the 5 overlays
      • pynqZ1-Z2: bitstreams for Pynq devices
      • ultra96: bitstreams for Ultra96 devices
    • libraries: pre-compiled shared objects for low-level driver of the 5 overlays each for hardware and software runtime
      • pynqZ1-Z2: shared objects used by Pynq devices
      • ultra96: shared objects used by ultra96
    • params: set of trained parameters for the 5 overlays:
      • MNIST and NIST dataset for LFC network. Note that NIST dataset is only applicable to LFC-W1A1 by default.
      • Cifar10 , SVHN and German Road Signs dataset for CNV network. Note that SVHN and German Road Signs databases are only applicable to CNV-W1A1 by default.
  • notebooks: lists a set of python notebooks examples, that during installation will be moved in /home/xilinx/jupyter_notebooks/bnn/ folder
  • tests: contains test script and test images

Hardware design rebuilt

In order to rebuild the hardware designs, the repo should be cloned in a machine with installation of the Vivado Design Suite (tested with 2018.2). Following the step-by-step instructions:

  1. Clone the repository on your linux machine: git clone https://github.com/Xilinx/BNN-PYNQ.git --recursive;
  2. Move to <clone_path>/BNN_PYNQ/bnn/src/network/
  3. Set the XILINX_BNN_ROOT environment variable to <clone_path>/BNN_PYNQ/bnn/src/
  4. Launch the shell script make-hw.sh with passing parameters for target network, target platform and mode, with the command ./make-hw.sh {network} {platform} {mode} where:
    • network can be cnvW1A1, cnvW1A2, cnvW2A2 or lfcW1A1, lfcW1A2;
    • platform can be pynqZ1-Z2 or ultra96;
    • mode can be h to launch Vivado HLS synthesis, b to launch the Vivado project (needs HLS synthesis results), a to launch both;
  5. The results will be visible in clone_path/BNN_PYNQ/bnn/src/network/output/ that is organized as follows:
    • bitstream: contains the generated bitstream(s);
    • hls-syn: contains the Vivado HLS generated RTL and IP (in the subfolder named as the target network and target platform);
    • report: contains the Vivado and Vivado HLS reports;
    • vivado: contains the Vivado project;
  6. Copy the generated bitstream, hwh and tcl script on the PYNQ board pip_installation_path/bnn/bitstreams/
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].