LoginSignup
3
1

More than 3 years have passed since last update.

Windows向けtensorflowliteのビルド(for gcc on MinGW)

Last updated at Posted at 2020-02-01

はじめに

現在(2020年2月時点)、公式にはTensorflow liteはAndroid(arm v7, aarch64), iOS, RaspberryPi(arm v7)にしか対応していません
https://www.tensorflow.org/lite/guide
いろいろ調べた結果うまくいったので備忘録としてまとめておきます

この記事のモチベーション

  • Tensorflow lite用のUnity pluginを作りたいが、android向けだけ用意すると開発イテレーションが悪いためwindows editor(x64)向けにもpluginを作っておきたい
  • Tensorflow lite delegateが盛り上がっており、GPUだけでなくNNAPI, hexagon(QualcommのDSP)にも対応してきているので追いかけていきたい
  • Tensorflow v2に伴い、.tfliteへのモデル変換がある程度固まってきたのでそろそろどのモデルが使えそうか確認しておきたい

ビルド環境

  • Windows10
  • MSYS2 + Mingw64
    • gcc 9.2.0
  • tensorflow master: cbd6bb435d32473c3b65d43bcd1171b90bb91d46

ビルドコマンド

cd tensorflow/lite/tools/make
./download_dependencies.sh
./build_lib.sh

これで
tensorflow/lite/tools/make/gen/windows_x86_64/lib/libtensorflow-lite.a ができるので静的リンクすれば使えます
tensorflow/lite/tools/make/gen/windows_x86_64/bin/minimal.exe があるので.tfliteファイルを食わせると動作確認ができます

※こちらのビルドスクリプトがMingw対応されたのは https://github.com/tensorflow/tensorflow/pull/26040 のプルリクです

ハマりどこり

  • byteswap.hが無くてコンパイルエラーが起こる
  • Argument list too long でbenchmark-lib.aがビルドできない
    • Makefile上では all: $(LIB_PATH) $(MINIMAL_BINARY) $(BENCHMARK_BINARY) $(BENCHMARK_PERF_OPTIONS_BINARY) となっているためLIB_PATHとMINIMAL_BINARYさえビルドできれば問題ないので無視すれば良さそうです

その他

  • Bazelではうまくいかなかった
    • Bazelは2.0.0を使用した
    • 当初下記のコマンドで試していたがコンパイルは成功するもののリンクエラー
      • bazel build -c opt --cxxopt=--std=c++11 tensorflow/lite:tensorflowlite
        • vc14でのビルド
        • tensorflow/lite/BUILDがwindows向けDLL対応されていたので、今後はこちらでビルドされるようになるかと思います
    • Mingwも試したもののMSVCのコンパイルオプションがgccで読めずコンパイルエラー
      • bazel build -c opt --cxxopt=--std=c++11 --compiler=mingw-gcc tensorflow/lite:tensorflowlite
3
1
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
3
1