2016-06-21 13 views
4

私は、量子化されたグラフをAndroidアプリケーションに読み込もうとしています。 マイBUILDファイルはAndroid用テンソルフロー量子化グラフ

deps = ["//tensorflow/core:android_tensorflow_lib", 
     "//tensorflow/contrib/quantization:cc_array_ops", 
     "//tensorflow/contrib/quantization:cc_math_ops", 
     "//tensorflow/contrib/quantization:cc_nn_ops", 
     "//tensorflow/contrib/quantization/kernels:quantized_ops"] 

構築する++スタンドアロンCのための追加的な量子化depsの作業が含まれています。

GEMMLOWPのエラーが多いため、私はBazelでコンパイルできません。 gemmlowpと量子化操作をAndroidに含める適切な方法は何ですか?ここで

は、例えばエラーです:

external/gemmlowp/eight_bit_int_gemm/eight_bit_int_gemm.cc:125:13: error: 'int32_t' is not a member of 'std' 
    MatrixMap<std::int32_t, ResultOrder> result(c, m, n, ldc); 

これはBazel 0.3.0でのUbuntu 16.04です。

パッケージの作成を2回連続して試行した結果、最初にハイウェイハッシュで失敗し、2回目にgemmlowpが失敗しました。 https://gist.github.com/ericdanz/81b799f2e0bbb3cc462aa3c90468c71b

は、最終的にそれがコンパイルしてリベラルgemmlowpとhighwayhashのビルドファイル内の「-std = C++ 11」の追加、および量子化されたOPSでのフレームワークの依存関係のためのAndroidのフレームワークの置換を実行するようになりました。それはかなり異なる結果を生み出し、約4倍遅く(26-3200msと6-800ms)実行されます。もう少し深い調査をしようとします。

がでquantized_opsを追加します。それは基本的に上記のエリック・Dからすべてのコメントを組み合わせたものですが、私はこの問題に出くわす新しい誰かのために一つの場所にそれをすべて入れたかった -

+0

ご迷惑をおかけして申し訳ありません。あなたがコンパイルしているホストOS(Ubuntu、OS Xなど)は何ですか? –

+0

gemmlowpの作者は次のように示唆しています。「Miao Wang氏がここで働いていた問題に関連している可能性があります。 https://github.com/google/gemmlowp/blob/master/ profiling/instrumentation.h#L30 このユーザーは古いAndroid APIバージョンをターゲットにしていると思われるので、STLportが使用されている可能性があります。その場合、#define GEMMLOWP_USE_STLPORTが役立つでしょうか? –

+0

C++ 11が正しく使用されていないようです。'/ gemmlowp/eight_bit_int_gemm /../ public /../ internal /../ public/bit_depth.h:39:1:警告:スコープ付きenumは-std = C++ 11または-std = gnuでのみ利用可能です。 ++ 11 enumクラスRoundingMode { ^ 外部/ gemmlowp/eight_bit_int_gemm /../ public /../ internal /../ public/bit_depth。時間:58:51エラー:「RoundingMode」は、クラスまたは名前空間 静的定数ではありませんRoundingMode kRoundingModeForSmallSizes = RoundingMode ::実寸; ' 私は私のビルドファイルのcc_binary部分でこれらの値を使用しています: 'コプト教徒= tf_copts –

答えて

0

は、ここで私のために働いたものですAndroidアプリのビルドファイル内libtensorflow_demo.soからdeps

deps = ["//tensorflow/core:android_tensorflow_lib", 
     "//tensorflow/contrib/quantization/kernels:quantized_ops",] 

はtensorflowに/ contrib /量子化/カーネル/ BUILDにquantized_opsためdepsを変更します。

削除/ math_ops.ccとnn_ops.cc

、tensorflowに/ contrib /量子化/ OPS/array_ops.ccで.Doc()部分をコメントアウトtensorflowに/ contrib /量子化でcc_array_opsためdepscc_math_opscc_nn_opsを変更/ BUILD:

deps = [ 
     #"//tensorflow/core:framework", 
     "//tensorflow/core:android_tensorflow_lib", 
    ], 

実行bazelは--cxxopt="-std=c++11"フラグでAndroidアプリのためのコマンドを構築します。

関連する問題