图像缩略图

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

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

69个下载

更新2020年3月18日

进出口ONNX™(开放式神经网络交换)内MATLAB模型与其他深度学习框架的互操作性。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.tianjin-qmedu.com/help/deeplearning/ref/importonnxnetwork.html

输出从MATLAB的ONNX网络,请参考:
//www.tianjin-qmedu.com/help/nnet/ref/exportonnxnetwork.html

意见及评级(55

扬Drgona

你好,

对于是否比其他CNN架构此代码的工作?

谢谢,
一月

崔永元

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

目前不支持的ShuffleNet模型万博1manbetx

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

你有一个新的版本可以支持“nnet.cn .layer. regionp万博1manbetxroposal allayer”,nnet.cn .layer. rpnclassificationlayer和nnet.cn .layer. rpnsoftmaxlayer ?

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

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

崔永元

嗨,@Kristina Mikolaichuk
我很遗憾地告诉你,根据预警,目前的版本不支持某些层,“nnet.cnn.layer.RegionProposalLayer”,...等,支撑层的只有重出口。万博1manbetx

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

警告:ONNX不支持层“nnet.cnn.la万博1manbetxyer.RegionProposalLayer”。导出到ONNX操作
'com.MathWorks.Placeholder'。
警告:ONNX不支持层“nnet.cnn.la万博1manbetxyer.RPNSoftmaxLayer”。导出到ONNX操作
'com.MathWorks.Placeholder'。
警告:ONNX不支持层“nnet.cnn.la万博1manbetxyer.RPNClassificationLayer”。导出到ONNX
操作符“com.MathWorks.Placeholder”。

将这些层在未来的更新支持?万博1manbetx

崔永元

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

崔永元

现在这个版本支持导入3D卷积神经网万博1manbetx络,但“激活”功能将无法使用导入的3D卷积网络是什么时候?
我简单的3d CNN在这里:https://drive.google.com/file/d/15i0IEiNWAqqexairNFv1eITtqwMA5rYi/view?usp=sharing

仍然没有使用biLSTM层和regression outputlayer

嗨,当我导入层从Keras网络,会出现一个错误:
“导入‘LSTM’与功能API内置Keras模型层尚不支持”万博1manbetx
所以,我应该做些什么来解决这个问题?

崔永元

亲爱的MathWorks的深度学习工具箱团队:
我希望特性版本能够更多地支持ONNX操作符,而不仅仅是目前的28个操万博1manbetx作符。
希望以后版本更丰富的支持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运营商,因为他们尚不支持。万博1manbetx他们已被替换占位符层。为了找到
这些层,调用返回的对象的功能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需要是拉斯特层(具有自动编码器例如编码)。

所以会这样设置回previouse行为或者我们可以从层结构看,正确的张量名称应该是什么样子?

最良好的祝愿,并感谢了很多的努力。

安德烈亚斯

亲爱的Matlab的团队,

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

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

很多谢谢!

安德烈亚斯

亲爱的苏婷,

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

很抱歉给您带来不便,但是我们需要这个功能来为我们的客户交付一个模型。

最好的祝愿

安德烈亚斯

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

谢谢。

我打的安装用于onnx的问题。甚至无法下载文件。我使用RHEL 7.5。在这个问题上的任何想法?

卫庄林

你好,
我试图导出模型tensorflow使用它。这是基本相同的,因为这
https://de.mathworks.com/help/deeplearning/examples/cocktail-party-source-separation-using-deep-learning-networks.html
我得到警告:“警告:ONNX不支持层'BiasedSigmoidLayer'。万博1manbetx导出到ONNX操作符“com. math . placeholder”。因为其中一层是定制的sigmoid层。
我没有进口到tensorflow得到错误
ValidationError: domain_version为1的占位符没有注册模式
输入:"fc_1"输出:"layer_1" name: "layer_1" op_type: "Placeholder" doc_string: "Placeholder operator"域:"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网络(万博1manbetx出口yolov2.onnx)的出口?

亲爱的苏婷,

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

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

最好的祝愿

安德烈亚斯

苏婷

喜安地列斯
我们注意到,通过MATLAB ONNX转换器输出一些LSTM机型不ONNX运行时很好地工作,虽然可以被加载到其他框架,ONNX运行时严格遵循形状要求ONNX规范。MATLAB ONNX转换器的新版本即将发布,它将与ONNX运行时效果更好。

苏婷

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

亲爱的Matlab的团队,

我们出口的LSTM模型(基本上如构建在descripted与涡轮风扇发动机的示例性数据的sequene到序列回归的例子。

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

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

我们可以在Netron加载onnx文件就好了,并有一个fc_2输出,有些奇怪<1x1x1>尺寸。莫不是在预期的输出尺寸的混乱呢?

难道我们的onnx-文件/ Matlab的NNET发送给你一些帮助。

将不胜感激。

从MATLAB到其他运行时引擎模型导出不从简单的例子分开工作。我见过的奇怪形状翻转输出ONNX网络层对进口Python框架或C#时,这会导致失败。

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

香港王

感谢吉航王,你帮我安装这个工具。

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

吉航王

大家好,我发现它为什么不MathWorks的技术支持团队的帮助下工作的原因。万博1manbetx我只是想在这里分享我的经验。基本上有我的路径上的函数,它是阴影的一个内置的MATLAB功能。我用下面的代码重置我MATLAB路径:
>> restoredefaultpath
>>翻版toolboxcache
注意:此命令将覆盖我的当前路径首选项。

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

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

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

嗨,婷,非常感谢Opset的更新。但是,现在我得到了与Andreas对于LSTM网络相同的错误:“First input does not have rank 2”。如果我在网络中有不止一个lstm层,那么错误消息就会以某种方式变成:“第一个输入张量必须是3阶的”,不过CNNs似乎可以工作。

苏婷

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

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

吉航王

喜亭,我有同样的问题装在C#中ONNX模型时。我试图模型保存到不同的opset所版本,但他们没有工作。请指教。

苏婷

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

苏婷

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

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

使用CNTK和Python, exportONNXNetwork不能正常工作。转换产生一个ValueError: Gemm: Invalid shape,输入a和B应该是rank=2的矩阵。

惠尹肋锇

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

难道你们知道什么时候为恒运营商的支持将得到补万博1manbetx充?

使用importONNXNetwork误差(线39)
节点“node_20”:恒运营商目前还不支持。万博1manbetx

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

苏婷

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

郑氏范

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

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