文件交换

图片缩略图

深度学习工具箱转换器,用于ONNX模型格式

在MATLAB中导入和导出ONNX™模型,以与其他深度学习框架互操作
2.0
22级

41下载

更新2021年5月12日

在MATLAB中导入和导出ONNX™(开放神经网络交换)模型,以与其他深度学习框架互操作性。ONNX允许在一个框架中训练模型,并将其转移到另一个框架中进行推理。

打开onnxconverter。mlpkginstall文件,从您的操作系统或MATLAB将启动安装过程,您有。
这个mlpkginstall文件适用于R2018a和更高版本。

使用的例子:
%%导出到ONNX模型格式
网= squeezenet;%要导出的预训练模型
文件名=“squeezenet.onnx”;
exportonnxnetwork(net,f​​ilename);

%%导入导出的网络
net2 = importONNXNetwork (squeezenet。onnx”、“OutputLayerType”、“分类”);

%在随机输入图像上比较两个网络的预测
img =兰德(net.Layers (1) .InputSize);
Y = predict(net, img);
y2=预测(net2,img);

马克斯(abs (y-y2))

在MATLAB中导入ONNX网络,请参考:
//www.tatmou.com/help/deeplearning/ref/importonnxnetwork.html.

要从MATLAB导出ONNX网络,请参考:
//www.tatmou.com/help/nnet/ref/exportonnxnetwork.html

评论和评级(80

Ting苏

嗨,格雷夫,你使用的是哪个版本的MATLAB?这可能是我们已经解决的问题。如果你能和我们分享你的ONNX模型,我们可以看看。

M格雷夫

使用nnet.internal.cnn.onnx.translateONNX>getDataFromTypedFieldOrRawData错误(第252行)
未找到初始化器'const_empty_float__522'的数据。

@David请分享导出的.onnx文件,否则我们无法帮助您调试

大卫

这一切看起来都很好,但现在显示它在ONNXRuntime中工作。我一直无法,或者找不到任何其他人可以,在Matlab和ONNXRuntime之间远程获得相同的答案。我不确定这是我的python代码还是导出的.onnx文件,但到目前为止,我还没有看到一个在python和onnx运行时中工作的示例。我从Mathworks看到的唯一一个例子是使用一个随机数组,在这里给出了答案https://stackoverflow.com/questions/62372645/run-inference-using-onnx-model-in-python-input-incompatibility-problem
有没有人能够将他们训练过的模型从Matlab导出到ONNX,并在另一个环境中使用它?

raar a

Ting苏

@Jin,您可以使用“ImportOnXLayers”导入layerGraph,添加输出层,并使用“AssemblyNetwork”将layerGraph转换为DAG网络。

Jon红

@David--如果您使用的是Windows,则可能遇到以下错误://www.tatmou.com/金宝appsupport/bugreports/2465087. 该bug报告中列出了一个解决方法。

大卫

在2020b年工作,但在2021a崩溃。

金路易

好的,现在,我的matlab版本2018b,我发现了一个问题:
错误使用NNET.INTERNAL.CNN.NONX.TRANSLATEONNX(第35行)
尚未支持具有多个输出的模型。金宝app

出错 nnet.internal.cnn.onnx.IMPORTONX网络(第8行)
LayersOrGraph = net.internal.cnn.onnx. translateonnx (modelProto, OutputLayerType,
UserImageInputSize,true);

出错importONNXNetwork(53)行
Network = net.internal.cnn.onnx. importonnxnetwork (ModelFile, varargin{:});

出错test_network_01(4号线)
净= importONNXNetwork(“best.onnx”、“OutputLayerType”、“分类”、“类”,类)
如何解决?

亲爱的Ting苏:
复制onnxpb.dll后,就可以工作了,非常感谢!

Hishida欲之

亲爱的苏Ting,
我在R2021a (9.10.0.1602886 (R2021a))上也遇到了这个问题,并尝试跟随,它工作。
COPYFILE C:\ programdata \ matl金宝appab \ supportagepackages \ r2021a \ bin \ win64 \ onnxpb.dll c:\ programdata \ matlab \ supportpackages \ r2021a \ toolbox \ nnet \ supportpackages \ onnx \ + nnet \ +内部\ + cnn \ + onnx \

Ting苏

崔,
我们的工程师找到了原因和解决办法。你能试试下面的命令吗?
mv c:\ programdata \ matl金宝appab \ supportpackages \ r2021a \ bin \ win64 \ onnxpb.dll c:\ programdata \ matlab \ supportpackages \ r2021a \ toolbox \ nnet \ supportpackages \ onnx \ + nnet \ +内部\ + cnn \ + onnx \

亲爱的Ting苏:
我正在使用matlab2021a,ONNX模型格式的转换器(版本21.1.0)

Ting苏

你好,崔,
你能告诉我们你使用的是MATLAB的哪个版本吗?

2021.3.15更新:运行bug报告
无论导入或导出常见的ONNX模型(RESET50,RESET18等),发生错误
--------------------------------- 进口yolov5.onnx ---------------------------------------
使用nnet.internal.cnn.onnx.onnxmex时出错
无效MEX-file“C: \ ProgramData \ MATLAB工具箱\金宝app SupportPackages \ R2021a \ \ nnet \ SupportPackages \ onnx \ + nnet \ +内部\ + cnn \ + onnx \ onnxmex。mexw64”:找不到指定的模块。
nnet.internal.cnn.onnx.ModelProto(第32行)中出错
modelptr = onnxmex(int32(funcname.edeserializefromfile),filename);
Error in net.internal.cnn.onnx. importonnxfunction(第8行)
modelproto = nnet.internal.cnn.onnx.monx.modelproto(InputFileName);
importONNXFunction错误(第39行)
params = net.internal.cnn.onnx. importonnxfunction (modelfile, outputFunctionName);
onnxtest错误(第3行)
params = importONNXFunction (onnxpath yolov5Fcn);
---------------------------------导出resnet50.onnx---------------------------------------
使用nnet.internal.cnn.onnx.onnxmex时出错
无效MEX-file“C: \ ProgramData \ MATLAB工具箱\金宝app SupportPackages \ R2021a \ \ nnet \ SupportPackages \ onnx \ + nnet \ +内部\ + cnn \ + onnx \ onnxmex。mexw64”:找不到指定的模块。
net.internal.cnn.onnx. modelproto /writeToFile错误(第52行)
ModelPtr=onnxmex(int32(FuncName.EnewModelProto));
nnet.internal.cnn.onnx.exportonnXnetwork(第38行)错误错误
writeToFile (modelProto文件名);
exportONNXNetwork错误(第38行)
nnet.internal.cnn.onnx.exportONNXNetwork(网络、文件名、变长度输入宗量{:});

在R2020B中引入了“impriorNonNXFunction”功能,这非常好,但导入的功能是可读性差不多的,手动修改不易;此外,MathWorks计划是否介绍“exportOnnxfunction”功能?我个人建议MathWorks应该加强定制层的灵活性,并且可再现的可读性将大大提高!

什么时候支持Opse金宝appt版本10校准量化onnx导入?比如量化的resnet50?
链接:https://pan.baidu.com/s/1oMcm2w4r5bUFU-RAqV8AUg
提取码:afba

更新14 Oct 2020 ?发行说明吗?

马库斯

为什么这个特性不支持浅神经网络?金宝app

我如何使用我的神经网络,例如作为Azure中的模型?有什么建议吗?

马库斯

r·纳瓦兹

如何下载深度学习工具箱转换器进行Onnx型号格式并将其脱机(未连接到Internet)

Jean-Nicola浴衣

该文档表示Tanhlayer支持,但是当我尝试导出它时,我得到了:金宝app
PlaceHolder2占位符运营商:com.mathworks

我做错了什么?

扬·德戈纳

你好,

此代码是否适用于CNN架构以外的其他架构?

谢谢,

对于onnx,它应该是onnx细粒度的操作符,而不是粗糙的“层”,例如,我定制了一个网络层yolov3Layer,如何导出到onnx ?

雅各布·尼古拉·凯丝

目前不支持shufflenet模型金宝app

Saad Al-Baddi

亲爱的MathWorks深度学习工具箱团队:

您是否有一个可以支持'nnet.cnn.layer.regionprop金宝apposallayer',nnet.cnn.layer.rpnclassificationlayer和nnet.cnn.layer.rpnsoftmaxlayer的新版本吗?

哈米德bastami

亲爱的MathWorks深度学习工具箱团队:
你好,我尝试使用exportONNXNetwork,我运行了这部分代码,但我看到这个错误,你能帮我吗?!
使用的例子:
%%导出到ONNX模型格式
网= squeezenet;%要导出的预训练模型
文件名=“squeezenet.onnx”;
exportonnxnetwork(net,f​​ilename);
---------------------------------
这个错误出现:
使用onnxmex错误
打开文件的squeezenet。onnx”失败了。

net.internal.cnn.onnx. modelproto /writeToFile错误(第55行)
onnxmex(int32(funcname.eserializoTofile),modelptr,filename);

nnet.internal.cnn.onnx.exportonnxnetwork(第36行)错误
writeToFile (modelProto文件名);

exportONNXNetwork中出错(第40行)
nnet.internal.cnn.onnx.exportONNXNetwork(网络、文件名、变长度输入宗量{:});

亲爱的Mathworks Deeplenting Toolbox团队:
当我使用另一个简单的3d cnn网络导入测试,有一个错误与错误??
我的3d网络在这里:https://drive.google.com/open?id=1vrX44WV1yWIsoNdbW5sTBQHurdMhf0c_
使用assembleNetwork出错(第47行)
无效的网络。
nnet.internal.cnn.onnx.importonnxnetwork(第11行)错误错误
网络=组装网络(层组织图);
ImportOnnknetwork中的错误(第52行)
Network=nnet.internal.cnn.onnx.importonxnetwork(modelfile,varargin{:});
引起的:
层'node_22':层验证失败。在Layer net.onnx. Layer. flatlayer中使用“predict”出错。该函数抛出一个错误,并且不能
执行。
错误使用交换
订单必须具有N-D阵列的至少n个元素。
层'node_22':层验证失败。在Layer net.onnx. Layer. flatlayer中使用“predict”出错。该函数抛出一个错误,并且不能
执行。
错误使用交换
订单必须具有N-D阵列的至少n个元素。
层'node_22':输入大小不匹配。输入到该层的输入大小不同于预期的输入大小。
这一层的输入:
从层“节点21”(1×4×4×512输出)

嗨,@Kristina Mikolaichuk
很抱歉告诉你,根据警告,当前版本不支持某些层,' net.cnn.layer. regionproposallayer ',…等,只导出支持层的权重。金宝app

Kristina Mikolaichuk.

你好!你能帮我个忙吗?当我试图导出更快的RCNN网络,有一些警告:

警告:ONNX不支持' net.cnn.lay金宝apper. regionproposallayer '层。导出到ONNX操作员
“com.MathWorks.Placeholder”。
警告:ONNX不支持' net.cnn.lay金宝apper. rpnsoftmaxlayer '层。导出到ONNX操作员
“com.MathWorks.Placeholder”。
警告:ONNX不支持层“nnet.cnn.la金宝appyer.rpncClassificationLayer”。导出到ONNX
操作员'com.mathworks.placeHolder'。

这些层在未来的更新中会被支持吗?金宝app

2019年11月15日的版本仍然无法导入和导出yolov2网络!

这个版本现在支持导入3d卷积神经网金宝app络,但“激活”功能将失败时,使用导入的3d卷积网络?
我的简单3D CNN在这里:https://drive.google.com/file/d/15i0IEiNWAqqexairNFv1eITtqwMA5rYi/view?usp=sharing

马蒂亚斯举行

仍然没有与回归输出层的Bilstm层一起使用

梁成金

嗨,当我从Keras网络导入图层时,发生了一个错误:
“在Keras模型中导入‘LSTM’层的功能API还不支持”金宝app
那么,我该怎么做才能克服这个问题呢?

亲爱的MathWorks深度学习工具箱团队:
我希望特征版本更加丰富地支持Onnx运算符,而不仅仅是目前的28个运金宝app营商。
希望以后版本更丰富的支持ONNX运营商,不仅仅只是目前的28种运营商。
到目前为止,“ImportCEnfenetwork”功能非常糟糕。
到目前为止“importCaffeNetwork”这个函数表现的很差!
来吧!
加油!

嗨@cui

我们几乎跟随了这样的例子

https://github.com/microsoft/onnxruntime/blob/master/csharp/test/Microsoft.ML.OnnxRuntime.EndToEndTests.Capi/CXX_Api_Sample.cpp

这个网络似乎起作用了。我还没有想出如何为一个新序列重置LSTM层的内部状态。我们只是重新加载模型。

最好的祝愿

安德烈亚斯

亲爱的苏Ting,
我可以导入和导出matlab自带的mobilenetv2模型,非常自由和方便,但当我导入mobilenetv2时。onnx保存在pytorch-onnx框架中,average epooling的最后一层无法正确导入。为什么?
https://github.com/tonylins/pytorch-mobilenet-v2,onnx liabray可以负责导入和导出,matlab不能…

警告:无法导入一些ONNX运营商,因为他们还不支持。金宝app它们已经被占位符层所取代。找到
这些层调用返回对象上的函数findPlaceholderLayers。
>在nnet.internal.cnn.onn.onnx.importonnxlayers(第13行)
在ImportOnnxLayers(第48行)

嗨@andreas herzog:
请问如何在C ++接口功能中使用LSTM Onnx模型?也是Matlab的序列功能,有这样的示例代码可以指代,谢谢!

亲爱的Matlab的团队,

导出和加载LSTM模型现在可以正常工作,使用c++接口评分也可以正常工作。

我注意到一件小事,输出张量不是被称为网络中的最后一层,而是作为层名和最后计算机图形操作的组合。

所以我的最后一层被命名为“fc_2”(一个来自深度学习工具箱的标准名称),但输出张量必须在c++接口中使用“fc_2_Add”来检索,这也是当你用Netron App加载onnx文件时显示的。

有必要这样命名吗?我们在模型描述中保存一个序列化的onnx文件,并将某个层的名称作为输出张量,以控制哪个计算图节点作为输出。因为对于某些类型,这并不一定需要是最后一层(例如使用自动编码器编码)。

这能回到之前的行为吗或者我们能从层结构中读出,正确的张量名称应该是什么样的?

衷心祝愿并感谢您的努力。

安德烈亚斯

亲爱的Matlab的团队,

新版本(8月1日)似乎解决了我们在LSTM导出方面的问题。

使用python onnxruntime 0.5在github上测试给定的示例。

非常感谢!

安德烈亚斯

亲爱的苏Ting,

新版本中有没有写过与ONNX运行时兼容的LSTM?

抱歉是一种痛苦,但我们需要那些功能为客户提供模型。

最好的祝愿

安德烈亚斯

saikishore reddipalli

我能够将安装位置指向一个有足够空间来完成此操作的文件夹。matlabshared.金宝appsupportpkg.setSupportPackageRoot ()

谢谢。

saikishore reddipalli

我遇到了onnx安装的问题。甚至无法下载文件。我使用的是RHEL 7.5。对这个问题有什么看法吗?

魏壮族Lim

你好,
我试图导出一个模型在张量流中使用它。它和这个基本上是一样的
https://de.mathworks.com/help/deeplearning/examples/cocktail-party-source-separation-using-deep-learning-networks.html
我收到警告:“警告:ONNX不支持层‘BiasedSigmoidLayer’。导出到ON金宝appNX操作符‘com.MathWorks.Placeholder’。”因为其中一个层是自定义sigmoid层。
我未能导入到tensorflow得到错误
validationError:没有为占位符注册的模式,其中domain_version为1
==>上下文:坏节点规范:输入:“fc_1”输出:“layer_1”名称:“layer_1”op_type:“占位符”doc_string:“占位符运算符”域:“com.mathworks”
有什么办法可以解决这个问题吗?
我Onnx莫德尔:https://drive.google.com/open?id=1c5ItcPoYU2xkmOZNiUgrIetLsixEewYK

谢谢提前

亲爱的苏Ting,

优秀!:D.

最好的祝愿

安德烈亚斯

Ting苏

你好安德烈亚斯,
新版本将很快发布。

凯文庄瑞豪

它与yolov2合作吗?

亲爱的苏Ting,

可以用LSTM解决该问题的新版本中的任何单词(参见github ticket)。我们希望使用onnxruntime将一些模型部署到应用程序中。

最好的祝愿

安德烈亚斯

亲爱的苏Ting,
exportONNXNetwork()导出的onnx模型与在opencv和Matlab中运行的结果不同?我也在这里发布了我的问题:
https://ww2.mathworks.cn/matlabcentral/answers/464550-the-onnx-model-exported-by-exportonnxnetwork-is-not-the-same-as-the-result-of-running-in-opencv-an

加布里埃尔·米塔格

嗨叮苏,
我注意到最近有一个转换器的更新,但lstm似乎仍然不能正常工作。我也在这里发布了我的问题:
https://de.mathworks.com/matlabcentral/answers/457176-onnx-export-yields-error-in-windows-ml?s_tid=prof_contriblnk

亲爱的苏Ting,
当前onnx版本是否支持导出目标检测网络,如Yolov2网络金宝app(export to Yolov2 .onnx)?

亲爱的苏Ting,

是的,那是我在github上打开的问题。

https://github.com/microsoft/onnxruntime/issues/1016

最好的祝愿

安德烈亚斯

Ting苏

你好安德烈亚斯,
我们注意到一些由MATLAB ONNX Converter导出的LSTM模型不能很好地与ONNX Runtime一起工作,尽管它们可以被加载到其他框架中,因为ONNX Runtime严格遵循ONNX规格的形状要求。一个新的MATLAB ONNX转换器即将发布,它将与ONNX运行时更好地工作。

Ting苏

你好安德烈亚斯,
谢谢你的问题。以下链接中是否报道了相同的问题?
https://github.com/microsoft/onnxruntime/issues/1016
我们正在调查此事,很快会回复您。

亲爱的Matlab的团队,

我们正在导出一个lstm模型(基本上按照序列到序列回归示例中描述的那样构建,使用涡扇发动机示例数据。

当我们在onnxruntime(从源代码0.4.0版本构建)中导入它时,我们得到了一个错误消息:

Load model from temp.onx failed:Node:fc_2 Output:fc_2 [ShapeInferenceError] source and target dimensions number Mismatch。源目标= 3 = 2

我们可以在Netron中加载onnx文件,并有一个fc_2输出,有点奇怪的<1x1x1>维度。预期输出维度是否会出现混淆?

我们可以发送onnx-File / Matlab nnet给你一些帮助吗?

非常感谢。

亚历山德罗Gherardi

从matlab导出模型到其他运行时引擎不工作,除了琐碎的例子。我曾看到输出ONNX网络层出现奇怪的形状翻转,导致导入到python框架或c#时失败。

Michael Scheinfeild

当我导入模型到c++时,我没有相同的结果输出层在matlab中,你可以提供c++ opencv或tensorflow的例子,使层出来与matlab相同
例如,转换层

洪王

感谢Jihang Wang,在你的帮助下我设置了这个工具。

托马索Martire

加布里埃尔·米塔格

Jihang你好,感谢你分享这些信息,不幸的是这并没有解决我的问题。

Jihang王

大家好,我在MathWorks技术支持团队的帮助下找到了它不能工作的原因。金宝app我只是想在这里分享一下我的经验。基本上在我的路径上有一个函数它在阴影一个内置的MATLAB函数。我使用下面的代码重置我的MATLAB路径:
> > restoredefaultpath
> >重复toolboxcache
>> SavePath%注意:此命令将覆盖我当前的路径首选项。

之后,我从这个页面下载并重新安装了converter应用程序,并重新运行导出代码。问题已解决:)希望这有帮助。

加布里埃尔·米塔格

嗨,安德烈亚斯,我只是用了一个定制的CNN,并与WinMLRunner进行了检查,但我没有尝试任何预训练的模型。

Andreas Wirth

嗨,盖伯瑞尔
你能告诉我你用的是哪家CNN吗?
正如之前提到的,我尝试了基本的googlenet,但我不能使用微软ML。
如果我可以使用onnx文件交换,那将非常有帮助。
谢谢提前

加布里埃尔·米塔格

嗨Ting,非常感谢Opset更新。但是,现在我获得与LSTM网络的Andreas相同的错误:“第一个输入没有等级2”。如果在网络中有多个LSTM层,则错误消息以某种方式更改为:“第一个输入张量必须具有等级3”,CNNS似乎工作。

Ting苏

Andreas和Jihang你好,能联系我们的技术支持并发送模型给我们吗?金宝app

Andreas Wirth

嗨,婷,我和C遇到了同样的问题。我可以导出不同版本的网络。如果我尝试将模型加载到windows.ml中,我会得到一个“ShapeInferenceError”,第一个输入没有秩2。使用Opset v6,可以加载文件,但无法使用。我测试了googlenet,并尝试将onnx模型与一个名为“Netron”的程序进行比较。我发现的区别是第一层“Sub”从[3x244x244]更改为[1x3x244x244],但我不确定这是否是问题所在。第二件事是,使用onnxv6,visualstudio可以自动生成模型类,但不能使用v7或更高版本。似乎它不被认为是onnx模型。你能给我一个如何在C#中使用Matlab训练模型的建议吗?

Jihang王

嗨,Ting,我在C#中加载ONNX模型时遇到了同样的问题。我试图将模型保存到不同的Opset版本,但都不起作用。请告知。

Ting苏

嗨,加布里埃尔,
我们最近增加了对ONNX Opset金宝app 7、8和9的支持。可以在导出过程中通过可选的输入参数'OpsetVersion'指定要使用哪个Opset。你应该能够下载它,如果你有一个R2018b MATLAB。

Ting苏

kennth,
我们看到了一个类似的问题,修复将很快发布。如果你能寄给我们你的MATLAB模型,让我们测试它,那就太好了。

加布里埃尔·米塔格

如果可以将导出更新到版本7或8以允许与windows ml一起使用,那就太棒了。

肯尼斯·职位

exportonnxnetwork不使用cntk和python正常工作。转换产生值:GEMM:无效的形状,输入A和B预期为RANK = 2个矩阵。

李惠贤

您好,是否有用于导出Faster R-CNN模型的代码或工具箱?正如我得到的错误提到的模型不是DAGnetwork。希望能在这里得到一些反馈或帮助

瑞安·穆克吉

你们知道什么时候会增加对常量操作符的支持吗?金宝app

使用importONNXNetwork时出错(第39行)
Node 'node_20':常量操作符还不支持。金宝app

乌米特kacar

我编写了这个代码:)它非常好。谢谢你!

Ting苏

嗨trihn,
我们想知道关于importONNXNetwork()问题的更多细节。您以前安装过这个转换器的旧版本吗?

陈范教授

当我使用上面的示例时,函数importonnxnetwork()不起作用!

MATLAB版本兼容性
使用R2018a创建
兼容R2018a到R2021a
平台的兼容性
窗户 macOS Linux

社区宝藏狩猎

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!