Microsoft Lobeを使ってみる(2/2)- on ラズパイ


Microsoft Lobeを使ってみる(1/2)で作ったTensorFlow Liteモデルを使ってラズパイ上で推論実行してみます。

 

Raspberry Pi Zero W

Raspberry Pi 4 (4GB)

Appendix (実行速度を上げるもう一つの方法)

TensorFlow Lite ランタイムパッケージについて

 

 


Raspberry Pi Zero W

 

OSイメージは Raspberry Pi OS Lite (32-bit)

 

このOSはヘッドレスなのでSSHで接続後、アップデート&アップグレードしておきます。

 

いろいろデータを外部からコピーするのでSAMBAも入れておきます。

 

必要なパッケージなどを追加

PIL

numpy

 

TensorFlow Lite ランタイム

上記OSイメージのPythonバージョンは3.7.3なので以下をダウンロードしてインストールします。

tflite_runtime-2.3.1-cp37-cp37m-linux_armv6l

reference

インストール

 

Microsoft Lobe でexportしたモデルとexampleコードをSAMBA経由でコピーします。

サンプルとしてMicrosoft Lobeを使ってみる(1/2)で作ったものを使ってみます。ボールを分類・認識するTensorFlow Liteモデルです。

以下をダウンロードしてコピー

ball_TFLite

サンプル画像もダウンロードしてコピーしておきます。

exampleのPythonコードでsample-4の画像を推論してみます。パスはご自分の環境に合わせて変更してください。

こんな結果です。さすがにZeroなので実行に50秒ほどかかりましたが、99%以上の精度でbaseballと認識してくれました(50秒も待てん…という方は以下のAppendix参照)。

 


Raspberry Pi 4 (4GB)

 

OSイメージは Ubuntu Server 20.04 LTS (64-bit)

 

基本的なパッケージの追加はZeroと同じです。

 

TensorFlow Lite ランタイム

ZeroとはCPUのアーキテクチャが異なるのとUbuntuのPythonのバージョン(3.8.10)も違うので、以下を実行。

sudo pip3 install https://dl.google.com/coral/python/tflite_runtime-2.1.0.post1-cp38-cp38-linux_aarch64.whl

同じモデルとサンプル画像を使った推論では、実行時間は2秒ほどでした。

 

 

 


Appendix

実行速度を上げるもう一つの方法

モデル作成後、メニュから「Project Settings..」を選択

 

「Optimize For Speed」を選択

 

「Reset Training」を実行します

 

トレーニングが再実行されます。

 

終了後、このモデルをexportします

これを使って、再実行してみました。

こんな感じ。正確性は若干犠牲になってますが、Zeroの実行速度は8秒でした。

ラズパイ4の場合、結果が返るまで1秒くらいですが、これは多分画像の読み込み時間が含まれるので、ほぼほぼリアルタイムで実行されていると思われます。

 

ちなみに、accuracyベースのモデルサイズは102MBほどありますが、speedベースで最適化されたものは15MBほどでした。

 

Speedに最適化したモデルをAndroidで使ってみる

 


Appendix 2

 

Liteではなく、通常のTensorFlow モデルを使ってみます。

 

ラズパイ4ModelB

 

OSイメージはDebian/Buster (64-bit) 2021-05-07-raspios-buster-arm64.img

このサイトからダウンロードできます。

balenaEtcherRaspberry Pi ImagerでMicroSDカードに焼きます。

Python 3.7.3 の環境でTensorFlow をインストールします。

このサイトを参考にします。

PINTO0309/Tensorflow-bin

TensorFlow 1.x とTensorFlow 2.x の2タイプがありますが、上記のOSイメージは64-bit用なのでTensorFlow 2.x タイプをやってみます(実装されるバージョンは2.6)。Lobeが要求するTensorFlowのバージョンは1.15.4ですが実行は可能です。

依存パッケージやらライブラリやらをインストールしておきます。

PINTO0309/Tensorflow-binではnumpyのバージョンは1.20.3になっていますが、ここではダウンロードするTenshorFlowが1.19.5を使うようになっているので、バージョンを合わせました。

 

TenshorFlowダウンロード用のシェルスクリプトファイルをwgetで降ろしてくるようになっていましたが機能しませんでした。

なのでダウンロード用のシェルを作成します。ファイルの名前は同じです。

以下を記述します。

 

 

実行権を与えて、インストール実行。

こういう画像を推論してみます。

 

こんな感じになります。

 


 

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*