当前位置:首页 > Web开发 > 正文

MXNet导出的json和params文件: 如果我们有预先训练过的模型

2024-03-31 Web开发

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
from mxnet.contrib 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=‘‘
[mx.test_utils.download(path+‘resnet/18-layers/resnet-18-0000.params‘),
mx.test_utils.download(path+‘resnet/18-layers/resnet-18-symbol.json‘),
mx.test_utils.download(path+‘synset.txt‘)]

此刻,我们已经在磁盘上下载了ResNet-18、params和synset文件。

MXNet到ONNX导出器API
让我们来描述MXNet的’ export_model ’ API。

help(onnx_mxnet.export_model)

Help on function export_model in module mxnet.contrib.onnx.mx2onnx.export_model:

export_model(sym, params, input_shape, input_type=<type ‘numpy.float32‘>, onnx_file_path=u‘model.onnx‘, 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.
Operator support and coverage - https://cwiki.apache.org/confluence/display/MXNET/MXNet-ONNX+Integration

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 type e.g. 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_exported_resnet50.onnx‘

我们已经界说了’ export_model ’ API所需的输入参数。此刻,我们筹备将MXNet模型转换为ONNX格局

# 挪用导出模型API。它返反转展转换后的onnx模型的路径
converted_model_path = onnx_mxnet.export_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)

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32468.html