Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

TensorFlow r1.7で Raspberry Pi用にLiteをビルドしてみた


Compiling TensorFlow Lite for a Raspberry Piに書いてあるのは、
r1.6以前なので、r1.7では Raspberry Pi用のビルドコマンドあります。


TensorFlow r1.7をゲット。
  % git clone -b r1.7 https://github.com/tensorflow/tensorflow.git tensorflow

必要なファイル等をダウンロード
  % ./tensorflow/contrib/lite/download_dependencies.sh

そして、build_rpi_lib.sh にて、ビルド!
  % cd tensorflow/contrib/lite
  % ./build_rpi_lib.sh

ここで、エラー
arm-linux-gnueabihf-gcc --std=c++11 -O3 -DNDEBUG -march=armv7-a -mfpu=neon-vfpv4 -funsafe-math-optimizations -ftree-vectorize -I. -I/home/uip/src/tensorflow/r1.7/tensorflow/contrib/lite/../../../ -I/home/uip/src/tensorflow/r1.7/tensorflow/contrib/lite/downloads/ -I/home/uip/src/tensorflow/r1.7/tensorflow/contrib/lite/downloads/eigen -I/home/uip/src/tensorflow/r1.7/tensorflow/contrib/lite/downloads/gemmlowp -I/home/uip/src/tensorflow/r1.7/tensorflow/contrib/lite/downloads/neon_2_sse -I/home/uip/src/tensorflow/r1.7/tensorflow/contrib/lite/downloads/farmhash/src -I/home/uip/src/tensorflow/r1.7/tensorflow/contrib/lite/downloads/flatbuffers/include -I/home/uip/src/tensorflow/r1.7/tensorflow/contrib/lite/gen/obj/ -I/usr/local/include -c tensorflow/contrib/lite/kernels/internal/spectrogram.cc -o /home/uip/src/tensorflow/r1.7/tensorflow/contrib/lite/gen/obj/rpi_armv7/tensorflow/contrib/lite/kernels/internal/spectrogram.o
tensorflow/contrib/lite/kernels/internal/spectrogram.cc: In function ‘int tflite::internal::Log2Floor(uint)’:
tensorflow/contrib/lite/kernels/internal/spectrogram.cc:58:20: error: ‘assert’ was not declared in this scope
   assert(value == 1);
                    ^
tensorflow/contrib/lite/Makefile:112: recipe for target '/home/uip/src/tensorflow/r1.7/tensorflow/contrib/lite/gen/obj/rpi_armv7/tensorflow/contrib/lite/kernels/internal/spectrogram.o' failed

どうやら、kernels/internal/spectrogram.cc:57のassert関数のプロトタイプ宣言が無いようだ。
#include <assert.h>
を追加して、再度、ビルド・

今度は、成功!
ar: creating /XXX/tensorflow/r1.7/tensorflow/contrib/lite/gen/lib/rpi_armv7/libtensorflow-lite.a
arm-linux-gnueabihf-gcc --std=c++11 -O3 -DNDEBUG -march=armv7-a -mfpu=neon-vfpv4 -funsafe-math-optimizations -ftree-vectorize -I. -I/XXX/tensorflow/r1.7/tensorflow/contrib/lite/../../../ -I/XXX/tensorflow/r1.7/tensorflow/contrib/lite/downloads/ -I/XXX/tensorflow/r1.7/tensorflow/contrib/lite/downloads/eigen -I/XXX/tensorflow/r1.7/tensorflow/contrib/lite/downloads/gemmlowp -I/XXX/tensorflow/r1.7/tensorflow/contrib/lite/downloads/neon_2_sse -I/XXX/tensorflow/r1.7/tensorflow/contrib/lite/downloads/farmhash/src -I/XXX/tensorflow/r1.7/tensorflow/contrib/lite/downloads/flatbuffers/include -I/XXX/tensorflow/r1.7/tensorflow/contrib/lite//gen/obj/ -I/usr/local/include \
-o /XXX/tensorflow/r1.7/tensorflow/contrib/lite/gen/bin/rpi_armv7/benchmark_model /XXX/tensorflow/r1.7/tensorflow/contrib/lite/gen/obj/rpi_armv7/tensorflow/contrib/lite/tools/benchmark_model/XXX/.o \
 /XXX/tensorflow/r1.7/tensorflow/contrib/lite/gen/lib/rpi_armv7/libtensorflow-lite.a -Wl,--no-export-dynamic -Wl,--exclude-libs,ALL -Wl,--gc-sections -Wl,--as-needed -lstdc++ -lpthread -lm -ldl

tensorflow/contrib/liteの下に、genディレクトリが作成され、その下の
  bin
    rpi_armv7
      benchmark_model      <= ベンチマークモデル
  lib
    rpi_armv7
      libtensorflow-lite.a <= ライブラリ
  obj
    rpi_armv7/tensorflow/contrib/lite
://blogs.yahoo.co.jp/verification_engineer/71403904.html Xilinxでも SYCL]