TinyML with Arduino
04 Jul 2021In this article I will show how to build Tensorflow Lite based jelly bears classifier using Arduino Nano 33 BLE Sense.
Before you will continue reading please watch short introduction:
Currently a machine learning solution can be deployed not only on very powerful machines containing GPU cards but also on a really small devices. Of course such a devices has a some limitation eg. memory etc. To deploy ML model we need to prepare it. The Tensorflow framework allows you to convert neural networks to Tensorflow Lite which can be installed on the edge devices eg. Arduino Nano.
Arduino Nano 33 BLE Sense is equipped with many sensors that allow for the implementation of many projects eg.:
- Digital microphone
- Digital proximity, ambient light, RGB and gesture sensor
- 3D magnetometer, 3D accelerometer, 3D gyroscope
- Capacitive digital sensor for relative humidity and temperature
Examples which I have used in this project can be found here.
To simplify device usage I have build Arduino Lab project where you can test and investigate listed sensors directly on the web browser.
The project dependencies are packed into docker image to simplify usage.
Before you start the project you will need to connect Arduino through USB (the Arduino will communicate with docker container through /dev/ttyACM0)
git clone https://github.com/qooba/tinyml-arduino.git
cd tinyml-arduino
./run.server.sh
# in another terminal tab
./run.nginx.sh
# go inside server container
docker exec -it arduino /bin/bash
./start.sh
For each sensor type you can click Prepare button which will build and deploy appropriate Arduino code.
NOTE: Sometimes you will have to deploy to arduino manually to do this you will need to go to arduino container
docker exec -it arduino /bin/bash
cd /arduino
make rgb
Here you have complete Makefile with all types of implemented sensors.
You can start observations using Watch button.
Now we will build TinyML solution. In the first step we will capture training data:
The training data will be saved in the csv format. You will need to repeat the proces for each class you will detect.
Captured data will be uploaded to the Colab Notebook. Here I fully base on the project Fruit identification using Arduino and TensorFlow. In the notebook we train the model using Tensorflow then convert it to Tensorflow Lite and finally encode to hex format (model.h header file) which is readable by Arduino.
Now we compile and upload model.h header file using drag and drop mechanism.
Finally we can classify the jelly bears by the color: