tensorflow: Cannot compile tensorflow lite (TfLiteCameraDemo and tensorflow/python/tools:freeze_graph) on macOS Sierra

System information

  • Have I written custom code (as opposed to using a stock example script provided in TensorFlow): No
  • OS Platform and Distribution (e.g., Linux Ubuntu 16.04): macOS Sierra 10.12.6
  • TensorFlow installed from (source or binary): source
  • TensorFlow version (use command below): 1.4.1 (fdf34a8 on master branch)
  • Python version: 2.7.13
  • Bazel version (if compiling from source): 0.8.1-homebrew
  • GCC/Compiler version (if compiling from source): Xcode 9.2
  • CUDA/cuDNN version: (not using cuda)
  • GPU model and memory: (not using GPU)
  • Exact command to reproduce: bazel build -c opt --cxxopt='--std=c++11' //tensorflow/contrib/lite/java/demo/app/src/main:TfLiteCameraDemo

Describe the problem

I can compile tensorflow android demo on macOS, but cannot compile tensorflow lite android demo successfully. What I actually want to do is convert a tensorflow model to tensorflow lite model. Similar errors happen.

UPDATE on Dec 19, 2017: I found the workaround/solution. See my reply below.

Source code / logs

Compiled tensorflow android demo on macOS successfully.

$ bazel build -c opt //tensorflow/examples/android:tensorflow_demo
...
Target //tensorflow/examples/android:tensorflow_demo up-to-date:
  bazel-bin/tensorflow/examples/android/tensorflow_demo_deploy.jar
  bazel-bin/tensorflow/examples/android/tensorflow_demo_unsigned.apk
  bazel-bin/tensorflow/examples/android/tensorflow_demo.apk
INFO: Elapsed time: 862.549s, Critical Path: 112.20s
INFO: Build completed successfully, 776 total actions

But failed to compile tensorflow lite android demo.

$ bazel build -c opt --cxxopt='--std=c++11' //tensorflow/contrib/lite/java/demo/app/src/main:TfLiteCameraDemo
ERROR: /Users/XXX/GitRoot/OpenSourceProjects/tensorflow/tensorflow/contrib/lite/BUILD:193:12: Label '//tensorflow/contrib/lite:downloads/absl/absl/types/optional.h' crosses boundary of subpackage 'tensorflow/contrib/lite/downloads/absl/absl/types' (perhaps you meant to put the colon here: '//tensorflow/contrib/lite/downloads/absl/absl/types:optional.h'?)
ERROR: /Users/XXX/GitRoot/OpenSourceProjects/tensorflow/tensorflow/contrib/lite/BUILD:193:12: Label '//tensorflow/contrib/lite:downloads/absl/absl/base/config_test.cc' crosses boundary of subpackage 'tensorflow/contrib/lite/downloads/absl/absl/base' (perhaps you meant to put the colon here: '//tensorflow/contrib/lite/downloads/absl/absl/base:config_test.cc'?)
ERROR: /Users/XXX/GitRoot/OpenSourceProjects/tensorflow/tensorflow/contrib/lite/BUILD:193:12: Label '//tensorflow/contrib/lite:downloads/absl/absl/debugging/internal/address_is_readable.h' crosses boundary of subpackage 'tensorflow/contrib/lite/downloads/absl/absl/debugging' (perhaps you meant to put the colon here: '//tensorflow/contrib/lite/downloads/absl/absl/debugging:internal/address_is_readable.h'?)
ERROR: /Users/XXX/GitRoot/OpenSourceProjects/tensorflow/tensorflow/contrib/lite/BUILD:193:12: Label '//tensorflow/contrib/lite:downloads/absl/absl/debugging/leak_check.h' crosses boundary of subpackage 'tensorflow/contrib/lite/downloads/absl/absl/debugging' (perhaps you meant to put the colon here: '//tensorflow/contrib/lite/downloads/absl/absl/debugging:leak_check.h'?)
ERROR: /Users/XXX/GitRoot/OpenSourceProjects/tensorflow/tensorflow/contrib/lite/BUILD:193:12: Label '//tensorflow/contrib/lite:downloads/absl/absl/strings/BUILD.bazel' crosses boundary of subpackage 'tensorflow/contrib/lite/downloads/absl/absl/strings' (perhaps you meant to put the colon here: '//tensorflow/contrib/lite/downloads/absl/absl/strings:BUILD.bazel'?)
...

Similar errors happen when I wanted to build the tool of converting tensorflow model to tensorflow lite model which is what I really need.

$ bazel build tensorflow/python/tools:freeze_graph
WARNING: /Users/XXX/GitRoot/OpenSourceProjects/tensorflow/tensorflow/core/BUILD:1806:1: in includes attribute of cc_library rule //tensorflow/core:framework_headers_lib: '../../external/nsync/public' resolves to 'external/nsync/public' not below the relative path of its package 'tensorflow/core'. This will be an error in the future. Since this rule was created by the macro 'cc_header_only_library', the error might have been caused by the macro implementation in /Users/XXX/GitRoot/OpenSourceProjects/tensorflow/tensorflow/tensorflow.bzl:1131:30
ERROR: /Users/XXX/GitRoot/OpenSourceProjects/tensorflow/tensorflow/contrib/lite/BUILD:193:12: Label '//tensorflow/contrib/lite:downloads/absl/absl/types/optional.h' crosses boundary of subpackage 'tensorflow/contrib/lite/downloads/absl/absl/types' (perhaps you meant to put the colon here: '//tensorflow/contrib/lite/downloads/absl/absl/types:optional.h'?)
ERROR: /Users/XXX/GitRoot/OpenSourceProjects/tensorflow/tensorflow/contrib/lite/BUILD:193:12: Label '//tensorflow/contrib/lite:downloads/absl/absl/base/config_test.cc' crosses boundary of subpackage 'tensorflow/contrib/lite/downloads/absl/absl/base' (perhaps you meant to put the colon here: '//tensorflow/contrib/lite/downloads/absl/absl/base:config_test.cc'?)
ERROR: /Users/XXX/GitRoot/OpenSourceProjects/tensorflow/tensorflow/contrib/lite/BUILD:193:12: Label '//tensorflow/contrib/lite:downloads/absl/absl/debugging/internal/address_is_readable.h' crosses boundary of subpackage 'tensorflow/contrib/lite/downloads/absl/absl/debugging' (perhaps you meant to put the colon here: '//tensorflow/contrib/lite/downloads/absl/absl/debugging:internal/address_is_readable.h'?)
ERROR: /Users/XXX/GitRoot/OpenSourceProjects/tensorflow/tensorflow/contrib/lite/BUILD:193:12: Label '//tensorflow/contrib/lite:downloads/absl/absl/debugging/leak_check.h' crosses boundary of subpackage 'tensorflow/contrib/lite/downloads/absl/absl/debugging' (perhaps you meant to put the colon here: '//tensorflow/contrib/lite/downloads/absl/absl/debugging:leak_check.h'?)
WARNING: /Users/XXX/GitRoot/OpenSourceProjects/tensorflow/tensorflow/contrib/learn/BUILD:15:1: in py_library rule //tensorflow/contrib/learn:learn: target '//tensorflow/contrib/learn:learn' depends on deprecated target '//tensorflow/contrib/session_bundle:exporter': No longer supported. Switch to SavedModel immediately.
WARNING: /Users/XXX/GitRoot/OpenSourceProjects/tensorflow/tensorflow/contrib/learn/BUILD:15:1: in py_library rule //tensorflow/contrib/learn:learn: target '//tensorflow/contrib/learn:learn' depends on deprecated target '//tensorflow/contrib/session_bundle:gc': No longer supported. Switch to SavedModel immediately.
ERROR: /Users/XXX/GitRoot/OpenSourceProjects/tensorflow/tensorflow/contrib/lite/BUILD:193:12: Label '//tensorflow/contrib/lite:downloads/absl/absl/strings/BUILD.bazel' crosses boundary of subpackage 'tensorflow/contrib/lite/downloads/absl/absl/strings' (perhaps you meant to put the colon here: '//tensorflow/contrib/lite/downloads/absl/absl/strings:BUILD.bazel'?)
...

My config in WORKSPACE

android_sdk_repository(
    name = "androidsdk",
    api_level = 23,
    build_tools_version = "26.0.1",
    path = "/Users/XXX/Resources/Android/sdk",
)

android_ndk_repository(
    name="androidndk",
    path="/Users/XXX/Resources/Android/ndk/android-ndk-r14b",
    api_level=14,
)

Other

$ python --version
Python 2.7.13 :: Continuum Analytics, Inc.
$ bazel version
Build label: 0.8.1-homebrew
Build target: bazel-out/darwin-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Tue Dec 5 19:33:07 2017 (1512502387)
Build timestamp: 1512502387
Build timestamp as int: 1512502387

== cat /etc/issue ===============================================
Darwin ITSG000227-MAC.local 16.7.0 Darwin Kernel Version 16.7.0: Wed Oct  4 00:17:00 PDT 2017; root:xnu-3789.71.6~1/RELEASE_X86_64 x86_64
Mac OS X 10.12.6

== are we in docker =============================================
No

== compiler =====================================================
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin16.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

== uname -a =====================================================
Darwin ITSG000227-MAC.local 16.7.0 Darwin Kernel Version 16.7.0: Wed Oct  4 00:17:00 PDT 2017; root:xnu-3789.71.6~1/RELEASE_X86_64 x86_64

== check pips ===================================================
numpy (1.13.3)

== check for virtualenv =========================================
False

== tensorflow import ============================================
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "tensorflow/__init__.py", line 24, in <module>
    from tensorflow.python import *
  File "tensorflow/python/__init__.py", line 49, in <module>
    from tensorflow.python import pywrap_tensorflow
  File "tensorflow/python/pywrap_tensorflow.py", line 25, in <module>
    from tensorflow.python.platform import self_check
ImportError: No module named platform

== env ==========================================================
LD_LIBRARY_PATH is unset
DYLD_LIBRARY_PATH is unset

== nvidia-smi ===================================================
./tools/tf_env_collect.sh: line 105: nvidia-smi: command not found

== cuda libs  ===================================================

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Comments: 25 (9 by maintainers)

Most upvoted comments

@knsong Try to run tensorflow/contrib/lite/download_dependencies.sh instead of tensorflow/contrib/makefile/download_dependencies.sh. No need to copy folders.

@jakajacky OMG, the disgusting compiling errors about TensorFlow Lite came back AGAIN after I compiled/used a standard TensorFlow tool (e.g. transform_graph). It seems that the development environments of standard TensorFlow and TensorFlow Lite conflict with each other.

Manually copying protobuf and re2 folders from tensorflow/contrib/makefile/downloads to tensorflow/contrib/lite/downloads DOES NOT HELP this time. TensorFlow lite toco tool compiles after I ran tensorflow/contrib/lite/download_dependencies.sh