主要内容

importonnxLayers.

进口层ONNX网络

描述

例子

lgraph= importONNXLayers (模数从文件中导入预先训练的ONNX™(Open Neural Network Exchange)网络的层次和权重模数.函数返回lgraph作为一个LayerGraph对象兼容DAGNetworkdlnetwork对象。

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

笔记

默认情况下,importonnxLayers.当软件不能将ONNX运算符转换为等效的内置MATLAB时,尝试生成一个自定义层®层。有关软件支持转换的运算符列表,请参阅金宝app支持转换到内置MATLAB层的金宝appONNX操作符

importonnxLayers.在包中保存生成的自定义层+模数

importonnxLayers.为每个ONNX运算符自动生成自定义图层,不支持转换为内置的MATLAB图层。金宝app有关如何处理不受支持的图层的更多信息,请参阅金宝app提示

例子

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

例子

全部收缩

下载并安装深度学习工具箱转换器,适用于ONNX型号格式支持包。金宝app

类型importonnxLayers.在命令行。

importonnxLayers.

如果没有安装ONNX模型格式的深度学习工具箱转换器,那么该函数将提供到Add-On Explorer中所需的支持包的链接。金宝app要安装支持包,请单击链接,然后金宝app单击安装.从模型文件导入网络检查安装是否成功“simplenet.onnx”在命令行。如果安装了支持金宝app包,则函数返回aLayerGraph对象。

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

绘制网络架构图。

图(LGROPL)

导入预训练的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 with properties: Layers: [70×1 nnet.cnn.layer.Layer] Connections: [77×2 table] InputNames: {'data'} OutputNames: {'ClassificationLayer_prob'}

分析导入的网络结构。

analyzeNetwork (lgraph)

显示导入网络的最后一层。输出显示图层图具有aClassificationOutputLayer在网络体系结构的末尾。

lgraph.Layers(结束)
ans = ClassificationOutputLayer with properties: Name: 'ClassificationLayer_prob' Classes: 'auto' ClassWeights: 'none' OutputSize: 'auto' Hyperparameters LossFunction: ' crosstropyex '

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

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

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

使用assembleNetwork返回一个DAGNetwork对象。

净= assembleNetwork (lgraph)
net = DAGNetwork with properties: Layers: [70×1 nnet.cnn.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 with properties: 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(3);

将图像转换为adlarray..使用尺寸格式化图像“SSCB”(空间,空间,频道,批量)。在这种情况下,批量大小为1,您可以省略它(“SSC”).

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

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

prob =预测(dlnet,i_dlarray);[〜,标签] = max(prob);

显示分类结果。

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

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

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

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

modelfile =“shufflenet - 9. onnx”

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

lgraph = importonnxlayers(modelfile,packageName =“shufflenet_9”
lgraph = LayerGraph with properties: Layers: [173×1 nnet.cnn.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.Reshape_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_ReshapeLayer10195 '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.将类设置为Classnames.然后用新的分类层替换导入的分类层。

Clayer = Lapraph.Layers(END)
Clayer =具有属性的分类OutputLayer:名称:'classificationLayer_gpu_0_softmax_1'类:'auto'类重量:'无'输出:'auto'hyperparameters lockfunction:'crossentropyex'
粘土。Classes = classNames; lgraph = replaceLayer(lgraph,lgraph.Layers(end).Name,cLayer);

使用assembleNetwork.函数返回DAGNetwork准备用于预测的对象。

净= assembleNetwork (lgraph)
net = DAGNetwork with properties: Layers: [173×1 nnet.cnn.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需要进一步的预处理(详情请参阅shuffle lenet在ONNX模型动物园).重新归类图像。通过减去训练图像的平均值并除以训练图像的标准偏差来归一化图像。

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函数

本节提供了辅助功能的代码findCustomLayers在此示例中使用。findCustomLayers返回指数自定义层的importonnxLayers.自动生成。

函数indices = findcustomlayers(图层,packageName)s =什么([‘。’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操作符,因为它们不受支持。金宝app它们已经被占位符层所取代。要查找这些层,调用返回对象上的函数findPlaceholderLayers。无法为ONNX网络输出'softmax1001'创建输出层,因为它的数据格式未知或不被MATLAB输出层支持。金宝app如果您知道它的格式,则使用'OutputDataFormats'参数传递它。如果需要将ONNX网络作为功能导入,请使用importONNXFunction。
lgraph = LayerGraph with properties: Layers: [6×1 nnet.cnn.layer.Layer] Connections: [5×2 table] InputNames: {'sequenceinput'} OutputNames: {1×0 cell}

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

控件可以检查占位符层财产lgraph或者通过使用findPlaceholderLayers函数。

lgraph。层
ans = 6×1 Layer array with layers: 1 'sequenceinput' Sequence Input Sequence Input with 12 dimensions 2 'lstm1000' LSTM LSTM with 100 hidden units 3 'fc_MatMul' Fully Connected 9 Fully Connected 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(Lapraph)
placeholderLayers = PlaceholderLayer with properties: Name: 'OutputLayer_softmax1001' ONNXNode: [1×1 struct] Weights: [] Learnable Parameters无属性。状态参数无属性。显示所有属性

创建一个输出层来替换占位符层。首先,使用名称创建一个分类层OutputLayer_softmax1001.如果您不指定类,则软件会自动将它们设置为12、……N,在那里N为类数。在这种情况下,类数据是一个标签“1”,“2”,…“9”,对应9个发言者。

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

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

lgraph = replaceLayer (lgraph,“OutputLayer_softmax1001”,输出层);

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

lgraph。层
ans = 6×1 Layer array with layers: 1 'sequenceinput' Sequence Input Sequence Input with 12 dimensions 2 'lstm1000' LSTM LSTM with 100 hidden units 3 'fc_MatMul' Fully Connected 9 Fully Connected 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层阵列具有属性:

导入的层图lgraph1lgraph2不要有占位符层。

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

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

modelfile =“digitsMIMO.onnx”

导入的层和权重模数.网络in.digitsMIMO.onnx有两个输出层:一个分类层(classificationlayer_sm_1.)分类数字和一个回归层(RegressionLayer_fc_1_Flatten)计算预测数字的平均平方误差。

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

使用阴谋,并显示层lgraph

图(LGROPL)

lgraph。层
ans = 19×1层阵列,带有图层:1'输入'图像输入28×28×1图像2'conv_1'卷积16 5×5×1卷绕升温[11]和填充[2 2 2 2] 3'BN_1' Batch Normalization Batch normalization with 16 channels 4 'relu_1' ReLU ReLU 5 'conv_2' Convolution 32 1×1×16 convolutions with stride [2 2] and padding [0 0 0 0] 6 'conv_3' Convolution 32 3×3×16 convolutions with stride [2 2] and padding [1 1 1 1] 7 'BN_2' Batch Normalization Batch normalization with 32 channels 8 'relu_2' ReLU ReLU 9 'conv_4' Convolution 32 3×3×32 convolutions 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)
[19×1 net.cnn.layer. layer]连接:[19×2 table] InputNames: {'input'} OutputNames: {'ClassificationLayer_sm_1' 'RegressionLayer_fc_1_Flatten'}

输入参数

全部收缩

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

例子:“cifarResNet.onnx”

名称 - 值参数

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

例子:importonnxlayers(modeloleile,targetnetwork =“dagnetwork”,generatecustomlayers = true,packageName =“customlayers”)从中导入网络层模数作为一个层图兼容DAGNetwork对象,并将自动生成的自定义层保存在包中+ CustomLayers.在当前文件夹中。

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

例子:GenerateCustomLayers = false

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

例子:packagename =“shufflenet_9”

例子:PackageName = " CustomLayers "

导入网络架构的深度学习工具箱网络目标类型,具体为“dagnetwork”“dlnetwork”.功能importonnxLayers.导入网络架构LayerGraph对象兼容DAGNetworkdlnetwork对象。

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

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

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

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

inputdatafomats.在ONNX输入Tensor排序中的数据格式。例如,如果您指定InputDataFormats作为“BSSC”,导入的网络有一个imageInputLayer输入。了解更多信息importonnxLayers.解释ONNX输入张量的数据格式以及如何指定InputDataFormats有关不同的深度学习工具箱输入层,请参见转换ONNX输入和输出张量到内置MATLAB层

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

例子:InputDataFormats ='BSSC'

例子:InputDataFormats = " BSSC "

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

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

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

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

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

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

例子:公元前OutputDataFormats = ' '

例子:OutputDataFormats =“公元前”

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

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

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

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

例子:ImageInputSize = [28 28 1]对于2-D灰度输入图像

例子:imageInputSize = [224 224 3]用于二维彩色输入图像

例子:imageInputsize = [28 28 36 3]用于三维彩色输入图像

第一个网络输出的层类型,指定为“分类”“回归”,或“pixelclassification”.功能importonnxLayers.附加一个ClassificationOutputLayerRegressionOutputLayer,或pixelClassificationLayer(电脑视觉工具箱)对象到导入的网络体系结构的第一个输出分支的末端。附加一个pixelClassificationLayer(电脑视觉工具箱)对象需要计算机Vision Toolbox™。如果ONNX模型模数指定输出层类型或指定TargetNetwork作为“dlnetwork”importonnxLayers.忽略name-value参数OutputLayerType

例子:OutputLayerType =“回归”

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

如果ONNX网络包含操作符,软件不能转换为等效的内置MATLAB层(参见支持转换到内置MATLAB层的金宝appONNX操作符),然后importonnxLayers.在每个不支持的层的位置插入一个占位符层。金宝app有关更多信息,请参见提示

不断的折叠优化可以减少占位符层的数量。当您设置FoldConstants“深度”,与将参数设置为时相比,导入的层包含相同或更少的占位符层“浅”.但是,导入时间可能会增加。放FoldConstants“没有任何”禁用网络架构优化。

例子:FoldConstants = "浅"

输出参数

全部收缩

预先训练的Onnx模型的网络架构,作为一个返回LayerGraph对象。

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

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

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

限制

  • importonnxLayers.金宝app支持ONNX版本如下:

    • 该函数支持版本6的ONNX金宝app中间表示。

    • 该函数支持ONNX操作符集金宝app6到13。

笔记

如果导入导出的网络,则重新导入的网络的层可能与原始网络不同,因此可能不受支持。金宝app

更多关于

全部收缩

ONNX转换为内置时支持的操金宝app作符MATLAB

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

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

添加

additionLayernnet.onnx.layer.ElementwiseAffineLayer

AveragePool

averagePooling2dLayer

BatchNormalization

batchNormalizationLayer

concatenationLayer

常数

无(作为权重导入)

conv

convolution2dLayer

ConvTranspose

TransposedConv2dlayer.

退出

dropoutLayer

Elu

eluLayer

Gemm

fullyConnectedLayer如果ONNX网络是循环的,则为nnet.onnx.layer.flattenlayer.其次是convolution2dLayer

GlobalAveragePool

globalAveragePooling2dLayer

GlobalMaxPool

globalMaxPooling2dLayer

gru.

gruLayer

InstanceNormalization

GroupnormalizationLayer.numGroups指定为“channel-wise”

LeakyRelu

leakyReluLayer

LRN

CrossChannelNormalizationLayer

LSTM

lstmLayerbilstmLayer

MatMul

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

MaxPool

maxPooling2dLayer

Mul

multiplicationLayer

线性整流函数(Rectified Linear Unit)

reluLayerclippedReluLayer

乙状结肠

sigmoidLayer

Softmax

softmaxLayer

总和

additionLayer

双曲正切

Tanhlayer.

如果是的属性convOperator是一个只有两个元素的向量(p1, p2)importonnxLayers.进口conv作为一个convolution2dLayer使用name-value参数“填充”指定为(p1, p2, p1, p2)

ONNX运营商 ONNX导入器自定义层

剪辑

nnet.onnx.layer.ClipLayer

div

nnet.onnx.layer.ElementwiseAffineLayer

扁平

nnet.onnx.layer.flattenlayer.nnet.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数字数组,hwcn分别是图像的高度、宽度、通道数和观测次数吗

二维图像 imageInputLayer
BCSSSBSSSC包括SSSC. SSSCB.

h-经过-w-经过-d-经过-c数字数组,hwdcn分别是图像的高度、宽度、深度、通道数和图像观测数吗

三维图像 image3dinputlayer.
TBC. CBT.

c-经过-年代-经过-n矩阵,其中c为序列特征的个数,年代是序列长度,和n是序列观测的数量

向量序列 sequenceInputLayer
涂层 SSCBT

h-经过-w-经过-c-经过-年代-经过-n数组,hwcn分别对应图像的高度、宽度和通道数量,年代是序列长度,和n是图像序列观测的次数吗

二维图像序列 sequenceInputLayer
TBCSSS SSSCBT

h-经过-w-经过-d-经过-c-经过-年代-经过-n数组,hwd,c对应于图像的高度,宽度,深度和数量,年代是序列长度,和n是图像序列观测的次数吗

三维图像序列 sequenceInputLayer

转换ONNX张量输出到MATLAB

数据格式 MATLAB层
ONNX输出张量 MATLAB输出格式
公元前TBC. CBCBT. classificationLayer
bcsBSSCCSSSSCBCSSSBSSSC包括SSSC. SSCBSSSCB. pixelClassificationLayer(电脑视觉工具箱)
涂层TBCSSS SSCBTSSSCBT regressionLayer

在GPU上使用导入的网络层

importonnxLayers.不能在GPU上执行。然而,importonnxLayers.进口普雷雷暗神经网络的层以获得深度学习作为一个LayerGraph对象,可以在GPU上使用。

  • 转换导入LayerGraph对象至A.DAGNetwork通过使用assembleNetwork.在DAGNetwork对象,然后可以通过使用分类.使用name-value参数指定硬件需求execultenvironment..对于具有多个输出的网络,使用预测函数并指定名称值参数ReturnCategorical作为真正的

  • 转换导入LayerGraph对象至A.dlnetwork通过使用dlnetwork.在dlnetwork对象,然后可以通过使用预测.功能预测如果输入数据或网络参数存储在GPU上,则在GPU上执行。

    • 如果你使用minibatchqueue对小批量输入数据进行处理和管理minibatchqueue对象默认将输出转换为GPU阵列(如果有GPU可用)。

    • dlupdate.转换a的可学习参数dlnetwork对象到GPU阵列。

      dlnet = dlupdate (@gpuarray dlnet)

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

使用GPU需要并行计算工具箱™和支持的GPU设备。金宝app有关支持设备的信息,请参阅金宝appGPU支金宝app持情况(并行计算工具箱)

提示

  • 如果导入的网络包含不支持转换成内置MATLAB层的ONNX运算符(请参阅金宝app支持转换到内置MATLAB层的金宝appONNX操作符),importonnxLayers.不生成自定义层,那么importonnxLayers.在不支持的层上插入一个占位符层。金宝app要查找网络中不支持的层的名称和索引,请使用金宝appfindPlaceholderLayers函数。然后,您可以将占位符层替换为您定义的新层。要替换一个图层,请使用replaceLayer.例如,请参见导入并组装具有多个输出的ONNX网络

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

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

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

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

选择功能

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

兼容性的考虑

全部展开

警告从R2021B开始

R2021B中的行为更改

参考文献

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

[2]ONNXhttps://onnx.ai/

介绍了R2018a