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"
3条答案
按热度按时间wb1gzix01#
就我所测试的而言,没有显著的差异(也许对Keras来说是一个微小的开销)。
从keras切换到tensorflow并不能获得您所期望的更好的推理时间。我曾使用过TensorRT,大多数问题来自于并非所有层都得到支持(用于转换/优化)。
确保整个管道Keras模型-- TensorFlow模型--层优化-- TensorRT的所有操作都使用相同版本的Tensorflow完成。我建议通过
tensorflow.keras
而不是简单的keras
来训练模型。此外,请确保使用正确的FP操作进行转换。(FP 32/FP 16/INT 8)。如果从标准(FP 32)转换为INT 8,推理速度会有最大的提高。根据我的经验,从FP 32转换为FP 16的速度不会有显著提高。
语义分割是计算成本最高的任务,因此不要期望在TX 2上部署非常快的推理模型(例如使用TensorRT)。
rt4zxlrg2#
凯拉斯(当使用tf后端时)是一个构建tensorflow 计算图的库。计算是在这些图上执行的,而不是由Keras直接执行。除非你认为你可以手动优化生成的图,您可以使用tensorboard Keras回调函数来可视化tensorboard中的tensorflow模型。然后确定您是否认为可以手动优化它。除了ML研究人员和ML库开发人员,我不鼓励任何人采用这种方法。
如果问题是在模型精度/误差度量方面,而不是在进行推断时的CPU/GPU周期方面;我不认为转换为tensorflow 就一定能改进模型。
如果您需要模型本身的帮助,也许您可以尝试用模型的描述来改写问题(如果它运行在公共数据集上,这将非常有帮助)。
3yhwsihp3#
我不认为在纯Tensorflow中重建整个网络是值得的。我不期望看到太多的性能提升。
如果使用TensorRT没有给予好的结果,我建议尝试OpenVINO。OpenVINO针对英特尔硬件进行了优化,但它应该可以在任何CPU上工作。它通过转换为中间表示(IR)、执行图形修剪和将一些操作融合到其他操作中来优化您的模型,同时保持准确性。然后,它在运行时使用矢量化。
将Keras模型转换为OpenVINO相当简单。关于如何转换的完整教程可以在here中找到。下面是一些片段。
安装OpenVINO
最简单的方法是使用PIP。或者,您可以使用this tool来找到适合您的情况的最佳方法。
将模型保存为SavedModel
OpenVINO无法转换HDF5模型,因此您必须先将其另存为SavedModel。
使用模型优化器转换SavedModel模型
Model Optimizer是OpenVINO开发包中的一个命令行工具。它可以将Tensorflow模型转换为IR,这是OpenVINO的默认格式。您也可以尝试FP16的精度,它应该可以在不显著降低精度的情况下给予更好的性能(更改data_type)。在命令行中运行:
执行推论
转换后的模型可以由运行时加载,并针对特定设备进行编译,例如CPU或GPU(集成到CPU中,如英特尔高清显卡)。如果您不知道什么是最佳选择,请使用AUTO。您关心延迟,所以我建议添加一个性能提示(如下所示),以使用满足您要求的设备。
还有另一个notebook比较了PyTorch语义分割模型转换为OpenVINO前后的性能。
免责声明:我在OpenVINO工作。