SpArSe: CNN on microcontrollers - notitiam/ML-paper-notes GitHub Wiki

Microcontroller specs:

  • Arduino UNO: 16 MHz, 32KB Flash, 2KB RAM, ~16 MIPS
  • STM32: 72 MHz, 128KB Flash, 20 KB RAM, ~72 MIPS
  • ESP32: 160 MHz, dual core, 4MB Flash, 520 KB RAM,
  • Raspberry pi zero w: 1 Ghz, SD Card, 512 MB RAM

Availability at home:

  • Full microprocessor ~4
  • Microcontrollers 36
  • Car 10-100

ConvNets

  • Visual/image learning tasks
  • LeNet: quantized 8bit: 420 KB parameters, 177 KB RAM
  • Total computations for LeNet: ~150M

Sparse framework

  • network architecture search
  • simultaneous optimization of
    • accuracy
    • ROM size: L0 Norm of all parameters
    • RAM size: L0 Norm of layer input + parameters/ input + output
  • pareto optimality
  • architecture search from scratch
    • 3 stages (m configuration each)
    • Multi Objective Bayesian Optimization + random
  • Neural Network Pruning
    • Unstructured pruning
      • Sparse Variational Dropout (SpVD)
    • Structured pruning (channel pruning)
      • Bayesian Compression
  • Morphism (morph of a set): Incremental evaluation of network, stagewise elimination

Results:

  • MNIST:
    • 28x28 digit images
    • 98.64% accutacy, < 2KB RAM, 2.8KB FLASH
  • CIFAR 10:
    • 32x32 color images
    • 73.8% accuracy (SOTA > 95%), 0.8KB Flash, 1.3KB RAM