TensorFlow 2.16.2 Lite C++ library build.
TensorFlow 2.16.2 Lite C++ library をソースからビルドしてみた。
ROS2 自作 Turtlebot3 による 草刈りロボット開発。#9 LSTM で経路計画をする。 で、Tensorflow Lite 用の a.model.tflite が出来たので、C++ から実行する事になるので、試してみた。
ソースのダウンロードは、TensorFlow 2.16.2 C++ library build と同じなので、そちらを参考にしてください。
PC環境:
Ubuntu 22.04
Tensorflow 12.6.2
参考にしたのは、
CMake を使用した TensorFlow Lite の構築
1. build
ソースが、
~local/tensorflow/tensorflow-2.16.2
に展開済みとします。
$ cd ~local/tensorflow/tensorflow-2.16.2
$ mkdir build-nishi
$ cd build-nishi
$ cmake ../tensorflow/lite
$ cmake --build . -j3
注) build-essential が必要。まだの場合は。
$ sudo apt install build-essential
これで、libtensorflow-lite.a が、カレントディレクトリーにできる。
2. deploy
とりあえず、必要なファイルを~/usr/local/ へコピーします。
~/usr/local/
lib
include
注) include ファイルは、自分でコピーしないといけないみたい。
後、FlatBuffers 、 Abseil も必要とのこと。
同じ様に、copy shell を作った。
~/local/tensorflow/deploy-lite-nishi.sh
注) 中のパスは、自分の PC に合せて変えとうせ。
注2) flatbuffers のコピー元が、最初間違っていたみたい。
build-nishi/flatbuffers <--- NG
build-nishi/flatbuffers/include <-- OK
$ cd ~local/tensorflow
$ chmod 755 deploy-lite-nishi.sh
$ ./deploy-lite-nishi.sh
3. lite/examples/label_image をビルドして試す。
$ cd ~/local/tensorflow/tensorflow-2.16.2/build-nishi
$ cmake --build . -j -t label_images
./examples/label_image/ 下に実行ファアイルができる。
$ cd examples/label_image
実行の前に、 mobilenet_quant_v1_224.tflite , labels.txt , grace_hopper.bmp が必要。
上記ファイルを、集める。
tensorflow-2.16.2/tensorflow/lite/examples/ios/download_model.sh を叩くか、
tensorflow/lite/examples/label_image
の、Download sample model and image を参考にする。
image データは、tensorflow/lite/examples/label_image/testdata/grace_hopper.bmp
あるのでそれを使うそうな。
$ ./label_image --image ../../../tensorflow/lite/examples/label_image/testdata/grace_hopper.bmp
動くみたい。結構早い。
3. Cmake でのビルド。
自分のプログラムをビルドするにも、Cmake を使うみたい。
TensorFlow Lite C++ minimal example
を参考に、自分用の Cmake を作る必要がある。
CMakeLists.txt
を自分のプログラムデイレクトリーへコピーして、変更して試してみる。
下記、デイレクトリーに、
/home/nishi/Documents/VisualStudio-CPP/tflite/opp_tflite
predict-test.cpp
CMakeLists.txt
を用意して、
$ mkdir build
$ cd build
$ cmake ..
$ cmake --build . j3
CMakeLists.txt
これで、
predict-test ができるが、
この方法だと、全て再コンパイルになる。
先に作った、Tensorflow lite static Library が、まるきり使われない。
どうやら、下記箇所みたい。
CMake を使用した TensorFlow Lite の構築
インストール可能なパッケージのビルド
しかし、cmake 自体が、エラーになる。
とりあえず、opp_tflite の Cmake で作られる、 build.make と link.txt を参考にMakefileを作ってみた。
$ make
$ ./predict-test
一応、動いた。
参考にしたのは、
build/CMakeFiles/predict-test.dir
build.make
link.txt
やはり、最終的には、cmake でビルドできるようにしないと、ROS2 の中で使えない。