एमएल समुदाय दिवस 9 नवंबर है! TensorFlow, JAX से नई जानकारी के लिए हमसे जुड़ें, और अधिक जानें

अपने TFlite कोड को TF2 में माइग्रेट करना

TensorFlow.org पर देखें Google Colab में चलाएं GitHub पर स्रोत देखें नोटबुक डाउनलोड करें

TensorFlow लाइट (TFLite) में मदद करता है कि डेवलपर्स के उपकरण-पर (मोबाइल, एम्बेडेड, और IOT उपकरणों) एमएल अनुमान चलाने उपकरणों का एक सेट है। TFLite कनवर्टर ऐसे ही एक उपकरण है जो धर्मान्तरित एक अनुकूलित TFLite मॉडल प्रारूप कि कुशलतापूर्वक उपकरण पर चलाया जा सकता है में TF मॉडल मौजूदा है।

इस दस्तावेज़ में, आप सीखेंगे कि आपको अपने TF से TFlite रूपांतरण कोड में कौन-से परिवर्तन करने की आवश्यकता है, इसके बाद कुछ उदाहरण जो ऐसा ही करते हैं।

आपके TF से TFlite रूपांतरण कोड में परिवर्तन

  • आप एक विरासत TF1 मॉडल प्रारूप (Keras फ़ाइल, जमे हुए GraphDef, चौकियों, tf.Session, आदि) का उपयोग कर रहे हैं, यह TF1 / TF2 SavedModel पर अपडेट करें और TF2 कनवर्टर एपीआई का उपयोग tf.lite.TFLiteConverter.from_saved_model(...) यह एक TFLite मॉडल में बदलने के लिए (तालिका 1 को देखें)।

  • कनवर्टर API फ़्लैग्स को अपडेट करें (तालिका 2 देखें)।

  • जैसे विरासत एपीआई निकालें tf.lite.constants । (जैसे: बदलें tf.lite.constants.INT8 साथ tf.int8 )

// तालिका 1 // टीएफलाइट पायथन कन्वर्टर एपीआई अपडेट

TF1 एपीआई TF2 एपीआई
tf.lite.TFLiteConverter.from_saved_model('saved_model/',..) का समर्थन किया
tf.lite.TFLiteConverter.from_keras_model_file('model.h5',..) हटाया गया (सहेजे गए मॉडल प्रारूप में अद्यतन)
tf.lite.TFLiteConverter.from_frozen_graph('model.pb',..) हटाया गया (सहेजे गए मॉडल प्रारूप में अद्यतन)
tf.lite.TFLiteConverter.from_session(sess,...) हटाया गया (सहेजे गए मॉडल प्रारूप में अद्यतन)

// टेबल 2 // टीएफलाइट पायथन कन्वर्टर एपीआई फ्लैग अपडेट

TF1 एपीआई TF2 एपीआई
allow_custom_ops
optimizations
representative_dataset
target_spec
inference_input_type
inference_output_type
experimental_new_converter
experimental_new_quantizer
का समर्थन किया







input_tensors
output_tensors
input_arrays_with_shape
output_arrays
experimental_debug_info_func
हटाया गया (असमर्थित कनवर्टर API तर्क)




change_concat_input_ranges
default_ranges_stats
get_input_arrays()
inference_type
quantized_input_stats
reorder_across_fake_quant
हटाया गया (असमर्थित परिमाणीकरण कार्यप्रवाह)





conversion_summary_dir
dump_graphviz_dir
dump_graphviz_video
हटाया (बजाय, कल्पना का उपयोग कर मॉडल Netron या visualize.py )


output_format
drop_control_dependency
हटा दिया गया (TF2 में असमर्थित सुविधाएँ)

उदाहरण

अब आप विरासती TF1 मॉडल को TF1/TF2 सहेजे गए मॉडल में बदलने के लिए और फिर इसे TF2 TFLite मॉडल में बदलने के लिए कुछ उदाहरणों का पूर्वाभ्यास करेंगे।

सेट अप

आवश्यक TensorFlow आयात के साथ प्रारंभ करें।

import tensorflow as tf
import tensorflow.compat.v1 as tf1
import numpy as np

import logging
logger = tf.get_logger()
logger.setLevel(logging.ERROR)

import shutil
def remove_dir(path):
  try:
    shutil.rmtree(path)
  except:
    pass

सभी आवश्यक TF1 मॉडल प्रारूप बनाएं।

# Create a TF1 SavedModel
SAVED_MODEL_DIR = "tf_saved_model/"
remove_dir(SAVED_MODEL_DIR)
with tf1.Graph().as_default() as g:
  with tf1.Session() as sess:
    input = tf1.placeholder(tf.float32, shape=(3,), name='input')
    output = input + 2
    # print("result: ", sess.run(output, {input: [0., 2., 4.]}))
    tf1.saved_model.simple_save(
        sess, SAVED_MODEL_DIR,
        inputs={'input': input}, 
        outputs={'output': output})
print("TF1 SavedModel path: ", SAVED_MODEL_DIR)

# Create a TF1 Keras model
KERAS_MODEL_PATH = 'tf_keras_model.h5'
model = tf1.keras.models.Sequential([
    tf1.keras.layers.InputLayer(input_shape=(128, 128, 3,), name='input'),
    tf1.keras.layers.Dense(units=16, input_shape=(128, 128, 3,), activation='relu'),
    tf1.keras.layers.Dense(units=1, name='output')
])
model.save(KERAS_MODEL_PATH, save_format='h5')
print("TF1 Keras Model path: ", KERAS_MODEL_PATH)

# Create a TF1 frozen GraphDef model
GRAPH_DEF_MODEL_PATH = tf.keras.utils.get_file(
    'mobilenet_v1_0.25_128',
    origin='https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_0.25_128_frozen.tgz',
    untar=True,
) + '/frozen_graph.pb'

print("TF1 frozen GraphDef path: ", GRAPH_DEF_MODEL_PATH)
TF1 SavedModel path:  tf_saved_model/
TF1 Keras Model path:  tf_keras_model.h5
Downloading data from https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_0.25_128_frozen.tgz
2621440/2617289 [==============================] - 0s 0us/step
2629632/2617289 [==============================] - 0s 0us/step
TF1 frozen GraphDef path:  /home/kbuilder/.keras/datasets/mobilenet_v1_0.25_128/frozen_graph.pb

1. एक TF1 सहेजे गए मॉडल को एक TFlite मॉडल में कनवर्ट करें

पहले: TF1 के साथ कनवर्ट करना

यह TF1-शैली TFlite रूपांतरण के लिए विशिष्ट कोड है।

converter = tf1.lite.TFLiteConverter.from_saved_model(
    saved_model_dir=SAVED_MODEL_DIR,
    input_arrays=['input'],
    input_shapes={'input' : [3]}
)
converter.optimizations = {tf.lite.Optimize.DEFAULT}
converter.change_concat_input_ranges = True
tflite_model = converter.convert()
# Ignore warning: "Use '@tf.function' or '@defun' to decorate the function."
2021-09-22 20:02:56.143221: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:351] Ignored output_format.
2021-09-22 20:02:56.143267: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:354] Ignored drop_control_dependency.
2021-09-22 20:02:56.143274: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:360] Ignored change_concat_input_ranges.

के बाद: TF2 के साथ कनवर्ट करना

छोटे v2 कन्वर्टर फ़्लैग सेट के साथ TF1 SavedModel को सीधे TFLite मॉडल में कनवर्ट करें।

# Convert TF1 SavedModel to a TFLite model.
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir=SAVED_MODEL_DIR)
converter.optimizations = {tf.lite.Optimize.DEFAULT}
tflite_model = converter.convert()
2021-09-22 20:02:56.207882: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:351] Ignored output_format.
2021-09-22 20:02:56.207923: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:354] Ignored drop_control_dependency.
2021-09-22 20:02:56.207930: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:360] Ignored change_concat_input_ranges.

2. एक TF1 केरस मॉडल फ़ाइल को एक TFlite मॉडल में बदलें

पहले: TF1 के साथ कनवर्ट करना

यह TF1-शैली TFlite रूपांतरण के लिए विशिष्ट कोड है।

converter = tf1.lite.TFLiteConverter.from_keras_model_file(model_file=KERAS_MODEL_PATH)
converter.optimizations = {tf.lite.Optimize.DEFAULT}
converter.change_concat_input_ranges = True
tflite_model = converter.convert()
2021-09-22 20:02:56.608343: W tensorflow/python/util/util.cc:348] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them.
2021-09-22 20:02:57.119836: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:351] Ignored output_format.
2021-09-22 20:02:57.119881: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:354] Ignored drop_control_dependency.
2021-09-22 20:02:57.119888: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:360] Ignored change_concat_input_ranges.

के बाद: TF2 के साथ कनवर्ट करना

सबसे पहले, TF1 Keras मॉडल फ़ाइल को TF2 SavedModel में कनवर्ट करें और फिर इसे एक छोटे v2 कनवर्टर फ़्लैग सेट के साथ TFLite मॉडल में कनवर्ट करें।

# Convert TF1 Keras model file to TF2 SavedModel.
model = tf.keras.models.load_model(KERAS_MODEL_PATH)
model.save(filepath='saved_model_2/')

# Convert TF2 SavedModel to a TFLite model.
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir='saved_model_2/')
tflite_model = converter.convert()
2021-09-22 20:02:57.943564: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:351] Ignored output_format.
2021-09-22 20:02:57.943608: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:354] Ignored drop_control_dependency.
2021-09-22 20:02:57.943614: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:360] Ignored change_concat_input_ranges.

3. एक TF1 जमे हुए GraphDef को एक TFLite मॉडल में बदलें

पहले: TF1 के साथ कनवर्ट करना

यह TF1-शैली TFlite रूपांतरण के लिए विशिष्ट कोड है।

converter = tf1.lite.TFLiteConverter.from_frozen_graph(
    graph_def_file=GRAPH_DEF_MODEL_PATH,
    input_arrays=['input'],
    input_shapes={'input' : [1, 128, 128, 3]},
    output_arrays=['MobilenetV1/Predictions/Softmax'],
)
converter.optimizations = {tf.lite.Optimize.DEFAULT}
converter.change_concat_input_ranges = True
tflite_model = converter.convert()
2021-09-22 20:02:58.139650: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:351] Ignored output_format.
2021-09-22 20:02:58.139707: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:354] Ignored drop_control_dependency.
2021-09-22 20:02:58.139721: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:360] Ignored change_concat_input_ranges.

के बाद: TF2 के साथ कनवर्ट करना

सबसे पहले, TF1 जमे हुए GraphDef को एक TF1 सहेजे गए मॉडल में कनवर्ट करें और फिर इसे एक छोटे v2 कनवर्टर फ़्लैग सेट के साथ TFLite मॉडल में कनवर्ट करें।

## Convert TF1 frozen Graph to TF1 SavedModel.

# Load the graph as a v1.GraphDef
import pathlib
gdef = tf.compat.v1.GraphDef()
gdef.ParseFromString(pathlib.Path(GRAPH_DEF_MODEL_PATH).read_bytes())

# Convert the GraphDef to a tf.Graph
with tf.Graph().as_default() as g:
  tf.graph_util.import_graph_def(gdef, name="")

# Lookup the input and output tensors.
input_tensor = g.get_tensor_by_name('input:0') 
output_tensor = g.get_tensor_by_name('MobilenetV1/Predictions/Softmax:0')

# Save the graph as a TF1 Savedmodel
remove_dir('saved_model_3/')
with tf.compat.v1.Session(graph=g) as s:
  tf.compat.v1.saved_model.simple_save(
      session=s,
      export_dir='saved_model_3/',
      inputs={'input':input_tensor},
      outputs={'output':output_tensor})

# Convert TF1 SavedModel to a TFLite model.
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir='saved_model_3/')
converter.optimizations = {tf.lite.Optimize.DEFAULT}
tflite_model = converter.convert()
2021-09-22 20:02:58.874490: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:351] Ignored output_format.
2021-09-22 20:02:58.874538: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:354] Ignored drop_control_dependency.
2021-09-22 20:02:58.874545: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:360] Ignored change_concat_input_ranges.

आगे की पढाई

  • का संदर्भ लें TFLite गाइड workflows और नवीनतम सुविधाओं के बारे में अधिक जानने के लिए।
  • आप TF1 कोड या विरासत TF1 मॉडल प्रारूपों (Keras उपयोग कर रहे हैं .h5 फ़ाइलें, जमे हुए GraphDef .pb , आदि), अपना कोड अपडेट और करने के लिए अपने मॉडल माइग्रेट करें TF2 SavedModel प्रारूप