Импортируйте слои из сети ONNX
импортирует слои и веса предварительно обученной сети ONNX™ (Open Neural Network Exchange) из файла lgraph
= importONNXLayers(modelfile
)modelfile
. Функция возвращает lgraph
как LayerGraph
объект, совместимый с DAGNetwork
или dlnetwork
объект.
importONNXLayers
требует Конвертера Deep Learning Toolbox™ для пакета поддержки Формата Модели ONNX. Если этот пакет поддержки не установлен, то importONNXLayers
обеспечивает ссылку на загрузку.
Примечание
По умолчанию, importONNXLayers
попытки сгенерировать пользовательский слой, когда программное обеспечение не может преобразовать оператор ONNX в эквивалентный встроенный MATLAB® слой. Для списка операторов, для которых программное обеспечение поддерживает преобразование, см. Операторы ONNX, Поддержанные для Преобразования на Встроенные Слои MATLAB.
importONNXLayers
сохраняет сгенерированные пользовательские слои в пакете +
.modelfile
importONNXLayers
автоматически не генерирует пользовательский слой для каждого оператора ONNX, который не поддерживается для преобразования на встроенный слой MATLAB. Для получения дополнительной информации о том, как обработать неподдерживаемые слои, смотрите Советы.
импортирует слои и веса от сети ONNX с дополнительными опциями, заданными одними или несколькими аргументами name-value. Например, lgraph
= importONNXLayers(modelfile
,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)
DAGNetwork
Импортируйте предварительно обученную сеть 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
dlnetwork
Импортируйте предварительно обученную сеть 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'}
modelfile
— Имя файла модели ONNXИмя файла модели ONNX, содержащего сеть в виде вектора символов или строкового скаляра. Файл должен быть в текущей папке или в папке на пути MATLAB, или необходимо включать полный или относительный путь в файл.
Пример: "cifarResNet.onnx"
Задайте дополнительные пары аргументов как Name1=Value1,...,NameN=ValueN
, где Name
имя аргумента и Value
соответствующее значение. Аргументы name-value должны появиться после других аргументов, но порядок пар не имеет значения.
importONNXLayers(modelfile,TargetNetwork="dagnetwork",GenerateCustomLayers=true,PackageName="CustomLayers")
импортирует слоя сети из modelfile
как график слоев, совместимый с DAGNetwork
возразите и сохраняет автоматически сгенерированные пользовательские слои в пакете +CustomLayers
в текущей папке.GenerateCustomLayers
— Опция для пользовательской генерации слояtrue
или 1
(значение по умолчанию) | false
или 0
Опция для пользовательской генерации слоя в виде числового или логического 1
TRUE
) или 0
ложь
). Если вы устанавливаете GenerateCustomLayers
к true
, importONNXLayers
попытки сгенерировать пользовательский слой, когда программное обеспечение не может преобразовать оператор ONNX на эквивалентный встроенный слой MATLAB. importONNXLayers
сохраняет каждый сгенерированный пользовательский слой в отдельный .m
файл в +
. Чтобы просмотреть или отредактировать пользовательский слой, откройте связанный PackageName
.m
файл. Для получения дополнительной информации о пользовательских слоях смотрите Глубокое обучение Пользовательские Слои.
Пример: GenerateCustomLayers=false
PackageName
— Имя пользовательского пакета слоевИмя пакета, в который importONNXLayers
сохраняет пользовательские слои в виде вектора символов или строкового скаляра. importONNXLayers
сохраняет пользовательский пакет слоев +
в текущей папке. Если вы не задаете PackageName
PackageName
то importONNXLayers
сохраняет пользовательские слои в пакете, названном +
в текущей папке. Для получения дополнительной информации о пакетах смотрите, что Пакеты Создают Пространства имен.modelfile
Пример: PackageName="shufflenet_9"
Пример: PackageName="CustomLayers"
TargetNetwork
— Целевой тип сети Deep Learning Toolbox"dagnetwork"
(значение по умолчанию) | "dlnetwork"
Целевой тип сети 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
объект.
InputDataFormats
— Формат данных сетевых входных параметровФормат данных сети вводит в виде вектора символов, строкового скаляра или массива строк. 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
OutputDataFormats
— Формат данных сетевых выходных параметровФормат данных сетевых выходных параметров в виде вектора символов, строкового скаляра или массива строк. 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
ImageInputSize
— Размер входа отображает для первого сетевого входаРазмер входа отображает для первого сетевого входа в виде вектора из трех или четырех численных значений, соответствующих [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 цветного входного изображения
OutputLayerType
— Тип слоя для первого сетевого выхода"classification"
| "regression"
| "pixelclassification"
Тип слоя для первого сетевого выхода в виде "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"
FoldConstants
— Оптимизация сворачивания констант"deep"
(значение по умолчанию) | "shallow"
| "none"
Оптимизация сворачивания констант в виде "deep"
, "shallow"
, или "none"
. Сворачивание констант оптимизирует импортированную сетевую архитектуру вычислительными операциями на инициализаторах ONNX (начальные постоянные значения) во время преобразования операторов ONNX к эквивалентным встроенным слоям MATLAB.
Если сеть ONNX содержит операторы, которые программное обеспечение не может преобразовать в эквивалентные встроенные слои MATLAB (см. Операторы ONNX, Поддержанные для Преобразования на Встроенные Слои MATLAB), то importONNXLayers
вставляет слой заполнителя вместо каждого неподдерживаемого слоя. Для получения дополнительной информации смотрите Советы.
Оптимизация сворачивания констант может сократить количество слоев заполнителя. Когда вы устанавливаете FoldConstants
к "deep"
, импортированные слои включают то же самое или меньше слоев заполнителя, по сравнению с тем, когда вы устанавливаете аргумент на "shallow"
. Однако время импорта может увеличиться. Установите FoldConstants
к "none"
отключить сетевую оптимизацию архитектуры.
Пример: FoldConstants="shallow"
lgraph
— Сетевая архитектура предварительно обученной модели ONNXLayerGraph
объектСетевая архитектура предварительно обученной модели 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.
Примечание
Если вы импортируете экспортируемую сеть, слои повторно импортированной сетевой силы отличаются от исходной сети и не могут поддерживаться.
importONNXLayers
поддерживает следующие операторы ONNX для преобразования на встроенные слои MATLAB, с некоторыми ограничениями.
Оператор ONNX | Слой Deep Learning Toolbox |
---|---|
| additionLayer или nnet.onnx.layer.ElementwiseAffineLayer |
| averagePooling2dLayer |
| batchNormalizationLayer |
| concatenationLayer |
| Ни один (Импортированный как веса) |
| convolution2dLayer |
| transposedConv2dLayer |
| dropoutLayer |
| eluLayer |
| fullyConnectedLayer если сеть ONNX является текущей, в противном случае nnet.onnx.layer.FlattenLayer сопровождаемый convolution2dLayer |
| globalAveragePooling2dLayer |
| globalMaxPooling2dLayer |
| gruLayer |
| groupNormalizationLayer с numGroups заданный как "channel-wise" |
| leakyReluLayer |
| CrossChannelNormalizationLayer |
| lstmLayer или bilstmLayer |
| fullyConnectedLayer если сеть ONNX является текущей, в противном случае convolution2dLayer |
| maxPooling2dLayer |
| multiplicationLayer |
| reluLayer или clippedReluLayer |
| sigmoidLayer |
| |
| additionLayer |
| tanhLayer |
*Если pads
атрибут Conv
оператор является вектором только с двумя элементами [p1,p2]
, importONNXLayers
импорт Conv
как convolution2dLayer
с аргументом 'Padding'
значения имени заданный как
[p1,p2,p1,p2]
.
Оператор ONNX | Средство импорта ONNX пользовательский слой |
---|---|
| nnet.onnx.layer.ClipLayer |
| nnet.onnx.layer.ElementwiseAffineLayer |
| nnet.onnx.layer.FlattenLayer или nnet.onnx.layer.Flatten3dLayer |
| nnet.onnx.layer.IdentityLayer |
| nnet.onnx.layer.ElementwiseAffineLayer |
| nnet.onnx.layer.PReluLayer |
| nnet.onnx.layer.FlattenLayer |
| nnet.onnx.layer.ElementwiseAffineLayer |
Оператор ONNX | Image Processing Toolbox™ |
---|---|
DepthToSpace | depthToSpace2dLayer (Image Processing Toolbox) |
Resize | resize2dLayer (Image Processing Toolbox) или resize3dLayer (Image Processing Toolbox) |
SpaceToDepth | spaceToDepthLayer (Image Processing Toolbox) |
Upsample | resize2dLayer (Image Processing Toolbox) или resize3dLayer (Image Processing Toolbox) |
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 | Форма | Ввод | |
BC | CB | c-by-n массив, где c является количеством функций и n, является количеством наблюдений | Функции | featureInputLayer |
BCSS , BSSC , CSS , SSC | SSCB | h-by-w-by-c-by-n числовой массив, где h, w, c и n являются высотой, шириной, количеством каналов изображений и количеством наблюдений, соответственно | 2D изображение | imageInputLayer |
BCSSS , BSSSC , CSSS , SSSC | SSSCB | h-by-w-by-d-by-c числовой массив, где h, w, d, c и n являются высотой, шириной, глубиной, количеством каналов изображений и количеством наблюдений изображений, соответственно | 3-D изображение | image3dInputLayer |
TBC | CBT | c-by-s-by-n матрица, где c является количеством функций последовательности, s, является длиной последовательности, и n является количеством наблюдений последовательности | Векторная последовательность | sequenceInputLayer |
TBCSS | SSCBT | h-by-w-by-c-by-s-by-n массив, где h, w, c и n соответствуют высоте, ширине и количеству каналов изображения, соответственно, s, является длиной последовательности, и n является количеством наблюдений последовательности изображений | 2D последовательность изображений | sequenceInputLayer |
TBCSSS | SSSCBT | 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 , TBC | CB , CBT | classificationLayer |
BCSS , BSSC , CSS , SSC , BCSSS , BSSSC , CSSS , SSSC | SSCB , SSSCB | pixelClassificationLayer (Computer Vision Toolbox) |
TBCSS , TBCSSS | SSCBT , SSSCBT | regressionLayer |
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.
Для получения дополнительной информации о предварительной обработке изображений для обучения и предсказания, смотрите, Предварительно обрабатывают Изображения для Глубокого обучения.
Конвертер Deep Learning Toolbox для Формата Модели ONNX обеспечивает три функции, чтобы импортировать предварительно обученную сеть ONNX: importONNXNetwork
, importONNXLayers
, и importONNXFunction
. Для получения дополнительной информации о котором функция импорта лучше всего удовлетворяет различным сценариям, смотрите, Выбирают Function to Import ONNX Pretrained Network.
ImportWeights
опция была удаленаПредупреждает запуск в R2021b
ImportWeights
был удален. Начиная в R2021b, веса модели ONNX автоматически импортируются. В большинстве случаев вы не должны вносить изменения в свой код.
Если ImportWeights
не установлен в вашем коде, importONNXLayers
теперь импортирует веса.
Если ImportWeights
установлен в true
в вашем коде, поведении importONNXLayers
остается то же самое.
Если ImportWeights
установлен в false
в вашем коде, importONNXLayers
теперь игнорирует аргумент ImportWeights
значения имени и импортирует веса.
importONNXLayers
не может создать входные и выходные слои из информации о файле ONNXПоведение изменяется в R2021b
Если вы импортируете модель ONNX как LayerGraph
объект, совместимый с DAGNetwork
объект, импортированный график слоев должен включать входные и выходные слои. importONNXLayers
попытки преобразовать ввод и вывод тензоры ONNX на встроенные слои MATLAB. При импорте некоторых сетей, который importONNXLayers
мог ранее импортировать с вводом и выводом встроенные слои MATLAB, importONNXLayers
может теперь вставить слои заполнителя. В этом случае сделайте одно из следующих, чтобы обновить ваш код:
Задайте аргумент TargetNetwork
значения имени как
"dlnetwork"
импортировать сеть как LayerGraph
объект, совместимый с dlnetwork
объект.
Используйте аргументы name-value InputDataFormats
, OutputDataFormats
, и OutputLayerType
задавать вводы и выводы импортированной сети.
Использование importONNXFunction
импортировать сеть как функцию модели и ONNXParameters
объект.
importCaffeNetwork
| importCaffeLayers
| importKerasNetwork
| importKerasLayers
| importONNXNetwork
| exportONNXNetwork
| findPlaceholderLayers
| replaceLayer
| assembleNetwork
| importONNXFunction
| importTensorFlowNetwork
| importTensorFlowLayers
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.