はじめに
本記事はエッジデバイスで機械学習を行う方法として、Raspberry Pi4とCoral USB Acceleratorの導入手順についてまとめています。
Raspberry Pi4は現行機種の最新世代になります。CPUやメモリ性能が大幅に向上し、USB3.0にも対応しています。
Coral USB AcceleratorはGoogleがエッジデバイスで機械学習を行うために開発したGoogleの専用ASICです。
この専用ASICはEdge TPUと言われ、エッジで推論を行うことに特化したTensorFlow Liteのフレークワークが利用できます。なお、TensorFlow Liteのフレークワーク以外はサポートしていません。また、Coral USB Acceleratorの性能を最大限に発揮するためには、USB3.0の接続が必要です。要約するとCoral USB Acceleratorの性能を引き出すのにRaspberry Pi4は最適です。
Raspberry Pi4
公式サポートではないですがGoogleからEdge TPUを使用するために、EdgeTPU Platformsというコンパイル済みのRaspbery Piのイメージが用意されています。
学習済みの画像分類モデルなどが組み込まれているため、Raspberry Piで機械学習を行うのに役にたつでしょう。
EdgeTPU Platformsから、Raspberry Pi 4のイメージを利用する手順について解説します。
なお、Raspberry Pi 4の留意事項として、電源がUSB Type-C、HDMIはMicro HDMIとインターフェースが変更されているのでご注意ください。
EdgeTPU Platforms
- google-coral/edgetpu-platformsから、Raspberry Pi 4, Buster, Edgetpu 2.11.1のイメージをダウンロードします。
- ダウンロードしたイメージをSDカードに書き込みます。SDカードへの書き込み方法については以前書いたRaspberry Pi の基本を参照。
- SDカードへの書き込み終了後、Raspberry Piを起動し、初期セットアップを行います。
ダウンロードしたイメージで起動した場合は、ファイルシステムをSDカードのサイズに合わせて拡張を行う必要があります。
ファイルシステム拡張
ファイルシステム拡張前のシステム領域(/)は以下の状態となっています。
pi@raspberrypi:~ $ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/root 3.3G 3.0G 100M 97% /
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mmcblk0p1 253M 41M 213M 16% /boot
tmpfs 386M 0 386M 0% /run/user/1000
以下のコマンドを実行し、raspi-config
を起動し対話的に操作を行います。
$ sudo raspi-config
はじめに**「7 Advanced Options」**を選択します。
つぎに「A1 Expand Filesystem」を選択します。
了解を押下します。
以下のコマンドを実行し、再起動を行います。
$ sudo systemctl reboot
再起動後、システム領域(/)が拡張されていることが確認できます。
pi@raspberrypi:~ $ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/root 29G 3.1G 24G 12% /
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mmcblk0p1 253M 41M 213M 16% /boot
tmpfs 386M 0 386M 0% /run/user/1000
Coral USB Accelerator
Coral USB Acceleratorを使うためには、以下の作業が必要になります。
- Edge TPUランタイムのインストール
- TensorFlow Liteライブラリのインストール
Edge TPUと通信するには、Edge TPUランタイムをインストールします。
また、TensorFlow LiteをPythonで使用するためにライブラリ等が必要になります。本記事では、PythonでTensorFlow Liteモデルを使用するのに簡単なtflite_runtimeライブラリをインストールします。
準備作業
Coral USB Acceleratorの入っている箱を開封します。
Raspberry Pi4にCoral USB Acceleratorを接続します。
USB3.0は**青色**のインターフェースになります。
Edge TPU runtimeのインストール
-
リポジトリの追加
$ 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
TensorFlow Liteライブラリのインストール
-
ライブラリのダウンロード
$ wget https://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
TensorFlow Lite APIの実行
Get started with the USB Acceleratorを参考に、画像分類機を実行してみましょう。
$ 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.
18.6ms
4.6ms
4.6ms
4.6ms
4.6ms
-------RESULTS--------
Ara macao (Scarlet Macaw): 0.76562
TensorFlow Liteを使用して、Edge TPUで推論を実行しました。
ちなみにUSB2.0で実行した場合の出力結果は以下になります。USB3.0に比べて遅いのが分かります。
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.
120.5ms
11.5ms
11.5ms
11.7ms
11.6ms
-------RESULTS--------
Ara macao (Scarlet Macaw): 0.76562
おわりに
これでエッジデバイスで機械学習ができます。
次はTensorFlowでモデルを作成し、モデルをTensorFlow Liteに変換します。
参考
- raspi-config
- Frequently asked questions
- Edge TPU Devices
- Get started with the USB Accelerator
- USB Accelerator datasheet
- Python quickstart
- Get started with TensorFlow Lite
- Quantization-aware training
- Post-training quantization
- TensorFlow Lite converter
- Edge TPU Compiler
- TensorFlow models on the Edge TPU
- Models