【Coral USB】Google Coral Edge TPU USB アクセラレータのデモを試してみた

はじめに

こんにちは、がんがんです。7月はもう半ばに入ったというのに雨はやまず、梅雨はいつになったら抜けるのやら…
九州では台風がよく来るシーズンに差し掛かっていることもあり、早く明けないかなと思ってるところです(暑いのも嫌ですけども)

今回はエッジデバイス×深層学習でよく名前を聞くGoogle Coral Edge TPU USB アクセラレータの実験を行ったのでそちらについて備忘録をまとめておきます。 基本的にはいろんなデモを試してみた話です。

目的

環境

購入はKSYがおすすめです
Google Coral TPU USB Accelerator販売のお知らせ - Raspberry Pi Shop by KSY

参考

今月号のラズパイマガジンにも掲載されているので詳細はそちらを見たほうが良いと思います。

参考記事
qiita.com

misoji-engineer.com

実験準備

今回は手元にあったRaspberry Pi 3 Model B+を用いて実験します。ラズパイ4が手元にあればそちらで実験したかったですが、そこは仕方ないです。(USBアクセラレータはUSB3.0であるが、ラズパイ3にはUSB2.0しか搭載していないため)

まずはgoogleさんの方からgzファイルを取得し、インストールを行います。

$ cd ~/
$ wget https://dl.google.com/coral/edgetpu_api_latest.tar.gz -O edgetpu_api.tar.gz --trust-server-names  #  gzファイルを取得
$ tar xzf edgetpu_api.tar.gz  #  解凍
$ cd edgetpu_api
$ sudo bash ./install.sh  #  インストール実行

途中でY / Nが出ますのでインストール中も現場待機必須です。これはTPUを最大周波数で使用するかの問いなのでとりあえずYで良いと思います。TPUがやけどするくらい熱くなるかもだけどいい?的なニュアンスみたいですが、デモを使った限りは余裕で握れました。

実験1 mobileNet v2のデモを試す

次に学習済みモデル・ラベル・サンプル画像をダウンロードします。

#  モデルのダウンロード
$ wget https://dl.google.com/coral/canned_models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite
#  ラベルテキストのダウンロード
$ wget https://dl.google.com/coral/canned_models/inat_bird_labels.txt
#  サンプル画像(インコ)のダウンロード
$ wget https://coral.withgoogle.com/static/docs/images/parrot.jpg

インストール後、以下のコマンドで実行します(Ubuntu時はPython3.6)。

$ cd /usr/local/lib/python3.5/dist-packages/edgetpu/demo
$ python3 classify_image.py \
   --model ~/tpu_sample/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \ 
   --label ~/tpu_sample/inat_bird_labels.txt \
   --image ~/tpu_sample/parrot.jpg

実行結果は以下の通りです。

Ara macao (Scarlet Macaw)
Score :  0.761719

f:id:gangannikki:20190720224102j:plain:w200

実験2 別のモデル(Inceptionv4)を試してみる

次にインコ以外の認識を行うために別の学習済みモデルを入手します。

$ git clone https://coral.googlesource.com/edgetpu edgetpu_demo
$ cd edgetpu_demo
$ git checkout release-chef

画像分類としてはテスト画像として用意されているホットドッグを用います。

$ cd test_data
$ python3 ../edgetpu/demo/clasify_image.py \
   --model inception_v4_299_quant_edgetpu.tflite \
   --label imagenet_labels.txt \
   --image hot_dog.jpg

きちんと認識していることが分かります。

---------------------------
hotdog, hot dog, red hot
Score :  0.996094

実験3 mobileNet SSDで顔認識

次はMobileNetのSSDを試してみます。まずはfehをインストールしておきます。
ソースコードの方にもラズパイでの使用時にはインストールするようにと記載されていました。

$ sudo apt-get install feh

実験2のときにダウンロードしたDemoの中にモデルが入っているので実行してみます。

$ python3 ../edgetpu/demo/object_detection.py \
   --model mobilenet_ssd_v2_face_quant_postprocess_edgetpu.tflite \
   --input face.jpg \
   --output ~/tpu_sample/test.jpg

きちんとデモの画像から顔認識を行えています。

f:id:gangannikki:20190720224104j:plain:h200
デモによる顔認識


では、試しに違う画像でも試してみました。乃木坂(みさ先輩と聖母)と五等分の花嫁(5人全員)の画像をそれぞれ用意しました。

f:id:gangannikki:20190720224134j:plainf:id:gangannikki:20190720224148j:plain
実験用に用意した画像

実行してみると乃木坂メンバーは認識しましたが、花嫁はほとんど認識してくれませんでした。

f:id:gangannikki:20190720224058j:plainf:id:gangannikki:20190720224047j:plain
実験結果
別の花嫁の画像でもトライしましたが認識してくれませんでした。予想通りの結果でしたが、やはり学習データの問題でしょう。

実験4 リアルタイムで画像認識を試してみる

最後にラズパイカメラを用いてリアルタイム認識を行ってみます。
今回はMobileNetを使います。

$ python3 ../edgetpu/demo/classify_capture.py \
   --model mobilenet_v2_1.0_224_quant_edgetpu.tflite \
   --label imagenet_labels.txt

実行するとディスプレイ上にカメラ映像が映しだされ、映像の上部分に分類名と処理時間(10ms前後)が表示されています。
結構なめらかに動作している印象でした。

まとめ

今回はGoogle Coral Edge TPU USB アクセラレータの実験を行いました。
デモを中心に実験しましたが、結構快適に動いてる印象でした。

次は、自前のモデル等を用意してデモ以外の動作をやらせていきます。

続編記事

続きの記事はこちらです。
gangannikki.hatenadiary.jp