ラズパイとCoral USB Acceleratorで機械学習による画像の分類
Contents
Coral USB Accelerator
ラズパイ(RaspberryPi 3 B+)にGoogleのCoral USB AcceleratorをUSB接続してサンプルページのImage classification(画像分類)を試してみた時の備忘録。
Image classification(画像分類)は読み込んだ画像に何が写っているのかを推測して確率(%)で表してくれる。
上記の画像分類はiNaturalistの鳥のデータセットで学習されたモデルを使用しているので基本的には鳥の識別を行うサンプルとなっている。
尚、上記のサンプルコードのページは頻繁に更新がされており以前の記事とインストール方法が異なっている事が多いのでこれから試す方は最新のページを確認してみたほうが良いと思う。
尚、記事の最後に今回の記事の内容を動画で解説している。
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%は発揮できていないと思われる。
作業手順
おおまかな作業手順は以下の通り
- Edge TPUランタイムのインストール
- 最大クロック周波数で動作させる為のランタイムをインストール(オプション)
- TensorFlow Liteインタープリターのインストール
- サンプルコードのダウンロード
- ラベルファイルや予測する鳥の写真のダウンロード
- 画像分類の予測
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
ラズパイとCoral USB Acceleratorを接続
まずはRaspberryPiとCoral USB AcceleratorをUSBで接続する。
最大クロック周波数で動作させる
オプションでデフォルトの2倍の周波数(500MHz)で動作させるランタイムバージョンをインストールすることができる。
ヘルプによると消費電力が増加してUSBアクセラレータが非常に熱くなる( very hot)との事だがインストールしてみた。
ちなみに鳥の画像の分類を30分実行した程度ではほんのり温かくなる程度で” very hot”という事は無かった。
sudo apt-get install libedgetpu1-max
設定画面が表示されるので「了解」を選択する。
「はい」を選択する。
インストールされた。
TensorFlow Liteインタープリターのインストール
以前は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に写っている鳥の種類を予測する。
以下のコマンドで予測を実行する。
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
76.562%の確率で”Ara macao”という鳥だと予測。
鳥の種類には詳しくないのでGoogleで”Ara macao”を検索してみた所、parrot.jpgと同種類の鳥が検索されたので予測が合っていた事が分かる。
引数の説明
実行時の引数について簡単な説明
–model | 使用するモデルを指定する |
–labels | モデルのラベルを指定する |
–image | 推測させたい鳥の画像を指定する |
他の種類の鳥を予測してみる
–image images/parrot.jpgのparrot.jpgの部分を変えて他の鳥を予測させてみる。
著作権フリーの画像を探して読み込ませてみた。
カラス
まずは下記の画像のカラスを読み込ませてみた。
結果は17.578%とちょっと確率は低かったがAmerican Crow(アメリカガラス)と予測された。
カモメ
続いてカモメの画像を読み込ませてみた。
結果は30.469%の確率でYellow-legged Gull(キアシセグロカモメ)と予測された。
すごい。
カモメのイラスト
続いてちょっと意地悪をしてカモメのイラストを読み込ませてみた。
人間であればカモメと直ぐに分かるとは思うが。。。
結果は問題なくカモメと認識された。
69.9922%の確率でWestern Gull(アメリカオオセグロカモメ)と認識された。
むしろ写真より精度が高い様に思える。
ちなみにラベルに載っていない鳥や鳥以外を読み込ませてみたが当然だが予想は外れた。
学習をしていない画像は予測ができないという、ある意味当然の結果がでた。
動画
記事の内容を動画で解説しているので実際の動きはこちらで確認してみて欲しい。
最近のコメント