importONNXLayers

Импортируйте слои из сети ONNX

Описание

пример

layers = importONNXLayers(modelfile) импортирует слои сети ONNX™ (Open Neural Network Exchange) из файла modelfile. Можно обучить импортированные слои на новом наборе данных или собрать слои в сеть, готовую к предсказанию.

Эта функция требует Конвертера Deep Learning Toolbox™ для пакета поддержки Формата Модели ONNX. Если этот пакет поддержки не установлен, то функция обеспечивает ссылку на загрузку.

пример

layers = importONNXLayers(modelfile,Name,Value) импортирует слои из сети ONNX с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение".

Например, importONNXLayers(modelfile,'ImportWeights',false) импортирует сетевую архитектуру без весов из файла modelfile.

Примеры

свернуть все

Загрузите и установите Конвертер Deep Learning Toolbox для пакета поддержки Формата Модели ONNX.

Ввод importONNXLayers в командной строке.

importONNXLayers

Если Конвертер Deep Learning Toolbox для Формата Модели ONNX не установлен, то функция обеспечивает ссылку на необходимый пакет поддержки в Add-On Explorer. Чтобы установить пакет поддержки, щелкните по ссылке, и затем нажмите Install. Проверяйте, что установка успешна путем импорта сети из файла модели 'cifarResNet.onnx' в командной строке. Если пакет поддержки установлен, то функция возвращает DAGNetwork объект.

modelfile = 'cifarResNet.onnx';
layers = importONNXLayers(modelfile,'OutputLayerType','classification')
layers = 

  LayerGraph with properties:

         Layers: [77×1 nnet.cnn.layer.Layer]
    Connections: [85×2 table]

Импортируйте архитектуру и веса остаточной нейронной сети, обученной на наборе данных CIFAR-10. Задайте файл, содержащий сеть ONNX и тип выходного слоя, чтобы добавить к импортированной сети.

modelfile = 'cifarResNet.onnx';
lgraph = importONNXLayers(modelfile, ...
    'OutputLayerType','classification', ...
    'ImportWeights',true)
lgraph = 
  LayerGraph with properties:

         Layers: [77×1 nnet.cnn.layer.Layer]
    Connections: [85×2 table]
     InputNames: {'Input_input'}
    OutputNames: {'ClassificationLayer_softmax'}

Анализируйте импортированную сетевую архитектуру.

analyzeNetwork(lgraph)

Импортируйте сеть ONNX, которая имеет несколько выходных параметров при помощи importONNXLayers. Функция вставляет слои заполнителя для выходных параметров. После импорта можно найти и заменить слои заполнителя при помощи findPlaceholderLayers и replaceLayer, соответственно.

Задайте сетевой файл, из которого можно импортировать слои и веса.

modelfile = 'digitsMIMO.onnx';

Сеть в digitsMIMO.onnx имеет два выходных слоя: один слой классификации, чтобы классифицировать цифры и один слой регрессии, чтобы вычислить среднеквадратическую ошибку для предсказанных углов цифр. Импортируйте слои и веса от modelfile.

layers = importONNXLayers('digitsMIMO.onnx','ImportWeights',true)
Warning: ONNX network has multiple outputs. importONNXLayers inserts placeholder layers for the outputs. Find and replace the layers by using findPlaceholderLayers and replaceLayer, respectively.
layers = 
  LayerGraph with properties:

         Layers: [19×1 nnet.cnn.layer.Layer]
    Connections: [19×2 table]
     InputNames: {'Input_input'}
    OutputNames: {1×0 cell}

importONNXLayers выводит предупреждение и вставляет слои заполнителя для выходных слоев.

Постройте график слоев с помощью plot.

plot(layers)

График слоев имеет два выходных слоя: Output_fc_1_Flatten и Output_sm_1. Эти два слоя являются заполнителями для выходных параметров. Можно проверять слои заполнителя путем просмотра Layers свойство или при помощи findPlaceholderLayers функция.

layers.Layers
ans = 
  19×1 Layer array with layers:

     1   'Input_input'           Image Input           28×28×1 images
     2   'conv_1'                Convolution           16 5×5×1 convolutions with stride [1  1] and padding [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   'Output_sm_1'           PLACEHOLDER LAYER     Placeholder for 'Output' ONNX operator
    18   'fc_1_Flatten'          ONNX Flatten          Flatten activations into 1-D assuming C-style (row-major) order
    19   'Output_fc_1_Flatten'   PLACEHOLDER LAYER     Placeholder for 'Output' ONNX operator
placeholderLayers = findPlaceholderLayers(layers)
placeholderLayers = 
  2×1 PlaceholderOutputLayer array with layers:

     1   'Output_sm_1'           PLACEHOLDER LAYER   Placeholder for 'Output' ONNX operator
     2   'Output_fc_1_Flatten'   PLACEHOLDER LAYER   Placeholder for 'Output' ONNX operator

Создайте выходные слои, чтобы заменить слои заполнителя. Во-первых, создайте слой классификации с именем Output_sm_1. Задайте классы выходного слоя как 0, 1, ..., 9. Если вы не задаете классы, то программное обеспечение автоматически устанавливает их на 1, 2N, где N количество классов.

output1 = classificationLayer('Name','Output_sm_1','Classes',string(0:9)); 

Создайте слой регрессии с именем Output_fc_1_Flatten.

output2 = regressionLayer('Name','Output_fc_1_Flatten'); 

Замените слои заполнителя на output1 и output2 использование replaceLayer.

layers = replaceLayer(layers,'Output_sm_1',output1);
layers = replaceLayer(layers,'Output_fc_1_Flatten',output2);

Отобразите Layers свойство графика слоев подтвердить замену.

layers.Layers
ans = 
  19×1 Layer array with layers:

     1   'Input_input'           Image Input             28×28×1 images
     2   'conv_1'                Convolution             16 5×5×1 convolutions with stride [1  1] and padding [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   'Output_sm_1'           Classification Output   crossentropyex with '0' and 9 other classes
    18   'fc_1_Flatten'          ONNX Flatten            Flatten activations into 1-D assuming C-style (row-major) order
    19   'Output_fc_1_Flatten'   Regression Output       mean-squared-error

Соберите график слоев с помощью assembleNetwork. Функция возвращает DAGNetwork объект, который готов использовать для предсказания.

assembledNet = assembleNetwork(layers)
assembledNet = 
  DAGNetwork with properties:

         Layers: [19×1 nnet.cnn.layer.Layer]
    Connections: [19×2 table]
     InputNames: {'Input_input'}
    OutputNames: {'Output_sm_1'  'Output_fc_1_Flatten'}

Входные параметры

свернуть все

Имя файла модели ONNX, содержащего сеть в виде вектора символов или строкового скаляра. Файл должен быть в текущей папке в папке на пути MATLAB®, или необходимо включать полный или относительный путь в файл.

Пример: 'cifarResNet.onnx'

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: importONNXLayers(modelfile,'OutputLayerType','classification') импортирует слоя сети из modelfile и добавляет выходной слой для классификации выходной слой в конце импортированных слоев.

Тип выходного слоя, который функция добавляет в конец импортированной сетевой архитектуры в виде 'classification', 'regression', или 'pixelclassification'. Используя 'pixelclassification' добавляет pixelClassificationLayer Объект (Computer Vision Toolbox) (требует Computer Vision Toolbox™).

Если сеть в modelfile имеет несколько выходных параметров, затем вы не можете задать выходные типы слоя с помощью этого аргумента. importONNXLayers вставляет слои заполнителя для выходных параметров. После импорта можно найти и заменить слои заполнителя при помощи findPlaceholderLayers и replaceLayer, соответственно.

Пример: 'OutputLayerType','regression'

Индикатор, чтобы импортировать веса, а также сетевую архитектуру в виде любого false или true.

Пример: 'ImportWeights',true

Типы данных: логический

Выходные аргументы

свернуть все

Сетевая архитектура, возвращенная как LayerGraph объект.

Ограничения

  • importONNXLayers поддержки версии ONNX можно следующим образом:

    • Функция поддерживает промежуточную версию 6 представления ONNX.

    • Функция полностью поддерживает наборы оператора ONNX 6, 7, 8, и 9.

    • Функциональные предложения ограниченная поддержка оператора ONNX устанавливают 10 и 11.

Примечание

Если вы импортируете экспортируемую сеть, слои повторно импортированной сетевой силы отличаются от исходной сети и не могут поддерживаться.

Больше о

свернуть все

Поддерживаемые слои ONNX

importONNXLayers поддерживает следующие слои ONNX, с некоторыми ограничениями:

Слой ONNXСлой Deep Learning Toolbox

Add

additionLayer или nnet.onnx.layer.ElementwiseAffineLayer

AveragePool

averagePooling2dLayer

BatchNormalization

batchNormalizationLayer

Concat

concatenationLayer

Constant

Ни один (Импортированный как веса)

Conv*

convolution2dLayer

ConvTranspose

transposedConv2dLayer

Dropout

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

lstmLayer или bilstmLayer

MatMul

fullyConnectedLayer если сеть ONNX является текущей, в противном случае convolution2dLayer

MaxPool

maxPooling2dLayer

Mul

multiplicationLayer

Relu

reluLayer или clippedReluLayer

Sigmoid

sigmoidLayer

Softmax

softmaxLayer

Sum

additionLayer

Tanh

tanhLayer

*Если pads атрибут Conv оператор является вектором только с двумя элементами [p1,p2], importONNXLayers импорт Conv как convolution2dLayer с аргументом 'Padding' значения имени заданный как [p1,p2,p1,p2].

Слой ONNXСредство импорта ONNX пользовательский слой

Clip

nnet.onnx.layer.ClipLayer

Div

nnet.onnx.layer.ElementwiseAffineLayer

Flatten

nnet.onnx.layer.FlattenLayer или nnet.onnx.layer.Flatten3dLayer

Identity

nnet.onnx.layer.IdentityLayer

ImageScaler

nnet.onnx.layer.ElementwiseAffineLayer

PRelu

nnet.onnx.layer.PReluLayer

Reshape

nnet.onnx.layer.FlattenLayer

Sub

nnet.onnx.layer.ElementwiseAffineLayer
Слой ONNXImage Processing Toolbox™
DepthToSpacedepthToSpace2dLayer (Image Processing Toolbox)
Resizeresize2dLayer (Image Processing Toolbox) или resize3dLayer (Image Processing Toolbox)
SpaceToDepthspaceToDepthLayer (Image Processing Toolbox)
Upsampleresize2dLayer (Image Processing Toolbox) или resize3dLayer (Image Processing Toolbox)

Советы

  • Если сеть ONNX содержит слой, который не поддерживает Конвертер Deep Learning Toolbox для Формата Модели ONNX (см. Поддерживаемые Слои ONNX), то importONNXLayers вставляет слой заполнителя вместо неподдерживаемого слоя. Чтобы найти имена и индексы неподдерживаемых слоев в сети, используйте findPlaceholderLayers функция. Затем можно заменить слой заполнителя на новый слой, который вы задаете. Чтобы заменить слой, использовать replaceLayer. Для примера смотрите Импорт и Соберите Сеть ONNX с Несколькими Выходными параметрами.

  • Можно импортировать сеть ONNX с несколькими входными параметрами и несколькими выходными параметрами. Если сеть имеет несколько входных параметров и один выход, использовать importONNXNetwork. Если сеть имеет несколько выходных параметров, использовать importONNXLayers. importONNXLayers функция вставляет слои заполнителя для выходных параметров. После импорта можно найти и заменить слои заполнителя при помощи findPlaceholderLayers и replaceLayer, соответственно. Для примера смотрите Импорт и Соберите Сеть ONNX с Несколькими Выходными параметрами. Чтобы узнать о нейронной сети для глубокого обучения с несколькими входными параметрами и несколькими выходными параметрами, смотрите Несколько - Вход и Несколько - Выходные Сети.

  • Чтобы использовать предварительно обученную сеть для предсказания или передачи обучения на новых изображениях, необходимо предварительно обработать изображения таким же образом изображения, которые использовались, чтобы обучаться, импортированная модель были предварительно обработаны. Наиболее распространенные шаги предварительной обработки изменяют размер изображений, вычитая средние значения изображений, и преобразовывая изображения от изображений BGR до RGB.

    • Чтобы изменить размер изображений, использовать imresize. Например, imresize(image,[227,227,3]).

    • Чтобы преобразовать изображения от RGB до формата BGR, использовать flip. Например, flip(image,3).

    Для получения дополнительной информации о предварительной обработке изображений для обучения и предсказания, смотрите, Предварительно обрабатывают Изображения для Глубокого обучения.

Ссылки

[1] Открытый Exchange Нейронной сети. https://github.com/onnx/.

[2] ONNX. https://onnx.ai/.

Введенный в R2018a