首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与h5模型(VGG16预训练)相比,Tensorflow模型的推断速度非常慢。

与h5模型(VGG16预训练)相比,Tensorflow模型的推断速度非常慢。
EN

Stack Overflow用户
提问于 2021-04-01 23:32:14
回答 2查看 585关注 0票数 0

与keras (h5)模型相比,Tensorflow的预测速度非常慢。这种行为在Colab和Windows 10系统上是相似的。我将标准的VGG16模型转换为有优化也有无优化(converter.optimizations = tf.lite.Optimize.DEFAULT)

以下是我得到的结果:

  • Keras模型(540 model )预测时间: 0.14秒
  • tflite无优化(540 0.5 )预测时间:0.5秒
  • 具有优化(135 39 )预测时间的tflite :39秒

我是不是漏掉了什么?tflite不是应该优化速度吗?在Raspberry Pi或其他“打火机”设备上,这种行为会有所不同吗?

链接到colab上的代码

EN

回答 2

Stack Overflow用户

发布于 2021-04-07 21:59:44

TensorFlow Lite并不是针对桌面/服务器进行优化的,因此在这些环境中,大多数模型的性能不佳也就不足为奇了。TFLite的优化内核(包括它们的许多GEMM操作)特别适合移动CPU(它们的指令集与桌面CPUs不同)。

标准TensorFlow更适合您的用例。

票数 0
EN

Stack Overflow用户

发布于 2022-11-25 15:47:24

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

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

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

安装OpenVINO

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

代码语言:javascript
复制
pip install openvino-dev[tensorflow2]

将您的模型保存为SavedModel

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

代码语言:javascript
复制
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)。在命令行中运行:

代码语言:javascript
复制
mo --saved_model_dir "model" --data_type FP32 --output_dir "model_ir"

运行推理

转换后的模型可以由运行时加载并为特定的设备编译,例如CPU或GPU (集成到CPU中,比如Intel HD Graphics)。我建议使用自动装置。它会为你选择最好的硬件。此外,如果您关心延迟,请提供性能提示(如下所示)。如果您依赖于吞吐量,则使用THROUGHPUTCUMULATIVE_THROUGHPUT

代码语言:javascript
复制
# 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工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66912736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档