Microsoft Lobeを使ってみる(1/2)で作ったTensorFlow Liteモデルを使ってラズパイ上で推論実行してみます。
TensorFlow Lite ランタイムパッケージについて
Raspberry Pi Zero W
OSイメージは Raspberry Pi OS Lite (32-bit)
このOSはヘッドレスなのでSSHで接続後、アップデート&アップグレードしておきます。
1 2 |
sudo apt update sudo apt upgrade -y |
いろいろデータを外部からコピーするのでSAMBAも入れておきます。
必要なパッケージなどを追加
PIL
1 |
sudo apt install python3-pil |
numpy
1 2 3 4 |
sudo apt install python3-pip sudo pip3 install numpy==1.19.5 sudo apt install libatlas-base-dev |
TensorFlow Lite ランタイム
上記OSイメージのPythonバージョンは3.7.3なので以下をダウンロードしてインストールします。
tflite_runtime-2.3.1-cp37-cp37m-linux_armv6l
インストール
1 |
sudo pip3 install tflite_runtime-2.3.1-cp37-cp37m-linux_armv6l.whl |
Microsoft Lobe でexportしたモデルとexampleコードをSAMBA経由でコピーします。
サンプルとしてMicrosoft Lobeを使ってみる(1/2)で作ったものを使ってみます。ボールを分類・認識するTensorFlow Liteモデルです。
以下をダウンロードしてコピー
サンプル画像もダウンロードしてコピーしておきます。
exampleのPythonコードでsample-4の画像を推論してみます。パスはご自分の環境に合わせて変更してください。
1 |
python3 tflite_example.py ~/Public/sample/sample-4.png |
こんな結果です。さすがに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を使うようになっているので、バージョンを合わせました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
sudo apt-get install -y libhdf5-dev libc-ares-dev libeigen3-dev gcc gfortran libgfortran5 \ libatlas3-base libatlas-base-dev libopenblas-dev libopenblas-base libblas-dev \ liblapack-dev cython3 libatlas-base-dev openmpi-bin libopenmpi-dev python3-dev sudo pip3 install pip --upgrade sudo pip3 install numpy==1.19.5 sudo pip3 install h5py==3.1.0 sudo pip3 install pybind11 pip3 install -U --user six wheel mock pip3 install pillow==8.2.0 |
TenshorFlowダウンロード用のシェルスクリプトファイルをwgetで降ろしてくるようになっていましたが機能しませんでした。
なのでダウンロード用のシェルを作成します。ファイルの名前は同じです。
1 |
sudo nano tensorflow-2.6.0-cp37-none-linux_aarch64_download.sh |
以下を記述します。
1 2 3 4 5 6 |
#!/bin/bash curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=1x2uDYob-zKP5optIkPtPx2PTqc4sKEGY" > /dev/null CODE="$(awk '/_warning_/ {print $NF}' /tmp/cookie)" curl -Lb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=1x2uDYob-zKP5optIkPtPx2PTqc4sKEGY" -o tensorflow-2.6.0-cp37-none-linux_aarch64.whl echo Download finished. |
実行権を与えて、インストール実行。
1 2 3 4 5 |
sudo chmod 777 tensorflow-2.6.0-cp37-none-linux_aarch64_download.sh ./tensorflow-2.6.0-cp37-none-linux_aarch64_download.sh sudo -H pip3 install tensorflow-2.6.0-cp37-none-linux_aarch64.whl |
こういう画像を推論してみます。
こんな感じになります。
Leave a Reply