Javier Bonilla

Researcher at CIEMAT - PSA
PhD. in Computer Science / Solar Thermal Energy Researcher
Javier Bonilla

Helpful? spread the word!

The Google Coral USB Accelerator is a USB device that provides an edge Tensor Processing Unit (TPU) that highly accelerates machine learning model inference when attached to a Linux host computer (including Raspberry Pi).

In a previous tutorial, we already learnt how to integrate TensorFlow Lite with Qt/QML for the development of Raspberry Pi apps, together with an open-source example app for object detection: Raspberry Pi, TensorFlow Lite and Qt/QML: object detection example. Have a look at it to learn the basics.

This tutorial presents the same app, but in this case we will make use of the Coral USB Accelerator for inference. The results are impressive, since the inference time is reduced from 1 – 2 seconds on Raspberry Pi CPU to 55 – 80 milliseconds on Edge TPU.

Have a look at the following video and compare the inference speed with that from the app that performs inference on Raspberry Pi CPU: Raspberry Pi, TensorFlow Lite and Qt/QML: object detection example.

If you test this example in a computer equipped with a USB 3.0 port, you will have even better performance (7 – 9 milliseconds on my laptop). This is because, up to Raspberry Pi 3 Model B+ (the one considered in this tutorial), only USB 2.0 ports are available. This limits the data transmission bandwidth between the Edge TPU and the Raspberry Pi itself.

The good news is that Raspberry Pi 4 Model B is equipped with USB 3.0 ports.

Outline

  • Hardware used in this tutorial
  • Qt: download, cross-compile and install on Raspberry Pi
  • TensorFlow Lite: download and cross-compile for Raspberry Pi
  • Coral USB Accelerator: download and install the Edge TPU runtime
  • Edge TPU – Raspberry Pi object detection app
  • Summary

Hardware used in this tutorial

These are affiliate links (except the Coral USB Accelerator link). This means if you click on the link and purchase the promoted item, we will receive a small affiliate commission at no extra cost to you, the price of the product is the same. We would really appreciate your support to our work and website if this is fine for you.

Qt: download, cross-compile and install on Raspberry Pi

Have a look at Cross-compile and deploy Qt 5.12 for Raspberry Pi. It provides all the details to do this step. There, you can also find how to set up Qt Creator to deploy Qt apps to Raspberry Pi.

TensorFlow Lite: download and cross-compile for Raspberry Pi

The compilation of TensorFlow Lite for Raspberry Pi, as well as for the host Linux operating system, is already covered in a previous tutorial: Raspberry Pi, TensorFlow Lite and Qt/QML: object detection example.

Coral USB Accelerator: download and install the Edge TPU runtime

We need to install the Coral edge TPU runtime to access the USB Accelerator. This runtime includes Python libraries, C++ API files and a shared library (libedgetpu.so) for our target platform. The required steps are shown below for Linux and Raspberry Pi in particular. They are also described at Coral website in the set up for Linux and Raspberry Pi section.

Linux host (Debian/Ubuntu)

If you want to test the Coral USB Accelerator in your Linux host, you have to install the edget TPU runtime for x86_64 platforms as follows.

wget https://dl.google.com/coral/edgetpu_api/edgetpu_api_latest.tar.gz   
   -O edgetpu_api.tar.gz --trust-server-names
tar xzf edgetpu_api.tar.gz
cd edgetpu_api
bash ./install.sh

Raspberry Pi

The same commands must be executed on the Raspberry Pi to install the edge TPU runtime for ARM platforms.

wget https://dl.google.com/coral/edgetpu_api/edgetpu_api_latest.tar.gz   
   -O edgetpu_api.tar.gz --trust-server-names
tar xzf edgetpu_api.tar.gz
cd edgetpu_api
bash ./install.sh

Note: Do not forget to synchronize your Raspberry Pi sysroot folder in your Linux host after downloading and installing the edge TPU runtime. For further information about what a sysroot is and why this is needed, check Cross-compile and deploy Qt 5.12 for Raspberry Pi, section 4 – Create and configure a sysroot.

We use rsync to synchronize our Linux host sysroot and the Raspberry Pi; raspberrypi_ip is the network interface name or IP address of our Raspberry Pi.

cd sysroot
rsync -avz pi@raspberrypi_ip:/lib sysroot
rsync -avz pi@raspberrypi_ip:/usr/include sysroot/usr
rsync -avz pi@raspberrypi_ip:/usr/lib sysroot/usr
rsync -avz pi@raspberrypi_ip:/opt/vc sysroot/opt

Next, we need to adjust our symbolic links in sysroot to be relative since this folder structure is in both our computer and Raspberry Pi.

wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot

Edge TPU – Raspberry Pi object detection app

This app is open source and it is hosted in a Git repository on GitHub. The app is mostly the same as the one developed in Raspberry Pi, TensorFlow Lite and Qt/QML: object detection example. The main differences are the following.

  • Use of TensorFlow Lite C++ API for Edge TPU.
  • Use of an artificial neural network model tailored for Edge TPU: MobileNet SSD v2 (COCO). However, this example works with any MobileNet SSD model.
Edge TPU, Rasperry Pi and TensorFlow Lite for object detection
Edge TPU – Raspberry Pi object detection app

Have a look at all the available edge TPU neural network models provided by Coral. The list includes models for image classification and object detection among others.

If you are interested in training and serving your own object detection model with edge TPU support, have a look at Coral documentation for retraining an object detection model.

Summary

This tutorial extended a previous tutorial, about how to use TensorFlow Lite C++ API on Raspberry Pi for object detection, with fast edge TPU inference thanks to a Coral USB Accelerator device. The app presented here works on desktop, as well as on Raspberry Pi, and it is compatible with any MobileNet SSD neural network model.

I hope you liked the tutorial, please consider to rate it with the starts you can find below, this gives us feedback about our work. If you have any doubt, proposal, comment or issue, just write below, we are here to help :-).

2
Leave a Reply

avatar
2000
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Javier BonillaEkeeda - Mechatronics Engineering Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
Ekeeda - Mechatronics Engineering
Guest

Thank you for this amazing post. It was really helpful and informative. It also covered all the aspects of the object detection and was really easy and simple to understand.

shares