【发布时间】:2021-11-16 03:39:58
【问题描述】:
我有一个包含资产、变量和 saved_model.pb 的 SAVED_MODEL_PATH
SAVED_MODEL_PATH
- 资产
- 变量
- saved_model.pb
我可以使用以下代码(主要部分)将其转换为 tflite 模型
# Convert the model
converter = tf.compat.v1.lite.TFLiteConverter.from_saved_model(SAVED_MODEL_PATH)
tflite_model = converter.convert()
tflite_model_name = 'model.tflite'
# Save the model.
with open(tflite_model_name, 'wb') as f:
f.write(tflite_model)
现在,在使用解释器时,我需要将任意大小的图像转换为模型的要求。例如,我现有的模型需要 320 x 320 的图像,那么
读取图像
img = cv2.imread(IMAGE_PATH)
image_np = np.array(img)
预处理代码(需要将此代码与tflite模型结合)
input_tensor = tf.convert_to_tensor(np.expand_dims(image_np, 0), dtype=tf.float32)
input_data = tf.reshape(tf.image.resize(image_np, [320, 320]), [1, 320, 320, 3])
将预处理数据输入解释器
interpreter.set_tensor(input_details[0]['index'], input_data)
interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]['index'])
print(output_data)
[[[0.05000001 0.55 0.85 0.95 ]
[0.17500001 0.12500003 0.375 0.5250001 ]
[0.5375 0.5375 0.7375001 0.6374999 ]
[0.6875 0.7625 0.7875 0.96250004]
[0.86249995 0.33749998 1.0625 0.4375 ]
[0.46678936 0.26678932 0.6082107 0.40821064]
[0.53357863 0.7335787 0.8164213 1.0164213 ]
[0.2125 0.7375 0.4125 0.83750004]
[0.61678934 0.66678935 0.75821066 0.8082107 ]
[0.29178935 0.86678934 0.43321067 1.0082107 ]]]
现在有什么方法可以调用任何对图像执行预处理以包含在 tflite 模型中的代码,以便在遇到图像时进行预处理(任何可能包括创建自定义转换函数的转换?) 例如,如果我们调整任意大小的图像(在这种情况下),它可以直接将图像转换为所需的大小(320 x 320 或根据要求的任何其他大小)?
【问题讨论】:
-
正如@sakumoil 所述,您可以在现有模型中添加
Resizing层,以在给定固定形状的情况下调整输入的大小。 -
这可以在训练期间添加,但在这里我想在我们已经有了 tflite 模型后进行集成。规范化也是一部分,我想灵活地进行自定义转换。希望你明白了
-
我希望我编辑的答案能够有所帮助。
-
我认为您要求 TFLite 支持库或带有 ImageProcessor 的任务库(您必须将元数据添加到 .tflite 文件)。检查文档tensorflow.org/lite/inference_with_metadata/lite_support 和tensorflow.org/lite/inference_with_metadata/task_library/…
标签: python tensorflow tensorflow2.0 tensorflow-lite tensorflow-serving