模型制备
每一个深度学习工作流程都是从获取模型开始的。您可以选择准备一个自定义的网络,使用现成的解决方案并根据您的需求进行调整,甚至可以从在线数据库下载并运行预先训练的网络,例如TensorFlow Hub,Hugging Face,Torchvision模型。
OpenVINO™支持多种模型格式,并允许将它们转换为自己的openvino.runtime.Model(ov.Model),提供了专用于此任务的工具。
有几个选项可以将模型从原始框架转换为OpenVINO模型格式(ov.Model
)。
read_model()
方法从文件中读取模型并生成ov.Model
。如果文件是支持的原始框架文件格式之一,则会自动转换为OpenVINO中间表示。如果文件已经是OpenVINO IR格式,它将“按原样”读取,而不涉及任何转换。ov.Model
可以使用ov.serialize()
方法序列化为IR。可以使用应用后训练量化方法的神经网络压缩框架(NNCF)来进一步优化序列化IR。
Python中转换模型
模型转换API,具体来说就是mo.convert_model()
方法将原框架的模型转换为ov.Model
。mo.convert_model()
返回内存中的ov.Model
对象,因此不需要read_model()
方法。结果ov.Model
可以在相同的训练环境(python脚本或Jupiter Notebook)中推断出来。mo.convert_model()
提供了一种方便的方法,可以在推理应用程序中快速从基于框架的代码切换到基于OpenVINO的代码。除了模型文件之外,mo.convert_model()
还可以直接使用Python构建OpenVINO扩展对象,以便更轻松地转换OpenVINO中不支持的操作。mo.convert_model()
方法也有一组参数来切割模型,设置输入形状或布局,添加预处理等。
转换模型 mo
命令行工具
转换模型的另一个选择是使用mo
命令行工具。mo
是一种跨平台工具,可促进训练和部署环境之间的转换,执行静态模型分析,并调整深度学习模型,以便在与mo.convert_model
方法相同的端点目标设备上实现最佳执行。
mo
需要使用预训练的深度学习模型,支持以下格式之一:TensorFlow、TensorFlow Lite、PaddlePaddle或ONNX。mo
将模型转换为OpenVINO中间表示格式(IR),需要使用ov.read_model()
方法读取。然后,您可以使用OpenVINO™ Runtime编译和推断ov.Model
。
下图展示了部署经过训练的深度学习模型的典型工作流程:
其中IR是描述模型的一对文件:
-
.xml
-描述网络拓扑。 -
.bin
-包含权重和偏置二进制数据。
来自ONNX、PaddlePaddle、TensorFlow和TensorFlow Lite的模型文件(不是Python对象)(请查看TensorFlow前端功能和限制)不需要单独的模型转换步骤,即mo.convert_model
。OpenVINO提供了C++和Python API,可以直接通过调用read_model
方法将模型导入OpenVINO Runtime。
上述mo
和mo.convert_model()
转换方法的结果相同。你可以选择其中一个,这取决于什么是最适合你。请记住,如果使用相同的参数集,模型转换的结果不应有任何差异。
支持的模型格式
OpenVINO IR(中间表示)-OpenVINO™的专有格式,受益于其全部功能。
ONNX、PaddlePaddle、TensorFlow、TensorFlow Lite -直接支持的格式,这意味着它们可以与 OpenVINO Runtime无需任何预先转换。有关如何在ONNX、PaddlePaddle或TensorFlow上运行推理的指南, 了解如何将OpenVINO™与您的应用程序集成。
MXNet、Caffe、Kaldi -间接支持的格式,这意味着它们需要在运行推理之前转换为OpenVINO IR。转换使用模型转换API完成,在某些情况下可能涉及中间步骤。