ラズパイ4でCoral USB Acceleratorを使ってみる。
以下の記事では、秋月とマルツで販売中と書かれていましたが、僕は千石電子で購入してきました。
どんなものかは、この記事を読んでください。
Raspberry Piで使える「Google Coral Edge TPU USB Accelerator」が店頭販売中
構成
ハードウェア
OS
TESTバージョンなので、もちろんまだ安定していません。
2020/07/11で30ほどオープンのステータスになっています。
issues
Coral USB Acceleratorのセットアップ
Debian用パッケージリポジトリをシステムに追加
$ echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
deb https://packages.cloud.google.com/apt coral-edgetpu-stable main
$ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 653 100 653 0 0 4296 0 --:--:-- --:--:-- --:--:-- 4296
OK
$ sudo apt-get update
ヒット:1 http://archive.raspberrypi.org/debian buster InRelease
ヒット:2 http://deb.debian.org/debian buster InRelease
取得:3 http://deb.debian.org/debian-security buster/updates InRelease [65.4 kB]
ヒット:4 http://deb.debian.org/debian buster-updates InRelease
取得:5 https://packages.cloud.google.com/apt coral-edgetpu-stable InRelease [6,332 B]
取得:6 https://packages.cloud.google.com/apt coral-edgetpu-stable/main armhf Packages [1,170 B]
取得:7 https://packages.cloud.google.com/apt coral-edgetpu-stable/main arm64 Packages [1,170 B]
74.0 kB を 2秒 で取得しました (35.4 kB/s)
パッケージリストを読み込んでいます... 完了
Edge TPU Runtimeをインストール
$ sudo apt-get install libedgetpu1-std
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
libedgetpu1-std
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
252 kB のアーカイブを取得する必要があります。
この操作後に追加で 880 kB のディスク容量が消費されます。
取得:1 https://packages.cloud.google.com/apt coral-edgetpu-stable/main arm64 libedgetpu1-std arm64 14.1 [252 kB]
252 kB を 0秒 で取得しました (680 kB/s)
以前に未選択のパッケージ libedgetpu1-std:arm64 を選択しています。
(データベースを読み込んでいます ... 現在 93370 個のファイルとディレクトリがインストールされています。)
.../libedgetpu1-std_14.1_arm64.deb を展開する準備をしています ...
libedgetpu1-std:arm64 (14.1) を展開しています...
libedgetpu1-std:arm64 (14.1) を設定しています ...
libc-bin (2.28-10) のトリガを処理しています ...
ラズパイとCoreal USB Acceleratorを接続
すでに接続指定場合は、抜いて、再度接続する。
このあとオプションで最大クロック周波数で動作させるためのパッケージのインストールの記述があったが今回はインストールせずに次へ。
TensorFlow Liteライブラリのインストール
TensorFlow Lite Python quickstartから自分のマシンにインストールされているPythonのバージョンに合わせたものをインストールする。
$ python3 -V
Python 3.7.3
で、64bit OSなので、
$ pip3 install https://dl.google.com/coral/python/tflite_runtime-2.1.0.post1-cp37-cp37m-linux_aarch64.whl
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting tflite-runtime==2.1.0.post1 from https://dl.google.com/coral/python/tflite_runtime-2.1.0.post1-cp37-cp37m-linux_aarch64.whl
Downloading https://dl.google.com/coral/python/tflite_runtime-2.1.0.post1-cp37-cp37m-linux_aarch64.whl (1.9MB)
100% |????????????????????????????????| 1.9MB 276kB/s
Requirement already satisfied: numpy>=1.12.1 in /usr/lib/python3/dist-packages (from tflite-runtime==2.1.0.post1) (1.16.2)
Installing collected packages: tflite-runtime
Successfully installed tflite-runtime-2.1.0.post1
TensorFlow Lite APIのサンプルを実行してみる。
サンプルをGitHubからダウンロード
$ mkdir coral && cd coral
$ git clone https://github.com/google-coral/tflite.git
Cloning into 'tflite'...
remote: Enumerating objects: 65, done.
remote: Counting objects: 100% (65/65), done.
remote: Compressing objects: 100% (34/34), done.
remote: Total 193 (delta 23), reused 59 (delta 19), pack-reused 128
Receiving objects: 100% (193/193), 675.91 KiB | 757.00 KiB/s, done.
Resolving deltas: 100% (69/69), done.```
bird classifier model、labels file、および鳥の写真をダウンロード
$ cd tflite/python/examples/classification
$ bash install_requirements.sh
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: numpy in /usr/lib/python3/dist-packages (1.16.2)
Requirement already satisfied: Pillow in /usr/lib/python3/dist-packages (5.4.1)
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 189 100 189 0 0 334 0 --:--:-- --:--:-- --:--:-- 334
100 3972k 100 3972k 0 0 1938k 0 0:00:02 0:00:02 --:--:-- 5765k
100 181 100 181 0 0 354 0 --:--:-- --:--:-- --:--:-- 354
100 3448k 100 3448k 0 0 2577k 0 0:00:01 0:00:01 --:--:-- 9686k
100 158 100 158 0 0 558 0 --:--:-- --:--:-- --:--:-- 558
100 40895 100 40895 0 0 44596 0 --:--:-- --:--:-- --:--:-- 7987k
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 148 100 148 0 0 425 0 --:--:-- --:--:-- --:--:-- 425
100 582k 100 582k 0 0 434k 0 0:00:01 0:00:01 --:--:-- 753k
鳥の写真を使用してイメージ分類を実行
$ 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.
17.6ms
4.5ms
4.4ms
4.4ms
4.4ms
-------RESULTS--------
Ara macao (Scarlet Macaw): 0.77734
この写真の鳥が、0.77734%の確率でコンゴウインコと推測されました。
サンプルのページより確率が少し上がっているのはどうしてなんだろう。(^^;;
少し鳥の画像をもってきて読み込ませてみようっと。
PAKUTASOから鳥のフリー画像をダウンロードして試してみた。
ここにアップしている画像はリサイズして小さくしています。
あひる
$ python3 classify_image.py --model models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --labels models/inat_bird_labels.txt --input images/0001.jpg
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
19.5ms
4.5ms
4.4ms
4.4ms
4.4ms
-------RESULTS--------
Anas platyrhynchos domesticus (Domestic Duck): 0.95703
アヒル
だちょう
$ python3 classify_image.py --model models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --labels models/inat_bird_labels.txt --input images/0002.jpg
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
17.6ms
4.4ms
4.4ms
4.4ms
4.4ms
-------RESULTS--------
Struthio camelus (Common Ostrich): 0.87500
ダチョウ
ふくろう
$ python3 classify_image.py --model models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --labels models/inat_bird_labels.txt --input images/0003.jpg
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
17.6ms
4.4ms
4.4ms
4.4ms
4.4ms
-------RESULTS--------
Strix nebulosa (Great Gray Owl): 0.74609
カラフトフクロウ
ふらみんご
$ python3 classify_image.py --model models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --labels models/inat_bird_labels.txt --input images/0004.jpg
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
17.6ms
4.4ms
4.4ms
4.4ms
4.4ms
-------RESULTS--------
Phoenicopterus roseus (Greater Flamingo): 0.72656
オオフラミンゴ
はしびろこう
$ python3 classify_image.py --model models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --labels models/inat_bird_labels.txt --input images/0005.jpg
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
17.6ms
4.5ms
4.4ms
4.4ms
4.4ms
-------RESULTS--------
Ardea herodias (Great Blue Heron): 0.28906
オオアオサギ
はと
$ python3 classify_image.py --model models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --labels models/inat_bird_labels.txt --input images/0006.jpg
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
17.7ms
4.4ms
4.4ms
4.4ms
4.3ms
-------RESULTS--------
Columba livia (Rock Pigeon): 0.66797
イワバト
かも
$ python3 classify_image.py --model models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --labels models/inat_bird_labels.txt --input images/0007.jpg
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
18.3ms
4.5ms
4.5ms
4.5ms
4.5ms
-------RESULTS--------
Tadorna tadorna (Common Shelduck): 0.21094
ツクシガモ
かもめ
$ python3 classify_image.py --model models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --labels models/inat_bird_labels.txt --input images/0008.jpg
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
17.8ms
4.4ms
4.3ms
4.4ms
4.4ms
-------RESULTS--------
Larus fuscus (Lesser Black-backed Gull): 0.39062
ニシセグロカモメ
からす
$ python3 classify_image.py --model models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --labels models/inat_bird_labels.txt --input images/0009.jpg
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
17.7ms
4.4ms
4.4ms
4.5ms
4.4ms
-------RESULTS--------
Corvus brachyrhynchos (American Crow): 0.17578
アメリカガラス
めじろ
$ python3 classify_image.py --model models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --labels models/inat_bird_labels.txt --input images/0010.jpg
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
17.9ms
4.5ms
4.4ms
4.4ms
4.4ms
-------RESULTS--------
Zosterops japonicus (Japanese White-eye): 0.96094
メジロ
にわとり
$ python3 classify_image.py --model models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --labels models/inat_bird_labels.txt --input images/0011.jpg
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
17.5ms
4.4ms
4.3ms
4.4ms
4.3ms
-------RESULTS--------
Circus cyaneus (Northern Harrier): 0.45312
ハイイロチュウヒ
ぺんぎん
$ python3 classify_image.py --model models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite --labels models/inat_bird_labels.txt --input images/0012.jpg
----INFERENCE TIME----
Note: The first inference on Edge TPU is slow because it includes loading the model into Edge TPU memory.
20.4ms
4.5ms
4.4ms
4.4ms
4.4ms
-------RESULTS--------
Megadyptes antipodes (Yellow-eyed Penguin): 0.29297
キンメペンギン
12種類の画像をテストして大きく外れたのはハシビロコウとニワトリですかね。