LoginSignup
0
2

More than 1 year has passed since last update.

エッジデバイスでTensorFlow Liteをビルドしてインストールする

Posted at

はじめに

今回はエッジデバイスでTensorFlow Liteをビルドしてインストールする方法を紹介します。ビルド済みのwheelファイルが用意されていないエッジデバイスでも、実機でビルドすることでTensorFlow Liteを使えるようになります。

動作確認済みデバイス

動作確認済デバイス(OS)

  • e-RT3 Plus F3RP70-2L1(Ubuntu 18.04 32bit)

このデバイスでは armhf アーキテクチャのパッケージが動作します。

準備

TensorFlow Liteのビルドに必要なツールをインストールします。

CMakeのインストール

必要なパッケージをインストールします。

sudo apt update
sudo apt install libssl-dev

Note
デバイスがproxy環境下にある場合はproxy設定が必要です。

CMakeをダウンロードしてインストールします。2
ビルドには数十分~数時間かかります。

#ダウンロード
wget https://github.com/Kitware/CMake/releases/download/v3.26.1/cmake-3.26.1.tar.gz
tar zxvf cmake-3.26.1.tar.gz

#ビルド
cd cmake-3.26.1
./bootstrap
make

#インストール
sudo make install
cd ..

#再起動
sudo reboot

インストールが完了したら以下のコマンドを実行してインストールの成功を確認します。

username@ubuntu:~$ cmake --version
cmake version 3.26.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).

パッケージのインストール

以下のコマンドでインストールします。3

sudo apt install swig libjpeg-dev zlib1g-dev python3-dev python3-numpy
python3 -m pip install pybind11

TensorFlow Liteのビルド

ソースコードをダウンロードし、タグv2.8.0に切り替えます。

git clone https://github.com/tensorflow/tensorflow.git tensorflow_src
cd tensorflow_src
git checkout v2.8.0

Note
今回はv2.8.0のビルドを行います。
最新版ではありませんのでご注意ください。

ビルド用のスクリプトtensorflow_src/tensorflow/lite/tools/pip_package/build_pip_package_with_cmake.shを編集します。
ファイル先頭に以下の行を追加してビルド時のジョブ数を1とし、ビルド時のメモリ不足を防ぎます。

build_pip_package_with_cmake.sh
BUILD_NUM_JOBS=1

-DTFLITE_ENABLE_XNNPACK=OFF \を以下のように追記して、今回使用するエッジデバイスで使用不可能な機能のビルドを行わないようにします。

build_pip_package_with_cmake.sh
native)
BUILD_FLAGS=${BUILD_FLAGS:-"-march=native -I${PYTHON_INCLUDE} -
I${PYBIND11_INCLUDE}"}
cmake \
    -DCMAKE_C_FLAGS="${BUILD_FLAGS}" \
    -DCMAKE_CXX_FLAGS="${BUILD_FLAGS}" \
    -DTFLITE_ENABLE_XNNPACK=OFF \ #追記
    "${TENSORFLOW_LITE_DIR}"
;;

ビルドを実行します。wheelファイルがtensorflow/lite/tools/pip_package/gen/tflite_pip/python3/dist/に作成されます。

PYTHON=python3 tensorflow/lite/tools/pip_package/build_pip_package_with_cmake.sh native
cd ..

Note
ビルドしたwheelファイルを保存しておけば、ほかのデバイスへのインストールはTensorFlow Liteのインストールの手順のみで行えます。

TensorFlow Liteのインストール

仮想環境を作成してTensorFlow Liteをインストールします。
必要なパッケージをインストールして仮想環境を作成、有効化します。

sudo apt install python3-venv
python3 -m venv tf-env --system-site-packages
source tf-env/bin/activate

インストールを行います。<TF_WHEEL_FILE>の部分はビルドで作成されたTensorFlow Liteのwheelファイルの名前で置き換えてください。

(tf-env)  pip install wheel
(tf-env)  pip install cython numpy tensorflow_src/tensorflow/lite/tools/pip_package/gen/tflite_pip/python3/dist/<TF_WHEEL_FILE> --no-cache-dir

動作確認

サンプルプログラム4を実行してTensorFlow Liteのインストールの成功を確認します。

ディレクトリを作成して必要なファイルをダウンロードします。

(tf-env)  mkdir tmp

#推論する画像のダウンロード
(tf-env)  curl https://raw.githubusercontent.com/tensorflow/tensorflow/master/tensorflow/lite/examples/label_image/testdata/grace_hopper.bmp > tmp/grace_hopper.bmp

#学習済みモデルのダウンロード
(tf-env)  curl https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_2018_02_22/mobilenet_v1_1.0_224.tgz | tar xzv -C tmp

#ラベル情報のダウンロード
(tf-env)  curl https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_1.0_224_frozen.tgz | tar xzv -C tmp mobilenet_v1_1.0_224/labels.txt
mv tmp/mobilenet_v1_1.0_224/labels.txt tmp/

#サンプルコードのダウンロード
(tf-env)  curl https://raw.githubusercontent.com/tensorflow/tensorflow/master/tensorflow/lite/examples/python/label_image.py > label_image.py

ダウンロードしたサンプルコードlabel_image.pyをTensorFlow Lite用に書き換えます。

label_image.py
#変更前
import tensorflow as tf
#変更後
import tflite_runtime.interpreter as tflite

#変更前
interpreter = tf.lite.Interpreter(model_path=args.model_file, num_threads=args.num_threads)
#変更後
interpreter = tflite.Interpreter(model_path=args.model_file, num_threads=args.num_threads)

プログラムを実行します。以下のような出力があれば成功です。

(tf-env)  python label_image.py \
  --model_file tmp/mobilenet_v1_1.0_224.tflite \
  --label_file tmp/labels.txt \
  --image tmp/grace_hopper.bmp

0.792127: 653:military uniform
0.084584: 907:Windsor tie
0.021034: 458:bow tie, bow-tie, bowtie
0.009951: 668:mortarboard
0.007782: 514:cornet, horn, trumpet, trump
time: 2637.867ms

結果より、military uniformのスコアが最も高く0.79となっていることから、画像をうまく認識できていることが分かります。
grace_hopper.jpg

まとめ

今回はエッジデバイスでのTensorFlow Liteのインストールとサンプルプログラムの実行を行いました。エッジデバイスでTensorFlowによる機械学習の推論を行うことができ、アプリケーションの幅が広がります。是非お試しください。

  1. 産業用AIプラットフォーム | 横河電機株式会社

  2. GitHub - Kitware/CMake: Mirror of CMake upstream repository

  3. tensorflow/tensorflow/lite/tools/pip_package at master · tensorflow/tensorflow · GitHub

  4. tensorflow/tensorflow/lite/examples/python at master · tensorflow/tensorflow · GitHub

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2