与keras h5模型(VGG16预训练)相比,Tensorflow lite模型推断非常慢

cld4siwp  于 2022-11-30  发布在  其他
关注(0)|答案(2)|浏览(152)

与keras(h5)模型相比,Tensorflow lite预测速度非常慢。Colab和Windows 10系统之间的行为类似。我将标准VGG16模型转换为tflite,无论是否进行优化(converter.optimizations = [tf.lite.Optimize.DEFAULT])
以下是我得到的结果:

  • Keras模型(540MB)预测时间:零点一四秒
  • 未优化的tflite(540MB)预测时间:0.5秒
  • 优化后的tflite(135MB)预测时间:三十九秒

我是不是错过了什么?tflite不是应该在速度上进行优化吗?在Raspberry Pi或其他“更轻”的设备上的行为会有不同吗?
Link to the code on colab

hjzp0vay

hjzp0vay1#

TensorFlow Lite没有针对桌面/服务器进行优化,因此在这些环境中,它在大多数模型上的表现都很差,这并不奇怪。TFLite的优化内核(包括许多GEMM操作)专门针对移动的CPU(其指令集与桌面CPU IIUC不同)。
标准TensorFlow更适合您的用例。

fgw7neuy

fgw7neuy2#

我同意Sachin的观点。TFLite的预期用途是移动的设备。
但是,如果您需要在台式机或服务器上进行更快的推理,您可以尝试OpenVINO。OpenVINO针对英特尔硬件进行了优化,但它应该可以在任何CPU上工作。它通过转换为中间表示(IR)、执行图形修剪和将一些操作融合到其他操作中来优化您的模型,同时保持准确性。然后,它在运行时使用矢量化。
将Keras模型转换为OpenVINO相当简单。关于如何转换的完整教程可以在here中找到。下面是一些片段。

安装OpenVINO

最简单的方法是使用PIP。或者,您可以使用this tool来找到适合您的情况的最佳方法。

pip install openvino-dev[tensorflow2]

将模型保存为SavedModel

OpenVINO无法转换HDF5模型,因此您必须先将其另存为SavedModel。

import tensorflow as tf
from custom_layer import CustomLayer
model = tf.keras.models.load_model('model.h5', custom_objects={'CustomLayer': CustomLayer})
tf.saved_model.save(model, 'model')

使用模型优化器转换SavedModel模型

Model Optimizer是OpenVINO开发包中的一个命令行工具。它可以将Tensorflow模型转换为IR,这是OpenVINO的默认格式。您也可以尝试FP16的精度,它应该可以在不显著降低精度的情况下给予更好的性能(更改data_type)。在命令行中运行:

mo --saved_model_dir "model" --data_type FP32 --output_dir "model_ir"

执行推论

转换后的模型可以由运行时加载,并针对特定设备进行编译,例如CPU或GPU(集成到CPU中,如英特尔高清显卡)。我建议使用AUTO设备。它将为您选择最佳硬件。此外,如果您关心延迟,请提供性能提示(如下所示)。如果您依赖吞吐量,请使用THROUGHPUTCUMULATIVE_THROUGHPUT

# Load the network
ie = Core()
model_ir = ie.read_model(model="model_ir/model.xml")
compiled_model_ir = ie.compile_model(model=model_ir, device_name="AUTO", config={"PERFORMANCE_HINT":"LATENCY"})

# Get output layer
output_layer_ir = compiled_model_ir.output(0)

# Run inference on the input image
result = compiled_model_ir([input_image])[output_layer_ir]

免责声明:我在OpenVINO工作。

相关问题