java调⽤onnx模型_MxNet模型转换Onnx
MxNet模型导出ONNX模型
Open Neural Network Exchange (ONNX)为AI模型提供了⼀种开源的数据模型格式。它定义了⼀个可扩展的计算图模型,以及内置运算符和标准数据类型的定义。它可以作为各种AI模型之间进⾏转换的媒介,例如,市⾯上没有现成的Caffe模型到MxNet模型的转换⼯具,我们可以借助于ONNX,⾸先将Caffe转换为Onnx,然后再将Onnx转换为MxNet,更为神奇的是,这之间的转换过程不过丢失原有模型的精度。
在本教程中,我们将展⽰如何将MXNet模型保存为ONNX格式。MXNet-ONNX操作符的覆盖范围和特性定期更新。请访问 ONNX operator coverage以获取最新信息。在本教程中,我们将学习如何使⽤MXNet到ONNX的模型导出⼯具对预先训练的模型进⾏导出。
预备知识
要运⾏本教程,你需要安装以下python模块:
MXNet >= 1.3.0。注意,经测试使⽤下⾯的命令进⾏安装MXNET可⽤:PIP INSTALL MXNET==1.4.0 --USER
onnx。注意,经测试使⽤如下命令进⾏安装onnx可⽤:pip install onnx==1.2.1 --user
**注意:**MXNet-ONNX导⼊、导出⼯具遵循ONNX操作符集的第7版,该操作符集附带ONNX v1.2.1。
import mxnet as mx
import numpy as np
ib import onnx as onnx_mxnet
import logging
logging.basicConfig(level=logging.INFO)
从MXNet Model Zoo下载⼀个模型
我们从MXNet Model Zoo.下载预训练的ResNet-18 ImageNet 模型。我们还将下载synset⽂件来匹配标签
# Download pre-trained resnet model - json and params by running following code.
path='io/models/imagenet/'
[mx.test_utils.download(path+'resnet/18-layers/resnet-18-0000.params'),
现在,我们已经在磁盘上下载了ResNet-18、params和synset⽂件。
MXNet到ONNX导出器API
让我们来描述MXNet的’ export_model ’ API。
help(port_model)
Help on function export_model in port_model:
export_model(sym, params, input_shape, input_type=, onnx_file_path=', verbose=False)
Exports the MXNet model file, passed as a parameter, into ONNX model.
Accepts both symbol,parameter objects as well as json and params filepaths as input.
Parameters
----------
sym : str or symbol object
Path to the json file or Symbol object
params : str or symbol object
Path to the params file or params dictionary. (Including both arg_params and aux_params)
input_shape : List of tuple
Input shape of the model e.g [(1,3,224,224)]
input_type : data type
Input data np.float32
onnx_file_path : str
Path where to save the generated onnx file
verbose : Boolean
If true will print logs of the model conversion
Returns
-------
onnx_file_path : str
Onnx file path
’ export_model ’ API可以通过以下两种⽅式之⼀接受MXNet模型。
MXNet sym, params对象:
如果我们正在训练⼀个模型,这是有⽤的。在训练结束时,我们只需要调⽤’ export_model '函数,并提供sym和params对象作为输⼊和其他属性,以将模型保存为ONNX格式。
MXNet导出的json和params⽂件:
如果我们有预先训练过的模型,并且希望将它们转换为ONNX格式,那么这是⾮常有⽤的。
由于我们已经下载了预训练的模型⽂件,我们将通过传递符号和params⽂件的路径来使⽤’ export_model ’ API。
如何使⽤MXNet到ONNXA导⼊、导出⼯具PI
我们将使⽤下载的预训练的模型⽂件(sym、params)并定义输⼊变量。
# 下载的输⼊符号和参数⽂件
sym = './resnet-18-symbol.json'
params = './resnet-18-0000.params'
# 标准Imagenet输⼊- 3通道,224*224
input_shape = (1,3,224,224)
# 输出⽂件的路径
onnx_file = './mxnet_'
我们已经定义了’ export_model ’ API所需的输⼊参数。现在,我们准备将MXNet模型转换为ONNX格式
# 调⽤导出模型API。它返回转换后的onnx模型的路径
converted_model_path = port_model(sym, params, [input_shape], np.float32, onnx_file)
这个API返回转换后的模型的路径,您稍后可以使⽤该路径将模型导⼊其他框架。
检验ONNX模型的有效性
现在我们可以使⽤ONNX检查⼯具来检查转换后的ONNX模型的有效性。该⼯具将通过检查内容是否包含有效的protobuf来验证模型: from onnx import checker
import onnx
# Load onnx model
model_proto = onnx.load_model(converted_model_path)
java调用python模型# Check if converted ONNX protobuf is valid
checker.check_graph(aph)
如果转换后的protobuf格式不符合ONNX proto规范,检查器将抛出错误,但在本例中成功通过。
该⽅法验证了导出模型原buf的有效性。现在,模型可以导⼊到其他框架中进⾏推理了!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论