importONNXLayers

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

Описание

пример

lgraph = importONNXLayers(modelfile) импортирует слои и веса предварительно обученной сети ONNX™ (Open Neural Network Exchange) из файла modelfile. Функция возвращает lgraph как LayerGraph объект, совместимый с DAGNetwork или dlnetwork объект.

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

Примечание

По умолчанию, importONNXLayers попытки сгенерировать пользовательский слой, когда программное обеспечение не может преобразовать оператор ONNX в эквивалентный встроенный MATLAB® слой. Для списка операторов, для которых программное обеспечение поддерживает преобразование, см. Операторы ONNX, Поддержанные для Преобразования на Встроенные Слои MATLAB.

importONNXLayers сохраняет сгенерированные пользовательские слои в пакете +modelfile.

importONNXLayers автоматически не генерирует пользовательский слой для каждого оператора ONNX, который не поддерживается для преобразования на встроенный слой MATLAB. Для получения дополнительной информации о том, как обработать неподдерживаемые слои, смотрите Советы.

пример

lgraph = importONNXLayers(modelfile,Name=Value) импортирует слои и веса от сети ONNX с дополнительными опциями, заданными одними или несколькими аргументами name-value. Например, OutputLayerType="classification" импортирует график слоев, совместимый с DAGNetwork объект, с классификацией вывел слой, добавленный в конец первой выходной ветви импортированной сетевой архитектуры.

Примеры

свернуть все

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

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

importONNXLayers

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

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'}

Постройте сетевую архитектуру.

plot(lgraph)

Импортируйте предварительно обученную сеть ONNX как LayerGraph объект. Затем соберите импортированные слои в DAGNetwork объект и использование собранная сеть, чтобы классифицировать изображение.

Сгенерируйте модель ONNX squeezenet нейронная сеть свертки.

squeezeNet = squeezenet;
exportONNXNetwork(squeezeNet,"squeezeNet.onnx");

Задайте файл модели и имена классов.

modelfile = "squeezenet.onnx";
ClassNames = squeezeNet.Layers(end).Classes;

Импортируйте слои и веса сети 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)

Отобразите последний слой импортированной сети. Выход показывает, что график слоев имеет ClassificationOutputLayer в конце сетевой архитектуры.

lgraph.Layers(end)
ans = 
  ClassificationOutputLayer with properties:

            Name: 'ClassificationLayer_prob'
         Classes: 'auto'
    ClassWeights: 'none'
      OutputSize: 'auto'

   Hyperparameters
    LossFunction: 'crossentropyex'

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

Слой классификации имеет имя 'ClassificationLayer_prob'. Установите классы на ClassNames, и затем замените импортированный слой классификации на новый.

cLayer = lgraph.Layers(end);
cLayer.Classes = ClassNames;
lgraph = replaceLayer(lgraph,'ClassificationLayer_prob',cLayer);

Соберите график слоев с помощью assembleNetwork возвратить DAGNetwork объект.

net = 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).

I = imread("peppers.png");
size(I)
ans = 1×3

   384   512     3

Измените размер изображения к входному размеру сети. Покажите изображение.

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

Классифицируйте изображение с помощью импортированной сети.

label = classify(net,I)
label = categorical
     bell pepper 

Импортируйте предварительно обученную сеть ONNX как LayerGraph объект, совместимый с dlnetwork объект. Затем преобразуйте график слоев в dlnetwork классифицировать изображение.

Сгенерируйте модель ONNX squeezenet нейронная сеть свертки.

squeezeNet = squeezenet;
exportONNXNetwork(squeezeNet,"squeezeNet.onnx");

Задайте файл модели и имена классов.

modelfile = "squeezenet.onnx";
ClassNames = squeezeNet.Layers(end).Classes;

Импортируйте слои и веса сети 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).

I = imread("peppers.png");
size(I)
ans = 1×3

   384   512     3

Измените размер изображения к входному размеру сети. Покажите изображение.

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

Преобразуйте импортированный график слоев в dlnetwork объект.

dlnet = dlnetwork(lgraph);

Преобразуйте изображение в dlarray. Отформатируйте изображения с размерностями "SSCB" (пространственный, пространственный, канал, пакет). В этом случае пакетный размер равняется 1, и можно не использовать его ("SSC").

I_dlarray = dlarray(single(I),"SSCB");

Классифицируйте демонстрационное изображение и найдите предсказанную метку.

prob = predict(dlnet,I_dlarray);
[~,label] = max(prob);

Отобразите результат классификации.

ClassNames(label)
ans = categorical
     bell pepper 

Импортируйте предварительно обученную сеть ONNX как LayerGraph объект, и собирает импортированные слои в DAGNetwork объект. Затем используйте DAGNetwork классифицировать изображение. Импортированная сеть содержит операторы ONNX, которые не поддерживаются для преобразования на встроенные слои MATLAB. Программное обеспечение автоматически генерирует пользовательские слои, когда вы импортируете эти операторы.

Этот пример использует функцию помощника findCustomLayers. Чтобы просмотреть код для этой функции, смотрите Функцию Помощника.

Задайте файл, чтобы импортировать как shufflenet с оператором устанавливает 9 из Зоопарка Модели ONNX. shufflenet сверточная нейронная сеть, которая обучена больше чем на миллионе изображений от базы данных ImageNet. В результате сеть изучила богатые представления функции для широкого спектра изображений. Сеть может классифицировать изображения в 1 000 категорий объектов, таких как клавиатура, мышь, карандаш и многие животные.

modelfile = "shufflenet-9.onnx";

Импортируйте слои и веса shufflenet. По умолчанию, importONNXLayers импортирует сеть как LayerGraph объект, совместимый с DAGNetwork объект. Если импортированная сеть содержит операторы ONNX, не поддержанные для преобразования на встроенные слои MATLAB, то importONNXLayers может автоматически сгенерировать пользовательские слои вместо этих слоев. importONNXLayers сохраняет каждый сгенерированный пользовательский слой в отдельный .m файл в пакете +shufflenet_9 в текущей папке. Задайте имя пакета при помощи аргумента 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'}

Найдите индексы автоматически сгенерированных пользовательских слоев при помощи функции помощника findCustomLayers, и отобразите пользовательские слои.

ind = findCustomLayers(lgraph.Layers,'+shufflenet_9');
lgraph.Layers(ind)
ans = 
  16×1 Layer array with layers:

     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_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

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

Импортируйте имена классов из squeezenet, который также обучен с изображениями от базы данных ImageNet.

SqueezeNet = squeezenet;
classNames = SqueezeNet.Layers(end).ClassNames;

Слой cLayer классификации последний слой lgraph. Установите классы на classNames и затем замените импортированный слой классификации на новый.

cLayer = lgraph.Layers(end)
cLayer = 
  ClassificationOutputLayer with properties:

            Name: 'ClassificationLayer_gpu_0_softmax_1'
         Classes: 'auto'
    ClassWeights: 'none'
      OutputSize: 'auto'

   Hyperparameters
    LossFunction: 'crossentropyex'

cLayer.Classes = classNames;
lgraph = replaceLayer(lgraph,lgraph.Layers(end).Name,cLayer);

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

net = 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).

I = imread("peacock.jpg");
size(I)
ans = 1×3

         792        1056           3

Измените размер изображения к входному размеру сети. Покажите изображение.

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

Входные параметры к shufflenet потребуйте дальнейшей предварительной обработки (для получения дополнительной информации смотрите ShuffleNet в Зоопарке Модели ONNX). Перемасштабируйте изображение. Нормируйте изображение путем вычитания среднего значения учебных изображений и деления на стандартное отклонение учебных изображений.

I = rescale(I,0,1);

meanIm = [0.485 0.456 0.406];
stdIm = [0.229 0.224 0.225];
I = (I - reshape(meanIm,[1 1 3]))./reshape(stdIm,[1 1 3]);

Классифицируйте изображение с помощью импортированной сети.

label = classify(net,I)
label = categorical
     peacock 

Функция помощника

Этот раздел предоставляет код функции помощника findCustomLayers используемый в этом примере. findCustomLayers возвращает indices из пользовательских слоев, что importONNXLayers автоматически генерирует.

function indices = findCustomLayers(layers,PackageName)

s = what(['.\' PackageName]);

indices = zeros(1,length(s.m));
for i = 1:length(layers)
    for j = 1:length(s.m)
        if strcmpi(class(layers(i)),[PackageName(2:end) '.' s.m{j}(1:end-2)])
            indices(j) = i;
        end
    end
end

end

Импортируйте сеть долгой краткосрочной памяти (LSTM) ONNX как график слоев, и затем найдите и замените placholder слои. Сеть LSTM позволяет вам ввести данные о последовательности в сеть и сделать предсказания на основе отдельных временных шагов данных о последовательности.

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

Задайте lstmNet как файл модели.

modelfile = "lstmNet.onnx";

Импортируйте слои и веса сети ONNX. По умолчанию, importONNXLayers импортирует сеть как LayerGraph объект, совместимый с DAGNetwork объект.

lgraph = importONNXLayers("lstmNet.onnx")
Warning: Unable to import some ONNX operators, because they are not supported. They have been replaced by placeholder layers. To find these layers, call the function findPlaceholderLayers on the returned object.

1 operators(s)	:	Unable to create an output layer for the ONNX network output 'softmax1001' because its data format is unknown or unsupported by MATLAB output layers.
                        If you know its format, pass it using the 'OutputDataFormats' argument.

To import the ONNX network as a function, use importONNXFunction.
lgraph = 
  LayerGraph with properties:

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

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

Можно проверять на слои заполнителя путем просмотра Layers свойство lgraph или при помощи findPlaceholderLayers функция.

lgraph.Layers
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                    Applies an elementwise scaling followed by an addition to the input.
     5   'Flatten_To_SoftmaxLayer1005'   lstmNet.Flatten_To_SoftmaxLayer1005   lstmNet.Flatten_To_SoftmaxLayer1005
     6   'OutputLayer_softmax1001'       PLACEHOLDER LAYER                     Placeholder for 'added_outputLayer' ONNX operator
placeholderLayers = findPlaceholderLayers(lgraph)
placeholderLayers = 
  PlaceholderLayer with properties:

        Name: 'OutputLayer_softmax1001'
    ONNXNode: [1×1 struct]
     Weights: []

   Learnable Parameters
    No properties.

   State Parameters
    No properties.

  Show all properties

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

outputLayer = classificationLayer('Name','OutputLayer_softmax1001');

Замените слои заполнителя на outputLayer при помощи replaceLayer функция.

lgraph = replaceLayer(lgraph,'OutputLayer_softmax1001',outputLayer);

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

lgraph.Layers
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                    Applies an elementwise scaling followed by an addition to the input.
     5   'Flatten_To_SoftmaxLayer1005'   lstmNet.Flatten_To_SoftmaxLayer1005   lstmNet.Flatten_To_SoftmaxLayer1005
     6   'OutputLayer_softmax1001'       Classification Output                 crossentropyex

В качестве альтернативы задайте выходной слой, когда вы импортируете график слоев при помощи OutputLayerType или OutputDataFormats опция. Проверяйте, имеют ли импортированные графики слоев слои заполнителя при помощи findPlaceholderLayers.

lgraph1 = importONNXLayers("lstmNet.onnx",OutputLayerType="classification");
findPlaceholderLayers(lgraph1)
ans = 
  0×1 Layer array with properties:

lgraph2 = importONNXLayers("lstmNet.onnx",OutputDataFormats="BC");
findPlaceholderLayers(lgraph2)
ans = 
  0×1 Layer array with properties:

Импортированные графики слоев lgraph1 и lgraph2 не имейте слоев заполнителя.

Импортируйте сеть ONNX, которая имеет несколько выходных параметров при помощи importONNXLayers, и затем соберите импортированный график слоев в DAGNetwork объект.

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

modelfile = "digitsMIMO.onnx";

Импортируйте слои и веса от modelfile. Сеть в 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'}

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

plot(lgraph)

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

     1   '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   '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

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

ClassNames = string(0:9);
cLayer = lgraph.Layers(18);
cLayer.Classes = ClassNames;
lgraph = replaceLayer(lgraph,"ClassificationLayer_sm_1",cLayer);

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

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

         Layers: [19×1 nnet.cnn.layer.Layer]
    Connections: [19×2 table]
     InputNames: {'input'}
    OutputNames: {'ClassificationLayer_sm_1'  'RegressionLayer_fc_1_Flatten'}

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

свернуть все

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

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

Аргументы name-value

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

Пример: importONNXLayers(modelfile,TargetNetwork="dagnetwork",GenerateCustomLayers=true,PackageName="CustomLayers") импортирует слоя сети из modelfile как график слоев, совместимый с DAGNetwork возразите и сохраняет автоматически сгенерированные пользовательские слои в пакете +CustomLayers в текущей папке.

Опция для пользовательской генерации слоя в виде числового или логического 1 TRUE) или 0 ложь). Если вы устанавливаете GenerateCustomLayers к true, importONNXLayers попытки сгенерировать пользовательский слой, когда программное обеспечение не может преобразовать оператор ONNX на эквивалентный встроенный слой MATLAB. importONNXLayers сохраняет каждый сгенерированный пользовательский слой в отдельный .m файл в +PackageName. Чтобы просмотреть или отредактировать пользовательский слой, откройте связанный .m файл. Для получения дополнительной информации о пользовательских слоях смотрите Глубокое обучение Пользовательские Слои.

Пример: GenerateCustomLayers=false

Имя пакета, в который importONNXLayers сохраняет пользовательские слои в виде вектора символов или строкового скаляра. importONNXLayers сохраняет пользовательский пакет слоев +PackageName в текущей папке. Если вы не задаете PackageNameто importONNXLayers сохраняет пользовательские слои в пакете, названном +modelfile в текущей папке. Для получения дополнительной информации о пакетах смотрите, что Пакеты Создают Пространства имен.

Пример: PackageName="shufflenet_9"

Пример: PackageName="CustomLayers"

Целевой тип сети Deep Learning Toolbox для импортированной сетевой архитектуры в виде "dagnetwork" или "dlnetwork". Функция importONNXLayers импортирует сетевую архитектуру как LayerGraph объект, совместимый с DAGNetwork или dlnetwork объект.

  • Если вы задаете TargetNetwork как "dagnetwork", импортированный lgraph должен включать входные и выходные слои, заданные моделью ONNX или что вы задаете использование аргументов name-value InputDataFormats, OutputDataFormats, или OutputLayerType.

  • Если вы задаете TargetNetwork как "dlnetwork", importONNXLayers добавляет CustomOutputLayer в конце каждой выходной ветви lgraph, и может добавить CustomInputLayer в начале входной ветви. Функция добавляет CustomInputLayer если форматы входных данных или входные размеры изображения не известны. Дополнительные сведения о форматах данных этих слоев см. в свойствах CustomInputLayer и CustomOutputLayer объекты. Для получения информации о том, как интерпретировать форматы входных и выходных данных Deep Learning Toolbox, смотрите Преобразование Тензоров Ввода и вывода ONNX на Встроенные Слои MATLAB.

Пример: TargetNetwork="dlnetwork" импортирует LayerGraph объект, совместимый с dlnetwork объект.

Формат данных сети вводит в виде вектора символов, строкового скаляра или массива строк. importONNXLayers попытки интерпретировать форматы входных данных из файла ONNX. Аргумент InputDataFormats значения имени полезно когда importONNXLayers не может вывести форматы входных данных.

Установите InputDataFomats к формату данных в упорядоченном расположении тензора входа ONNX. Например, если вы задаете InputDataFormats как "BSSC", импортированная сеть имеет один imageInputLayer входной параметр. Для получения дополнительной информации о как importONNXLayers интерпретирует формат данных тензоров входа ONNX и как задать InputDataFormats для различных слоев входа Deep Learning Toolbox смотрите Преобразование Тензоров Ввода и вывода ONNX на Встроенные Слои MATLAB.

Если вы задаете пустой формат данных ([] или ""), importONNXLayers автоматически интерпретирует формат входных данных.

Пример: InputDataFormats='BSSC'

Пример: InputDataFormats="BSSC"

Пример: InputDataFormats=["BCSS","","BC"]

Пример: InputDataFormats={'BCSS',[],'BC'}

Типы данных: char | string | cell

Формат данных сетевых выходных параметров в виде вектора символов, строкового скаляра или массива строк. importONNXLayers попытки интерпретировать форматы выходных данных из файла ONNX. Аргумент OutputDataFormats значения имени полезно когда importONNXLayers не может вывести форматы выходных данных.

Установите OutputDataFormats к формату данных в упорядоченном расположении ONNX тензор выхода. Например, если вы задаете OutputDataFormats как "BC", импортированная сеть имеет один classificationLayer вывод . Для получения дополнительной информации о как importONNXLayers интерпретирует формат данных ONNX тензоры выхода и как задать OutputDataFormats для различного Deep Learning Toolbox слои выхода смотрите Преобразование Тензоров Ввода и вывода ONNX на Встроенные Слои MATLAB.

Если вы задаете пустой формат данных ([] или ""), importONNXLayers автоматически интерпретирует формат выходных данных.

Пример: OutputDataFormats='BC'

Пример: OutputDataFormats="BC"

Пример: OutputDataFormats=["BCSS","","BC"]

Пример: OutputDataFormats={'BCSS',[],'BC'}

Типы данных: char | string | cell

Размер входа отображает для первого сетевого входа в виде вектора из трех или четырех численных значений, соответствующих [height,width,channels] для 2D изображений и [height,width,depth,channels] для 3-D изображений. Сеть использует эту информацию только когда модель ONNX в modelfile не задает входной размер.

Пример: ImageInputSize=[28 28 1] для 2D полутонового входного изображения

Пример: ImageInputSize=[224 224 3] для 2D цветного входного изображения

Пример: ImageInputSize=[28 28 36 3] для 3-D цветного входного изображения

Тип слоя для первого сетевого выхода в виде "classification", "regression", или "pixelclassification". Функция importONNXLayers добавляет ClassificationOutputLayer, RegressionOutputLayer, или pixelClassificationLayer Объект (Computer Vision Toolbox) в конец первой выходной ветви импортированной сетевой архитектуры. Добавление pixelClassificationLayer Объект (Computer Vision Toolbox) требует Computer Vision Toolbox™. Если модель ONNX в modelfile задает выходной тип слоя, или вы задаете TargetNetwork как "dlnetwork", importONNXLayers игнорирует аргумент OutputLayerType значения имени.

Пример: OutputLayerType="regression"

Оптимизация сворачивания констант в виде "deep", "shallow", или "none". Сворачивание констант оптимизирует импортированную сетевую архитектуру вычислительными операциями на инициализаторах ONNX (начальные постоянные значения) во время преобразования операторов ONNX к эквивалентным встроенным слоям MATLAB.

Если сеть ONNX содержит операторы, которые программное обеспечение не может преобразовать в эквивалентные встроенные слои MATLAB (см. Операторы ONNX, Поддержанные для Преобразования на Встроенные Слои MATLAB), то importONNXLayers вставляет слой заполнителя вместо каждого неподдерживаемого слоя. Для получения дополнительной информации смотрите Советы.

Оптимизация сворачивания констант может сократить количество слоев заполнителя. Когда вы устанавливаете FoldConstants к "deep", импортированные слои включают то же самое или меньше слоев заполнителя, по сравнению с тем, когда вы устанавливаете аргумент на "shallow". Однако время импорта может увеличиться. Установите FoldConstants к "none" отключить сетевую оптимизацию архитектуры.

Пример: FoldConstants="shallow"

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

свернуть все

Сетевая архитектура предварительно обученной модели ONNX, возвращенной как LayerGraph объект.

Чтобы использовать импортированный график слоев для предсказания, необходимо преобразовать LayerGraph возразите против DAGNetwork или dlnetwork объект. Задайте аргумент TargetNetwork значения имени как "dagnetwork" или "dlnetwork" в зависимости от намеченного рабочего процесса.

  • Преобразуйте LayerGraph к DAGNetwork при помощи assembleNetwork. На DAGNetwork объект, вы затем предсказываете метки класса с помощью classify функция.

  • Преобразуйте LayerGraph к dlnetwork при помощи dlnetwork. На dlnetwork объект, вы затем предсказываете метки класса с помощью predict функция. Задайте входные данные как dlarray с помощью правильного формата данных (для получения дополнительной информации, смотрите fmt аргумент dlarray).

Ограничения

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

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

    • Функция поддерживает наборы оператора ONNX 6 - 13.

Примечание

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

Больше о

свернуть все

Операторы ONNX, поддержанные для преобразования на встроенные слои MATLAB

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

Оператор 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 на встроенные слои MATLAB

importONNXLayers попытки интерпретировать формат данных тензоров ввода и вывода сети ONNX, и затем преобразовать их во встроенные входные и выходные слои MATLAB. Для получения дополнительной информации на интерпретации, см. таблицы Conversion Входных Тензоров ONNX на Слои Deep Learning Toolbox и Преобразование ONNX Выходные Тензоры на Слои MATLAB.

В Deep Learning Toolbox каждый символ формата данных должен быть одной из этих меток:

  • S — Пространственный

  • C — Канал

  • B — Пакетные наблюдения

  • T — Время или последовательность

  • U — Незаданный

Преобразование входных тензоров ONNX на слои Deep Learning Toolbox

Форматы данныхИнтерпретация данныхСлой Deep Learning Toolbox
Вход ONNX Tensor Формат ввода MATLABФормаВвод
BCCBc-by-n массив, где c является количеством функций и n, является количеством наблюденийФункцииfeatureInputLayer
BCSS, BSSC, CSS, SSCSSCB

h-by-w-by-c-by-n числовой массив, где h, w, c и n являются высотой, шириной, количеством каналов изображений и количеством наблюдений, соответственно

2D изображениеimageInputLayer
BCSSS, BSSSC, CSSS, SSSCSSSCB

h-by-w-by-d-by-c числовой массив, где h, w, d, c и n являются высотой, шириной, глубиной, количеством каналов изображений и количеством наблюдений изображений, соответственно

3-D изображениеimage3dInputLayer
TBCCBT

c-by-s-by-n матрица, где c является количеством функций последовательности, s, является длиной последовательности, и n является количеством наблюдений последовательности

Векторная последовательностьsequenceInputLayer
TBCSSSSCBT

h-by-w-by-c-by-s-by-n массив, где h, w, c и n соответствуют высоте, ширине и количеству каналов изображения, соответственно, s, является длиной последовательности, и n является количеством наблюдений последовательности изображений

2D последовательность изображенийsequenceInputLayer
TBCSSSSSSCBT

h-by-w-by-d-by-c-by-s-by-n массив, где h, w, d и c соответствуют высоте, ширине, глубине и количеству каналов изображения, соответственно, s, является длиной последовательности, и n является количеством наблюдений последовательности изображений

3-D последовательность изображенийsequenceInputLayer

Преобразование ONNX Выходные тензоры на слои MATLAB

Форматы данныхСлой MATLAB
ONNX Выход TensorВыходной формат MATLAB
BC, TBCCB, CBTclassificationLayer
BCSS, BSSC, CSS, SSC, BCSSS, BSSSC, CSSS, SSSCSSCB, SSSCBpixelClassificationLayer (Computer Vision Toolbox)
TBCSS, TBCSSSSSCBT, SSSCBTregressionLayer

Используйте импортированные слоя сети на графическом процессоре

importONNXLayers не выполняется на графическом процессоре. Однако importONNXLayers импортирует слои предварительно обученной нейронной сети для глубокого обучения как LayerGraph объект, который можно использовать на графическом процессоре.

  • Преобразуйте импортированный LayerGraph возразите против DAGNetwork объект при помощи assembleNetwork. На DAGNetwork объект, можно затем предсказать, что класс маркирует или на CPU или на GPU при помощи classify. Задайте требования к аппаратным средствам с помощью аргумента ExecutionEnvironment значения имени. Для сетей с несколькими выходными параметрами используйте predict функционируйте и задайте аргумент ReturnCategorical значения имени как true.

  • Преобразуйте импортированный LayerGraph возразите против dlnetwork объект при помощи dlnetwork. На dlnetwork объект, можно затем предсказать, что класс маркирует или на CPU или на GPU при помощи predict. Функция predict выполняется на графическом процессоре, если или входные данные или сетевые параметры хранятся на графическом процессоре.

    • Если вы используете minibatchqueue обработать и управлять мини-пакетами входных данных, minibatchqueue объект преобразует выход в массив графического процессора по умолчанию, если графический процессор доступен.

    • Использование dlupdate преобразовывать настраиваемые параметры dlnetwork возразите против массивов графического процессора.

      dlnet = dlupdate(@gpuarray,dlnet)

  • Можно обучить импортированный LayerGraph объект или на центральном процессоре или на графическом процессоре при помощи trainNetwork. Задавать опции обучения, включая опции для среды выполнения, использование trainingOptions функция. Задайте требования к аппаратным средствам с помощью аргумента ExecutionEnvironment значения имени. Для получения дополнительной информации о том, как ускорить обучение, смотрите, Увеличивают Глубокое обучение параллельно, на графических процессорах, и в Облаке.

Используя графический процессор требует Parallel Computing Toolbox™ и поддерживаемого устройства графического процессора. Для получения информации о поддерживаемых устройствах смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox).

Советы

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

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

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

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

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

Альтернативная функциональность

Конвертер Deep Learning Toolbox для Формата Модели ONNX обеспечивает три функции, чтобы импортировать предварительно обученную сеть ONNX: importONNXNetwork, importONNXLayers, и importONNXFunction. Для получения дополнительной информации о котором функция импорта лучше всего удовлетворяет различным сценариям, смотрите, Выбирают Function to Import ONNX Pretrained Network.

Вопросы совместимости

развернуть все

Предупреждает запуск в R2021b

Поведение изменяется в R2021b

Ссылки

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

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

Введенный в R2018a