importONNXLayers

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

Описание

пример

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

Эта функция требует Конвертера 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]

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

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 = 
  19x1 Layer array with layers:

     1   'Input_input'           Image Input           28x28x1 images
     2   'conv_1'                Convolution           16 5x5x1 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 1x1x16 convolutions with stride [2  2] and padding [0  0  0  0]
     6   'conv_3'                Convolution           32 3x3x16 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 3x3x32 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 14x14x32 convolutions with stride [1  1] and padding [0  0  0  0]
    14   'fc_2'                  Convolution           10 14x14x32 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 = 
  2x1 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 = 
  19x1 Layer array with layers:

     1   'Input_input'           Image Input             28x28x1 images
     2   'conv_1'                Convolution             16 5x5x1 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 1x1x16 convolutions with stride [2  2] and padding [0  0  0  0]
     6   'conv_3'                Convolution             32 3x3x16 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 3x3x32 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 14x14x32 convolutions with stride [1  1] and padding [0  0  0  0]
    14   'fc_2'                  Convolution             10 14x14x32 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™).

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

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

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

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

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

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

свернуть все

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

Советы

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

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

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

    Add

    additionLayer или nnet.onnx.layer.ElementwiseAffineLayer

    AveragePool

    averagePooling2dLayer

    BatchNormalization

    batchNormalizationLayer

    Clip

    nnet.onnx.layer.ClipLayer

    Concat

    concatenationLayer

    Constant

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

    Conv

    convolution2dLayer

    ConvTranspose

    transposedConv2dLayer

    Div

    nnet.onnx.layer.ElementwiseAffineLayer

    Dropout

    dropoutLayer

    Flatten

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

    Elu

    eluLayer

    Gemm

    nnet.onnx.layer.FlattenLayer и fullyConnectedLayer если сеть ONNX является текущей, в противном случае fullyConnectedLayer

    GlobalAveragePool

    globalAveragePooling2dLayer

    GlobalMaxPool

    globalMaxPooling2dLayer

    GRU

    gruLayer

    Identity

    nnet.onnx.layer.IdentityLayer

    ImageScaler

    nnet.onnx.layer.ElementwiseAffineLayer

    LeakyRelu

    leakyReluLayer

    LRN

    CrossChannelNormalizationLayer

    LSTM

    lstmLayer или bilstmLayer

    MatMul

    fullyConnectedLayer

    MaxPool

    maxPooling2dLayer

    Mul

    nnet.onnx.layer.ElementwiseAffineLayer

    PRelu

    nnet.onnx.layer.PReluLayer

    Relu

    reluLayer или clippedReluLayer

    Reshape

    nnet.onnx.layer.FlattenLayer

    Sigmoid

    nnet.onnx.layer.SigmoidLayer

    Softmax

    softmaxLayer

    Sub

    nnet.onnx.layer.ElementwiseAffineLayer

    Sum

    additionLayer

    Tanh

    tanhLayer

  • Рабочий процесс для сборки слоев, импортированных из ONNX в сеть, готовую к предсказанию, совпадает с собирающимися слоями, импортированными из Keras. Для примера этого рабочего процесса смотрите, Собирают Сеть от Предварительно обученных Слоев Keras.

  • Можно импортировать сеть 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