Skip to content

TensorFlow Lite & Coral TPU: C++ examples on Raspberry Pi Zero W

License

Notifications You must be signed in to change notification settings

cloudwiser/TensorFlowLiteRPIZeroTPU

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TensorFlow Lite & Coral TPU: C++ examples on Raspberry Pi Zero W

This guide outlines the steps to get the minimal C++ example provided in the Google Coral TPU edgetpu distro running on the Raspberry Pi Zero W

If you want to just get up-and-running with the Python examples then Google provide an SD image for the Raspberry Pi Zero W at https://github.com/google-coral/edgetpu-platforms/releases/tag/v1.9.2 Note that the manual install fails currently due to the wrong version of libedgetpu.so.1.0 being installed in /usr/lib/arm-linux-gnueabihf - see later for how to fix this.

If you want to run the C++ sample and the associated build process, read on!

First of all, you'll need to purchase a Coral TPU USB stick from https://coral.withgoogle.com/products/

You will also need a USB-to-micro-USB adapter if you intend to use the cable provided with Coral TPU adapter to connect to the RPi Zero USB port (the one nearest the SD card). I decided to skip the adapter and purchase a suitable USB-C-to-micro-USB e.g. https://smile.amazon.co.uk/gp/product/B01LONQ7R6

I haven't checked the power consumptiom of the Coral TPU plus RPi Zero W but please check that your micro-USB power source can drive both devices

Once you plug-in the TPU adapter, the white LED should illuminate. You should now check that it is recognised as a USB device via...

pi@raspberrypi: <path> $ lsusb
Bus 001 Device 003: ID 18d1:9302 Google Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Note that if the (Google) device doesn't appear, check you are not running other USB drivers e.g. a ssh connection from your client to your RPi Zero W via USB. If you are, remove your SD and edit the image to reverse any changes in cmdline.txt and config.txt files to disable these drivers (see https://desertbot.io/blog/ssh-into-pi-zero-over-usb)

Next you need to build the lib_tensorflow-lite.a in <path_to>/tensorflow/tensorflow/lite/tools/make/gen/rpi_armv6/lib. I have a repo that outlines this process (warning: it takes time if you are native compiling on the RPi Zero W) at https://github.com/cloudwiser/TensorFlowLiteRPIZero

With this complete and working on the non-TPU samples, proceed with the edgetpu runtime install as per step #1 at https://coral.withgoogle.com/docs/accelerator/get-started/#1-install-the-edge-tpu-runtime

Also, ensure you have the the required external dependencies via...

$ <path_to>/tensorflow/tensorflow/lite/tools/make/download_dependencies.sh

FWIW, I installed the runtime package under ~/tensorflow/edgetpu...so if you hit build problems, it maybe down to path dependencies

Note I didn't proceed any further through the Getting Started section as this is focussed on running the python samples and (at the time of writing) there was no python wheel for armv6 at https://www.tensorflow.org/lite/guide/python

Now for a tweak to /usr/lib...as the edgetpu runtime places libedgetpu.so.1.0 and a link to it in /usr/lib/arm-linux-gnueabihf...unfortunately for the RPi Zero W, this is a version for armv7. If we don't amend this, applications will compile and link and then core dump with Illegal instruction when run!

We need to overwrite this lib with the armv6 version so...copy the armv6 library from libedgetpu.so.1.0 from <path_to>/edgetpu/libedgetpu/direct/armv6 to /usr/lib/arm-linux-gnueabihf

This may need you to sudo cp <src> <dest> plus you should also to change the file permissions and group:owner via chmod and chown respectively

Now rename the original Makefile in <path_to>/tensorflow/edgetpu/src/cpp/examples to ``Makefile.origand replace it theMakefile` from this repo

Edit the new Makefile and set your TENSORFLOW_DIR to the relevant path

Run make all to compile and link minimal Check you have this binary if the make completes silently

Next we require the tflite model and source image for minimal so copy the mobilenet_v1_1.0_224_quant_edgetpu.tflite and resized_cat.bmp files from <path_to>/tensorflow/edgetpu/test_data into this examples directory

Ensure your Google Coral TPU USB stick is installed and run...

pi@raspberrypi: <path> $ ./minimal mobilenet_v1_1.0_224_quant_edgetpu.tflite resized_cat.bmp

The output should be similar to/same as...

pi@raspberrypi: <path> $ ./minimal mobilenet_v1_1.0_224_quant_edgetpu.tflite resized_cat.bmp
[Image analysis] max value index: 286 value: 0.792969

Happy TensorFlow-Lite-development-with-TPU-inference-on-arm6-devices!

Releases

No releases published

Packages

No packages published