Coral USB Accelerator、TensorFlow Lite C ++ API、およびEdge TPUオブジェクト検出用のRaspberry Pi

Google Coral USBアクセラレーターは、Linuxホストコンピューター（Raspberry Piを含む）に接続すると、機械学習モデルの推論を非常に高速化するエッジテンソルプロセッシングユニット（TPU）を提供するUSBデバイスです。

前のチュートリアルで、Raspberry Piアプリの開発のためにTensorFlow LiteをQt / QMLと統合する方法と、オブジェクト検出用のオープンソースのサンプルアプリ：Raspberry Pi、TensorFlow Lite、およびQt / QML：オブジェクト検出の例を既に学習しました 。 基本を学ぶためにそれを見てください。

このチュートリアルでは同じアプリを紹介しますが、この場合は推論にCoral USB Acceleratorを使用します。 推論時間がRaspberry Pi CPUの1〜2秒からEdge TPUの55〜80ミリ秒に短縮されるため、結果は印象的です。

次のビデオを見て、Raspberry Pi CPUで推論を実行するアプリからの推論速度と比較してください：Raspberry Pi、TensorFlow Lite、およびQt / QML：オブジェクト検出の例。（video: https://youtu.be/mduuuLIOVQI）

![微信截图_20190906171720.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/05ab4c74-eb27-b3d2-35a1-506864c75602.png)


USB 3.0ポートを搭載したコンピューターでこの例をテストすると、パフォーマンスがさらに向上します（ラップトップで7〜9ミリ秒）。 これは、Raspberry Pi 3 Model B +（このチュートリアルで検討するもの）までは、USB 2.0ポートしか使用できないためです。 これにより、Edge TPUとRaspberry Pi自体の間のデータ伝送帯域幅が制限されます。

幸いなことに、Raspberry Pi 4 Model BにはUSB 3.0ポートが装備されています。

##### アウトライン
- このチュートリアルで使用されるハードウェア
- Qt：Raspberry Piでのダウンロード、クロスコンパイル、インストール
- TensorFlow Lite：Raspberry Piのダウンロードとクロスコンパイル
- Coral USB Accelerator：Edge TPUランタイムをダウンロードしてインストールする
- Edge TPU – Raspberry Piオブジェクト検出アプリ
- 概要

#### このチュートリアルで使用されるハードウェア
Coral USBアクセラレーター
Raspberry Pi 3 Model B +
Raspberry Piカメラ
Raspberry Pi 3 – 7″タッチスクリーンディスプレイ
Raspberry Pi用2 xフレックスケーブル（カメラおよびディスプレイ用）
2 x Raspberry Pi 3 B +電源– 5V 2.5A（Raspberry Piおよびディスプレイ用）

> これらはアフィリエイトリンクです（Coral USB Acceleratorリンクを除く）。 つまり、リンクをクリックしてプロモートアイテムを購入すると、追加費用なしで小規模なアフィリエイトコミッションを受け取ります。製品の価格は同じです。 よろしければ、私たちの仕事とウェブサイトへのサポートを本当に感謝します。

#### Qt：Raspberry Piでのダウンロード、クロスコンパイル、インストール
Raspberry Pi用のQt 5.12のクロスコンパイルとデプロイをご覧ください。 このステップを実行するための詳細がすべて提供されます。 また、Qt Creatorをセットアップして、QtアプリをRaspberry Piにデプロイする方法を見つけることもできます。

#### TensorFlow Lite：Raspberry Piのダウンロードとクロスコンパイル
Raspberry PiおよびホストLinuxオペレーティングシステム用のTensorFlow Liteのコンパイルは、以前のチュートリアルRaspberry Pi、TensorFlow Lite、およびQt / QML：オブジェクト検出の例で既に説明されています。

#### Coral USB Accelerator：Edge TPUランタイムをダウンロードしてインストールする
USBアクセラレータにアクセスするには、Coral edge TPUランタイムをインストールする必要があります。 このランタイムには、ターゲットプラットフォーム用のPythonライブラリ、C ++ APIファイル、共有ライブラリ（libedgetpu.so）が含まれています。 特にLinuxおよびRaspberry Piで必要な手順を以下に示します。 また、Coral WebサイトのLinuxおよびRaspberry Piのセットアップセクションで説明されています。

####Linuxホスト（Debian / Ubuntu）
LinuxホストでCoral USB Acceleratorをテストする場合は、次のようにx86_64プラットフォーム用のedget TPUランタイムをインストールする必要があります。

```
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
ARMプラットフォーム用のエッジTPUランタイムをインストールするには、Raspberry Piで同じコマンドを実行する必要があります。

```
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
```
> 注：エッジTPUランタイムをダウンロードしてインストールした後、LinuxホストのRaspberry Pi sysrootフォルダーを同期することを忘れないでください。 sysrootとは何か、なぜこれが必要なのかについての詳細は、Raspberry Pi用のQt 5.12のクロスコンパイルとデプロイ、セクション4 – sysrootの作成と設定を確認してください。

rsyncを使用して、LinuxホストsysrootとRaspberry Piを同期します。 raspberrypi_ipは、Raspberry Piのネットワークインターフェイス名またはIPアドレスです。

```
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
```
次に、このフォルダー構造はコンピューターとRaspberry Piの両方にあるため、sysrootのシンボリックリンクを相対に調整する必要があります。

```
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オブジェクト検出アプリ
このアプリはオープンソースであり、GitHubのGitリポジトリでホストされています。 このアプリは、Raspberry Pi、TensorFlow Lite、およびQt / QMLで開発されたものとほとんど同じです：オブジェクト検出の例。 主な違いは次のとおりです。

- Edge TPU用のTensorFlow Lite C ++ APIの使用。
- Edge TPU向けに調整された人工ニューラルネットワークモデルの使用：MobileNet SSD v2（COCO）。 ただし、この例はすべてのMobileNet SSDモデルで機能します。

![portada.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/aa2c80f2-d754-d297-f66e-16b8beca97ef.jpeg)

Coralが提供するすべての利用可能なエッジTPUニューラルネットワークモデルをご覧ください。 このリストには、特に画像分類とオブジェクト検出のモデルが含まれています。

エッジTPUをサポートする独自のオブジェクト検出モデルのトレーニングと提供に関心がある場合は、オブジェクト検出モデルの再トレーニングに関するCoralのドキュメントをご覧ください。

#### 概要
このチュートリアルは、Coral USB Acceleratorデバイスによる高速エッジTPU推論を使用して、オブジェクト検出のためにRaspberry PiでTensorFlow Lite C ++ APIを使用する方法に関する以前のチュートリアルを拡張しました。 ここで紹介するアプリは、デスクトップおよびRaspberry Piで動作し、MobileNet SSDニューラルネットワークモデルと互換性があります。

チュートリアルが気に入っていただけましたら幸いです。下記の開始点で評価してみてください。これにより、私たちの仕事についてのフィードバックが得られます。 疑問、提案、コメント、問題がある場合は、下に書いてください。

![unnamed.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/fbbe2967-d60d-9775-2f8d-d8a4393557a4.jpeg)


- Coral USB Acceleratorの購入はこちら: https://store.gravitylink.com/global/product/UsbAccelerator