ラズパイとCoral USB Acceleratorで機械学習による画像の分類 | そう備忘録

ラズパイとCoral USB Acceleratorで機械学習による画像の分類

Coral USB Accelerator

ラズパイ(RaspberryPi 3 B+)にGoogleのCoral USB AcceleratorをUSB接続してサンプルページのImage classification(画像分類)を試してみた時の備忘録。

Image classification(画像分類)は読み込んだ画像に何が写っているのかを推測して確率(%)で表してくれる。

上記の画像分類はiNaturalistの鳥のデータセットで学習されたモデルを使用しているので基本的には鳥の識別を行うサンプルとなっている。

尚、上記のサンプルコードのページは頻繁に更新がされており以前の記事とインストール方法が異なっている事が多いのでこれから試す方は最新のページを確認してみたほうが良いと思う。

尚、記事の最後に今回の記事の内容を動画で解説している。

Coral Accelerator

Google Coral Accelerator

Coral USB Acceleratorとは

Coral USB AcceleratorはGoogleがCoralというブランドで発売しているエッジデバイス向けのTPU(Tensor Processing Unit)。

ラズパイなどのLinuxコンピューターに接続すると機械学習モデルの推論が高速化される。

Googleの機械学習のフレームワークであるTensorFlowをそれほど高性能でないマシンでもUSB接続するだけで高速動作させる事ができるのでラズパイなどにはうってつけだと思う。

ただ今回試したラズパイはRaspberryPi 3 B+なのでUSB2.0までしか対応していない。

一方Coral USB AcceleratorはUSB3.0なので恐らく性能の100%は発揮できていないと思われる。

作業手順

おおまかな作業手順は以下の通り

  1. Edge TPUランタイムのインストール
  2. 最大クロック周波数で動作させる為のランタイムをインストール(オプション)
  3. TensorFlow Liteインタープリターのインストール
  4. サンプルコードのダウンロード
  5. ラベルファイルや予測する鳥の写真のダウンロード
  6. 画像分類の予測

Coral USB Accelerator

まずはラズパイのLXTerminalからCoral USB Acceleratorを使用する為のセットアップを行う。

セットアップはこちらのページを参考にした。

Edge TPUランタイムのインストール

まずは以下のコマンドでパッケージリポジトリを取得する為の情報をsources.listに記入した後、パッケージキーを取得する。

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 -
実行結果

リポジトリの作成

続いてupdateする。

sudo apt-get update

Coral USB Acceleratorを使用する為にEdge TPUランタイムをインストールする。

以下のコマンドでEdge TPUランタイム(標準周波数バージョン 250 MHz)のインストールを行う。

sudo apt-get install libedgetpu1-std
実行結果

Edge TPUランタイムのインストール結果

ラズパイとCoral USB Acceleratorを接続

まずはRaspberryPiとCoral USB AcceleratorをUSBで接続する。

ラズパイとCoral Acceleratorを接続

最大クロック周波数で動作させる

オプションでデフォルトの2倍の周波数(500MHz)で動作させるランタイムバージョンをインストールすることができる。

ヘルプによると消費電力が増加してUSBアクセラレータが非常に熱くなる( very hot)との事だがインストールしてみた。

ちなみに鳥の画像の分類を30分実行した程度ではほんのり温かくなる程度で” very hot”という事は無かった。

sudo apt-get install libedgetpu1-max

設定画面が表示されるので「了解」を選択する。

了解を選択する

「はい」を選択する。

はいを選択する

インストールされた。

インストール結果

TensorFlow Liteインタープリターのインストール

2021年2月12日 追記

以前はwhlファイルよりTensorFlow Liteのインタープリターをインストールしていたが、現在の手順は以下のコマンドでpycoralライブラリ(TensorFlow Liteを含む)をインストールする様に変更されていた。

sudo apt-get install python3-pycoral

※上記のコマンドでpycoraをインストールすれば以下のTensorFlow Liteインタープリターのインストールは不要

TensorFlow Liteはモバイルやラズパイの様なIoTデバイス上でTensorFlowモデルを実行できるようにするツールのセット。

TensorFlow LiteのインタプリターとTensorFlowライトコンバーターから構成されている。

TensorFlow LiteインタープリターのみをインストールすればOK。

こちらのページから該当のインタープリターを選択してダウンロードする。

今回、当方の環境ではPython3.7だったので” tflite_runtime-1.14.0-cp37-cp37m-linux_armv7l.whl”をダウンロードした。

インタープリターの選択

ラズパイにダウンロードしたファイルをコピーした後に以下のコマンドでインストールする。

pip3 install tflite_runtime-1.14.0-cp37-cp37m-linux_armv7l.whl

サンプルコード等のダウンロード

サンプルコードのダウンロード

サンプルコード取得の為の作業用のディレクトリを作成した。

mkdir coral
cd coral

git cloneでサンプルコードを取得する。

git clone https://github.com/google-coral/tflite.git
取得結果

サンプル取得結果

ラベルファイル、および鳥の写真をダウンロード

ディレクトリを移動してラベルファイル及び推測したい鳥の写真(オウム)をダウンロードする。

cd tflite/python/examples
bash download.sh
ダウンロード結果

ダウンロード結果

この時点でのディレクトリ構造

この時点でのディレクトリ構造は以下の通り

├─coral
│  │      
│  ├─tflite
│  │  │      
│  │  ├──python
│  │  │  │
│  │  │  ├──examples
│  │  │  │  │  README.md
│  │  │  │  │  classify_image.py
│  │  │  │  │  download.sh
│  │  │  │  │  requirements.txt
│  │  │  │  │
│  │  │  │  ├──images
│  │  │  │  │  parrot.jpg
│  │  │  │  │
│  │  │  │  └──models
│  │  │  │     inat_bird_labels.txt
│  │  │  │     mobilenet_v2_1.0_224_inat_bird_quant.tflite
│  │  │  │     mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite
│  │  │  │

README.md

readme(説明書)

classify_image.py

画像分類のpythonのプログラム

download.sh

ラベルファイル及び推測したい鳥の写真(オウム)をダウンロードする為のシェルスクリプト

requirements.txt

Pythonのパッケージの設定ファイル

parrot.jpg

予測したい鳥の画像

inat_bird_labels.txt

モデルのラベル名が書かれたファイル

964種類の鳥の種類が羅列されていた

mobilenet_v2_1.0_224_inat_bird_quant.tflite

鳥を学習したモデル

mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite

Edgeデバイス向けの鳥を学習したモデル

今回ラズパイで使用するのはこちら

予測

サンプルの鳥の種類を予測する

parrot.jpgに写っている鳥の種類を予測する。

parrot.jpg

parrot.jpg

以下のコマンドで予測を実行する。

python3 classify_image.py \
--model models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \
--labels models/inat_bird_labels.txt \
--image images/parrot.jpg
実行結果

parrot.jpgの予測

76.562%の確率で”Ara macao”という鳥だと予測。

鳥の種類には詳しくないのでGoogleで”Ara macao”を検索してみた所、parrot.jpgと同種類の鳥が検索されたので予測が合っていた事が分かる。

GoogleでのAra macaoの検索結果

引数の説明

実行時の引数について簡単な説明

–model

使用するモデルを指定する

–labels

モデルのラベルを指定する

–image

推測させたい鳥の画像を指定する

他の種類の鳥を予測してみる

–image images/parrot.jpgのparrot.jpgの部分を変えて他の鳥を予測させてみる。

著作権フリーの画像を探して読み込ませてみた。

カラス

まずは下記の画像のカラスを読み込ませてみた。

crow.jpg

crow.jpg

結果は17.578%とちょっと確率は低かったがAmerican Crow(アメリカガラス)と予測された。

カラスの結果

カモメ

続いてカモメの画像を読み込ませてみた。

kamome.jpg

kamome.jpg

結果は30.469%の確率でYellow-legged Gull(キアシセグロカモメ)と予測された。

すごい。

カモメの予測結果

カモメのイラスト

続いてちょっと意地悪をしてカモメのイラストを読み込ませてみた。

人間であればカモメと直ぐに分かるとは思うが。。。

kamomeillustration.jpg

kamomeillustration.jpg

結果は問題なくカモメと認識された。

69.9922%の確率でWestern Gull(アメリカオオセグロカモメ)と認識された。

むしろ写真より精度が高い様に思える。

カモメのイラストの予測結果

ちなみにラベルに載っていない鳥や鳥以外を読み込ませてみたが当然だが予想は外れた。

学習をしていない画像は予測ができないという、ある意味当然の結果がでた。

動画

記事の内容を動画で解説しているので実際の動きはこちらで確認してみて欲しい。

souichirou

やった事を忘れない為の備忘録 同じような事をやりたい人の参考になればと思ってブログにしてます。 主にレゴ、AWS(Amazon Web Services)、WordPress、Deep Learning、RaspberryPiに関するブログを書いています。 仕事では工場に協働ロボットの導入や中小企業へのAI/IoT導入のアドバイザーをやっています。 2019年7月にJDLA(一般社団法人 日本デイープラーニング協会)Deep Learning for GENERALに合格しました。 質問は記事一番下にあるコメントかメニュー上部の問い合わせからお願いします。

おすすめ

質問やコメントや励ましの言葉などを残す

名前、メール、サイト欄は任意です。
またメールアドレスは公開されません。