This is an automated email from the ASF dual-hosted git repository.

tqchen pushed a commit to branch revert-5595-tutorial_tflite
in repository https://gitbox.apache.org/repos/asf/incubator-tvm.git

commit e7b24ca3c983f198fa566ed4dd4e894029db0d3c
Author: Tianqi Chen <[email protected]>
AuthorDate: Thu May 21 07:50:49 2020 -0700

    Revert "[TUTORIAL]TFLite QNN Tutorial (#5595)"
    
    This reverts commit 019da5dae15d2bd13536673ab689203c799629f0.
---
 tutorials/frontend/deploy_prequantized_tflite.py | 251 -----------------------
 1 file changed, 251 deletions(-)

diff --git a/tutorials/frontend/deploy_prequantized_tflite.py 
b/tutorials/frontend/deploy_prequantized_tflite.py
deleted file mode 100644
index f6c4544..0000000
--- a/tutorials/frontend/deploy_prequantized_tflite.py
+++ /dev/null
@@ -1,251 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-"""
-Deploy a Framework-prequantized Model with TVM - Part 3 (TFLite)
-================================================================
-**Author**: `Siju Samuel <https://github.com/siju-samuel>`_
-Welcome to part 3 of the Deploy Framework-Prequantized Model with TVM tutorial.
-In this part, we will start with a Quantized TFLite graph and then compile and 
execute it via TVM.
-
-
-For more details on quantizing the model using TFLite, readers are encouraged 
to
-go through `Converting Quantized Models
-<https://www.tensorflow.org/lite/convert/quantization>`_.
-
-The TFLite models can be downloaded from this `link
-<https://www.tensorflow.org/lite/guide/hosted_models>`_.
-
-To get started, Tensorflow and TFLite package needs to be installed as 
prerequisite.
-
-.. code-block:: bash
-
-    # install tensorflow and tflite
-    pip install tensorflow==2.1.0
-    pip install tflite==2.1.0
-
-Now please check if TFLite package is installed successfully, ``python -c 
"import tflite"``
-
-"""
-
-###############################################################################
-# Necessary imports
-# -----------------
-import os
-
-import numpy as np
-import tflite
-
-import tvm
-from tvm import relay
-
-
-######################################################################
-# Download pretrained Quantized TFLite model
-# ------------------------------------------
-
-# Download mobilenet V2 TFLite model provided by Google
-from tvm.contrib.download import download_testdata
-
-model_url = "https://storage.googleapis.com/download.tensorflow.org/models/"; \
-             "tflite_11_05_08/mobilenet_v2_1.0_224_quant.tgz"
-
-# Download model tar file and extract it to get mobilenet_v2_1.0_224.tflite
-model_path = download_testdata(model_url, "mobilenet_v2_1.0_224_quant.tgz",
-                               module=['tf', 'official'])
-model_dir = os.path.dirname(model_path)
-
-
-######################################################################
-# Utils for downloading and extracting zip files
-# ----------------------------------------------
-def extract(path):
-    import tarfile
-    if path.endswith("tgz") or path.endswith("gz"):
-        dir_path = os.path.dirname(path)
-        tar = tarfile.open(path)
-        tar.extractall(path=dir_path)
-        tar.close()
-    else:
-        raise RuntimeError('Could not decompress the file: ' + path)
-
-extract(model_path)
-
-
-######################################################################
-# Load a test image
-# -----------------
-
-#######################################################################
-# Get a real image for e2e testing
-# --------------------------------
-def get_real_image(im_height, im_width):
-    from PIL import Image
-    repo_base = 
'https://github.com/dmlc/web-data/raw/master/tensorflow/models/InceptionV1/'
-    img_name = 'elephant-299.jpg'
-    image_url = os.path.join(repo_base, img_name)
-    img_path = download_testdata(image_url, img_name, module='data')
-    image = Image.open(img_path).resize((im_height, im_width))
-    x = np.array(image).astype('uint8')
-    data = np.reshape(x, (1, im_height, im_width, 3))
-    return data
-
-data = get_real_image(224, 224)
-
-######################################################################
-# Load a tflite model
-# -------------------
-
-######################################################################
-# Now we can open mobilenet_v2_1.0_224.tflite
-tflite_model_file = os.path.join(model_dir, 
"mobilenet_v2_1.0_224_quant.tflite")
-tflite_model_buf = open(tflite_model_file, "rb").read()
-
-tflite_model = tflite.Model.GetRootAsModel(tflite_model_buf, 0)
-
-
-###############################################################################
-# Lets run TFLite pre-quantized model inference and get the TFLite prediction.
-def run_tflite_model(tflite_model_buf, input_data):
-    """ Generic function to execute TFLite """
-    try:
-        from tensorflow import lite as interpreter_wrapper
-    except ImportError:
-        from tensorflow.contrib import lite as interpreter_wrapper
-
-    input_data = input_data if isinstance(input_data, list) else [input_data]
-
-    interpreter = 
interpreter_wrapper.Interpreter(model_content=tflite_model_buf)
-    interpreter.allocate_tensors()
-
-    input_details = interpreter.get_input_details()
-    output_details = interpreter.get_output_details()
-
-    # set input
-    assert len(input_data) == len(input_details)
-    for i in range(len(input_details)):
-        interpreter.set_tensor(input_details[i]['index'], input_data[i])
-
-    # Run
-    interpreter.invoke()
-
-    # get output
-    tflite_output = list()
-    for i in range(len(output_details)):
-        
tflite_output.append(interpreter.get_tensor(output_details[i]['index']))
-
-    return tflite_output
-
-###############################################################################
-# Lets run TVM compiled pre-quantized model inference and get the TVM 
prediction.
-def run_tvm(graph, lib, params):
-    from tvm.contrib import graph_runtime
-    rt_mod = graph_runtime.create(graph, lib, ctx=tvm.cpu(0))
-    rt_mod.set_input(**params)
-    rt_mod.set_input('input', data)
-    rt_mod.run()
-    tvm_res = rt_mod.get_output(0).asnumpy()
-    tvm_pred = np.squeeze(tvm_res).argsort()[-5:][::-1]
-    return tvm_pred, rt_mod
-
-
-###############################################################################
-# TFLite inference
-# ----------------
-
-###############################################################################
-# Run TFLite inference on the quantized model.
-tflite_res = run_tflite_model(tflite_model_buf, data)
-tflite_pred = np.squeeze(tflite_res).argsort()[-5:][::-1]
-
-###############################################################################
-# TVM compilation and inference
-# -----------------------------
-
-###############################################################################
-# We use the TFLite-Relay parser to convert the TFLite pre-quantized graph 
into Relay IR. Note that
-# frontend parser call for a pre-quantized model is exactly same as frontend 
parser call for a FP32
-# model. We encourage you to remove the comment from print(mod) and inspect 
the Relay module. You
-# will see many QNN operators, like, Requantize, Quantize and QNN Conv2D.
-dtype_dict = {'input': data.dtype.name}
-shape_dict = {'input': data.shape}
-
-mod, params = relay.frontend.from_tflite(tflite_model,
-                                         shape_dict=shape_dict,
-                                         dtype_dict=dtype_dict)
-# print(mod)
-
-###############################################################################
-# Lets now the compile the Relay module. We use the "llvm" target here. Please 
replace it with the
-# target platform that you are interested in.
-target = 'llvm'
-with relay.build_config(opt_level=3):
-    graph, lib, params = relay.build_module.build(mod, target=target,
-                                                  params=params)
-
-###############################################################################
-# Finally, lets call inference on the TVM compiled module.
-tvm_pred, rt_mod = run_tvm(graph, lib, params)
-
-###############################################################################
-# Accuracy comparison
-# -------------------
-
-###############################################################################
-# Print the top-5 labels for MXNet and TVM inference.
-# Checking the labels because the requantize implementation is different 
between
-# TFLite and Relay. This cause final output numbers to mismatch. So, testing 
accuracy via labels.
-
-print("TVM Top-5 labels:", tvm_pred)
-print("TFLite Top-5 labels:", tflite_pred)
-
-
-##########################################################################
-# Measure performance
-# -------------------
-# Here we give an example of how to measure performance of TVM compiled models.
-n_repeat = 100  # should be bigger to make the measurement more accurate
-ctx = tvm.cpu(0)
-ftimer = rt_mod.module.time_evaluator("run", ctx, number=1, repeat=n_repeat)
-prof_res = np.array(ftimer().results) * 1e3
-print("Elapsed average ms:", np.mean(prof_res))
-
-######################################################################
-# .. note::
-#
-#   Unless the hardware has special support for fast 8 bit instructions, 
quantized models are
-#   not expected to be any faster than FP32 models. Without fast 8 bit 
instructions, TVM does
-#   quantized convolution in 16 bit, even if the model itself is 8 bit.
-#
-#   For x86, the best performance can be achieved on CPUs with AVX512 
instructions set.
-#   In this case, TVM utilizes the fastest available 8 bit instructions for 
the given target.
-#   This includes support for the VNNI 8 bit dot product instruction 
(CascadeLake or newer).
-#   For EC2 C5.12x large instance, TVM latency for this tutorial is ~2 ms.
-#
-#   Intel conv2d NCHWc schedule on ARM gives better end-to-end latency 
compared to ARM NCHW
-#   conv2d spatial pack schedule for many TFLite networks. ARM winograd 
performance is higher but
-#   it has a high memory footprint.
-#
-#   Moreover, the following general tips for CPU performance equally applies:
-#
-#    * Set the environment variable TVM_NUM_THREADS to the number of physical 
cores
-#    * Choose the best target for your hardware, such as "llvm 
-mcpu=skylake-avx512" or
-#      "llvm -mcpu=cascadelake" (more CPUs with AVX512 would come in the 
future)
-#    * Perform autotuning - `Auto-tuning a convolution network for x86 CPU
-#      <https://tvm.apache.org/docs/tutorials/autotvm/tune_relay_x86.html>`_.
-#    * To get best inference performance on ARM CPU, change target argument 
according to your
-#      device and follow `Auto-tuning a convolution network for ARM CPU
-#      <https://tvm.apache.org/docs/tutorials/autotvm/tune_relay_arm.html>`_.

Reply via email to