Google Edge TPU：Coral USBアクセラレータ+ RaspPi+ Docker

2018年夏、Googleは機械学習用の2つのEdge TPUデバイスを発表しました。 これらは現在コーラルブランドで入手可能です。 2週間前、私はCoral USB Acceleratorを購入しました。 それは既存のシステムに機械学習推論をもたらすポータブルUSBアクセサリーです、そしてそれはラズベリーパイと他のLinuxシステムと互換性があります。

![微信图片_20190531135204_副本.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/3bb5a084-37f9-39b4-813c-1f8d6413585e.jpeg)

##### `購入です：https://store.gravitylink.com`

Raspberry Pi 3でEdge-TPUのパフォーマンスをテストしたいと思いました。RaspberryPiのDocker上ですべてのアプリケーションを実行しているので、Coral USBアクセラレータを使い始めるために必要なすべてのものを含むDockerイメージを作成しました。 。 さらに、PIカメラを使用して画像をWebサーバーにストリーミングする例を追加しました。分類の結果はカメラ画像の上に印刷されています。また、Jupyterも例として使用しています。


これが、このチュートリアルで達成しようとしていることです。

- ラズベリーパイにDockerをインストールする 

- `lemariva / raspbian-edgetpu Docker`イメージをデプロイする 

- sshとを使ってDockerコンテナに接続します。 

- Jupyterを使用するか、Webサーバー機能を使用して画像分類器を起動します。


![微信截图_20190723142604.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/67561849-ab49-15d9-36aa-6f8fe4132061.png)

#####  CoralとTensorFlow Liteを始めよう

Rasbperry PiにRaspbianをインストールした後。 次に、カメラをCSIインターフェース（人生の画像を分析する場合）に接続し、アクセラレータUSB Egde-TPUをUSBポートに接続してRaspberry Piの電源を入れます。 次に、raspiconfigを使用してカメラのインターフェースを有効にし、ラズベリーを再起動します。 それが終わったら、Dockerエンジンをインストールする必要があります。 私はチュートリアルを書きました：＃チュートリアル：`Docker on Embedded Systems（Raspberry PiとBeagleboard）` はあなたを助けることができます。 Dockerエンジンをインストールしたら、Portainerコンテナをデプロイすることをお勧めします。 これはそのチュートリアルでも説明されています。


それで、あなたがPortainerを使うならば：

- 1.Portainer.io Docker管理ユーザーインターフェイスを開きます。 （通常は`http：// <<ip-address-rpi>>：9000`）
- 2.コンテナ>コンテナの追加で以下のパラメータを入力します。

名前：`rasbian-google`（またはあなたが望むものなら何でも）
イメージ：`lemariva / raspbian-edgetpu`
ポートマッピング
ホスト25（未使用のもの） - >コンテナ22
ホスト8000（未使用のもの） - >コンテナ8000
ホスト8888（未使用のもの） - >コンテナ8888
ポリシーを再起動します。
ランタイム>特権モード：オン
ボリュームバインド>` / dev / bus / usb：/ dev / bus / usb`
- 3.「アクション」>「コンテナーの開始/デプロイ」ボタンを押します。

Portainer.ioを使用したくない場合は、次の行を使用して`lemariva / raspbian-edgetpu`コンテナを実行します:

```ruby:shell
docker run -d --privileged -p 25:22 -p 8000:8000 -p 8888:8888 --restart unless-stopped -v /dev/bus/usb:/dev/bus/usb  lemariva/raspbian-edgetpu
```
数分待ってから、すべて問題なければ、コンテナーは稼働しているはずです。 あなたは私の場合のようにsshを使ってそれに接続することができます（ポート25はマップされました）：

```ruby:shell
ssh root@<<ipaddress>> -p 25
```
デフォルトのパスワードはrootです。 sshを使用して実行中のコンテナにログインしたら、PIカメラを使用して画像分類器を起動できます:

```ruby:shell
python3 /notebooks/web_streaming_classify.py --model /notebooks/test_data/mobilenet_v2_1.0_224_quant_edgetpu.tflite --label /notebooks/test_data/imagenet_labels.txt
```

その後、あなたは上のウェブサイトにアクセスすることができます。 `http：// <ip address address>：8000`。 このWebサイトへの並列アクセスは機能していません、そしてあなたがWebサイトを更新したい場合は、それを2回実行してください。

Jupyterも利用可能です、あなたはノートブックにアクセスすることができます。 http：// <<ip-address-rpi>>：8888 sshセッションを使用して次のように入力して取得できるトークンが必要です。

```ruby:shell
jupyter notebook list

[I 11:59:16.597 NotebookApp] The Jupyter Notebook is running at:
http://0.0.0.0:8888/?token=c8de56fa4deed24899803e93c227592aef6538f93025fe01
```
画像分類子の例と、それをテストするための動物画像も含めました。 必要に応じて、コンテナを反復モードでも実行できます。

![5c99e4e7b6de3677414165.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448511/8188e402-3a8b-b1e0-e55a-f4f10df6d07e.png)

##### TensorFlow Lite
事前に訓練されたモデルを使用することも、モデルをウェットトレーニングすることも、最初からモデルを構築することもできます。ここでは、情報を入手します。

##### トレーニング済みモデル
CoralのWebサイトには、Coralハードウェアでの使用に最適化された、事前にトレーニングされたTensorFlow Liteモデルがあります。 Dockerイメージの中に "MobileNet V2"モデルを含めました。 これは1000種類のオブジェクトを認識します。 始めたばかりの場合は、他のモデルをダウンロードしてデバイスに展開するだけです。

##### モデルを退避させる
トランスファーラーニングと呼ばれるプロセスを使用して、既存のモデルを再トレーニングしたり、事前にトレーニングされたコーラルの機械学習モデルをカスタマイズして自分のイメージやオブジェクトを認識させることができます。 これを行うには、既存のモデルの再保存の手順に従ってください。

##### あなた自身のTensorFlowモデルを構築してください
モデルを最初からトレーニングする必要がある場合は、Edge TPU用の新しいモデルの作成の手順に従うことができます。 モデルはモデル要件を満たす必要があります。

###### TensorFlow、他のフレームワーク（例：PyTorch）、そしてコーラルプロジェクト
現在、Edge-TPUはTensorFlow Liteモデルのみをサポートしています。 つまり、`tfliteモデル` をtflite-tpuに変換する必要があります。 あなたがPyTorchユーザであるか、他のフレームワークを好むならば、あなたはONNXを使ってあなたのモデルをTensorFlowに変換しようとすることができます。

####結論
この記事では、Docker、Jupyter、Raspberry Pi、Pi Camera、およびCoral USB Acceleratorの5つのことをまとめています。 ポータブルEdge-TPUアクセサリをテストしたい場合は、これが簡単な方法です。 Edge-TPUのパフォーマンスは本当に良いです。 オフラインカメラ画像とPiカメラのライブ画像を分類する時間が大幅に短縮されます。 次の記事では、結果をいくつか掲載します。