主要内容

importONNXLayers

进口层ONNX网络

描述

例子

lgraph= importONNXLayers (modelfile从文件中导入预先训练的ONNX™(开放神经网络交换)网络的层和权值modelfile.函数返回lgraph作为一个LayerGraph对象与DAGNetworkdlnetwork对象。

importONNXLayers要求ONNX模型格式的深度学习工具箱™转换器支持包。如果没有安装此支持包,则importONNXLayers提供下载链接。

请注意

默认情况下,importONNXLayers当软件不能将ONNX操作符转换为等效的内置MATLAB时,尝试生成一个自定义层®层。有关软件支持转换的操作符列表,请参见ONNX操作符支持转换为内置的MATLAB层

importONNXLayers在包中保存生成的自定义层+modelfile

importONNXLayers不会为不支持转换为内置MATLAB层的每个ONNX操作符自动生成自定义层。有关如何处理不支持的层的更多信息,请参见提示

例子

lgraph= importONNXLayers (modelfile名称=值通过一个或多个名称-值参数指定的附加选项,从ONNX网络导入层和权重。例如,OutputLayerType =“分类”控件兼容的图层图DAGNetwork对象,并将分类输出层附加到导入的网络体系结构的第一个输出分支的末尾。

例子

全部折叠

下载并安装ONNX模型格式的深度学习工具箱转换器支持包。

类型importONNXLayers在命令行。

importONNXLayers

如果未安装ONNX模型格式的深度学习工具箱转换器,则该功能将提供到Add-On资源管理器中所需支持包的链接。如果需要安装支持包,请单击链接,然后单击安装.通过从模型文件导入网络来检查安装是否成功“simplenet.onnx”在命令行。如果安装了支持包,则函数返回一个LayerGraph对象。

modelfile =“simplenet.onnx”;lgraph = importONNXLayers (modelfile)
lgraph =具有属性的LayerGraph: Layers: [9×1 nnet.cnn.layer.Layer] Connections: [8×2 table] InputNames: {'imageinput'} OutputNames: {'ClassificationLayer_softmax1002'}

绘制网络架构图。

情节(lgraph)

导入一个预先训练的ONNX网络作为LayerGraph对象。然后,将导入的图层组装成DAGNetwork对象,并使用组合网络对图像进行分类。

生成ONNX模型squeezenet卷积神经网络。

squeezeNet = squeezeNet;exportONNXNetwork (squeezeNet“squeezeNet.onnx”);

指定模型文件和类名。

modelfile =“squeezenet.onnx”;一会= squeezeNet.Layers . class(结束);

导入ONNX网络的层和权值。默认情况下,importONNXLayers将网络导入为LayerGraph对象与DAGNetwork对象。

lgraph = importONNXLayers (modelfile)
lgraph =具有属性的LayerGraph: Layers: [70×1 nnet. cn.layer .layer] Connections: [77×2 table] InputNames: {'data'} OutputNames: {'ClassificationLayer_prob'}

分析导入的网络架构。

analyzeNetwork (lgraph)

squeezenetLgraphAnalyze.png

显示导入网络的最后一层。输出显示层图有一个ClassificationOutputLayer在网络架构的最后。

lgraph.Layers(结束)
类:'auto' ClassWeights: 'none' OutputSize: 'auto'超参数LossFunction: 'crossentropyex'

分类层不包含类,因此必须在组装网络之前指定这些类。如果不指定类,则软件自动将类设置为12、……N,在那里N是类的数量。

分类层有名称“ClassificationLayer_prob”.将类设置为一会,然后将导入的分类层替换为新的分类层。

粘土= lgraph.Layers(结束);粘土。Classes = ClassNames; lgraph = replaceLayer(lgraph,“ClassificationLayer_prob”、粘土);

组装层图使用assembleNetwork返回一个DAGNetwork对象。

净= assembleNetwork (lgraph)
net = DAGNetwork属性:Layers: [70×1 nnet. cn.layer .layer] Connections: [77×2 table] InputNames: {'data'} OutputNames: {'ClassificationLayer_prob'}

读取要分类的图像并显示图像的大小。该图像是384 × 512像素,有三个颜色通道(RGB)。

我= imread (“peppers.png”);大小(我)
ans =1×3384 512 3

将图像大小调整为网络的输入大小。显示图像。

I = imresize(I,[227 227]);imshow(我)

使用导入的网络对图像进行分类。

标签=分类(净,我)
标签=分类甜椒

导入一个预先训练的ONNX网络作为LayerGraph对象与dlnetwork对象。然后,将图层图转换为adlnetwork对图像进行分类。

生成ONNX模型squeezenet卷积神经网络。

squeezeNet = squeezeNet;exportONNXNetwork (squeezeNet“squeezeNet.onnx”);

指定模型文件和类名。

modelfile =“squeezenet.onnx”;一会= squeezeNet.Layers . class(结束);

导入ONNX网络的层和权值。指定将网络导入为LayerGraph对象与dlnetwork对象。

lgraph = importONNXLayers (modelfile TargetNetwork =“dlnetwork”
lgraph =具有属性的LayerGraph: Layers: [70×1 nnet.cnn.layer.Layer] Connections: [77×2 table] InputNames: {'data'} OutputNames: {1×0 cell}

读取要分类的图像并显示图像的大小。该图像是384 × 512像素,有三个颜色通道(RGB)。

我= imread (“peppers.png”);大小(我)
ans =1×3384 512 3

将图像大小调整为网络的输入大小。显示图像。

I = imresize(I,[227 227]);imshow(我)

将导入的图层图转换为dlnetwork对象。

dlnet = dlnetwork (lgraph);

将图像转换为adlarray.用尺寸格式化图像“SSCB”(空间,空间,渠道,批处理)。在本例中,批处理大小为1,您可以省略它(“SSC”).

I_dlarray = dlarray(单(我),“SSCB”);

对样本图像进行分类,找出预测的标签。

概率=预测(dlnet I_dlarray);[~,标签]= max(概率);

显示分类结果。

类名(标签)
ans =分类甜椒

导入一个预先训练的ONNX网络作为LayerGraph对象,并将导入的层组装到DAGNetwork对象。然后,使用DAGNetwork对图像进行分类。导入的网络包含不支持转换为内置MATLAB层的ONNX操作符。当您导入这些操作符时,软件会自动生成自定义层。

这个例子使用了helper函数findCustomLayers.要查看此函数的代码,请参见Helper函数

指定要导入的文件为shufflenet与操作员设置9从ONNX模型动物园。shufflenet是一个卷积神经网络,通过ImageNet数据库中的100多万张图像进行训练。因此,该网络已经学会了对广泛的图像进行丰富的特征表示。该网络可以将图像分类为1000个对象类别,如键盘、鼠标、铅笔和许多动物。

modelfile =“shufflenet - 9. onnx”

的层和权值shufflenet.默认情况下,importONNXLayers将网络导入为LayerGraph对象与DAGNetwork对象。如果导入的网络包含不支持转换为内置MATLAB层的ONNX操作符,则importONNXLayers可以自动生成自定义层来代替这些层。importONNXLayers将每个生成的自定义层保存到单独的.m包中的文件+ shufflenet_9在当前文件夹中。通过使用name-value参数指定包名PackageName

lgraph = importONNXLayers (modelfile PackageName =“shufflenet_9”
lgraph =具有属性的LayerGraph: Layers: [173×1 nnet. cn.layer .layer] Connections: [188×2 table] InputNames: {'gpu_0_data_0'} OutputNames: {'ClassificationLayer_gpu_0_softmax_1'}

使用helper函数查找自动生成的自定义层的索引findCustomLayers,并显示自定义层。

印第安纳州= findCustomLayers (lgraph。层,' + shufflenet_9 ');lgraph.Layers(印第安纳州)
ans = 16×1带有图层的图层数组:1 'Reshape_To_ReshapeLayer1004' shufflenet_9。Reshape_To_ReshapeLayer1004 shufflenet_9。重塑_To_ReshapeLayer1004 2 'Reshape_To_ReshapeLayer1009' shufflenet_9.Reshape_To_ReshapeLayer1009 shufflenet_9.Reshape_To_ReshapeLayer1009 3 'Reshape_To_ReshapeLayer1014' shufflenet_9.Reshape_To_ReshapeLayer1014 shufflenet_9.Reshape_To_ReshapeLayer1014 4 'Reshape_To_ReshapeLayer1019' shufflenet_9.Reshape_To_ReshapeLayer1019 shufflenet_9.Reshape_To_ReshapeLayer1019 5 'Reshape_To_ReshapeLayer1024' shufflenet_9.Reshape_To_ReshapeLayer1024 shufflenet_9.Reshape_To_ReshapeLayer1024 6 'Reshape_To_ReshapeLayer1029' shufflenet_9.Reshape_To_ReshapeLayer1029 shufflenet_9.Reshape_To_ReshapeLayer1029 7 'Reshape_To_ReshapeLayer1034' shufflenet_9.Reshape_To_ReshapeLayer1034 shufflenet_9.Reshape_To_ReshapeLayer1034 8 'Reshape_To_ReshapeLayer1039' shufflenet_9.Reshape_To_ReshapeLayer1039 shufflenet_9.Reshape_To_ReshapeLayer1039 9 'Reshape_To_ReshapeLayer1044' shufflenet_9.Reshape_To_ReshapeLayer1044 shufflenet_9.Reshape_To_ReshapeLayer1044 10 'Reshape_To_ReshapeLayer1049' shufflenet_9.Reshape_To_ReshapeLayer1049 shufflenet_9.Reshape_To_ReshapeLayer1049 11 'Reshape_To_ReshapeLayer1054' shufflenet_9.Reshape_To_ReshapeLayer1054 shufflenet_9.Reshape_To_ReshapeLayer1054 12 'Reshape_To_ReshapeLayer1059' shufflenet_9.Reshape_To_ReshapeLayer1059 shufflenet_9.Reshape_To_ReshapeLayer1059 13 'Reshape_To_ReshapeLayer1064' shufflenet_9.Reshape_To_ReshapeLayer1064 shufflenet_9.Reshape_To_ReshapeLayer1064 14 'Reshape_To_ReshapeLayer1069' shufflenet_9.Reshape_To_ReshapeLayer1069 shufflenet_9.Reshape_To_ReshapeLayer1069 15 'Reshape_To_ReshapeLayer1074' shufflenet_9.Reshape_To_ReshapeLayer1074 shufflenet_9.Reshape_To_ReshapeLayer1074 16 'Reshape_To_ReshapeLayer1079' shufflenet_9.Reshape_To_ReshapeLayer1079 shufflenet_9.Reshape_To_ReshapeLayer1079

分类层不包含类,因此必须在组装网络之前指定这些类。如果不指定类,则软件自动将类设置为12、……N,在那里N是类的数量。

导入类名squeezenet它也使用来自ImageNet数据库的图像进行训练。

SqueezeNet = SqueezeNet;一会= SqueezeNet.Layers .ClassNames(结束);

分类层粘土是最后一层吗lgraph.将类设置为一会然后将导入的分类层替换为新的分类层。

粘土= lgraph.Layers(结束)
cLayer = ClassificationOutputLayer属性:Name: 'ClassificationLayer_gpu_0_softmax_1' Classes: 'auto' ClassWeights: 'none' OutputSize: 'auto' Hyperparameters: 'crossentropyex'
粘土。Classes = classNames; lgraph = replaceLayer(lgraph,lgraph.Layers(end).Name,cLayer);

组装层图使用assembleNetwork.函数返回一个DAGNetwork对象,该对象已准备好用于预测。

净= assembleNetwork (lgraph)
net = DAGNetwork属性:Layers: [173×1 nnet. cn.layer .layer] Connections: [188×2 table] InputNames: {'gpu_0_data_0'} OutputNames: {'ClassificationLayer_gpu_0_softmax_1'}

读取要分类的图像并显示图像的大小。该图像是792 × 1056像素,有三个颜色通道(RGB)。

我= imread (“peacock.jpg”);大小(我)
ans =1×3792 1056 3

将图像大小调整为网络的输入大小。显示图像。

I = imresize(I,[224 224]);imshow(我)

的输入shufflenet需要进一步预处理(有关详细信息,请参见在ONNX模型动物园中的ShuffleNet).重新调节图像。通过减去训练图像的均值,除以训练图像的标准差,对图像进行归一化处理。

I =重新调节(0,1);meanIm = [0.485 0.456 0.406];stdIm = [0.229 0.224 0.225];I = (I -重塑(meanIm,[1 1 3]))。/重塑(stdIm [1 1 3]);

使用导入的网络对图像进行分类。

标签=分类(净,我)
标签=分类孔雀

Helper函数

介绍helper函数的代码findCustomLayers本例中使用。findCustomLayers返回指数自定义层的importONNXLayers自动生成。

函数index = findCustomLayers(layers,PackageName) s = what([‘。’PackageName]);指数= 0(1、长度(小);i = 1:长度(层)j = 1:长度(小)如果strcmpi(类(层(i)), [PackageName(2:结束)“。”S.m {j}(1:end-2)]) indices(j) = i;结束结束结束结束

将ONNX LSTM网络导入为层图,然后查找并替换placholder层。LSTM网络使您能够将序列数据输入到网络中,并根据序列数据的单个时间步进行预测。

lstmNet的LSTM网络架构与利用深度学习进行序列分类lstmNet经过训练,它能够识别说话人给出的时间序列数据,这些数据表示连续说出的两个日语元音。

指定lstmNet作为模型文件。

modelfile =“lstmNet.onnx”

导入ONNX网络的层和权值。默认情况下,importONNXLayers将网络导入为LayerGraph对象与DAGNetwork对象。

lgraph = importONNXLayers (“lstmNet.onnx”
警告:无法导入某些ONNX操作符,因为不支持它们。它们已经被占位符层所取代。要查找这些层,在返回的对象上调用findPlaceholderLayers函数。1个操作符:无法为ONNX网络输出'softmax1001'创建输出层,因为其数据格式未知或MATLAB输出层不支持。如果知道它的格式,则使用'OutputDataFormats'参数传递它。如果要将ONNX网络作为函数导入,请使用importONNXFunction。
lgraph =具有属性的LayerGraph: Layers: [6×1 nnet.cnn.layer.Layer] Connections: [5×2 table] InputNames: {'sequenceinput'} OutputNames: {1×0 cell}

importONNXLayers显示一个警告并为输出层插入一个占位符层。

控件可以检查占位符层的属性lgraph或使用findPlaceholderLayers函数。

lgraph。层
2 'lstm1000' LSTM LSTM带有100个隐藏单元3 'fc_MatMul'完全连接9完全连接Layer 4 'fc_Add' Elementwise Affine应用Elementwise缩放,然后对输入进行添加。5 Flatten_To_SoftmaxLayer1005 lstmNet。Flatten_To_SoftmaxLayer1005 lstmNet。平_To_SoftmaxLayer1005 6 'OutputLayer_softmax1001' PLACEHOLDER LAYER Placeholder for 'added_outputLayer' ONNX operator
placeholderLayers = findPlaceholderLayers (lgraph)
名称:'OutputLayer_softmax1001' ONNXNode: [1×1 struct]权重:[]可学习参数没有属性。State Parameters无属性。显示所有属性

创建一个输出层来替换占位符层。首先,创建一个带有名称的分类层OutputLayer_softmax1001.如果您不指定类,那么软件会自动将它们设置为12、……N,在那里N是类的数量。在本例中,类数据是标签“1”、“2”、……“9”,对应9个扬声器。

outputLayer = classificationLayer (“名字”“OutputLayer_softmax1001”);

将占位符层替换为outputLayer通过使用replaceLayer函数。

lgraph = replaceLayer (lgraph,“OutputLayer_softmax1001”, outputLayer);

显示属性的层图确认更换。

lgraph。层
2 'lstm1000' LSTM LSTM带有100个隐藏单元3 'fc_MatMul'完全连接9完全连接Layer 4 'fc_Add' Elementwise Affine应用Elementwise缩放,然后对输入进行添加。5 Flatten_To_SoftmaxLayer1005 lstmNet。Flatten_To_SoftmaxLayer1005 lstmNet。平_To_SoftmaxLayer1005 6 'OutputLayer_softmax1001' Classification Output crossentropyex

方法导入层图时定义输出层OutputLayerTypeOutputDataFormats选择。检查导入的层图是否有占位符层findPlaceholderLayers

lgraph1 = importONNXLayers (“lstmNet.onnx”OutputLayerType =“分类”);findPlaceholderLayers (lgraph1)
ans = 0×1带有属性的图层数组:
lgraph2 = importONNXLayers (“lstmNet.onnx”OutputDataFormats =“公元前”);findPlaceholderLayers (lgraph2)
ans = 0×1带有属性的图层数组:

导入的层图lgraph1而且lgraph2不要使用占位符层。

使用命令导入多输出ONNX网络importONNXLayers,然后将导入的图层图组装成DAGNetwork对象。

指定要从其中导入层和权重的网络文件。

modelfile =“digitsMIMO.onnx”

导入层和权值modelfile.网络在digitsMIMO.onnx有两个输出层:一个分类层(ClassificationLayer_sm_1)来分类数字和一个回归层(RegressionLayer_fc_1_Flatten),计算数字的预测角度的均方误差。

lgraph = importONNXLayers (modelfile)
lgraph =具有属性的LayerGraph: Layers: [19×1 nnet.cnn.layer.Layer] Connections: [19×2 table] InputNames: {'input'} OutputNames: {'ClassificationLayer_sm_1' 'RegressionLayer_fc_1_Flatten'}

绘制层图使用情节,并显示层lgraph

情节(lgraph)

lgraph。层
ans = 19×1带有图层的图层数组:1的输入图像输入28××28日1图片2的conv_1卷积16 5×5×1的隆起与步幅[1]和填充(2 2 2 2)3的BN_1批量标准化批量标准化与16通道4的relu_1 ReLU ReLU 5‘conv_2卷积32 1×1×16旋转步(2 - 2)和填充[0 0 0 0]6‘conv_3卷积32 3×3×16旋转步(2 - 2)和填充[1 1 1 1]7“BN_2”批量标准化批量标准化32通道8 ' relu_2 ReLU ReLU 9 conv_4的卷积32 3×3×32convolutions with stride [1 1] and padding [1 1 1 1] 10 'BN_3' Batch Normalization Batch normalization with 32 channels 11 'relu_3' ReLU ReLU 12 'plus_1' Addition Element-wise addition of 2 inputs 13 'fc_1' Convolution 1 14×14×32 convolutions with stride [1 1] and padding [0 0 0 0] 14 'fc_2' Convolution 10 14×14×32 convolutions with stride [1 1] and padding [0 0 0 0] 15 'sm_1_Flatten' ONNX Flatten Flatten activations into 1-D assuming C-style (row-major) order 16 'sm_1' Softmax softmax 17 'fc_1_Flatten' ONNX Flatten Flatten activations into 1-D assuming C-style (row-major) order 18 'ClassificationLayer_sm_1' Classification Output crossentropyex 19 'RegressionLayer_fc_1_Flatten' Regression Output mean-squared-error

分类层不包含类,因此必须在组装网络之前指定这些类。如果不指定类,则软件自动将类设置为12、……N,在那里N是类的数量。指定的类粘土作为01、……9.然后,将导入的分类层替换为新的分类层。

一会=字符串(0:9);粘土= lgraph.Layers (18);粘土。Classes = ClassNames; lgraph = replaceLayer(lgraph,“ClassificationLayer_sm_1”、粘土);

组装层图使用assembleNetwork.函数返回一个DAGNetwork对象,该对象已准备好用于预测。

assembledNet = assembleNetwork (lgraph)
assembledNet = DAGNetwork属性:Layers: [19×1 nnet. cn.layer .layer] Connections: [19×2 table] InputNames: {'input'} OutputNames: {'ClassificationLayer_sm_1' 'RegressionLayer_fc_1_Flatten'}

输入参数

全部折叠

包含网络的ONNX模型文件的名称,指定为字符向量或字符串标量。该文件必须在当前文件夹或MATLAB路径上的文件夹中,或者必须包含该文件的完整或相对路径。

例子:“cifarResNet.onnx”

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

例子:importONNXLayers (modelfile TargetNetwork =“dagnetwork GenerateCustomLayers = true, PackageName =“CustomLayers”)导入网络层modelfile作为一个层图兼容DAGNetwork对象,并在包中保存自动生成的自定义层+ CustomLayers在当前文件夹中。

自定义层生成选项,指定为数字或逻辑1真正的)或0).如果你设置GenerateCustomLayers真正的importONNXLayers当软件不能将ONNX运算符转换为等效的内置MATLAB层时,尝试生成一个自定义层。importONNXLayers将每个生成的自定义层保存到单独的.m文件中+PackageName.要查看或编辑自定义层,请打开相关的.m文件。有关自定义层的更多信息,请参见深度学习自定义层

例子:GenerateCustomLayers = false

包的名称importONNXLayers保存指定为字符向量或字符串标量的自定义层。importONNXLayers保存自定义图层包+PackageName在当前文件夹中。如果不指定PackageName,然后importONNXLayers将自定义层保存在名为+modelfile在当前文件夹中。有关软件包的更多信息,请参见包创建名称空间

例子:PackageName = " shufflenet_9 "

例子:PackageName = " CustomLayers "

导入网络架构的深度学习工具箱网络的目标类型指定为“dagnetwork”“dlnetwork”.这个函数importONNXLayers将网络架构导入为LayerGraph对象与DAGNetworkdlnetwork对象。

  • 如果您指定TargetNetwork作为“dagnetwork”,进口lgraph必须包括ONNX模型指定的输入和输出层,还是使用名称-值参数指定的输入和输出层InputDataFormatsOutputDataFormats,或OutputLayerType

  • 如果您指定TargetNetwork作为“dlnetwork”importONNXLayers附加一个CustomOutputLayer的每个输出分支的末端lgraph,并可能附加一个CustomInputLayer在输入分支的开始处。函数添加了aCustomInputLayer如果不知道输入数据格式或输入图像大小。有关这些层的数据格式的特定于网络的信息,请参阅CustomInputLayer而且CustomOutputLayer对象。有关如何解释“深度学习工具箱”输入和输出数据格式的信息,请参见ONNX输入和输出张量转换为内置的MATLAB层

例子:TargetNetwork = " dlnetwork "进口LayerGraph对象与dlnetwork对象。

网络输入的数据格式,指定为字符向量、字符串标量或字符串数组。importONNXLayers试图解释来自ONNX文件的输入数据格式。名称-值参数InputDataFormats是有用的,当importONNXLayers无法导出输入数据格式。

InputDataFomats根据ONNX输入张量的顺序将其转换为数据格式。例如,如果您指定InputDataFormats作为“BSSC”,导入的网络有一个imageInputLayer输入。了解更多关于如何importONNXLayers解释了ONNX输入张量的数据格式以及如何指定InputDataFormats对于不同的深度学习工具箱输入层,请参见ONNX输入和输出张量转换为内置的MATLAB层

如果指定空数据格式([]""),importONNXLayers自动解释输入数据格式。

例子:InputDataFormats = ' BSSC '

例子:InputDataFormats = " BSSC "

例子:InputDataFormats = [" bcs”、“”、“公元前”)

例子:InputDataFormats = {bcs,[],“公元前”}

数据类型:字符|字符串|细胞

网络输出的数据格式,指定为字符向量、字符串标量或字符串数组。importONNXLayers试图解释ONNX文件的输出数据格式。名称-值参数OutputDataFormats是有用的,当importONNXLayers无法导出输出数据格式。

OutputDataFormats以ONNX输出张量的顺序转换为一种数据格式。例如,如果您指定OutputDataFormats作为“公元前”,导入的网络有一个classificationLayer输出。了解更多关于如何importONNXLayers解释了ONNX输出张量的数据格式以及如何指定OutputDataFormats有关不同深度学习工具箱输出层的信息,请参见ONNX输入和输出张量转换为内置的MATLAB层

如果指定空数据格式([]""),importONNXLayers自动解释输出数据格式。

例子:公元前OutputDataFormats = ' '

例子:OutputDataFormats =“公元前”

例子:OutputDataFormats = [" bcs”、“”、“公元前”)

例子:OutputDataFormats = {bcs,[],“公元前”}

数据类型:字符|字符串|细胞

输入图像的大小为第一个网络输入,指定为矢量的三个或四个数值对应(高度、宽度、渠道)用于二维图像和(高度、宽度、深度、渠道)3 d图像。只有当ONNX模型在时,网络才使用此信息modelfile不指定输入大小。

例子:ImageInputSize = [28 28 1]为二维灰度输入图像

例子:ImageInputSize = [224 224 3]的二维彩色输入图像

例子:ImageInputSize=[28 28 36 3]的三维彩色输入图像

第一个网络输出的层类型指定为“分类”“回归”,或“pixelclassification”.这个函数importONNXLayers附加一个ClassificationOutputLayerRegressionOutputLayer,或pixelClassificationLayer(计算机视觉工具箱)对象导入到导入的网络体系结构的第一个输出分支的末尾。附加一个pixelClassificationLayer(计算机视觉工具箱)对象需要计算机视觉工具箱™。如果ONNX型号在modelfile指定输出层类型或您指定的TargetNetwork作为“dlnetwork”importONNXLayers忽略名称-值参数OutputLayerType

例子:OutputLayerType = "回归"

恒定折叠优化,指定为“深度”“浅”,或“没有”.在ONNX操作符转换为等效的内置MATLAB层期间,常量折叠通过计算ONNX初始化器(初始常量值)上的操作来优化导入的网络架构。

如果ONNX网络包含软件无法转换为等效的内置MATLAB层的运算符(参见ONNX操作符支持转换为内置的MATLAB层),然后importONNXLayers在每个不受支持的层的位置插入占位符层。有关更多信息,请参见提示

恒折优化可以减少占位符层数。当您设置FoldConstants“深度”,与将参数设置为时相比,导入的层包含相同或更少的占位符层“浅”.然而,导入时间可能会增加。集FoldConstants“没有”禁用网络结构优化功能。

例子:FoldConstants = "浅"

输出参数

全部折叠

预先训练的ONNX模型的网络架构,返回为LayerGraph对象。

要使用导入的层图进行预测,必须将LayerGraph对象一个DAGNetworkdlnetwork对象。指定名称-值参数TargetNetwork作为“dagnetwork”“dlnetwork”这取决于预期的工作流。

  • 把一个LayerGraph到一个DAGNetwork通过使用assembleNetwork.在DAGNetwork对象,然后使用分类函数。

  • 把一个LayerGraph到一个dlnetwork通过使用dlnetwork.在dlnetwork对象,然后使用预测函数。将输入数据指定为dlarray使用正确的数据格式(有关更多信息,请参阅fmt的观点dlarray).

限制

  • importONNXLayers支持ONNX版本如下:

    • 该函数支持ONNX中间表示版本7。

    • 该函数支持ONNX操作符集6 ~ 14。

请注意

如果导入导出的网络,重新导入的网络的层可能与原始网络不同,可能不受支持。

更多关于

全部折叠

ONNX转换为内置的操作符支持MATLAB

importONNXLayers支持以下ONNX操作符转换为内置的MATLAB层,但有一些限制。

ONNX运营商 深度学习工具箱层

添加

additionLayernnet.onnx.layer.ElementwiseAffineLayer

AveragePool

averagePooling1dLayeraveragePooling2dLayer

BatchNormalization

batchNormalizationLayer

Concat

concatenationLayer

常数

无(作为权重导入)

Conv

convolution1dLayerconvolution2dLayer

ConvTranspose

transposedConv2dLayer

辍学

dropoutLayer

Elu

eluLayer

Gemm

fullyConnectedLayer如果ONNX网络是循环的,否则nnet.onnx.layer.FlattenLayer紧随其后的是convolution2dLayer

GlobalAveragePool

globalAveragePooling1dLayerglobalAveragePooling2dLayer

GlobalMaxPool

globalMaxPooling1dLayerglobalMaxPooling2dLayer

格勒乌

gruLayer

InstanceNormalization

groupNormalizationLayernumGroups指定为“channel-wise”

LeakyRelu

leakyReluLayer

LRN

CrossChannelNormalizationLayer

LSTM

lstmLayerbilstmLayer

MatMul

fullyConnectedLayer如果ONNX网络是循环的,否则convolution2dLayer

MaxPool

maxPooling1dLayermaxPooling2dLayer

Mul

multiplicationLayer

线性整流函数(Rectified Linear Unit)

reluLayerclippedReluLayer

乙状结肠

sigmoidLayer

Softmax

softmaxLayer

总和

additionLayer

双曲正切

tanhLayer

如果importONNXLayers进口的ConvONNX操作符作为convolution2dLayerConv运算符是一个只有两个元素的向量(p1, p2)importONNXLayers设置填充选择convolution2dLayer(p1, p2, p1, p2)

ONNX运营商 ONNX进口商自定义层

剪辑

nnet.onnx.layer.ClipLayer

Div

nnet.onnx.layer.ElementwiseAffineLayer

nnet.onnx.layer.FlattenLayernnet.onnx.layer.Flatten3dLayer

身份

nnet.onnx.layer.IdentityLayer

ImageScaler

nnet.onnx.layer.ElementwiseAffineLayer

PRelu

nnet.onnx.layer.PReluLayer

重塑

nnet.onnx.layer.FlattenLayer

nnet.onnx.layer.ElementwiseAffineLayer
ONNX运营商 图像处理工具箱™
DepthToSpace depthToSpace2dLayer(图像处理工具箱)
调整 resize2dLayer(图像处理工具箱)resize3dLayer(图像处理工具箱)
SpaceToDepth spaceToDepthLayer(图像处理工具箱)
Upsample resize2dLayer(图像处理工具箱)resize3dLayer(图像处理工具箱)

转换ONNX输入和输出张量到内置MATLAB

importONNXLayers试图解释ONNX网络的输入输出张量的数据格式,然后将其转换为内置的MATLAB输入输出层。具体解释请参见表格ONNX输入张量转换为深度学习工具箱层而且ONNX输出张量转换为MATLAB层

在“深度学习工具箱”中,每个数据格式字符必须是以下标签之一:

  • 年代——空间

  • C——频道

  • B——批观测

  • T-时间或顺序

  • U——未指明的

转换ONNX张量输入深度学习工具箱

数据格式 资料解释 深度学习工具箱层
ONNX输入张量 MATLAB输入格式 形状 类型
公元前 CB c——- - - - - -n数组,c是多少特征和n观察的次数是多少 特性 featureInputLayer
bcsBSSCCSSSSC SSCB

h——- - - - - -w——- - - - - -c——- - - - - -n数字数组,hwc而且n图像的高度、宽度、通道数和观测数是否分别为

二维图像 imageInputLayer
BCSSSBSSSC包括SSSC SSSCB

h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -n数字数组,hwdc而且n图像的高度、宽度、深度、通道数和图像观测次数是否分别为

三维图像 image3dInputLayer
时间待定 认知行为治疗

c——- - - - - -年代——- - - - - -n矩阵,c是序列的特征个数,年代是序列长度,和n序列观察的次数是多少

向量序列 sequenceInputLayer
涂层 SSCBT

h——- - - - - -w——- - - - - -c——- - - - - -年代——- - - - - -n数组,hwc而且n分别对应于图像的高度、宽度和通道数,年代是序列长度,和n图像序列观察的次数是多少

二维图像序列 sequenceInputLayer
TBCSSS SSSCBT

h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -年代——- - - - - -n数组,hwd,c分别对应于图像的高度、宽度、深度和通道数,年代是序列长度,和n图像序列观察的次数是多少

三维图像序列 sequenceInputLayer

转换ONNX张量输出到MATLAB

数据格式 MATLAB层
ONNX输出张量 MATLAB输出格式
公元前时间待定 CB认知行为治疗 classificationLayer
bcsBSSCCSSSSCBCSSSBSSSC包括SSSC SSCBSSSCB pixelClassificationLayer(计算机视觉工具箱)
涂层TBCSSS SSCBTSSSCBT regressionLayer

为导入的网络架构生成代码

您可以使用MATLAB编码器™或GPU Coder™与深度学习工具箱一起生成MEX,独立CPU, CUDA®MEX,或用于导入网络的独立CUDA代码。有关更多信息,请参见深度学习代码生成

  • 使用MATLAB编码器使用深度学习工具箱生成MEX或独立CPU代码,在桌面或嵌入式目标上运行。您可以部署生成的独立代码,使用Intel®MKL-DNN库或ARM®计算库。另外,您也可以生成不调用第三方库函数的通用C或c++代码。有关更多信息,请参见基于MATLAB编码器的深度学习(MATLAB编码器)

  • 使用GPU编码器与深度学习工具箱生成CUDA MEX或独立CUDA代码,运行在桌面或嵌入式目标。您可以部署生成的独立CUDA代码,使用CUDA深度神经网络库(cuDNN)、TensorRT™高性能推理库或用于Mali GPU的ARM Compute库。有关更多信息,请参见GPU Coder深度学习(GPU编码器)

importONNXLayers返回网络体系结构lgraph作为一个LayerGraph对象。对于代码生成,您必须首先转换导入的LayerGraph对象指向网络。把一个LayerGraph对象一个DAGNetworkdlnetwork对象的使用assembleNetworkdlnetwork.如欲了解更多有关MATLAB编码器以及GPU Coder对深度学习工具箱对象的支持,参见支持类(MATLAB编码器)而且支持类(GPU编码器),分别。

您可以为任何导入的网络生成代码,其层支持代码生成。以获取支持代码生成的层的列表MATLAB编码器和GPU Coder,见支持层(MATLAB编码器)而且支持层(GPU编码器),分别。有关每个内置MATLAB层的代码生成功能和限制的更多信息,请参阅该层的扩展功能部分。例如,请参见代码生成而且GPU的代码生成imageInputLayer

使用GPU导入的网络层

importONNXLayers不会在GPU上执行。然而,importONNXLayers导入预先训练的神经网络层作为深度学习LayerGraph对象,你可以在GPU上使用。

  • 将导入的LayerGraph对象一个DAGNetwork对象的使用assembleNetwork.在DAGNetwork对象,您就可以使用分类.使用name-value参数指定硬件需求ExecutionEnvironment.对于具有多个输出的网络,请使用预测函数并指定名称-值参数ReturnCategorical作为真正的

  • 将导入的LayerGraph对象一个dlnetwork对象的使用dlnetwork.在dlnetwork对象,您就可以使用预测.这个函数预测当输入数据或网络参数存储在图形处理器上时,将在图形处理器上执行。

    • 如果你使用minibatchqueue要处理和管理小批量输入数据,可以使用minibatchqueue对象默认情况下,如果GPU可用,则将输出转换为GPU数组。

    • 使用dlupdate的可学习参数转换dlnetwork对象到GPU数组。

      净= dlupdate (@gpuArray,净)

  • 你可以培训外来人员LayerGraph对象上使用trainNetwork.要指定培训选项,包括用于执行环境的选项,请使用trainingOptions函数。使用name-value参数指定硬件需求ExecutionEnvironment.有关如何加速训练的更多信息,请参见在并行、gpu和云上扩展深度学习

使用GPU需要并行计算工具箱™和支持的GPU设备。有关支持的设备的信息,请参见GPU计算的需求(并行计算工具箱)

提示

  • 如果导入的网络包含不支持转换为内置MATLAB层的ONNX操作符(参见ONNX操作符支持转换为内置的MATLAB层),importONNXLayers不生成自定义层,那么importONNXLayers在不受支持的层的位置插入占位符层。要查找网络中不支持的层的名称和索引,请使用findPlaceholderLayers函数。然后,您可以用您定义的新层替换占位符层。要替换一个图层,使用replaceLayer.示例请参见导入和组装多输出ONNX网络

  • 要使用预训练的网络对新图像进行预测或转移学习,必须以与用于训练导入模型的图像预处理相同的方式对图像进行预处理。最常见的预处理步骤是调整图像的大小,减去图像平均值,并将图像从BGR格式转换为RGB格式。

    • 要调整图像的大小,请使用imresize.例如,[3] 227227年imresize(图片)

    • 要将图像从RGB格式转换为BGR格式,请使用翻转.例如,翻转(图片3)

    有关用于训练和预测的预处理图像的更多信息,请参见用于深度学习的图像预处理

  • MATLAB使用的是基于单一的索引,而Python®使用从零开始的索引。换句话说,数组中的第一个元素在MATLAB和Python中索引分别为1和0。有关MATLAB索引的更多信息,请参见数组索引.在MATLAB中,要使用索引数组(印第安纳州),将数组转换为印第安纳州+ 1

  • 更多提示,请参见关于从TensorFlow、PyTorch和ONNX导入模型的提示

选择功能

ONNX模型格式的深度学习工具箱转换器提供三个函数来导入预先训练的ONNX网络:importONNXNetworkimportONNXLayers,importONNXFunction.有关哪个导入函数最适合不同场景的更多信息,请参见选择功能导入ONNX预训练网络

参考文献

[1]开放神经网络交换https://github.com/onnx/

[2]ONNXhttps://onnx.ai/

版本历史

介绍了R2018a

全部展开

Baidu
map