2016-11-03 11 views
0

hereと同じ方法でAndroidアプリで量子化グラフを使用しようとしました。 テンソルフローのバージョンは0.11.0rc0です。量子化グラフを使用するとAndroidアプリがクラッシュする

まず私は、次のコマンドを実行した:

bazel-bin/tensorflow/python/tools/optimize_for_inference \ 
--input=/Users/nikogamulin/Desktop/assets/output_flowers.pb \ 
--output=/Users/nikogamulin/Desktop/assets/tensorflow_inception_graph_optimized.pb \ 
--input_names=Mul \ 
--output_names=final_result 

bazel-bin/tensorflow/tools/quantization/quantize_graph \ 
--input=/Users/nikogamulin/Desktop/assets/tensorflow_inception_graph_optimized.pb \ 
--output=/Users/nikogamulin/Desktop/assets/tensorflow_inception_graph_rounded.pb \ 
--output_node_names=final_result \ 
--mode=weights_rounded 

bazel build //tensorflow/contrib/util:convert_graphdef_memmapped_format 
bazel-bin/tensorflow/contrib/util/convert_graphdef_memmapped_format \ 
--in_graph=/Users/nikogamulin/Desktop/assets/tensorflow_inception_graph_rounded.pb \ 
--out_graph=/Users/nikogamulin/Desktop/assets/tensorflow_inception_graph_mapped.pb 

output_flowers.pb私は異なるデータセットを使用した以外は、hereに記載したのと同じ方法で再トレーニングされた発端V3グラフです。

Androidアプリケーションでグラフtensorflow_inception_graph_optimized.pbを使用しようとすると、すべてうまくいきました。その後、tensorflow_inception_graph_mapped.pbまたはtensorflow_inception_graph_rounded.pbに切り替えると、アプリケーションがクラッシュします。UIが表示されるとすぐに、「残念ながら、TensorFlowデモが停止しました」というメッセージが表示されます。浮き出る。以下は

TensorFlowImageListenerクラスの始まる行は、次のとおりです。

private static final int NUM_CLASSES = 23; 
    private static final int INPUT_SIZE = 299; 
    private static final int IMAGE_MEAN = 128; 
    private static final float IMAGE_STD = 128; 
    private static final String INPUT_NAME = "Mul:0"; 
    private static final String OUTPUT_NAME = "final_result:0"; 

    private static final String MODEL_FILE = "file:///android_asset/tensorflow_inception_graph_mapped.pb"; 
    private static final String LABEL_FILE = "file:///android_asset/labels_flowers.txt"; 
... 

誰もがAndroidの中で量子化された当初v3のグラフを使用するように管理したり、問題を解決する方法を知っている場合、私は解決についての提案のために非常に感謝するでしょう問題。

+0

スタックトレースと実際のエラーが発生する可能性がありますか? –

答えて

0

私はsimmilar問題に遭遇しました。私はあなたのステップでの問題はメモリマッピングの部分だと思います。おそらくこれはノード名などを出力すると思うからです。

モデルをストリップして(optimize_for_inferenceで実行するか、strip_unusedをさらに実行する)、それを量子化するだけで、モデル3を正しく開始できます。私はちょうど試しました。

しかし、私は同様にMEMマッピング部をやりたいが、私はまだこれを管理していない...

EDIT:

最後に、私はピーターワーデンのブログに取り組んで解決策を見つけた:

bazel-bin/tensorflow/python/tools/optimize_for_inference \ 
--input=/tmp/output.pb \ 
--output=/tmp/optimized.pb \ 
--input_names=Mul \ 
--output_names=final_result 

bazel-bin/tensorflow/tools/quantization/quantize_graph \ 
--input=/tmp/optimized.pb \ 
--output=/tmp/rounded.pb \ 
--output_node_names=final_result \ 
--mode=weights_rounded 

bazel-bin/tensorflow/contrib/util/convert_graphdef_memmapped_format \ 
--in_graph=/tmp/rounded.pb \ 
--out_graph=/tmp/mmapped.pb 

(すべてのスクリプトは、使用前にbazel-binコマンドを使用して事前にビルドする必要があります)。

これで、私はv3のリトレーニングモデルをラウンド21メガに縮小し、アンドロイドプロジェクトで作業することができました。乾杯。

関連する問題