2016-11-03 2 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 I가 서로 다른 세트를 사용할 제외 here 바와 같은 방법을 개시 하였다 재교육 V3 그래프이다

먼저 I는 다음의 명령을 실행.

Android 앱에서 tensorflow_inception_graph_optimized.pb 그래프를 사용하려고하면 모든 것이 잘 작동합니다. 그런 다음 tensorflow_inception_graph_mapped.pb 또는 tensorflow_inception_graph_rounded.pb로 전환 한 후 앱이 충돌합니다. UI가 나타나면 "불행히도 TensorFlow 데모가 중지되었습니다."대화 상자가 나타납니다. 팝업. 누군가가 안드로이드에서 양자화 처음 v3의 그래프를 사용하여 관리하거나 문제를 해결하는 방법을 알고있는 경우

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"; 
... 

, 내가 해결에 대한 어떤 제안에 매우 감사 할 것입니다 :

다음은 TensorFlowImageListener 클래스의 시작 라인이다 문제.

+0

스택 추적 및 실제 오류 발생 시도 할 수 있습니까? –

답변

0

나는 simmilar 문제가 생겼다. 그리고 나는 당신의 단계에서 그 문제가 메모리 매핑 부분이라고 생각한다. 아마도 이것이 노드 이름이나 이와 비슷한 것을 출력한다고 생각하기 때문입니다.

모델을 스트립하고 (optimize_for_inference 또는 strip_unused를 더 잘 실행하여) 양자화하면 시작 버전 3 모델에서 올바르게 작동합니다. 이제 막 시도해 보았습니다.

그러나, 나는뿐만 아니라 MEM 매핑 부분을하고 싶습니다,하지만 난

편집

...이 아직 관리되지 않은 :

:

마지막으로 내가 피터 소장의 블로그에 솔루션을 작업 발견

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 메가로 축소하고 안드로이드 프로젝트에서 작업 할 수있었습니다. 건배.

관련 문제