ラズパイ5日目①:Raspberry Pi + Google Edge TPU で機械学習する
1週間ぶりのラズパイ!平日は仕事なもんで、週末にしか触れません。社内ラズコンは3月中旬… システム構築、間に合うか?!
さて、前回までで音声認識に光が見えたので、今回は骨格検出…の前に機械学習に挑戦!
- ラズパイ:Raspberry Pi 3 Model B+
- カメラ:Raspberry Pi Camera B01 (Rev1.3)
- Edge TPU:Google Coral Edge TPU Accelerator vertion 1.0
- Edge TPUとは?
- Edge TPUをラズパイに接続する
- Edge TPU Runtime をインストールする
- 最大クロック周波数バージョンのRuntimeをインストールする(任意)
- TensorFlow Lite をインストールする
- サンプルを動かしてみる
Edge TPUとは?
公式サイトによると coral.ai
Edge TPUは、低電力デバイス向けの高性能ML推論を提供するGoogleが設計した小さなASICです。 たとえば、MobileNet V2などの最先端のモバイルビジョンモデルを400 FPSで電力効率の高い方法で実行できます。```
むつかしいので色々なサイトで勉強した結果…
機械学習に特化したGoogleの自社開発プロセッサ「TPU(Tensor Processing Unit)」を、エッジコンピューティング向けにした製品群のこと。
エッジコンピューティングというのは、簡単にいうと、インターネットを介さずに現場近くの高速端末機器を使って高速処理を実現すること。
「Coral」というのはGoogleのオリジナルブランド。
要するに、ラズパイ(に限らないが)でAI処理を実現するための外付けの処理端末、と考えてよさそうです。
私が使うのは、ラズパイにUSB接続できるタイプのAccelerator ですが、マイコンとTPUが一体になったDev Boardという商品もあるもよう。
Edge TPUをラズパイに接続する
Edge TPU AcceleratorをUSBポートに挿すだけです。
なお、Raspberry Pi 3 Model B+がUSB2.0なのに対し、Edge TPU AcceleratorはUSB3.0ということで、場合によっては理論速度の半分以下まで速度が落ちるそうです。
理論速度に近づけたければ、USB3.0ポートのあるRaspberry Pi 4の方がよさそうです。
まぁ性能低いことを知っていてラズパイ3を選んだので、覚悟の上です。
こちらのサイトでUSB2.0とUSB3.0との処理速度を比較されています。詳細が気になる方はこちらを参照願います。
misoji-engineer.com
公式サイトにインストール手順が掲載されていますが、ちょこちょこ追加でやらなきゃいけないことがあったので独自でまとめておきます。
coral.ai
Edge TPU Runtime をインストールする
Edge TPUと通信するにはEdge TPU Runtime が必要になります。
Terminalからapt-getコマンドでインストールします。
$ echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list $ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - $ sudo apt-get update $ sudo apt-get install libedgetpu1-std
最大クロック周波数バージョンのRuntimeをインストールする(任意)
最大クロック周波数(デフォルトの2倍)で動作するRuntimeのバージョンに変更します。ただし、公式サイトによれば「処理速度は向上するが消費電力も増加し、Acceleratorが高温になる」とのこと。火傷の恐れもあるらしい。ですので、必須の設定ではありません。
が、私がやりたい骨格検出処理をラズパイ3で実現するには処理速度向上が必要なため、この設定を行うことにしました。
Terminalからapt-getコマンドでインストールします。
$ sudo apt-get install libedgetpu1-max
TensorFlow Lite をインストールする
公式サイトによると、インストールにはいくつか方法があるそうです。
There are several ways you can install TensorFlow's APIs, but to get started with Python, the easiest option is to install the tflite_runtime package. This package provides the bare minimum code required to run an inference with Python (primarily, the Interpreter API), thus saving you a lot of disk space.
TensorFlowのAPIをインストールする方法はいくつかありますが、Pythonを始めるには、tflite_runtimeパッケージをインストールするのが最も簡単なオプションです。このパッケージは、Python(主にInterpreter API)で推論を実行するために必要な最小限のコードを提供するため、ディスクスペースを大幅に節約できます。To install it, follow the TensorFlow Lite Python quickstart, and then return to this page after you run the pip3 install command.
これをインストールするには、TensorFlow Lite Pythonクイックスタートに従ってください。pip3installコマンドを実行した後、このページに戻ります。
というわけで、別ページを参考にしながらインストールします。
www.tensorflow.org
Terminalからpip installコマンド(Pythonパッケージ用インストールコマンド)でOS、Python3のバージョンに応じたパッケージをインストールします。
RaspbianなのでARM32かARM64のどちらかなのですが、わからなかったのでgetconf LONG_BITコマンドで確認します。
$ getconf LONG_BIT
32
32ビットOS(ARM32)であることがわかりました。
また、Python3のバージョンは以下のコマンドで確認できます。
$ python3 --version Python 3.7.3
パッケージが判明したら、インストールを実行します。
$ pip3 install tflite_runtime-1.14.0-cp37-cp37m-linux_armv7l.whl Requirement 'tflite_runtime-1.14.0-cp37-cp37m-linux_armv7l.whl' looks like a filename, but the file does not exist Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Processing ./tflite_runtime-1.14.0-cp37-cp37m-linux_armv7l.whl Could not install packages due to an EnvironmentError: [Errno 2] そのようなファイルやディレクトリはありません: '/home/pi/tflite_runtime-1.14.0-cp37-cp37m-linux_armv7l.whl'
怒られた。
「えっなんで?!pipのバージョン違う??」と焦ったが、インストーラ(whlファイル)ダウンロードし忘れてただけでした。まぬけ(笑)
パッケージダウンロード後、インストールし直します。
$ wget https://www.tensorflow.org/lite/guide/pythonhttps://dl.google.com/coral/python/tflite_runtime-1.14.0-cp37-cp37m-linux_armv7l.whl $ pip3 install tflite_runtime-1.14.0-cp37-cp37m-linux_armv7l.whl
サンプルを動かしてみる
GitHubからサンプルプロジェクトをコピーして動かしてみます。
$ mkdir coral && cd coral $ git clone https://github.com/google-coral/tflite.git $ python3 classify_image.py --model models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --labels models/inat_bird_labels.txt --input images/parrot.jpg INFO: Initialized TensorFlow Lite runtime. ----INFERENCE TIME---- Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory. 121.1ms 10.0ms 10.3ms 10.3ms 9.8ms -------RESULTS-------- Ara macao (Scarlet Macaw): 0.76562
このサンプルプロジェクトは、写真を読み込んでどの鳥か推測させる、という処理をしています。結果を見ると、正しく「赤色のコンゴウインコ」と推測できていることがわかります。
かなりスムーズにEdge TPUの設定ができました。自分で機械学習のモデルを作ったりもできるそうなので、システムづくりがひと段落したら遊んでみたいです。
以下のサイトでは、ドライバーを学習させるという取り組みをされています。
misoji-engineer.com