
Microsoft Lobeを使ってみる(1/2)で作ったTensorFlow Liteモデルを使ってラズパイ上で推論実行してみます。
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
インストール
Microsoft Lobe でexportしたモデルとexampleコードをSAMBA経由でコピーします。
サンプルとしてMicrosoft Lobeを使ってみる(1/2)で作ったものを使ってみます。ボールを分類・認識するTensorFlow Liteモデルです。
以下をダウンロードしてコピー
サンプル画像もダウンロードしてコピーしておきます。
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ほどでした。
Appendix 2
Liteではなく、通常のTensorFlow モデルを使ってみます。
ラズパイ4ModelB
OSイメージはDebian/Buster (64-bit) 2021-05-07-raspios-buster-arm64.img
このサイトからダウンロードできます。
balenaEtcherやRaspberry Pi ImagerでMicroSDカードに焼きます。
Python 3.7.3 の環境でTensorFlow をインストールします。
このサイトを参考にします。
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で降ろしてくるようになっていましたが機能しませんでした。
なのでダウンロード用のシェルを作成します。ファイルの名前は同じです。
以下を記述します。
実行権を与えて、インストール実行。
こういう画像を推論してみます。
こんな感じになります。
Leave a Reply