Home | History | Annotate | only in /external/tensorflow/tensorflow/contrib/lite
Up to higher level directory
NameDateSize
allocation.cc21-Aug-20184K
allocation.h21-Aug-20182.9K
Android.bp21-Aug-20182K
arena_planner.cc21-Aug-20188.8K
arena_planner.h21-Aug-20184.1K
arena_planner_test.cc21-Aug-201815.5K
BUILD21-Aug-20185.4K
build_def.bzl21-Aug-20186.9K
build_ios_universal_lib.sh21-Aug-20181.5K
builtin_op_data.h21-Aug-20184.7K
builtin_ops.h21-Aug-20182.6K
context.c21-Aug-20182.8K
context.h21-Aug-201814.4K
context_test.cc21-Aug-20182.3K
download_dependencies.sh21-Aug-20184.4K
error_reporter.cc21-Aug-20181.6K
error_reporter.h21-Aug-20181.8K
examples/21-Aug-2018
g3doc/21-Aug-2018
graph_info.cc21-Aug-20188.5K
graph_info.h21-Aug-20182.7K
graph_info_test.cc21-Aug-201810.3K
interpreter.cc21-Aug-201823.2K
interpreter.h21-Aug-201817.6K
interpreter_test.cc21-Aug-201832.8K
ios_makefile.inc21-Aug-20181.5K
java/21-Aug-2018
kernels/21-Aug-2018
lib_package/21-Aug-2018
Makefile21-Aug-20184.6K
memory_planner.h21-Aug-20181.7K
model.cc21-Aug-201829.2K
model.h21-Aug-20187.6K
model_test.cc21-Aug-201810.4K
models/21-Aug-2018
nnapi/21-Aug-2018
nnapi_delegate.cc21-Aug-201817K
nnapi_delegate.h21-Aug-20182.1K
optional_debug_tools.cc21-Aug-20183.4K
optional_debug_tools.h21-Aug-20181.2K
python/21-Aug-2018
README.md21-Aug-201820.1K
schema/21-Aug-2018
simple_memory_arena.cc21-Aug-20184.6K
simple_memory_arena.h21-Aug-20182.9K
simple_memory_arena_test.cc21-Aug-20182.8K
string_tflite.h21-Aug-20181,013
string_util.cc21-Aug-20183.8K
string_util.h21-Aug-20183.3K
string_util_test.cc21-Aug-20183.3K
testdata/21-Aug-2018
testing/21-Aug-2018
tflite_static.bp21-Aug-20183.3K
toco/21-Aug-2018
tools/21-Aug-2018
version.h21-Aug-20181K

README.md

      1 # TensorFlow Lite
      2 TensorFlow Lite is TensorFlow's lightweight solution for mobile and embedded devices. It enables low-latency inference of on-device machine learning models with a small binary size and fast performance supporting hardware acceleration.
      3 
      4 TensorFlow Lite uses many techniques for achieving low latency like optimizing the kernels for specific mobile apps, pre-fused activations, quantized kernels that allow smaller and faster (fixed-point math) models, and in the future, leverage specialized machine learning hardware to get the best possible performance for a particular model on a particular device.
      5 
      6 ![image](g3doc/TFLite-Architecture.jpg)
      7 # Getting Started with an Android Demo App
      8 
      9 This section contains an example application using TensorFlow Lite for Android devices. The demo is a sample camera app that classifies images continuously using either a quantized Mobilenet model or a floating point Inception-v3 model. A device running Android 5.0 ( API 21) or higher is required to run the demo.
     10 
     11 There are 3 ways to get the demo app to your device
     12  - Download the prebuilt binary or
     13  - Use Android Studio to build the application or
     14  - Download the source code for TensorFlow Lite and the demo and build it using bazel
     15 
     16 ## Description
     17 In the demo app, inference is done using the TensorFlow Lite Java API. The demo app classifies frames in real-time, displaying the top most probable classifications. It also displays the time taken to detect the object.
     18 
     19 ## Downloading the pre-built binary
     20 The fastest path to trying the demo, is to download the pre-built binary
     21 [TfLiteCameraDemo.apk](https://storage.googleapis.com/download.tensorflow.org/deps/tflite/TfLiteCameraDemo.apk)
     22 
     23 Once the apk is installed, click the app icon to start the app. The first-time the app is opened, the app asks for runtime permissions to access the device camera. The demo app opens the back-camera of the device and recognizes the objects in the camera's field of view. At the bottom of the image (or at the left of the image if the device is in landscape mode), it shows the latency of classification and the top three objects classified.
     24 
     25 ## Building in Android Studio using TensorFlow Lite AAR from JCenter
     26 The simplest way to compile the demo app, and try out changes to the project code is to use AndroidStudio.
     27 
     28  - Install the latest version of Android Studio 3 as specified [here](https://developer.android.com/studio/index.html).
     29  - Make sure the Android SDK version is greater than 26 and NDK version is greater than 14 (in the Android Studio Settings).
     30  - Import the `tensorflow/contrib/lite/java/demo` directory as a new Android Studio project.
     31  - Click through installing all the Gradle extensions it requests.
     32  - Either
     33      - Download the quantized Mobilenet TensorFlow Lite model from [here](https://storage.googleapis.com/download.tensorflow.org/models/tflite/mobilenet_v1_224_android_quant_2017_11_08.zip)
     34          - unzip and copy mobilenet_quant_v1_224.tflite to the assets directory:
     35            `tensorflow/contrib/lite/java/demo/app/src/main/assets/`
     36      - Or download the floating point Inception-v3 model from [here](https://storage.googleapis.com/download.tensorflow.org/models/tflite/inception_v3_slim_2016_android_2017_11_10.zip)
     37          - unzip and copy inceptionv3_non_slim_2015.tflite to the assets directory
     38          - change the chosen classifier in [Camera2BasicFragment.java](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/java/demo/app/src/main/java/com/example/android/tflitecamerademo/Camera2BasicFragment.java) from
     39          `classifier = new ImageClassifierQuantizedMobileNet(getActivity());`
     40          to
     41          `classifier = new ImageClassifierFloatInception(getActivity());`
     42  - Build and run the demo app
     43 
     44 ## Building TensorFlow Lite and the demo app from source
     45 
     46 ### Clone the TensorFlow repo
     47 - git clone
     48   [https://github.com/tensorflow/tensorflow](https://github.com/tensorflow/tensorflow)
     49 
     50 ### Install Bazel
     51 If bazel is not installed on your system, install it now by following [these directions](https://bazel.build/versions/master/docs/install.html)
     52 
     53 NOTE: Bazel does not fully support building Android on Windows yet. Full support for Gradle/CMake builds is coming soon, but in the meantime Windows users should download the [prebuilt binary](https://storage.googleapis.com/download.tensorflow.org/deps/tflite/TfLiteCameraDemo.apk) instead.
     54 
     55 ### Install Android NDK and SDK
     56 Bazel is the primary build system for TensorFlow. Bazel and the Android NDK and SDK must be installed on your system.
     57  - Install the latest version of Bazel as per the instructions on the [Bazel website](https://bazel.build/versions/master/docs/install.html)
     58  - The Android NDK is required to build the native (C/C++) TensorFlow Lite code. The current recommended version is 14b, which can be found [here](https://developer.android.com/ndk/downloads/older_releases.html#ndk-14b-downloads).
     59  - The Android SDK and build tools may be obtained [here](https://developer.android.com/tools/revisions/build-tools.html), or alternatively as part of [Android Studio](https://developer.android.com/studio/index.html). Build tools API >= 23 is required to build the TF Android demo (though it will run on API >= 21 devices).
     60  - In the root of the TensorFlow repository update the `WORKSPACE` file with the `api_level` and location of the SDK and NDK. If you installed it with AndroidStudio the SDK path can be found in the SDK manager, and the default NDK path is:`{SDK path}/ndk-bundle.`
     61 
     62 ```
     63 android_sdk_repository (
     64     name = "androidsdk",
     65     api_level = 23,
     66     build_tools_version = "23.0.2",
     67     path = "/home/xxxx/android-sdk-linux/",
     68 )
     69 
     70 android_ndk_repository(
     71     name = "androidndk",
     72     path = "/home/xxxx/android-ndk-r10e/",
     73     api_level = 19,
     74 )
     75 ```
     76 
     77 Additional details on building with Android can be found [here](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/java/demo/README.md).
     78 
     79 ### Build the source code
     80 Run bazel with the following command to build the demo.
     81 
     82 Build the demo app:
     83 
     84 ```
     85 bazel build --cxxopt=--std=c++11 //tensorflow/contrib/lite/java/demo/app/src/main:TfLiteCameraDemo
     86 ```
     87 
     88 ### Note
     89 
     90 Currently, we only support building the Android demo app within a Python 2
     91 environment (due to a Bazel bug).
     92 
     93 ### More about the demo
     94 The demo is resizing each camera image frame to (224 width * 224 height) to match the quantized Mobilenet model being used (229 * 229 for Inception-v3). The resized image is converted into a ByteBuffer row by row of size 1 * 224 * 224 * 3 bytes, where 1 is the number of images in a batch. 224 * 224 (299 * 299) is the width and height of the image. 3 bytes represents three colors of a pixel. This demo uses the TensorFlow Lite Java inference API for models which take a single input and provide a single output. This outputs a two-dimensional array, with the first dimension being the category index and the second dimension being the confidence of classification. Both models have 1001 unique categories and the app sorts the probabilities of all the categories and displays the top three. The model file must be downloaded and bundled within the assets directory of the app.
     95 
     96 # iOS Demo App
     97 
     98 Similar to the Android demo app, there's an iOS camera app that uses exactly the same model (224 * 224 quantized Mobilenet).
     99 
    100 This demo app requires a camera so it doesn't work with simulators. It need to be executed on a real iOS device. Follow the instructions to build and run the demo app:
    101 
    102 1.   Run `third_party/tensorflow/contrib/lite/examples/ios/download_models.sh` to download the model files used by the demo app.
    103 1.   Install [CocoaPods](https://cocoapods.org/) if it wasn't installed yet: `sudo gem install cocoapods`.
    104 1.   Run `pod install` in `tensorflow/contrib/lite/examples/ios/camera` to generate the workspace file.
    105 1.   Open the project by running `open tflite_camera_example.xcworkspace`, and build the app in XCode.
    106 
    107 # TensorFlow Lite Quick Start
    108 
    109 ## Step 1. Decide which GraphDef to use
    110  Depending on the use case, the developer may choose to use one of the popular
    111  open-sourced models such as InceptionV3 or MobileNets, re-train these models
    112  with their own custom data set or even build their own custom model.
    113 
    114 ### Using a pre-trained model
    115 
    116 [MobileNets](https://research.googleblog.com/2017/06/mobilenets-open-source-models-for.html) is a family of mobile-first computer vision models for [TensorFlow](https://www.tensorflow.org/) designed to effectively maximize accuracy while being mindful of the restricted resources for an on-device or embedded application. MobileNets are small, low-latency, low-power models parameterized to meet the resource constraints of a variety of use cases. They can be built upon for classification, detection, embeddings and segmentation similar to how other popular large scale models, such as [Inception](https://arxiv.org/pdf/1602.07261.pdf), are used. Google provides 16 pre-trained [ImageNet](http://www.image-net.org/challenges/LSVRC/)  classification checkpoints for MobileNets for use in mobile projects of all sizes.
    117 
    118 [Inception-v3](https://arxiv.org/abs/1512.00567) is an image recognition model which achieves fairly high accuracy in recognizing general objects with 1000 classes, like "Zebra", "Dalmatian", and "Dishwasher". The model extracts general features from input images using a convolutional neural network and classifies them based on those features with fully-connected and softmax layers.
    119 
    120 [On Device Smart Reply](https://research.googleblog.com/2017/02/on-device-machine-intelligence.html)  is an on-device model which provides one-touch replies for an incoming text message by suggesting contextually relevant messages. The model is built specifically for memory constrained devices such as watches & phones and it has been successfully used to surface [Smart Replies on Android Wear](https://research.googleblog.com/2017/02/on-device-machine-intelligence.html). Note that this model only works on Android as of now.
    121 
    122 These pre-trained models can be downloaded from [here](g3doc/models.md).
    123 
    124 ### Retrain Inception-V3 or MobileNet for a custom data set
    125 The above pre-trained models have been trained on the ImageNet data set, which consists of 1000 predefined classes. A model will need to be re-trained if these classes are not relevant or useful for a given use case. This technique is called transfer learning, which starts with a model that has been already trained on a problem and will then be retrained on a similar problem. Deep learning from scratch can take days, but transfer learning can be done fairly quickly. In order to do this, a developer will need to generate their custom data set labeled with the relevant classes.
    126 
    127 The [TensorFlow for Poets](https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/) codelab walks through this process step-by-step. The retraining code supports retraining for both floating point and quantized inference.
    128 
    129 
    130 ### Train a custom model
    131 A developer may choose to train a custom model using Tensorflow. TensorFlow documentation has [several tutorials](https://www.tensorflow.org/tutorials/) for building and training models. If the user has written a model using TensorFlow's Slim Framework the first step is to export this to a GraphDef file. This is necessary because Slim does not store the model structure outside the code, so to communicate with other parts of the framework it needs to be exported. Documentation for the export can be found [here](https://github.com/tensorflow/models/tree/master/research/slim#Export). The output of this step will be a .pb file for the custom model.
    132 
    133 TensorFlow Lite currently supports a subset of TensorFlow operators. Please refer to [this document](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/g3doc/tf_ops_compatibility.md) for details of supported operators and their usage. This
    134 set will continue to expand in future releases of Tensorflow Lite.
    135 
    136 
    137 ## Step 2. Model format conversion
    138 
    139 The model generated in Step 1 is a standard Tensorflow model. After the completion of Step 1 a user should have a standard .pb or .pbtxt GraphDef file. If the application developer is using a pre-trained model (as defined in Step 1 above), they can download a ready to use, already converted model for use from [here](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/g3doc/models.md). Models generated using retraining (aka transfer learning) or custom models will need to be converted using the steps mentioned below.
    140 
    141 A prerequisite to converting the model to the Tensorflow Lite format is to freeze the graph.
    142 
    143 Since we employ several formats, the following definitions may be useful:
    144  - GraphDef (.pb) - a protobuf that represents the TensorFlow training and or computation graph. This contains operators, tensors, and variables definitions.
    145 
    146  - CheckPoint (.ckpt) - Serialized variables from a TensorFlow graph. Note, this does not contain the graph structure, so alone it cannot typically be interpreted.
    147 
    148  - FrozenGraphDef - a subclass of GraphDef that contains no variables. A GraphDef can be converted to a frozen graphdef by taking a checkpoint and a graphdef and converting every variable into a constant with the value looked up in the checkpoint.
    149 
    150  - SavedModel - A collection of GraphDef and CheckPoint together with a signature that labels input and output arguments to a model. A GraphDef and Checkpoint can be extracted from a saved model.
    151 
    152  - TensorFlow lite model (.tflite) - a serialized flatbuffer, containing TensorFlow lite operators and Tensors for the TensorFlow lite interpreter. This is most analogous to TensorFlow frozen GraphDefs.
    153 
    154 ### Freeze Graph
    155 To use this .pb GraphDef file within TensorFlow Lite, the application developer will need checkpoints containing trained weight parameters. The .pb contains only the structure of the graph. The process of merging the checkpoint values with the graph structure is known as "freezing" the graph.
    156 
    157 The developer should know where the checkpoints folder is present or checkpoints can also be downloaded for a pre-trained model (Example: Here is a link to the [MobileNets](https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md)).
    158 
    159 Graph freezing can be done using the command below (and modifying the arguments appropriately)
    160 
    161 ```
    162 bazel build tensorflow/python/tools:freeze_graph
    163 
    164 bazel-bin/tensorflow/python/tools/freeze_graph\
    165     --input_graph=/tmp/mobilenet_v1_224.pb \
    166     --input_checkpoint=/tmp/checkpoints/mobilenet-10202.ckpt \
    167     --input_binary=true --output_graph=/tmp/frozen_mobilenet_v1_224.pb \
    168     --output_node_names=MobileNet/Predictions/Reshape_1
    169 ```
    170 
    171 The user has to first build the freeze_graph script using bazel and then run the script.  The input_binary flag has to be enabled to ensure that the protobuf is read and written in binary format.  The user has to input the .pb and the .ckpt files to freeze the graph The output_node_names may not be obvious outside of the code that built the model. The easiest way to find them is to visualize the graph, either with
    172 graphviz, or [in tensorboard](https://codelabs.developers.google.com/codelabs/tensorflow-for-poets-2/#3).
    173 
    174 This frozen Graphdef is now ready to be converted to flatbuffer format (.tflite) for use on Android or iOS.  On Android users have the flexibility to use either the float or quantized versions of the frozen graphdef, if available, using the Tensorflow Optimizing Converter tool.
    175 
    176 Here is a sample command line to convert the frozen Graphdef to '.tflite' format for  The Tensorflow Optimizing Converter supports both float and quantized models, however, different configuration parameters are needed depending on whether a FLOAT or QUANTIZED mode is being used.
    177 (Here is a link to the pb [file](https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_1.0_224_frozen.tgz)).
    178 
    179 ```
    180 bazel build tensorflow/contrib/lite/toco:toco
    181 
    182 bazel-bin/tensorflow/contrib/lite/toco/toco \
    183   --input_file=$(pwd)/mobilenet_v1_1.0_224/frozen_graph.pb \
    184   --input_format=TENSORFLOW_GRAPHDEF  --output_format=TFLITE \
    185   --output_file=/tmp/mobilenet_v1_1.0_224.tflite --inference_type=FLOAT \
    186   --input_type=FLOAT --input_arrays=input \
    187   --output_arrays=MobilenetV1/Predictions/Reshape_1 --input_shapes=1,224,224,3
    188 ```
    189 
    190 - The input_file argument should point to the frozen GraphDef file that holds the model architecture.
    191 - The output_file argument should point to where the TensorFlow Lite model file should be generated.
    192 - The input_type and inference_type arguments should be set to FLOAT, unless converted a [quantized](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/g3doc/) model.
    193 - Setting the input_array, output_array and input_shape arguments are a bit trickier. The easiest way to find these values is to explore the graph in tensorboard .  The user should reuse the arguments that were used for specifying the output nodes for inference in the `freeze_graph`step.
    194 
    195 Note, it is also possible to use the Tensorflow Optimizing Converter through protos either from Python or from the command line see the
    196 documentation [here](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/toco/python/toco_from_protos.py). A developer can then integrate the conversion step into their model design workflow to ensure that a model will be easily convertible to a mobile inference graph. For example,
    197 
    198 ```python
    199 import tensorflow as tf
    200 
    201 img = tf.placeholder(name="img", dtype=tf.float32, shape=(1, 64, 64, 3))
    202 val = img + tf.constant([1., 2., 3.]) + tf.constant([1., 4., 4.])
    203 out = tf.identity(val, name="out")
    204 with tf.Session() as sess:
    205   tflite_model = tf.contrib.lite.toco_convert(sess.graph_def, [img], [out])
    206   open("converteds_model.tflite", "wb").write(tflite_model)
    207 
    208 ```
    209 For detailed instructions on how to use the Tensorflow Optimizing Converter, please see [here](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/toco/g3doc/cmdline_examples.md).
    210 
    211 You may refer to the [Ops compatibility guide](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/g3doc/tf_ops_compatibility.md) for troubleshooting help. If that doesn't help, please file an [issue](https://github.com/tensorflow/tensorflow/issues).
    212 
    213 If you would like to see a visual description of your TensorFlow Lite model after conversion, you can use tensorflow/contrib/lite/tools/visualize.py by running
    214 ```sh
    215 bazel run tensorflow/contrib/lite/tools:visualize -- model.tflite model_viz.html
    216 ```
    217 and then visualize the resulting HTML file in a browser.
    218 
    219 ## Step 3. Use the TensorFlow Lite model for inference in a mobile app
    220 
    221 After completion of Step 2 the developer should have a .tflite model.
    222 
    223 ### For Android
    224 Because Android apps need to be written in Java, and core TensorFlow is in C++, a JNI library is provided to interface between the two. Its interface is aimed only at inference, so it provides the ability to load a graph, set up inputs, and run the model to calculate particular outputs. The full documentation for the set of methods can be seen [here](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/g3doc/). The demo app is also open sourced on [github](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/java/demo/app).
    225 
    226 The [demo app](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/java/demo/app)  uses this interface, so it's a good place to look for example usage. You can also download the prebuilt binary [here](http://download.tensorflow.org/deps/tflite/TfLiteCameraDemo.apk).
    227 
    228 Note that you'd need to follow instructions for installing TensorFlow on Android, setting up bazel and Android Studio outlined [here](https://www.tensorflow.org/mobile/android_build).
    229 
    230 ### For iOS
    231 Follow the documentation [here](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite/g3doc/ios.md) to get integrate a TFLite model into your app.
    232 
    233 ## Core ML support
    234 
    235 Core ML is a machine learning framework used across Apple products. In addition to using Tensorflow Lite models directly in their applications, developers have the option to convert their trained Tensorflow models to the [CoreML](https://developer.apple.com/machine-learning/) format for use on Apple devices. For information on how to use the converter please refer to the [Tensorflow-CoreML converter documentation](https://github.com/tf-coreml/tf-coreml).
    236