Google Edge TPUができること・使い方を確認してみた

機械学習

Google Edge TPUの初心者である筆者が「ラズベリーパイ(raspberry pi)」+「USB Accelerator」の組み合わせで「できること」・「使い方」を確認・実践してみました。

 

Google Edge TPUは機械学習・ディープラーニングが得意

Google Edge TPUは機械学習・ディープラーニングの処理を効率化・高速化する目的で作られたICです。

 

機械学習の細かい定義・仕組みは既に多くの記事がありますので省略しますが、Google Edge TPUは「物を分類する」「値を予測する」といったことが得意となります。

 

今回はGoogle Edge TPUで実際に身近にある物を「検出(detection)」や「分類(classify)」をさせていきます。

 

Google Edge TPUとTensorFlow Lite

Google Edge TPUが対応しているフレームワークは「TensorFlow Lite」となります。

 

Google Edge TPUで実際に機械学習のモデルを構築したり、深層学習(ディープラーニング)の演算を行うには「TensorFlow Lite」というソフト(ライブラリ)を使う意味で大体合っているかと

 

本来は「TensorFlow Lite」にあった形でモデル等を用意する必要があるのですが、今回は特に難しく考える必要はありません。

 

既に公開されているGoogle(正式にはCoralというブランド)が公開しているデモ用のモデル・プログラムで使い方・できることを確認していきます。

 

Google Edge TPUの購入方法

Google Edge TPUの購入から簡単な画像認識(鳥の判別)までまとめた記事が下記となります。実際に初めてみたい方はこちらから参照ください

Google Edge TPUを購入してラズベリーパイと機械学習してみた
ついにGoogleからエッジ向けのプロセッサ「Google Edge TPU」が発売されました。今回はUSB Acceleratorとラズベリーパイを使って機械学習のデモを試してみます。 Google Edge TPUとは 20...

 

今回は前回と同様にラズベリーパイ(raspberry pi)Coral USB Acceleratorを使っていきます。

ラズベリーパイ(raspberry pi)にカメラを付ける

今回はカメラを使ってデモプログラムを動かします。「写真を撮って物を検出する」「動画を撮ってリアルタイムで分類する」の2パターンを実行します。

 

ラズベリーパイのカメラを取り付けるのは簡単です。あと最近は1000円足らずで売られているので非常におすすめです。

 

実際に購入しますとカメラとケーブルが入っていますので接続するだけです。難しいことは必要ありません。

 

カメラ側にケーブルを挿してコネクタをはめて…

 

ラズベリーパイ側もケーブルを挿しこめば完成です

 

Google Edge TPUを使う前の準備

ラズベリーパイのカメラを使って写真・動画を撮り、その写真の物体検出・分類をしてみます。

今回説明する一連の流れはCoralの公式HPに記載されているものを応用したものです。(英語ですがリンク先はこちらです)

 

ラズパイのカメラが正常動作するか確認する

まずは先ほどラズベリーパイ(raspberry pi)に付けたカメラの動作確認も含めて写真を撮ってみます。

 

ラズベリーパイを起動してコンソール上で下記コマンドを実行します。

sudo raspistill -o test.jpg

 

無事写真が取れました。デフォルトで動かしたならば「pi」のフォルダ「test.jpg」の名前で保存されているはずです。筆者のはマウスを持った写真です

 

ラズパイにUSB Acceleratorを接続する

「ラズベリーパイ(raspberry pi)」+「USB Accelerator」を接続しておきます。

 

前回記事で対応しましたが、Edge TPUのライブラリのダウンロード・インストールをしていない場合は実行しときます。既に実施済の方は読み飛ばしてください

 

edgetpu_apiをダウンロードしてインストールする

Coralのスタートガイドに従ってラズベリーパイでデモ用のソフト・プログラムをダウンロードしていきます。

 

ラズベリーパイを起動してコンソールを開き、下記コマンドで「Edge TPUのruntime」と「Pythonのライブラリ」ダウンロードします。

wget http://storage.googleapis.com/cloud-iot-edge-pretrained-models/edgetpu_api.tar.gz

 

そしてダウンロードしたものを解凍してインストールしていきます。

tar xzf edgetpu_api.tar.gz
cd python-tflite-source
bash ./install.sh

 

最後のコマンドを押してすぐに「Google Edge TPUを最大周波数で使うか?Y/N」と聞かれますので、個人の好みで「Y」か「N」を入力してEnterして下さい

 

最大スペックで使いたい方は「Y」を選べばいいと思いますし、発熱するのを避けるならば「N」を選べばいいと思います(筆者は「Y」を選択しました)

 

暫く待つと無事インストールが完了します。

 

機械学習に必要なモデルとラベルをダウンロードしておく

今回の機械学習に使う必要なモデルとラベルはデフォルトのライブラリに入っていないので入手しておきます。(筆者は「~/python-tflite-source/edgetpu」の中に保存)

 

Coralの公式HP(リンク先はこちら)からブラウザ上でダウンロードして、直接のフォルダに入れてもらっても構いませんし、wgetのコマンドなどで入手してもOKです。

 

検出(Object detection)で使ったモデル

検出では「MobileNet SSD v2 (COCO)」のモデルを使いました。

 

wgetでモデルを入手するならば下記コマンドです

wget http://storage.googleapis.com/cloud-iot-edge-pretrained-models/canned_models/mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite

 

分類(Image classification)で使ったモデルとラベル

分類(Image classification)で使ったモデルとラベルは「MobileNet V2 (ImageNet) 」です。

 

wgetでモデルとラベルを入手するならば下記コマンドです

wget https://storage.googleapis.com/cloud-iot-edge-pretrained-models/canned_models/mobilenet_v2_1.0_224_quant_edgetpu.tflite
wget http://storage.googleapis.com/cloud-iot-edge-pretrained-models/canned_models/imagenet_labels.txt

 

検出(object_detection.py)を試してみる

ラズベリーパイで撮った写真の「検出(Object detection)」してみます。

 

物体検出のプログラムを動作させてみます。(筆者の場合は先ほど撮った写真(test.jpg)を「~/python-tflite-source/edgetpu/test_data」に入れています)

 

まずはディレクトリを移動して

cd python-tflite-source/
cd edgetpu

 

下記コマンドを実行して検出プログラムである「object_detection.py」を実行しました

python3 demo/object_detection.py --model test_data/mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite --input test_data/test.jpg --output detection_results.jpg

 

出力として写真でも返ってきました。手とマウス含めて10個ぐらい検出(object_detection)しているようです。

 

結果の一部を貼り付けておきます。

W0329 19:36:31.818717 3344 package_registry.cc:65] Minimum runtime version required by package (5) is lower than expected (10).
-----------------------------------------
score = 0.964844
box = [679.1473217010498, 0.0, 1990.8190097808838, 996.5801925659181]
-----------------------------------------
score = 0.121094
box = [33.535200119018555, 3.4182071685791016, 1106.4242992401123, 870.4930744171143]

 

分類(classify_capture.py)を試してみる

「Google Edge TPU」の力を存分に発揮できる使い方を試していきます

分類(classify_capture.py)に関してはカメラで動画を撮りながらリアルタイムで物を判別(分類)できました。

 

コマンドとしては下記です

python3 demo/classify_capture.py --model test_data/mobilenet_v2_1.0_224_quant_edgetpu.tflite --label test_data/imagenet_labels.txt

 

ドライバー以外にもマウス・キーボード・定規(スケール)を試してみましたが全て分類できました。

 

マウスは難しかったのか、若干スコアが低め(0.39)でした。

 

定規(スケール)は簡単らしくスコアも高かった(0.95)です。

 

まとめ・感想

如何でしたでしょうか、初心者の筆者でしたが簡単にGoogle Edge TPUが使うことができました。

 

デモプログラムでもリアルタイムで十分に分類することができ、色々なケースで応用が期待できるデバイスだと感じました。ぜひ皆様も試してみてください。

 

<<20190406追記>>

今回のリアルタイムの分類に加えてGPIO制御(LED点灯)も行ってみました。よろしければこちらの記事もご覧ください。

エッジコンピューティングで機械学習!画像認識・検出を実践してみた
エッジコンピューティングをGoogle edge TPUで実施してみました。機械学習で画像認識させて指定の物を検出した場合にはリアルタイムでGPIO制御(LED出力)させるようにプログラムしてみました。 エッジコンピューティングと...

 

一応AmazonなどでもCoral USB Acceleratorが仲介業者から売られているので貼っておきますが、2019/3末時点では数量が出回っていないのか高額になっています。

 

もし(2019/3末時点で)購入する場合は下記記事で紹介したMouserの方が安く済むと思います。ご連絡まで

Google Edge TPUを購入してラズベリーパイと機械学習してみた
ついにGoogleからエッジ向けのプロセッサ「Google Edge TPU」が発売されました。今回はUSB Acceleratorとラズベリーパイを使って機械学習のデモを試してみます。 Google Edge TPUとは 20...

 

コメント