2016-06-21 2 views
4

나는 양자화 그래프를 Android 앱에로드하려고합니다. 내 빌드 파일 빌드 ++ 독립 C에 대한Android 용 Tensorflow 퀀 타이즈 그래프

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"] 

추가 양자화 deps 작업이 포함되어 있습니다.

GEMMLOWP에서 많은 오류가 발생하여 Bazel을 사용하여 컴파일 할 수 없습니다. 안드로이드에서 gemmlowp와 양자화 연산을 포함시키는 적절한 방법은 무엇입니까?

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 우분투 16.04에있다 : 여기

은 예시적인 에러이다.

다음은 패키지를 빌드하기위한 두 번의 연속 시도가있는 요지입니다. 처음에는 고속도로에서 실패하고 두 번째에는 gemmlowp가 실패합니다. https://gist.github.com/ericdanz/81b799f2e0bbb3cc462aa3c90468c71b

궁극적으로 컴파일과의 자유뿐만 아니라 실행하는 데있어 "-std = C++ 11"gemmlowp 및 highwayhash 및 양자화 된 작전에서 프레임 워크 종속성에 대한 안드로이드 프레임 워크의 교체의 빌드 파일입니다. 그것은 상당히 다른 결과를 산출하지만, 약 4 배 더 느리게 실행됩니다 (26-3200ms vs 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. '콥트 = tf_copts :; 시간 : 51 : 58 : 오류' 내 빌드 파일의 cc_binary 부분에이 값을 사용하고 '되는 RoundingMode는'클래스 또는 네임 스페이스 const 정적되는 RoundingMode kRoundingModeForSmallSizes = RoundingMode에 :: 정확한 아니다() + [ "-std = C++ 11", "- O3"]' –

답변

0

여기에 나를 위해 일한 무엇 deps 안드로이드 응용 프로그램의 빌드 파일에 libtensorflow_demo.so에 :

:

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

이 /있는 contrib/양자화/커널/BUILD tensorflow에서 quantized_ops에 대한 deps 수정

제거는/tensorflow에 .Doc() 부분을 주석 /있는 contrib/양자화/OPS/array_ops.cc, math_ops.cc 및 nn_ops.cc는

는 수정합니다 depscc_array_ops, cc_math_ops 및 tensorflow에서 cc_nn_ops /있는 contrib/양자화/BUILD : --cxxopt="-std=c++11" 플래그 안드로이드 응용 프로그램에 대한

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

실행 bazel 빌드 명령.

관련 문제