TensorFlow.org এ দেখুন | Google Colab-এ চালান | GitHub-এ উৎস দেখুন | নোটবুক ডাউনলোড করুন |
TensorFlow Lite (TFLite) হল একটি টুলের সেট যা ডেভেলপারদের ML ইনফারেন্স অন-ডিভাইস (মোবাইল, এমবেডেড এবং IoT ডিভাইস) চালাতে সাহায্য করে। TFLite কনভার্টার হল এমন একটি টুল যা বিদ্যমান TF মডেলগুলিকে একটি অপ্টিমাইজ করা TFLite মডেল ফর্ম্যাটে রূপান্তর করে যা দক্ষতার সাথে ডিভাইসে চালানো যেতে পারে।
এই ডকটিতে, আপনি আপনার TF থেকে TFLite রূপান্তর কোডে কী কী পরিবর্তন করতে হবে তা শিখবেন, এর পরে কয়েকটি উদাহরণ যা একই কাজ করে।
আপনার TF থেকে TFLite রূপান্তর কোডে পরিবর্তন
আপনি যদি একটি লিগ্যাসি TF1 মডেল ফর্ম্যাট ব্যবহার করেন (Keras ফাইল, হিমায়িত GraphDef, চেকপয়েন্ট, tf.Session, ইত্যাদি), এটি TF1/TF2 SavedModel-এ আপডেট করুন এবং TF2 রূপান্তরকারী API
tf.lite.TFLiteConverter.from_saved_model(...)
এটিকে একটি TFLite মডেলে রূপান্তর করতে (সারণী 1 পড়ুন)।রূপান্তরকারী API ফ্ল্যাগ আপডেট করুন (সারণী 2 পড়ুন)।
লিগ্যাসি API যেমন
tf.lite.constants
সরান। (যেমন:tf.int8
কেtf.lite.constants.INT8
দিয়ে প্রতিস্থাপন করুন)
// টেবিল 1 // TFLite Python Converter API আপডেট
TF1 API | TF2 API |
---|---|
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 // TFLite Python Converter API ফ্ল্যাগ আপডেট
TF1 API | TF2 API |
---|---|
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 SavedModel-এ রূপান্তর করুন এবং তারপর একটি ছোট 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 গাইড পড়ুন।
- আপনি যদি TF1 কোড বা লিগ্যাসি TF1 মডেল ফরম্যাট ব্যবহার করেন (
.h5
ফাইল, ফ্রোজেন GraphDef.pb
, ইত্যাদি), তাহলে অনুগ্রহ করে আপনার কোড আপডেট করুন এবং আপনার মডেলগুলিকে TF2 SavedModel ফরম্যাটে স্থানান্তর করুন।