Main Content

代码生成支持的网络和层

MATLAB® Coder™ 支持序列、有向无环图 (DAG) 和循环卷积神经网络(CNN 或 ConvNet)的代码生成。您可以为任何经过训练的卷积神经网络生成代码,其层支持代码生成。请参阅支持的层

支持的预训练网络

代码生成支持 Deep Learning Toolbox™ 中提供的以下预训练网络。

网络名称描述ARM® Compute LibraryIntel® MKL-DNN
AlexNet

AlexNet 卷积神经网络。关于预训练的 AlexNet 模型,请参阅 alexnet (Deep Learning Toolbox)

DarkNetDarkNet-19 和 DarkNet-53 卷积神经网络。对于预训练的 DarkNet 模型,请参阅 darknet19 (Deep Learning Toolbox)darknet53 (Deep Learning Toolbox)
DenseNet-201

DenseNet-201 卷积神经网络。对于预训练的 DenseNet-201 模型,请参阅 densenet201 (Deep Learning Toolbox)

EfficientNet-b0

EfficientNet-b0 卷积神经网络。关于预训练的 EfficientNet-b0 模型,请参阅 efficientnetb0 (Deep Learning Toolbox)

GoogLeNet

GoogLeNet 卷积神经网络。关于预训练的 GoogLeNet 模型,请参阅 googlenet (Deep Learning Toolbox)

Inception-ResNet-v2

Inception-ResNet-v2 卷积神经网络。有关预训练的 Inception-ResNet-v2 模型,请参阅 inceptionresnetv2 (Deep Learning Toolbox)

Inception-v3Inception-v3 卷积神经网络。有关预训练的 Inception-v3 模型,请参阅 inceptionv3 (Deep Learning Toolbox)
MobileNet-v2

MobileNet-v2 卷积神经网络。有关预训练的 MobileNet-v2 模型,请参阅 mobilenetv2 (Deep Learning Toolbox)

NASNet-Large

NASNet-Large 卷积神经网络。有关预训练的 NASNet-Large 模型,请参阅 nasnetlarge (Deep Learning Toolbox)

NASNet-Mobile

NASNet-Mobile 卷积神经网络。有关预训练的 NASNet-Mobile 模型,请参阅 nasnetmobile (Deep Learning Toolbox)

ResNet

ResNet-18、ResNet-50 和 ResNet-101 卷积神经网络。对于预训练的 ResNet 模型,请参阅 resnet18 (Deep Learning Toolbox)resnet50 (Deep Learning Toolbox)resnet101 (Deep Learning Toolbox)

SegNet

多类像素级分割网络。有关详细信息,请参阅 segnetLayers (Computer Vision Toolbox)

SqueezeNet

小型深度神经网络。有关预训练的 SqeezeNet 模型,请参阅 squeezenet (Deep Learning Toolbox)

VGG-16

VGG-16 卷积神经网络。有关预训练的 VGG-16 模型,请参阅 vgg16 (Deep Learning Toolbox)

VGG-19

VGG-19 卷积神经网络。有关预训练的 VGG-19 模型,请参阅 vgg19 (Deep Learning Toolbox)

Xception

Xception 卷积神经网络。有关预训练的 Xception 模型,请参阅 xception (Deep Learning Toolbox)

支持的层

对于表中指定的目标深度学习库,MATLAB Coder 支持以下层的代码生成。

在安装支持包 MATLAB Coder Interface for Deep Learning Libraries 后,您可以使用 analyzeNetworkForCodegen 查看网络是否兼容特定深度学习库的代码生成。例如:

result = analyzeNetworkForCodegen(mobilenetv2,TargetLibrary = 'mkldnn')

注意

从 R2022b 开始,请使用 analyzeNetworkForCodegen 函数检查深度学习网络的代码生成兼容性。不推荐使用 coder.getDeepLearningLayers

层名称描述ARM Compute LibraryIntel MKL-DNN泛型 C/C++
additionLayer (Deep Learning Toolbox)

相加层

anchorBoxLayer (Computer Vision Toolbox)

锚框层

averagePooling2dLayer (Deep Learning Toolbox)

平均池化层

batchNormalizationLayer (Deep Learning Toolbox)

批量归一化层

bilstmLayer (Deep Learning Toolbox)双向 LSTM 层
classificationLayer (Deep Learning Toolbox)

创建分类输出层

clippedReluLayer (Deep Learning Toolbox)

裁剪修正线性单元 (ReLU) 层

concatenationLayer (Deep Learning Toolbox)

串联层

convolution2dLayer (Deep Learning Toolbox)

二维卷积层

  • 对于代码生成,PaddingValue 参数必须等于默认值 0

crop2dLayer (Deep Learning Toolbox)

对输入应用二维裁剪的层

CrossChannelNormalizationLayer (Deep Learning Toolbox)

逐通道局部响应归一化层

自定义层

为您的问题定义的自定义层,具有或不具有可学习参数。

请参阅:

自定义层的输出必须为固定大小数组。

仅泛型 C/C++ 代码生成支持串行网络中的自定义层。

对于代码生成,自定义层必须包含 %#codegen pragma。

如果满足以下条件,则可以将 dlarray 传递给自定义层:

  • 自定义层位于 dlnetwork 中。

  • 自定义层位于 DAG 或串行网络中,并且要么从 nnet.layer.Formattable 继承,要么没有反向传播。

对于不受支持的 dlarray 方法,您必须从 dlarray 中提取基础数据,执行计算并将数据重新构造为 dlarray 以便生成代码。例如,

function Z = predict(layer, X)

if coder.target('MATLAB')
   Z = doPredict(X);
else
   if isdlarray(X)
      X1 = extractdata(X);
      Z1 = doPredict(X1);
      Z = dlarray(Z1);
  else
      Z = doPredict(X);
  end
end

end

仅泛型 C/C++ 代码生成支持串行网络中的自定义层。

自定义输出层

所有输出层,包括通过使用 nnet.layer.ClassificationLayernnet.layer.RegressionLayer 创建的自定义分类或回归输出层。

有关如何定义自定义分类输出层和指定损失函数的示例,请参阅 Define Custom Classification Output Layer (Deep Learning Toolbox)

有关如何定义自定义回归输出层和指定损失函数的示例,请参阅 Define Custom Regression Output Layer (Deep Learning Toolbox)

depthConcatenationLayer (Deep Learning Toolbox)

深度串联层

depthToSpace2dLayer (Image Processing Toolbox)二维深度到空间层
dicePixelClassificationLayer (Computer Vision Toolbox)

Dice 像素分类层使用广义 Dice 损失为每个图像像素或体素提供分类标签。

dropoutLayer (Deep Learning Toolbox)

丢弃层

eluLayer (Deep Learning Toolbox)

指数线性单元 (ELU) 层

featureInputLayer (Deep Learning Toolbox)

特征输入层

flattenLayer (Deep Learning Toolbox)

扁平化层

focalLossLayer (Computer Vision Toolbox)焦点损失层使用焦点损失预测对象类。

fullyConnectedLayer (Deep Learning Toolbox)

全连接层

globalAveragePooling2dLayer (Deep Learning Toolbox)

空间数据的全局平均池化层

globalMaxPooling2dLayer (Deep Learning Toolbox)

二维全局最大池化层

groupedConvolution2dLayer (Deep Learning Toolbox)

二维分组卷积层

  • 对于代码生成,PaddingValue 参数必须等于默认值 0

  • 如果为 numGroups 指定整数,则该值必须小于或等于 2

groupNormalizationLayer (Deep Learning Toolbox)

组归一化层

gruLayer (Deep Learning Toolbox)

门控循环单元 (GRU) 层

imageInputLayer (Deep Learning Toolbox)

图像输入层

  • 代码生成不支持使用函数句柄指定的 'Normalization'

leakyReluLayer (Deep Learning Toolbox)

泄漏修正线性单元 (ReLU) 层

lstmLayer (Deep Learning Toolbox)

长短期记忆 (LSTM) 层

lstmProjectedLayer (Deep Learning Toolbox)

LSTM 投影层

maxPooling2dLayer (Deep Learning Toolbox)

最大池化层

如果在核窗口的非对角线上存在相等的最大值,则 maxPooling2dLayer 的实现差异可能导致 MATLAB 和生成的代码之间出现轻微的数值不匹配。此问题还导致每个池化区域中最大值的索引不匹配。有关详细信息,请参阅 maxPooling2dLayer (Deep Learning Toolbox)

maxUnpooling2dLayer (Deep Learning Toolbox)

最大去池化层

如果在核窗口的非对角线上存在相等的最大值,则 maxPooling2dLayer 的实现差异可能导致 MATLAB 和生成的代码之间出现轻微的数值不匹配。此问题还导致每个池化区域中最大值的索引不匹配。有关详细信息,请参阅 maxUnpooling2dLayer (Deep Learning Toolbox)

multiplicationLayer (Deep Learning Toolbox)

乘法层

pixelClassificationLayer (Computer Vision Toolbox)

为语义分割创建像素分类层

rcnnBoxRegressionLayer (Computer Vision Toolbox)

Fast 和 Faster R-CNN 的框回归层

rpnClassificationLayer (Computer Vision Toolbox)

区域提议网络 (RPN) 的分类层

regressionLayer (Deep Learning Toolbox)

创建回归输出层

reluLayer (Deep Learning Toolbox)

修正线性单元 (ReLU) 层

resize2dLayer (Image Processing Toolbox)二维调整大小层
scalingLayer (Reinforcement Learning Toolbox)执行器或评价器网络的缩放层
sigmoidLayer (Deep Learning Toolbox)sigmoid 层
sequenceFoldingLayer (Deep Learning Toolbox)序列折叠层
sequenceInputLayer (Deep Learning Toolbox)

序列输入层

  • 对于向量序列输入,在代码生成期间,特征的数量必须为常量。

  • 代码生成不支持使用函数句柄指定的 'Normalization'

sequenceUnfoldingLayer (Deep Learning Toolbox)序列展开层
softmaxLayer (Deep Learning Toolbox)

Softmax 层

softplusLayer (Reinforcement Learning Toolbox)

执行器或评价器网络的 Softplus 层

spaceToDepthLayer (Image Processing Toolbox)

空间到深度层

ssdMergeLayer (Computer Vision Toolbox)

用于目标检测的 SSD 合并层

swishLayer (Deep Learning Toolbox)

Swish 层

nnet.keras.layer.ClipLayer

在上界和下界之间裁剪输入

nnet.keras.layer.FlattenCStyleLayer

按 C 样式(行优先)顺序,将激活值扁平化为一维

nnet.keras.layer.GlobalAveragePooling2dLayer

空间数据的全局平均池化层

nnet.keras.layer.PreluLayer

参数化修正线性单元

nnet.keras.layer.SigmoidLayer

Sigmoid 激活层

nnet.keras.layer.TanhLayer

双曲正切激活层

nnet.keras.layer.TimeDistributedFlattenCStyleLayer

按输入层的 C 样式(即行优先)存储顺序,将输入图像序列扁平化为向量序列

nnet.keras.layer.ZeroPadding2dLayer

二维输入的零填充层

nnet.onnx.layer.ClipLayer

在上界和下界之间裁剪输入

nnet.onnx.layer.ElementwiseAffineLayer

对输入按元素进行缩放后再相加的层

nnet.onnx.layer.FlattenInto2dLayer

以 ONNX 方式扁平化 MATLAB 二维图像批量,从而生成 CB 格式的二维输出数组

nnet.onnx.layer.FlattenLayer

ONNX™ 网络的扁平化层

nnet.onnx.layer.GlobalAveragePooling2dLayer

空间数据的全局平均池化层

nnet.onnx.layer.IdentityLayer

实现 ONNX 恒等运算符的层

nnet.onnx.layer.PreluLayer

参数化修正线性单元

nnet.onnx.layer.SigmoidLayer

Sigmoid 激活层

nnet.onnx.layer.TanhLayer

双曲正切激活层

nnet.onnx.layer.VerifyBatchSizeLayer

验证固定批量大小

tanhLayer (Deep Learning Toolbox)

双曲正切 (tanh) 层

transposedConv2dLayer (Deep Learning Toolbox)

转置二维卷积层

代码生成不支持输入的不对称裁剪。例如,不支持为 'Cropping' 参数指定向量 [t b l r] 来裁剪输入的顶部、底部、左侧和右侧。

wordEmbeddingLayer (Text Analytics Toolbox)

单词嵌入层将单词索引映射到向量。

yolov2OutputLayer (Computer Vision Toolbox)

YOLO v2 目标检测网络的输出层

yolov2ReorgLayer (Computer Vision Toolbox)

YOLO v2 目标检测网络的重组层

yolov2TransformLayer (Computer Vision Toolbox)

YOLO v2 目标检测网络的变换层

支持的类

描述

ARM Compute Library

Intel MKL-DNN

泛型 C/C++

DAGNetwork (Deep Learning Toolbox)

用于深度学习的有向无环图 (DAG) 网络

  • 仅支持 activationspredictclassify 方法。

dlnetwork (Deep Learning Toolbox)

用于自定义训练循环的深度学习网络

  • 代码生成仅支持 InputNamesOutputNames 属性。

  • dlnetwork 对象的 Initialized 属性必须设置为 true。

  • 您可以为具有向量或图像序列输入的 dlnetwork 生成代码。对于 ARM Compute,dlnetwork 可以有序列输入层和非序列输入层。对于 Intel MKL-DNN,输入层必须全部为序列输入层。代码生成支持包括:

    • 包含具有 'CT''CBT' 数据格式的向量序列的 dlarray

    • 包含具有 'SSCT''SSCBT' 数据格式的图像序列的 dlarray

    • 具有异构输入层的多输入 dlnetwork。对于 RNN 网络,不支持多个输入。

  • 代码生成仅支持 predict 对象函数。predict 方法的 dlarray 输入必须为 single 数据类型。

  • 代码生成支持 MIMO dlnetworks

  • 要创建用于代码生成的 dlnetwork 对象,请参阅加载预训练网络以用于代码生成

SeriesNetwork (Deep Learning Toolbox)

用于深度学习的串行网络

  • 仅支持 activationsclassifypredictpredictAndUpdateStateclassifyAndUpdateStateresetState 对象函数。

yolov2ObjectDetector (Computer Vision Toolbox)

使用 YOLO v2 目标检测器检测目标

  • 代码生成仅支持 yolov2ObjectDetectordetect (Computer Vision Toolbox) 方法。

  • detect 方法的 roi 参数必须为代码生成常量 (coder.const()) 和 1×4 向量。

  • 仅支持 detectThresholdSelectStrongestMinSizeMaxSize 名称-值对组。

yolov3ObjectDetector (Computer Vision Toolbox)

使用 YOLO v3 目标检测器检测目标

  • 代码生成仅支持 yolov3ObjectDetectordetect (Computer Vision Toolbox) 方法。

  • detect 方法的 roi 参数必须为代码生成常量 (coder.const()) 和 1×4 向量。

  • 仅支持 detectThresholdSelectStrongestMinSizeMaxSize 名称-值对组。

yolov4ObjectDetector (Computer Vision Toolbox)

使用 YOLO v4 目标检测器检测目标

  • detect 方法的 roi 参数必须为代码生成常量 (coder.const()) 和 1×4 向量。

  • 仅支持 detectThresholdSelectStrongestMinSizeMaxSizeMiniBatchSize 名称-值对组。

ssdObjectDetector (Computer Vision Toolbox)

使用基于 SSD 的检测器来检测目标的对象。

  • 代码生成仅支持 ssdObjectDetectordetect (Computer Vision Toolbox) 方法。

  • detect 方法的 roi 参数必须为 codegen 常量 (coder.const()) 和 1×4 向量。

  • 仅支持 ThresholdSelectStrongestMinSizeMaxSizeMiniBatchSize 名称-值对组。所有名称-值对组都必须为编译时常量。

  • 输入图像的通道和批量大小必须为固定大小。

  • labels 输出以分类数组形式返回。

  • 在生成的代码中,输入会重新缩放为网络输入层的大小。但是,detect 方法返回的边界框基于原始输入大小。

pointPillarsObjectDetector (Lidar Toolbox)

用于检测激光雷达点云中的目标的 PointPillars 网络

  • 代码生成仅支持 pointPillarsObjectDetectordetect 方法。

  • 仅支持 detect 方法的 ThresholdSelectStrongestMiniBatchSize 名称-值对组。

int8 代码生成

您可以将 Deep Learning Toolbox 与 Deep Learning Toolbox 模型量化库支持包结合使用,通过将卷积层的权重、偏置和激活量化为 8 位定标整数数据类型来减少深度神经网络的内存占用。然后,您可以使用 MATLAB Coder 来生成网络的优化代码。请参阅Generate int8 Code for Deep Learning Networks

另请参阅

相关主题