图像缩略图

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

内MATLAB进出口ONNX™模型与其他深度学习框架的互操作性

69下载

更新2020年3月18日

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

从您的操作系统或开口内MATLAB中onnxconverter.mlpkginstall文件将开始为你释放的安装过程。
这mlpkginstall文件是R2018a及以后的功能。

用法示例:
%%出口到ONNX模型格式
净= squeezenet;%至出口预训练的模型
文件名= 'squeezenet.onnx';
exportONNXNetwork(网,文件名);

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

%比较两个网络对随机输入图像的预测
IMG =兰特(net.Layers(1).InputSize);
Y =预测(净,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

评论和评分(55

扬Drgona

嗨,

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

谢谢,
1月

对于onnx,它应该是onnx细粒至运营商,而不是粗糙的“层”,例如,我定制了网络层yolov3Layer,如何导出到Onnx?

目前不支持的ShuffleNet模型金宝app

亲爱的MathWorks深度学习工具箱团队:
嗨立方米

你有一个新的版本,它可以支持“nnet.cnn.layer.Region金宝appProposalLayer”,nnet.cnn.layer.RPNClassificationLayer和nnet.cnn.layer.RPNSoftmaxLayer?

亲爱的MathWorks深度学习工具箱团队:
嗨,我试图用exportONNXNetwork,我跑这部分代码,但我看到了这个错误,你可以帮我请?
用法示例:
%%出口到ONNX模型格式
净= squeezenet;%至出口预训练的模型
文件名= 'squeezenet.onnx';
exportONNXNetwork(网,文件名);
-------------------------------------
这个错误出现:
使用onnxmex错误
打开文件“squeezenet.onnx失败。

modelproto /writeToFile中的错误(第55行)
onnxmex(INT32(FuncName.EserializeToFile),ModelPtr,文件名);

误差在nnet.internal.cnn.onnx.exportONNXNetwork(线37)
writeToFile (modelProto文件名);

误差在exportONNXNetwork(线40)
nnet.internal.cnn.onnx.exportONNXNetwork(网络,文件名,varargin {:});

亲爱的MathWorks的深度学习工具箱团队:
当我用另一种简单的三维网络CNN进口试验中,与所述误差的误差???
我的3d网络在这里:https://drive.google.com/open?id=1vrX44WV1yWIsoNdbW5sTBQHurdMhf0c_
使用assembleNetwork误差(线47)
无效的网络。
误差在nnet.internal.cnn.onnx.importONNXNetwork(第11行)
网络= assembleNetwork (LayersOrGraph);
误差在importONNXNetwork(线52)
onnx.importonnxnetwork (modelfile, varargin{:});
引起的:
层“node_22”:层验证失败。使用错误“预测”在层nnet.onnx.layer.FlattenLayer。该函数抛出一个错误,不能
执行。
使用置换错误
ORDER必须具有用于N d阵列至少N个元素。
层“node_22”:层验证失败。使用错误“预测”在层nnet.onnx.layer.FlattenLayer。该函数抛出一个错误,不能
执行。
使用置换错误
ORDER必须具有用于N d阵列至少N个元素。
层“node_22”:输入大小不匹配。输入到该层的尺寸是从期望的输入尺寸不同。
输入到该层:
从层 'node_21'(1×4×4×512输出)

嗨,@Kristina Mikolaichuk
我很抱歉地告诉你,根据警告,目前的版本不支持某些层,'nnet.cn .layer. regionproposal allayer ',等等,只有支持层的重量金宝app被导出。

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

警告:ONNX不支持层“nnet.cnn.la金宝appyer.RegionProposalLayer”。导出到ONNX操作
“com.MathWorks.Placeholder”。
警告:ONNX不支持层“nnet.cnn.la金宝appyer.RPNSoftmaxLayer”。导出到ONNX操作
“com.MathWorks.Placeholder”。
警告:ONNX不支持层'nnet.cn .la金宝appyer. rpnclassificationlayer '。出口ONNX
运营商com.MathWorks.Placeholder“。

将这些层在未来的更新支持?金宝app

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

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

还没与biLSTM层,回归outputlayer工作

凉城斤

嗨,当我导入层从Keras网络,会出现一个错误:
“导入‘LSTM’与功能API内置Keras模型层尚不支持”金宝app
那么,我该怎么做才能克服这个问题呢?

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

嗨@cui

我们几乎遵循的例子

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

而且这个网络似乎很有效。我还没有弄明白如何重置LSTM层的内部状态,以得到一个新的序列。我们只需重新加载模型。

最好的祝愿

安德烈亚斯

亲爱的苏婷,
我可以导入和导出自带的MATLAB非常自由和方便的mobilenetv2模型,但是当我导入保存在pytorch-onnx框架mobilenetv2.onnx,averagePooling的最后一层不能被正确导入。为什么?
https://github.com/tonylins/pytorch-mobilenet-v2,onnx liabray可以导入和导出这种responsibily,MATLAB不能...

警告:无法导入一些ONNX运营商,因为他们尚不支持。金宝app他们已被替换占位符层。为了找到
这些层,调用返回的对象的功能findPlaceholderLayers。
>在nnet.internal.cnn.onnx.importONNXLayers(第13行)
在importONNXLayers(线48)

喜@Andreas赫尔佐格:
我能问你如何使用C ++接口功能LSTM onnx模式?还与MATLAB的序列特征,有这样一个例子代码可以参考一下,谢谢!

亲爱的Matlab的团队,

导出和加载LSTM模型现在工作得很好,进球也使用C ++接口的作品。

我注意到一个次要的事情,输出张IST不叫喜欢在网络中但作为层姓和计算机图形操作的组合拉斯特层。

所以,我最后一层被命名为“fc_2”(标准名称从深度学习工具箱),但outputtensor具有在C进行检索++接口使用“fc_2_Add”当你载入一个Netron App中onnx文件,该文件还显示。

这是命名有必要吗?我们保存在我们的模型中描述的序列化onnx文件,并在一定层作为输出张量控制,计算图节点作为输出的名称。由于对于某些类型的这种不necessarly需要是拉斯特层(具有自动编码器例如编码)。

所以这可以回到之前的状态吗?或者我们可以从层结构中读出,正确的张量名应该是什么样的?

致以最良好的祝愿,并对您的努力表示感谢。

安德烈亚斯

亲爱的Matlab的团队,

新版本(8月1日),似乎是解决我们与LSTM出口问题。

测试与在github给定的例子与Python onnxruntime 0.5。

非常感谢!

安德烈亚斯

亲爱的苏婷,

写入LSTM到ONNX兼容运行在新版本上的任何单词?

对不起,是一个痛苦,但我们需要的一些功能,提供一个模型为我们的客户。

最好的祝愿

安德烈亚斯

我能够安装地点到有足够空间的一个文件夹来完成这件事。matlabshared.金宝appsupportpkg.setSupportPackageRoot()

谢谢。

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

卫庄林

嗨,
我试图导出一个模型来在tensorflow中使用它。它基本上和这个是一样的
https://de.mathworks.com/help/deeplearning/examples/cocktail-party-source-separation-using-deep-learning-networks.html
我得到的警告:“警告:ONNX不支持层‘BiasedSigmoidLayer’导出到ON金宝appNX运营商com.MathWorks.Placeholder'。”因为该层的一个是定制乙状结肠层。
导入tensorflow失败,获取错误
ValidationError:没有注册模式占位符与1 domain_version
==>上下文:坏节点规格:输入: “fc_1” 输出: “layer_1” 名: “layer_1” op_type: “占位符” doc_string: “占位符运算符” 域: “com.mathworks”
我能解决这个问题吗?
我Onnx型号名称:https://drive.google.com/open?id=1c5ItcPoYU2xkmOZNiUgrIetLsixEewYK

提前致谢

亲爱的苏婷,

优秀的!:d

最好的祝愿

安德烈亚斯

苏婷

喜安地列斯
新版本将很快被释放。

它是否与yoloV2工作?

亲爱的苏婷,

在新版本中的任何字,可以解决与LSTM的问题(见GitHub的车票)。我们想一些机型部署到与onnxruntime的应用程序。

最好的祝愿

安德烈亚斯

亲爱的苏婷,
通过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-一个

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

亲爱的苏婷,
请问目前onnx版本支持目标探测网络,比如Yolov2网络(金宝app出口yolov2.onnx)的出口?

亲爱的苏婷,

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

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

最好的祝愿

安德烈亚斯

苏婷

喜安地列斯
我们注意到,一些由MATLAB ONNX Converter导出的LSTM模型在ONNX运行时中不能很好地工作,尽管它们可以加载到其他框架中,因为ONNX运行时严格遵循ONNX规范的形状要求。MATLAB ONNX转换器的一个新版本将很快发布,它将更好地与ONNX运行时协同工作。

苏婷

喜安地列斯
谢谢你的问题。这是在下面的链接报道了同样的问题?
https://github.com/microsoft/onnxruntime/issues/1016
我们正在研究这一点,并会尽快回复您。

亲爱的Matlab的团队,

我们导出一个lstm模型(基本上是按照使用涡扇发动机示例数据的顺序到顺序回归示例中描述的方式构建的)。

(从源代码0.4.0发布版本)在onnxruntime进口时,我们得到一个错误信息:

从temp.onx负载模型失败:节点:fc_2输出:fc_2 [ShapeInferenceError]不匹配的源和目标维度的数目之间。源= 2目标= 3

我们可以很好地在Netron中加载onnx文件,并获得一个fc_2输出,其维数有些奇怪<1x1x1>。在预期的输出维度中会出现混淆吗?

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

将不胜感激。

将模型从matlab导出到其他运行时引擎,除了一些简单的例子外,是无法工作的。我看到过在输出ONNX网络层上出现奇怪的翻转,这在导入python框架或c#时会导致失败。

当我导入模型到C ++,我没有相同的结果MATLAB你可以在C供应例如输出层++ OpenCV的或tensorflow这得到了层是一样的MATLAB
例如CONV层

王红

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

喜吉航,感谢分享这一信息,遗憾的是它并没有解决我的情况的问题。

Jihang王

大家好,在MathWorks技术支持团队的帮助下,我找到了它不能工作的原因。金宝app我只是想在这里分享我的经验。在我的路径上有一个函数它隐藏了一个内置的MATLAB函数。我用下面的代码重新设置我的MATLAB路径:
> > restoredefaultpath
>>翻版toolboxcache
>> savepath%注:此命令将覆盖我的电流通路的喜好。

在那之后,我下载并重新安装该网页上的转换器应用程序,并重新运行出口代号。问题解决了:)希望这有助于。

嗨安德烈亚斯,我只是用一个自定义的CNN与WinMLRunner检查的话,我没有尝试任何预先训练模式虽然。

嗨加布里埃尔
你能告诉我你使用的CNN?
正如之前提到的我tryed基本googlenet,我不能与微软ML使用它。
如果我可以使用onnx文件交换,那将非常有帮助。
提前致谢

喜亭,感谢很多的opset所更新。不过,现在我得到了相同的错误安德烈亚斯为LSTM网:“首先输入没有等级2”。如果我在网络中具有一个以上LSTM层的错误信息以某种方式更改为:“首先输入张量必须有等级3”,细胞神经网络似乎虽然工作。

苏婷

喜安德烈亚斯和吉航,就可以达到我们的技术支持和发送模式给我们吗?金宝app

喜亭,我遇到了与C#同样的问题。我可以在不同版本的出口网络。如果我尝试模型加载到windows.ml我得到一个“ShapeInferenceError”第一个输入没有军衔2. opset所V6,可以加载该文件,但它不能被使用。我测试googlenet,并试图将onnx型号名为“Netron”方案进行比较。我发现不同的是,第一层“亚健康”从[3x244x244]更改为[1x3x244x244],但我不知道这是否是问题。第二件事是,与onnx V6 Visual Studio可以与V7或更高自动但是不产生模型类。它似乎不被识别为一个onnx模型。你能给一个建议如何使用Matlab的训练模型在C#?

Jihang王

嗨,Ting,我在c#中加载ONNX模型时遇到了同样的问题。我试着将模型保存到不同的Opset版本,但是它们都不起作用。请建议。

苏婷

嗨,加布里埃尔,
我们最近增加了对ONNX opset金宝app所7,8和9。人们可以通过一个可选的输入参数“OpsetVersion”导出过程中指定opset所使用。你应该可以,如果你有一个R2018b MATLAB下载。

苏婷

嗨Kennth,
我们看到了类似的问题和修复程序将很快发布。这将是巨大的,如果你能向我们提供您MATLAB模型,让我们来测试它。

如果出口能够更新到版本7或8,允许与Windows毫升利用这将是巨大的。

exportONNXNetwork不能正常使用CNTK和Python工作。该转换产生一个ValueError:GEMM:形状无效,输入A和B被预期为秩= 2点矩阵。

惠尹肋锇

嗨,要导出的代码或可用于更快的R-CNN模型工具箱?由于我的错误提的模型不是DAGnetwork。希望能得到一些反馈意见或帮助在这里

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

使用importONNXNetwork时出错(第39行)
节点“node_20”:恒运营商目前还不支持。金宝app

我从事这个代码:)这是非常好的。谢谢。

苏婷

嗨Trihn,
我们想听听你对importONNXNetwork的问题的详细信息()。你以前安装的旧版本转换器?

陈范教授

该功能importONNXNetwork()当我使用上面的例子不工作!

MATLAB版本兼容性
创建了R2018a
与R2018a到R2020a兼容
平台兼容性
视窗 苹果系统 Linux的