图像缩略图

ONNX模型格式的深度学习工具箱转换器

MATLAB中的导入和导出ONNX™模型,用于与其他深度学习框架互操作性

69下载

更新2021年3月10

MATLAB内的进出口onnx™(开放式神经网络交换)模型与其他深度学习框架的互操作性。ONNX使模型能够在一个框架中接受培训并转移到另一个框架以进行推断。

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

用法示例:
%%导出到ONNX模型格式
网= squeezenet;%要导出的预训练模型
文件名=“squeezenet.onnx”;
exportONNXNetwork(净、文件名);

%%导入导出的网络
net2 = importonnxnetwork('scriezenet.onnx','outputlayertype','分类');

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

Max(ABS(Y-Y2))

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

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

意见及评分(76.

Raar一

Ting苏

@Jin,你可以使用“importONNXLayers”导入layerGraph,添加输出层,并使用“assembleNetwork”将layerGraph转换为DAGNetwork。

Jon红

@David—如果你使用的是Windows,那么你可能会碰到这个bug://www.tatmou.com/金宝appsupport/bugreports/2465087。bug报告中列出了一个解决方案。

大卫

在2020年起作用,但在2021年崩溃。

金路易斯

好的,现在,我的matlab版本2018b,我发现了一个问题:
错误使用nnet.internal.cnn.onnx.translateONNX(35)行
目前还不支持具有多个输出的模型。金宝app

出错nnet.internal.cnn.onnx.importONNXNetwork(第8行)
playersorgraph = nnet.internal.cnn.onnx.translateonnx(ModelProto,OutputLayerType,
UserImageInputSize,真正的);

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

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

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

Hiroyuki 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 \ MAT金宝appLAB \ SupportPackages \ R2021a \ bin \ win64 \ onnxpb.dll C: \ ProgramData \ MATLAB工具箱\ SupportPackages \ R2021a \ \ nnet \ SupportPackages \ onnx \ + nnet \ +内部\ + cnn \ + onnx \

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

Ting苏

嗨崔,
你能告诉我们你正在使用的matlab发布吗?

2021.3.15更新:运行错误报告
无论是导入还是导出常用的onnx模型(resnet50、resnet18等),都出现了错误
--------------------------------- 进口yolov5.onnx ---------------------------------------
错误使用nnet.internal.cnn.onnx.onnxmex
无效的mex-file'c​​:\ programdata \ matlab \金宝app supportspackages \ r2021a \ toolbox \ nnet \ supportagepackages \ onnx \ + nnet \ +内部\ + cnn \ + onnx \ onnxmex.mexw64':
net.internal.cnn.onnx. modelproto错误(第32行)
ModelPtr = onnxmex(int32(FuncName.EdeserializeFromFile), filename);
nnet.internal.cnn.onnx.importonnxfunction(第8行)错误错误
modelProto = nnet.internal.cnn.onnx.ModelProto (inputFilename);
importONNXFunction错误(第39行)
params = nnet.internal.cnn.onn.onnx.importonnxfunction(模块,OutputFunctionname);
onnxtest错误(第3行)
Params = ImportOnnXFunction(OnnxPath,'Yolov5fcn');
--------------------------------- 出口resnet50.onnx ---------------------------------------
错误使用nnet.internal.cnn.onnx.onnxmex
无效的mex-file'c​​:\ programdata \ matlab \金宝app supportspackages \ r2021a \ toolbox \ nnet \ supportagepackages \ onnx \ + nnet \ +内部\ + cnn \ + onnx \ onnxmex.mexw64':
nnet.internal.cnn.onnx.modelproto / writeTofile的错误(第52行)
ModelPtr = onnxmex (int32 (FuncName.EnewModelProto));
在net.internal.cnn.onnx. exportonnxnetwork错误(第38行)
WriteTofile(ModelProto,filename);
exportONNXNetwork错误(第38行)
nnet.internal.cnn.onn.nonn.nonn.exportonnxnetwork(网络,文件名,varargin {:});

R2020b中引入了“importONNXFunction”函数,非常好,但是导入的函数可读性差,不容易手工修改;另外,mathworks是否计划引入“exportONNXFunction”函数?我个人建议mathworks应该增强自定义层的灵活性,可读性将会大大增强!

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

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

mark

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

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

mark

r·纳瓦兹

如何下载ONNX模型格式的深度学习工具箱转换器并离线安装它(未连接到互联网)

Jean-Nicola Blanchet

文档说tanhLayer是支持的,但是当我尝试导出它时,我得到的是:金宝app
PlaceHolder2占位符运营商:com.mathworks

我哪里做错了?

Jan Drgona

你好,

这段代码是否适用于其他CNN架构?

谢谢,
1月

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

jakob nikolas kather.

目前不支持shuffle模式金宝app

萨阿德Al-Baddi

亲爱的Mathworks深入学习工具箱团队:
嗨,铜

你有一个可以支持' net.cnn.layer. regionpropo金宝appsallayer ', net.cnn.layer. rpnclassificationlayer和net.cnn.layer. rpnsoftmaxlayer的新版本吗?

Hamed Bastami.

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

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

在net.internal.cnn.onnx. exportonnxnetwork错误(第37行)
WriteTofile(ModelProto,filename);

exportONNXNetwork错误(第40行)
nnet.internal.cnn.onn.nonn.nonn.exportonnxnetwork(网络,文件名,varargin {:});

亲爱的MathWorks DeepLearning工具箱团队:
当我使用另一个简单的3D CNN Import测试时,错误有一个错误???
我的3D网络是:https://drive.google.com/open?id=1vrX44WV1yWIsoNdbW5sTBQHurdMhf0c_
使用assembleNetwork出错(第47行)
无效的网络。
Error in net.internal.cnn.onnx. importonnxnetwork(第11行)
网络= assembleNetwork (LayersOrGraph);
importONNXNetwork错误(第52行)
Network = net.internal.cnn.onnx. importonnxnetwork (modelfile, varargin{:});
引起的:
层'node_22':层验证失败。在Layer net.onnx. Layer. flatlayer中使用“predict”出错。该函数抛出一个错误,并且不能
执行。
错误使用交换
对于N- d数组,ORDER必须至少有N个元素。
层'node_22':层验证失败。在Layer net.onnx. Layer. flatlayer中使用“predict”出错。该函数抛出一个错误,并且不能
执行。
错误使用交换
对于N- d数组,ORDER必须至少有N个元素。
层'node_22':输入大小不匹配。这一层的输入大小与预期的输入大小不同。
这一层的输入:
From layer 'node_21' (1×4×4×512 output)

嗨,@kristina mikolaichuk
我很遗憾地告诉你,根据警告,当前版本不支持某些图层'nnet.cnn.layer.regionproposallayer',...等,只有支持层的权重。金宝app

克里斯蒂娜Mikolaichuk

你好!你可以帮帮我吗?当我尝试导出更快的RCNN网络时,有一些警告:

警告:ONNX不支持“NNET.CNN.Lay金宝apper.regionProposAllayer”图层。导出到ONNX操作员
'com.mathworks.placeholder'。
警告:ONNX不支持' net.cnn.lay金宝apper. rpnsoftmaxlayer '层。导出到ONNX操作员
'com.mathworks.placeholder'。
警告:ONNX不支持' net.cnn.lay金宝apper. rpnclassificationlayer '层。出口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层

liangcheng金

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

亲爱的Mathworks深入学习工具箱团队:
我希望特性版本能更多地支持ONNX操作符,而不仅仅是目前的28个操作金宝app符。
希望以后版本更丰富的支持onnx运算符,不依然是目前的28种运营商。
到目前为止,“importCaffeNetwork”功能的性能非常差。
到目前为主“ImportCEnfenetwork”这这个数表现的很差!
来吧!
加油!

andreas herzog.

嗨@cui

我们基本上是按照例子来的

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

并且网络似乎有效。我没有想出如何为新序列重置LSTM层的内部状态。我们只是重新加载模型。

最好的祝愿

安德烈亚斯

亲爱的苏Ting,
我可以非常自由且方便地导入MobileNetv2模型,而是自由方便地使用MATLAB,但是当我在Pytorch-Onnx框架中保存MobileNetv2.onnx时,就无法正确导入普通冰的最后一层。为什么?
https://github.com/tonylins/pytorch-mobilenet-v2,onnx liabray可以负责导入和导出,matlab不能…

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

嗨@Andreas赫尔佐格:
请问您是如何在c++接口函数中使用LSTM onnx模型的?也是一个用matlab实现的序列特性,有这样的示例代码可以参考一下,谢谢!

andreas herzog.

亲爱的Matlab团队,

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

我注意到的一个次要的东西,输出张量不能像网络中的速度层一样调用,而是作为层名称和最后一个计算机图操作的组合。

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

这是必要的吗?我们在我们的模型中保存说明一个序列化的ONNX文件和某个图层的名称作为输出张量控制哪个计算图形节点充当输出。由于某些类型,这不必是必需的速度层(例如,与AutoEncoder编码)。

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

祝福你,谢谢你的努力。

安德烈亚斯

andreas herzog.

亲爱的Matlab团队,

新版本(8月1日)似乎可以解决LSTM导出问题。

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

很多谢谢!

安德烈亚斯

andreas herzog.

亲爱的苏Ting,

关于编写与ONNX运行时兼容的LSTM的新版本有什么消息吗?

很抱歉给您带来了麻烦,但是我们需要这个功能块来为我们的客户交付模型。

最好的祝愿

安德烈亚斯

Saikishore Reddipalli.

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

谢谢。

Saikishore Reddipalli.

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

魏庄林

你好,
我正在尝试导出模型以在Tensorflow中使用它。它基本上与此相同
https://de.mathworks.com/help/deeplearning/examples/cocktail-party-source-eparation-using-deep-learning-networks.html.
我得到警告:“警告:ONNX不支持层'BiasedSigmoidLayer'。金宝app导出到ONNX操作符'com.MathWorks.Placeholder'。“因为其中一层是定制的乙状体层。
我未能导入tensorflow获取错误
ValidationError: No Schema registered for Placeholder with domain_version of 1
==> Context: Bad node spec: input: "fc_1" output: "layer_1" name: "layer_1" op_type: "Placeholder" doc_string: "Placeholder operator" domain: "com.mathworks"
无论如何我可以解决这个问题吗?
我Onnx莫德尔:https://drive.google.com/open?id=1c5ItcPoYU2xkmOZNiUgrIetLsixEewYK

提前致谢

andreas herzog.

亲爱的苏Ting,

太好了!: D

最好的祝愿

安德烈亚斯

Ting苏

嗨andreas,
新版本很快就会发布。

凯文CHNG.

它与yolov2合作吗?

andreas herzog.

亲爱的苏Ting,

在新版本上的任何单词,可以用LSTM解析问题(见GitHub票)。我们希望将某些型号部署到具有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

加布里埃尔Mittag

嗨苏,
我注意到最近有一个转换器的更新,但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)?

andreas herzog.

亲爱的苏Ting,

是的,这是我在Github上打开的问题。

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

最好的祝愿

安德烈亚斯

Ting苏

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

Ting苏

嗨andreas,
谢谢你的问题。这是在以下链接中报告的同一问题吗?
https://github.com/microsoft/onnxruntime/issues/1016
我们正在调查此事,很快会给你答复。

andreas herzog.

亲爱的Matlab团队,

我们正在导出LSTM模型(基本上构建,如窗扇与序列回归示例中的描述,使用TurboOMAN发动机示例数据。

在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

我们可以在网龙中加载ONNX文件,只需使用奇数<1x1x1>维度的FC_2输出。预期的输出尺寸可能会混淆吗?

我们可以为您发送Onnx-file / matlab nnet以获取一些帮助。

非常感谢。

亚历山德罗Gherardi

从MATLAB导出到其他运行时引擎的模型与琐碎的例子相比,无法正常工作。我已经看到奇怪的形状翻转ONNX网络层,这导致导致Python Frameworks或C#时的失败。

迈克尔scheinfeild

当我将模型导入C ++时,我在MATLAB中的输出层可以在C ++ OpenCV或TensorFlow中提供相同的结果,从而将图层出入与Matlab相同
例如,转换层

香港王

感谢Jihang Wang,与您帮助我设置此工具。

Tommaso Martire.

加布里埃尔Mittag

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

王王

大家好,我找到了在Mathworks技术支持团队的帮助下它不起作用的原因。金宝app我只是想在这里分享我的经验。基本上我的路径上有一个函数,它是阴影的内置MATLAB函数。我使用下面的代码重置我的MATLAB路径:
>> RestoredeFaultPath.
>> Rehash ToolBoxCache.
>> savepath %注意:此命令将覆盖我当前的路径设置。

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

加布里埃尔Mittag

嗨Andreas,我刚刚使用了一个自定义CNN,并用WinMLRunner检查了它,不过我没有尝试任何预先训练过的模型。

andreas wirth.

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

加布里埃尔Mittag

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

Ting苏

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

andreas wirth.

嗨,Ting,我在c#中遇到了同样的问题。我可以导出不同版本的网络。如果我试图加载模型到窗口。ml我得到一个“ShapeInferenceError”,第一个输入没有rank 2。使用Opset v6可以加载文件,但不能使用。我测试了googlenet,并试图将onnx模型与一个名为“Netron”的程序进行比较。我发现的区别是第一层“Sub”从[3x244x244]变成了[1x3x244x244],但我不确定这是不是问题所在。第二件事是,在onnx v6中,Visual Studio可以自动生成模型类,但在v7或更高版本中则不行。它似乎不是公认的onnx模式。你能给一个建议,如何使用Matlab训练的模型在c# ?

王王

Hi Ting,我在c#中加载ONNX模型时也遇到了同样的问题。我试着将模型保存到不同的Opset版本中,但没有一个能正常工作。请建议。

Ting苏

嗨,加布里埃尔,
我们最近添加了对ONNX Opset金宝app 7,8和9的支持。一个可以指定在导出期间通过可选的输入参数'opsetversion'使用哪些foneSet。如果您有R2018B Matlab,您应该能够下载它。

Ting苏

嗨Kennth,
我们看到了类似的问题,此处将很快发布。如果您可以向我们发送MATLAB模型以允许我们测试它会很棒。

加布里埃尔Mittag

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

肯尼斯邮政

exportONNXNetwork不能正常使用CNTK和Python。转换产生一个ValueError: Gemm:无效的形状,输入a和B预期是rank=2矩阵。

回族阴李

嗨,是用于导出更快的R-CNN模型的代码或工具箱吗?当我收到提到的错误时,模型不是Dagnetwork。希望能在这里获得一些反馈或帮助

瑞安穆克烈

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

使用importonnxnetwork时出错(第39行)
节点'node_20':尚未支持恒定的运算符。金宝app

Umit Kacar.

我工作了这个代码:)这很好。谢谢你。

Ting苏

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

Trinh Pham.

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

MATLAB版本兼容性
创建R2018a
兼容R2018a到R2021a
平台的兼容性
窗户 苹果系统 Linux

社区宝藏狩猎

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

开始狩猎!