mxnet转onnx 之 onnx_mxnet.export_model失败原因

在尝试将mxnet模型转换为onnx时遇到错误,起初因onnx版本过高导致转换失败。通过降低onnx版本到1.2.1,并使用python36及visual studio 2017环境,解决了MXNetError。但转换仍报相同错误,问题待解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mxnet模型转换onnx折腾了很久,终于搞清楚失败原因

转换代码参考: https://github.com/onnx/tutorials/blob/master/tutorials/MXNetONNXExport.ipynb

 

一开始的环境:

  • windows 10
  • visual studio 2019
  • python37
  • mxnet==1.4.1

pip install onnx 安装的是最新的1.6.0版本 

运行到 “onnx_mxnet.export_model” 这一句代码的时候 提示invalid *** array,然后就不能转换了

mxnet.base.MXNetError: [10:25:05] C:\Jenkins\workspace\mxnet-tag\mxnet\src\ndarray\ndarray.cc:1805: Check failed: fi->Read(data) Invalid NDArray file format

好嘛, 我查资料说是onnx1.2.1版本可以转换成功,(也有说1.2.2,1.3.0都可以的) pip install onnx==1.2.1竟然失败

好,我源码安装,参考https://github.com/onnx/onnx/readme.md 一样失败 源码折腾了近两天啊

 

要疯了

 

终于找到资料这么说的:</

### ONNXMXNet 的互操作性 ONNX(开放神经网络交换)是一种用于表示深度学习模型的标准格式,旨在促进不同框架间的模型换和共享。对于 MXNet 用户而言,ONNX 提供了一种便捷的方式来进行模型的导入导出。 #### 将 MXNet 模型换为 ONNX 格式 为了使 MXNet 构建的模型能够在其他支持 ONNX 的平台上运行,可以通过 `mxnet.contrib.onnx` 工具包来完成这一过程[^3]: ```python import mxnet as mx from mxnet import gluon, nd from mxnet.gluon.model_zoo.vision import get_model from mxnet.contrib.onnx.onnx2mx.import_onnx import convert_from_string # 加载预训练好的 MXNet 模型 model_name = 'resnet18_v1' pretrained_net = get_model(model_name, pretrained=True) # 导出成 ONNX 文件 dummy_input = nd.random.uniform(shape=(1, 3, 224, 224)) export_path = './' + model_name + '.onnx' gluoncv.utils.export_block(export_path, pretrained_net, preprocess=False, layout='NCHW') ``` 这段代码展示了如何保存一个经过训练后的 ResNet-18 V1 网络到本地磁盘作为 `.onnx` 文件。需要注意的是,在实际应用中可能还需要调整输入张量形状以及其他参数设置以适应具体需求。 #### 从 ONNX 换至 MXNet 当拥有一个已经存在于 ONNX 中的模型并希望将其迁移到 MXNet 进行进一步开发或优化时,则可利用相同的工具集反向操作——即加载 ONNX 并创建对应的 MXNet Symbol 或 HybridBlock 实例: ```python from mxnet.contrib.onnx.onnx2mx.import_model import import_model sym_file = "./resnet18_v1-symbol.json" params_file = "./resnet18_v1-0000.params" symbol, arg_params, aux_params = import_model(sym_file, params_file) mod = mx.mod.Module(symbol=symbol, context=mx.cpu(), label_names=None) mod.bind(for_training=False, data_shapes=[('data', (1, 3, 224, 224))]) mod.set_params(arg_params, aux_params, allow_missing=True) ``` 上述脚本说明了怎样读取由 ONNX 表达的 ResNet-18 结构及其权重数据,并构建相应的 MXNet Module 对象以便后续处理。 通过这种方式,不仅能够简化跨平台移植的工作流程,而且有助于加速 AI 应用程序的研发周期以及提高生产效率。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值