Tensorflow lite模型的推理与keras h5模型(VGG16预训练)相比非常缓慢



Tensorflow lite预测与keras(h5(模型相比非常缓慢。Colab和Windows 10系统上的行为类似。我将标准VGG16模型转换为tflite,包括优化和不优化(converter.optimization=[tf.lite.Poptimite.DEFAULT](

以下是我得到的结果:

  • Keras模型(540MB(预测时间:0.14秒
  • tflite无优化(540MB(预测时间:0.5秒
  • tflite优化(135MB(预测时间:39秒

我是不是遗漏了什么?tflite不是应该针对速度进行优化吗?在Raspberry Pi或其他"较轻"设备上的行为会有所不同吗?

colab 上的代码链接

TensorFlow Lite没有针对桌面/服务器进行优化,因此它在这些环境中的大多数模型中表现不佳也就不足为奇了。TFLite的优化内核(包括许多GEMM操作(特别适用于移动CPU(与桌面CPU IIUC没有相同的指令集(。

标准TensorFlow更适合您的用例。

我同意Sachin的观点。TFLite的预期用途是移动设备。

然而,如果您需要在桌面或服务器上进行更快的推理,您可以尝试OpenVINO。OpenVINO针对英特尔硬件进行了优化,但它可以与任何CPU配合使用。它通过转换为中间表示(IR(、执行图形修剪并将一些操作融合到其他操作中来优化模型,同时保持准确性。然后在运行时使用矢量化。

将Keras模型转换为OpenVINO非常简单。关于如何做到这一点的完整教程可以在这里找到。下面是一些片段。

安装OpenVINO

最简单的方法是使用PIP。或者,您可以使用此工具在您的情况下找到最佳方法。

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模型

模型优化器是来自OpenVINO开发包的命令行工具。它将Tensorflow模型转换为IR,这是OpenVINO的默认格式。您也可以尝试FP16的精度,它应该会在精度没有显著下降的情况下为您提供更好的性能(更改data_type(。在命令行中运行:

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

运行推断

转换后的模型可以由运行时加载,并针对特定设备进行编译,例如CPU或GPU(集成到您的CPU中,如Intel HD Graphics(。我建议使用自动装置。它会为您选择最好的硬件。此外,如果您关心延迟,请提供该性能提示(如下所示(。如果您依赖吞吐量,请改用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工作。

最新更新