文件交换

图像缩略图

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

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

54个下载

更新2020年3月18日

进出口ONNX™(开放式神经网络交换)内MATLAB模型与其他深度学习框架的互操作性。ONNX使模型在一个框架中进行培训,转让给他人的推理。

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

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

%%导入网络导出
NET2 = importONNXNetwork( 'squeezenet.onnx', 'OutputLayerType', '分类');

%比较两个网络的预测的随机输入图像
img =兰德(net.Layers (1) .InputSize);
y = predict(net, 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

评论和评分(53)

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

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

你有一个新的版本,它可以支持“nnet.cnn.layer.Region万博1manbetxProposalLayer”,nnet.cnn.layer.RPNClassificationLayer和nnet.cnn.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的深度学习工具箱团队:
当我使用另一个简单的3d cnn网络导入测试时,有一个错误与错误??
我的3D网络是在这里:https://drive.google.com/open?id=1vrX44WV1yWIsoNdbW5sTBQHurdMhf0c_
使用装配网络的错误(第47行)
无效的网络。
误差在nnet.internal.cnn.onnx.importONNXNetwork(第11行)
网络= assembleNetwork(LayersOrGraph);
误差在importONNXNetwork(线52)
网络= nnet.internal.cnn.onnx.importONNXNetwork(modelfile,varargin {:});
致:
层“node_22”:层验证失败。在nnet.onnx. Layer. flat层中使用'predict'时出错。该函数抛出了一个错误,不能
执行。
错误使用交换
ORDER必须具有用于N d阵列至少N个元素。
层“node_22”:层验证失败。在nnet.onnx. Layer. flat层中使用'predict'时出错。该函数抛出了一个错误,不能
执行。
错误使用交换
ORDER必须具有用于N d阵列至少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.cn .la万博1manbetxyer. rpnsoftmaxlayer '。导出到ONNX操作符
'com.MathWorks.Placeholder'。
警告:ONNX不支持层“nnet.cnn.la万博1manbetxyer.RPNClassificationLayer”。导出到ONNX
运营商com.MathWorks.Placeholder“。

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

崔永元

2019年11月15日的版本仍然不能进出口yolov2网络!

崔永元

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

还没与biLSTM层,回归outputlayer工作

凉城斤

嗨,当我导入层从Keras网络,会出现一个错误:
还不支持在Keras模型中导入LSTM层。万博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层的内部状态的一个新的序列。我们只是重新加载模型。

最良好的祝愿

安德烈亚斯

崔永元

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

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

崔永元

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

亲爱的Matlab的团队,

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

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

因此,我的最后一层被命名为“fc_2”(来自deep learning toolbox的标准名称),但是outputtensor必须在c++接口中使用“fc_2_Add”来检索,在使用Netron应用程序加载onnx文件时也会显示该命令。

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

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

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

安德烈亚斯

亲爱的Matlab的团队,

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

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

非常感谢!

安德烈亚斯

亲爱的苏Ting,

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

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

最良好的祝愿

安德烈亚斯

我能够将安装位置指向一个有足够空间完成此任务的文件夹。matlabshared.万博1manbetxsupportpkg.setSupportPackageRoot ()

谢谢。

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

魏壮族Lim

嗨,
我试图导出模型tensorflow使用它。这是基本相同的,因为这
https://de.mathworks.com/help/deeplearning/examples/cocktail-party-source-separation-using-deep-learning-networks.html
我得到的警告:“警告:ONNX不支持层‘BiasedSigmoidLayer’导出到ON万博1manbetxNX运营商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

谢谢提前

亲爱的苏Ting,

优秀的!:d

最良好的祝愿

安德烈亚斯

Ting苏

你好安德烈亚斯,
新版本将很快被释放。

它是否与yoloV2工作?

亲爱的苏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-一个

崔永元

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

崔永元

亲爱的苏Ting,
当前的onnx版本是否支持导出目标检测网络,比如Yolov2万博1manbetx网络(导出到Yolov2 .onnx)?

亲爱的苏Ting,

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

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

最良好的祝愿

安德烈亚斯

Ting苏

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

Ting苏

你好安德烈亚斯,
谢谢你的问题。这和下面链接报道的是同一个问题吗?
https://github.com/microsoft/onnxruntime/issues/1016
我们正在研究这一点,并会尽快回复您。

亲爱的Matlab的团队,

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

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

Node:fc_2 Output:fc_2 [shape推论错误]源维数与目标维数不匹配。源目标= 3 = 2

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

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

非常感谢。

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

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

王红

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

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

吉航王

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

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

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

嗨,盖伯瑞尔
你能告诉我你使用的CNN?
如前所述,我尝试了基本的googlenet,我不能用它与微软ML。
这将是非常有益的,如果我可以使用onnx文件交换。
谢谢提前

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

Ting苏

你好Andreas和Jihang,你能联系到我们的技术支持并发送模型给我们吗?万博1manbetx

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

吉航王

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

Ting苏

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

Ting苏

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

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

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

惠尹肋锇

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

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

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

我的工作这个代码:)它是非常好的。谢谢你!

Ting苏

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

郑氏范

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

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