見出し画像

Raspberry Pi4でCoral USB Accelerator(EdgeTPU)を使ってみる!

こんにちは、けん@すいラボです。

G検定も無事合格したので、今後はディープラーニングに関するツールやフレームワークを実際に触ってみて、そちらの方面でのスキルアップをしたいと考えているため、Coral USB Acceleratorを買ってみました。

Coral USB AcceleratorはGoogleのEdge TPU(Tensor Processing Unit)を搭載したデバイスで、Raspberry Pi/Windows/Macなどと組み合わせて使えるAIアクセラレーターです。
今回はRaspberry Pi + Coral USB Acceleratorの組み合わせで動かしていきます。

Coral USB Acceleratorを使うならRaspberry Pi4を選ぼう!

Coral USB AcceleratorのインターフェースはUSB3.0です。
Raspberry Pi3まではUSB2.0のポートしかありませんので、ラズパイで使う場合はUSB3.0のポートを持つRaspberry Pi4を選択した方がCoral USB Acceleratorの性能を最大限に発揮することができます。
(USB2.0のポートでもCoral USB Acceleratorは使用できますが、推論にかかる時間が長くなります)

Raspberry Pi4では電源がUSB Type-C(5V/3A推奨)に、映像出力がmicro HDMIに変わったので、Raspberry Pi3を持ってた方でも諸々買い替えが必要です。
さらにRaspberry Piで機械学習をいろいろ試していくのであれば、micro SDカードの容量も最初から64GBにしておいた方が良いです。
いろいろなフレームワークやらライブラリやらデータセットやら入れていくと、32GBでは足りなくなってしまうことがあります。

なので、最初から64GBのmicro SDカードが付属したセットで揃えてしまうのがおすすめです。

Raspberry Pi4でCoral USB Acceleratorを使えるようにセットアップ!

Coralの公式サイトにRaspberry Piでのセットアップ方法の記載があるので、こちらに沿って進めていけば大丈夫です。(Raspberry Pi OSのインストール方法は割愛します)

1: Install the Edge TPU runtimeでは1a: On Linuxに書かれているコマンドを実行しましょう。
Install with maximum operating frequency (optional)はCoral USB Acceleratorの性能を100%引き出すためには実行しましょう。
動作周波数が高くなる分、Coral USB Acceleratorの発熱は増えます。

2: Install the TensorFlow Lite libraryではTensorFlow Lite Python quickstartのリンクに飛び、Platoformに応じてライブラリのインストールを行います。
Raspberry Pi OSの場合はLinux (ARM 32)になるので、あとはインストールされているPythonのバージョンに合わせて以下のようにコマンドを実行します。

$ pip3 install "whlファイルのURL"

# たとえばRaspberry Pi OS & Python3.7の場合は以下を実行
$ pip3 install https://dl.google.com/coral/python/tflite_runtime-2.1.0.post1-cp37-cp37m-linux_armv7l.whl

3: Run a model using the TensorFlow Lite APIで実際にCoral 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

Traceback (most recent call last):
  File "/home/pi/.local/lib/python3.7/site-packages/tflite_runtime/interpreter.py", line 161, in load_delegate
    delegate = Delegate(library, options)
  File "/home/pi/.local/lib/python3.7/site-packages/tflite_runtime/interpreter.py", line 120, in __init__
    raise ValueError(capture.message)
ValueError
		
During handling of the above exception, another exception occurred:
		
Traceback (most recent call last):
  File "classify_image.py", line 122, in <module>
    main()
  File "classify_image.py", line 99, in main
    interpreter = make_interpreter(args.model)
  File "classify_image.py", line 73, in make_interpreter
    {'device': device[0]} if device else {})
  File "/home/pi/.local/lib/python3.7/site-packages/tflite_runtime/interpreter.py", line 164, in load_delegate
    library, str(e)))
ValueError: Failed to load delegate from libedgetpu.so.1

んー、何だか分からん・・・という感じでしたが、公式サイトに書かれている通りにセットアップ進めていれば、このエラーは出ません。
と言うことは、書いてある通りに実施していない箇所が怪しい・・・

実は私の場合は1: Install the Edge TPU runtimeの実行前からCoral USB AcceleratorをRaspberry Pi4に接続していたのです。
公式サイトではEdge TPU runtimeをインストールしてから、Coral USB Acceleratorを接続しろと書かれていますね。

と言うことで、単純にCoral 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
  
----INFERENCE TIME----
	Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
	15.6ms
	2.7ms
	2.7ms
	2.7ms
	2.7ms
	-------RESULTS--------
	Ara macao (Scarlet Macaw): 0.77734

と言うことで、入力した画像(parrot.jpg)は77.734%の確率でAra macao(コンゴウインコ)であると推論できました!
classify_image.pyでは同じ推論を5回行っていますが、初回のみモデルの読み込みが発生するため、他の4回より推論に時間が掛かっていることが分かります。

まとめ

と言うことで、Raspberry Pi4 + Coral USB Accelerator環境のセットアップから推論まで実行してみました。
ラズパイ環境に公式で対応しているため、手軽に試すことが出来るのはありがたいですね。

今回はサンプルの分類(classification)を行いましたが、物体検知(detection)のサンプルも入っているので、次回はこちらを動かしてみようと思います。
みなさんは公式のドキュメントはちゃんと読みましょうね!

この記事が気に入ったらサポートをしてみませんか?