importONNXFunction

Импорт предварительно обученной сети ONNX как функции

    Описание

    пример

    params = importONNXFunction(modelfile,NetworkFunctionName) импортирует ONNX™ (Open Neural Network Exchange) сеть из файла modelfile и возвращает ONNXParameters объект (params), который содержит параметры сети. Функция также создает функцию модели с именем, заданным NetworkFunctionName который содержит сетевую архитектуру. Для получения дополнительной информации о сетевой функции смотрите Импортированная функция модели ONNX.

    Используйте ONNXParameters объект и NetworkFunctionName модельная функция для выполнения общих задач глубокого обучения, таких как классификация изображений и данных последовательности, передача обучения, обнаружение объектов и сегментация изображений. importONNXFunction полезно, когда вы не можете импортировать сеть, используя importONNXNetwork функция (для примера, importONNXFunction можно импортировать YOLOv3) или, если вы хотите задать свой собственный пользовательский цикл обучения (для получения дополнительной информации см. Train «Обучение сети с помощью пользовательского цикла обучения»).

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

    Примеры

    свернуть все

    Импортируйте сеть ONNX как функцию. Сеть содержит операторы ONNX, которые не поддерживаются слоями Deep Learning Toolbox. Можно использовать импортированную функцию модели для задач глубокого обучения, таких как предсказание и передача обучения.

    Загрузите и установите пакет поддержки Deep Learning Toolbox Converter для ONNX Model Format. Можно ввести importONNXFunction в командной строке проверить, установлен ли пакет поддержки. Если он не установлен, то функция предоставляет ссылку на необходимый пакет поддержки в Add-On Explorer. Чтобы установить пакет поддержки, щелкните ссылку и выберите Установить.

    Укажите файл для импорта следующим shufflenet с набором операторов 9 из зоопарка ONNX Model. shufflenet - сверточная нейронная сеть, которая обучается на изображениях из базы данных ImageNet.

    modelfile = 'shufflenet-9.onnx';

    Рекомендуемая практика состоит в том, чтобы попытаться импортировать сеть при помощи importONNXNetwork. Если importONNXNetwork не может импортировать сеть, поскольку некоторые из слоев сети не поддерживаются, можно импортировать сеть как слои при помощи importONNXLayers, или как функцию при помощи importONNXFunction.

    Импортируйте shufflenet сеть как слои. Программа генерирует слои заполнителя вместо неподдерживаемых слоев.

    lgraph = importONNXLayers(modelfile,'OutputLayerType','classification');
    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.
    
    4 operators(s)	:	Average pooling layer in ONNX file does not include padding in the average. This may cause small numeric differences between the ONNX and MATLAB network outputs.
    32 operators(s)	:	The Reshape operator is supported only when it performs a flattening operation.
    16 operators(s)	:	The operator 'Transpose' is not supported.
    
    To import the ONNX network as a function, which can support most ONNX operators, call importONNXFunction.
    

    Найдите слои заполнителя и отобразите количество слоев заполнителя.

    indPlaceholderLayers = findPlaceholderLayers(lgraph);
    numel(indPlaceholderLayers)
    ans = 48
    

    Необходимо заменить 48 слоев-заполнителей для использования lgraph для задач глубокого обучения, таких как предсказание.

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

    params = importONNXFunction(modelfile,'shufflenetFcn')
    OpsetVersion = 9
    A function 'shufflenetFcn' containing the imported ONNX network has been saved to the current directory.
    To learn how to use this function, type: help shufflenetFcn
    
    params = 
      ONNXParameters with properties:
    
                 Learnables: [1×1 struct]
              Nonlearnables: [1×1 struct]
                      State: [1×1 struct]
              NumDimensions: [1×1 struct]
        NetworkFunctionName: 'shufflenetFcn'
    
    

    importONNXFunction возвращает ONNXParameters params объекта, который содержит сетевые параметры и функцию модели shufflnetFcn, который содержит сетевую архитектуру. importONNXFunction сохраняет shufflenetFcn в текущей папке. Можно открыть функцию модели для просмотра или редактирования сетевой архитектуры при помощи open shufflenetFcn.

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

    Укажите файл для импорта следующим shufflenet с набором операторов 9 из зоопарка ONNX Model. shufflenet - сверточная нейронная сеть, которая обучена более чем на миллионе изображений из базы данных ImageNet. В результате сеть узнала представления богатых функций для широкой области значений изображений. Сеть может классифицировать изображения по 1000 категориям объектов, таким как клавиатура, мышь, карандаш и многие животные.

    modelfile = 'shufflenet-9.onnx';

    Импортируйте предварительно обученную сеть ONNX как функцию при помощи importONNXFunction, который возвращает ONNXParameters params объекта. Этот объект содержит сетевые параметры. Функция также создает новую функцию модели в текущей папке, которая содержит сетевую архитектуру. Укажите имя функции модели следующим shufflenetFcn.

    params = importONNXFunction(modelfile,'shufflenetFcn');
    A function containing the imported ONNX network has been saved to the file shufflenetFcn.m.
    To learn how to use this function, type: help shufflenetFcn.
    

    Прочтите изображение, которое вы хотите классифицировать, и отобразите размер изображения. Изображение составляет 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 Model Zoo). Переформулируйте изображение заново. Нормализуйте изображение путем вычитания среднего обучающего изображения и деления на стандартное отклонение обучающих изображений.

    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]);
    
    imshow(I)

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

    net = squeezenet;
    ClassNames = net.Layers(end).ClassNames;

    Вычислим вероятности классов путем определения изображения для классификации I и ONNXParameters params объекта как входные параметры в функцию модели shufflenetFcn.

    scores = shufflenetFcn(I,params);

    Найдите индекс класса с самой высокой вероятностью. Отобразите предсказанный класс для входа изображения и соответствующих классификационных оценок.

    indMax = find(scores==max(scores));
    ClassNames(indMax)
    ans = 1×1 cell array
        {'peacock'}
    
    
    scoreMax = scores(indMax)
    scoreMax = 0.7517
    

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

    Этот пример использует несколько вспомогательных функций. Чтобы просмотреть код для этих функций, смотрите Вспомогательные функции.

    Разархивируйте и загружайте новые изображения как image datastore. imageDatastore автоматически помечает изображения на основе имен папок и сохраняет данные как ImageDatastore объект. image datastore позволяет вам хранить большие данные изображения, включая данные, которые не помещаются в памяти, и эффективно считывать пакеты изображений во время обучения сверточной нейронной сети. Укажите размер мини-пакета.

    unzip('MerchData.zip');
    miniBatchSize = 8;
    imds = imageDatastore('MerchData', ...
        'IncludeSubfolders',true, ...
        'LabelSource','foldernames',...
        'ReadSize', miniBatchSize);

    Этот набор данных небольшой, содержащий 75 обучающих изображений. Отобразите некоторые образцовые изображения.

    numImages = numel(imds.Labels);
    idx = randperm(numImages,16);
    figure
    for i = 1:16
        subplot(4,4,i)
        I = readimage(imds,idx(i));
        imshow(I)
    end

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

    XTrain = readall(imds);
    XTrain = single(cat(4,XTrain{:}));
    YTrain_categ = categorical(imds.Labels);
    YTrain = onehotencode(YTrain_categ,2)';

    Определите количество классов в данных.

    classes = categories(YTrain_categ);
    numClasses = numel(classes)
    numClasses = 5
    

    squeezenet - сверточная нейронная сеть, которая обучена более чем на миллионе изображений из базы данных ImageNet. В результате сеть узнала представления богатых функций для широкой области значений изображений. Сеть может классифицировать изображения по 1000 категориям объектов, таким как клавиатура, мышь, карандаш и многие животные.

    Импортируйте предварительно обученную squeezenet сеть как функция.

    squeezenetONNX()
    params = importONNXFunction('squeezenet.onnx','squeezenetFcn')
    A function containing the imported ONNX network has been saved to the file squeezenetFcn.m.
    To learn how to use this function, type: help squeezenetFcn.
    
    params = 
      ONNXParameters with properties:
    
                 Learnables: [1×1 struct]
              Nonlearnables: [1×1 struct]
                      State: [1×1 struct]
              NumDimensions: [1×1 struct]
        NetworkFunctionName: 'squeezenetFcn'
    
    

    params является ONNXParameters объект, который содержит сетевые параметры. squeezenetFcn является модельной функцией, которая содержит сетевую архитектуру. importONNXFunction сохраняет squeezenetFcn в текущей папке.

    Вычислите классификационную точность предварительно обученной сети на новом наборе обучающих данных.

    accuracyBeforeTraining = getNetworkAccuracy(XTrain,YTrain,params);
    fprintf('%.2f accuracy before transfer learning\n',accuracyBeforeTraining);
    0.01 accuracy before transfer learning
    

    Точность очень низкая.

    Отобразите настраиваемые параметры сети путем ввода params.Learnables. Эти параметры, такие как веса (W) и смещение (B) свертки и полносвязные слои, обновляются сетью во время обучения. Непоследовательные параметры остаются постоянными во время обучения.

    Последние два настраиваемых параметры предварительно обученной сети сконфигурированы для 1000 классов.

    conv10_W: [1×1×512×1000 dlarray]

    conv10_B: [1000×1 dlarray]

    Параметры conv10_W и conv10_B должна быть уточнена для новой задачи классификации. Передайте параметры для классификации пяти классов путем инициализации параметров.

    params.Learnables.conv10_W = rand(1,1,512,5);
    params.Learnables.conv10_B = rand(5,1);

    Заморозите все параметры сети, чтобы преобразовать их в неучаемые параметры. Поскольку вам не нужно вычислять градиенты замороженных слоев, замораживание весов многих начальных слоев может значительно ускорить сетевое обучение.

    params = freezeParameters(params,'all');

    Размораживайте последние два параметра сети, чтобы преобразовать их в настраиваемые параметры.

    params = unfreezeParameters(params,'conv10_W');
    params = unfreezeParameters(params,'conv10_B');

    Сейчас сеть готова к обучению. Инициализируйте график процесса обучения.

    plots = "training-progress";
    if plots == "training-progress"
        figure
        lineLossTrain = animatedline;
        xlabel("Iteration")
        ylabel("Loss")
    end

    Задайте опции обучения.

    velocity = [];
    numEpochs = 5;
    miniBatchSize = 16;
    numObservations = size(YTrain,2);
    numIterationsPerEpoch = floor(numObservations./miniBatchSize);
    initialLearnRate = 0.01;
    momentum = 0.9;
    decay = 0.01;

    Обучите сеть.

    iteration = 0;
    start = tic;
    executionEnvironment = "cpu"; % Change to "gpu" to train on a GPU.
    
    % Loop over epochs.
    for epoch = 1:numEpochs
        
        % Shuffle data.
        idx = randperm(numObservations);
        XTrain = XTrain(:,:,:,idx);
        YTrain = YTrain(:,idx);
        
        % Loop over mini-batches.
        for i = 1:numIterationsPerEpoch
            iteration = iteration + 1;
            
            % Read mini-batch of data.
            idx = (i-1)*miniBatchSize+1:i*miniBatchSize;
            X = XTrain(:,:,:,idx);        
            Y = YTrain(:,idx);
            
            % If training on a GPU, then convert data to gpuArray.
            if (executionEnvironment == "auto" && canUseGPU) || executionEnvironment == "gpu"
                X = gpuArray(X);         
            end
            
            % Evaluate the model gradients and loss using dlfeval and the
            % modelGradients function.
            [gradients,loss,state] = dlfeval(@modelGradients,X,Y,params);
            params.State = state;
            
            % Determine the learning rate for the time-based decay learning rate schedule.
            learnRate = initialLearnRate/(1 + decay*iteration);
            
            % Update the network parameters using the SGDM optimizer.
            [params.Learnables,velocity] = sgdmupdate(params.Learnables,gradients,velocity);
            
            % Display the training progress.
            if plots == "training-progress"
                D = duration(0,0,toc(start),'Format','hh:mm:ss');
                addpoints(lineLossTrain,iteration,double(gather(extractdata(loss))))
                title("Epoch: " + epoch + ", Elapsed: " + string(D))
                drawnow
            end
        end
    end

    Вычислите классификационную точность сети после подстройки.

    accuracyAfterTraining = getNetworkAccuracy(XTrain,YTrain,params);
    fprintf('%.2f accuracy after transfer learning\n',accuracyAfterTraining);
    1.00 accuracy after transfer learning
    

    Вспомогательные функции

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

    The getNetworkAccuracy функция оценивает эффективность сети путем вычисления точности классификации.

    function accuracy = getNetworkAccuracy(X,Y,onnxParams)
    
    N = size(X,4);
    Ypred = squeezenetFcn(X,onnxParams,'Training',false);
    
    [~,YIdx] = max(Y,[],1);
    [~,YpredIdx] = max(Ypred,[],1);
    numIncorrect = sum(abs(YIdx-YpredIdx) > 0);
    accuracy = 1 - numIncorrect/N;
    
    end

    The modelGradients функция вычисляет потери и градиенты.

    function [grad, loss, state] = modelGradients(X,Y,onnxParams)
    
    [y,state] = squeezenetFcn(X,onnxParams,'Training',true);
    loss = crossentropy(y,Y,'DataFormat','CB');
    grad = dlgradient(loss,onnxParams.Learnables);
    
    end

    The squeezenetONNX функция генерирует модель ONNX squeezenet сети.

    function squeezenetONNX()
        
    exportONNXNetwork(squeezenet,'squeezenet.onnx');
    
    end
    

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

    Этот пример использует функцию helper preparePermutationVector. Чтобы просмотреть код для этой функции, смотрите Helper Function.

    lstmNet имеет такую же архитектуру, как и сеть LSTM, созданная в Sequence Classification Using Deep Learning. lstmNet обучен распознавать оратора по данным временных рядов, представляющих два японских гласных, на которых говорят последовательно. Обучающие данные содержат данные временных рядов для девяти дикторов. Каждая последовательность имеет 12 функции и изменяется в длине.

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

    modelfile = 'lstmNet.onnx';

    Импортируйте предварительно обученную сеть ONNX как функцию при помощи importONNXFunction, который возвращает ONNXParameters params объекта содержащие параметры сети. Функция также создает новую функцию модели в текущей папке, которая содержит сетевую архитектуру. Укажите имя функции модели следующим lstmnetFcn.

    params = importONNXFunction(modelfile,'lstmnetFcn');
    A function containing the imported ONNX network has been saved to the file lstmnetFcn.m.
    To learn how to use this function, type: help lstmnetFcn.
    

    Загрузите тестовые данные японских гласных. XTest - массив ячеек, содержащий 370 последовательностей размерности 12 и изменяющейся длины. YTest является категориальным вектором меток «1», «2»... «9», которые соответствуют этим девяти дикторам.

    [XTest,YTest] = japaneseVowelsTestData;

    lstmNet был обучен с использованием мини-партий с последовательностями аналогичной длины. Чтобы организовать тестовые данные таким же образом, отсортируйте тестовые данные по длине последовательности.

    numObservationsTest = numel(XTest);
    for i=1:numObservationsTest
        sequence = XTest{i};
        sequenceLengthsTest(i) = size(sequence,2);
    end
    [sequenceLengthsTest,idx] = sort(sequenceLengthsTest);
    XTest = XTest(idx);
    YTest = YTest(idx);

    Использование preparePermutationVector для вычисления вектора сочетания inputPerm, который преобразует размерное упорядоченное расположение данных последовательности входа в размерное упорядоченное расположение импортированного сетевого входа LSTM. Можно вводить help lstmnetFcn чтобы просмотреть упорядоченное расположение размерностей входного сигнала сети SEQUENCEINPUT.

    inputPerm = preparePermutationVector(["FeaturesLength","SequenceLength","BatchSize"],...
        ["SequenceLength","BatchSize","FeaturesLength"]);

    Вычислим вероятности классов путем определения данных последовательности для классификации XTest и ONNXParameters params объекта как входные параметры в функцию модели lstmnetFcn. Настройте упорядоченное расположение входной размерности путем назначения числового вектора inputPerm к аргументу имя-значение 'InputDataPermutation'. Возврат scores в размерность упорядоченного расположения выходного сигнала сети путем назначения 'none' к аргументу имя-значение 'OutputDataPermutation'.

    for i = 1:length(XTest)
        scores = lstmnetFcn(XTest{i},params,'InputDataPermutation',inputPerm,'OutputDataPermutation','none');
        YPred(i) = find(scores==max(scores));
    end
    YPred = categorical(YPred');

    Вычислите классификационную точность предсказаний.

    acc = sum(YPred == YTest)./numel(YTest)
    acc = 0.9514
    

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

    В этом разделе представлен код вспомогательной функции preparePermutationVector используется в этом примере.

    The preparePermutationVector функция возвращает вектор сочетания perm, который переставляет упорядоченное расположение размерностей в fromDimOrder к упорядоченному расположению размерностей в toDimOrder. Можно задать входные параметры fromDimOrder и toDimOrder как векторы символов, строковые скаляры, строковые массивы, массивы ячеек векторов символов или числовые векторы. Оба аргумента должны иметь одинаковый тип и одинаковые уникальные элементы. Для примера, если fromDimOrder - вектор символов 'hwcn', toDimOrder может быть тем вектором символов 'nchw' (где h, w, и c соответствуют высоте, ширине и количеству каналов изображения, соответственно и n количество наблюдений).

    function perm = preparePermutationVector(fromDimOrder, toDimOrder)
    
    % Check if both fromDimOrder and toDimOrder are vectors.
    if ~isvector(fromDimOrder) || ~isvector(toDimOrder)
        error(message('nnet_cnn_onnx:onnx:FPVtypes'));
    end
    
    % Convert fromDimOrder and toDimOrder to the appropriate type.
    if isstring(fromDimOrder) && isscalar(fromDimOrder)
        fromDimOrder = char(fromDimOrder);
    end
    if isstring(toDimOrder) && isscalar(toDimOrder)
        toDimOrder = char(toDimOrder);
    end
    
    % Check if fromDimOrder and toDimOrder have unique elements.
    [fromSorted, ifrom] = unique(fromDimOrder);
    [toSorted, ~, iToInv] = unique(toDimOrder);
    
    if numel(fromSorted) ~= numel(fromDimOrder)
        error(message('nnet_cnn_onnx:onnx:FPVfromunique'));
    end
    if numel(toSorted) ~= numel(toDimOrder)
        error(message('nnet_cnn_onnx:onnx:FPVtounique'));
    end
    
    % Check if fromDimOrder and toDimOrder have the same number of elements.
    if ~isequal(fromSorted, toSorted)
        error(message('nnet_cnn_onnx:onnx:FPVsame'));
    end
    
    % Compute the permutation vector.
    perm = ifrom(iToInv);
    perm = perm(:)';
    
    end

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

    свернуть все

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

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

    Имя функции модели, заданное как вектор символов или строковый скаляр. Функция NetworkFunctionName содержит архитектуру импортированной сети ONNX. Файл сохранен в M-файле в текущей папке, или необходимо включить полный или относительный путь к файлу. The NetworkFunctionName файл необходим для использования сети. Для получения дополнительной информации смотрите Импортированная функция модели ONNX.

    Пример: 'shufflenetFcn'

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

    свернуть все

    Параметры сети, возвращенные как ONNXParameters объект. params содержит сетевые параметры импортированной модели ONNX. Используйте запись через точку для ссылки на свойства params. Для примера, params.Learnables отображает настраиваемые параметры сети, такие как веса слоев свертки.

    Ограничения

    • importONNXFunction поддерживает следующие версии ONNX:

      • ONNX промежуточное представление версии 6

      • Оператор ONNX устанавливает 7 на 13

    Подробнее о

    свернуть все

    Импортированная функция модели ONNX

    importONNXFunction создает функцию модели, которая содержит сетевую архитектуру импортированной модели ONNX. Укажите имя NetworkFunctionName как входной параметр importONNXFunction.

    Синтаксис

    Используйте следующие синтаксисы для взаимодействия с импортированной функцией модели ONNX (NetworkFunctionName):

    • [Y, состояние] = NetworkFunctionName (X, params) возвращает выходные данные Y и обновленную сетевую state для входных данных X.

    • [Y, состояние] = NetworkFunctionName (X, params, Имя, Значение) использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение".

    • [Y1,Y2,...,Yn,state] = NetworkFunctionName (X1, X2,..., Xn, params) возвращает несколько выходных данных (Y1,Y2,...,Yn) и обновленную сетевую state для нескольких входных данных (X1,X2,...,Xn).

    • [Y1,Y2,...,Yn,state] = NetworkFunctionName (X1, X2,..., Xn, params, Имя, Значение) использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение" для нескольких входов и выходов.

    Входные параметры
    АргументОписание
    XВходные данные, заданные как массив или dlarray.
    paramsПараметры сети, заданные как ONNXParameters объект.
    Аргументы в виде пар имя-значение
    Имя аргументаОписание
    'Training'

    Опция обучения, заданная как 'false' (по умолчанию) или 'true'.

    'InputDataPermutation'

    Сочетание применено к размерному упорядоченному расположению входа X, заданный как 'auto' (по умолчанию), 'none', числовой вектор или массив ячеек.

    Присвойте значение аргумента пары "имя-значение" 'InputDataPermutation' чтобы переместить входные данные в упорядоченное расположение размерностей, требуемый импортированной моделью ONNX.

    • Присвойте значение 'auto' применить автоматическое сочетание, основанную на допущениях об общих входных данных X. Для получения дополнительной информации смотрите Автоматическое сочетание входных данных.

    • Присвойте значение 'none' для прохождения X в исходном упорядоченном расположении.

    • Назначьте числовое значение вектора, чтобы настроить вход размерности упорядоченного расположения; для примера, [4 3 1 2]. Для получения примера смотрите Классификация последовательностей с использованием импортированной функции ONNX.

    • Присвойте значение массива ячеек для нескольких входов; для примера, {[3 2 1],'none'}.

    'OutputDataPermutation'

    Сочетание применено к размерному упорядоченному расположению выхода Y, заданный как 'auto' (по умолчанию), 'none', числовой вектор или массив ячеек.

    Присвойте значение аргумента пары "имя-значение" 'OutputDataPermutation' для соответствия упорядоченному расположению размерностей импортированной модели ONNX.

    • Присвойте значение 'auto' для возврата Y в упорядоченное расположение Deep Learning Toolbox. Для получения дополнительной информации смотрите Автоматическое сочетание выходных данных.

    • Присвойте значение 'none' для возврата Y в упорядоченном расположении ONNX. Для получения примера смотрите Классификация последовательностей с использованием импортированной функции ONNX.

    • Назначьте числовое значение вектора, чтобы настроить упорядоченное расположение выхода размерности; для примера, [3 4 2 1].

    • Назначьте значение массива ячеек для нескольких выходов; для примера, {[3 2 1],'none'}.

    Выходные аргументы
    АргументОписание
    Y

    Выходные данные, возвращенные как массив или dlarray.

    • Если X является массивом или вы используете ONNXFunction чтобы предсказать, Y является массивом.

    • Если X является dlarray или вы используете ONNXFunction для обучения, Y является dlarray.

    state

    Обновленное состояние сети, заданное как структура.

    Сетевая state содержит информацию, запоминаемую сетью между итерациями и обновляемую через несколько обучающих пакетов.

    Интерпретация входного параметра X и выходной аргумент Y может отличаться между моделями. Для получения дополнительной информации о входных и выходных аргументах модели см. help для импортированной функции модели NetworkFunctionNameили см. документацию ONNX [1].

    Автоматическое сочетание для импортированной функции модели

    По умолчанию NetworkFunctionName автоматическая перестановка входных и выходных данных для упрощения задач классификации изображений. Автоматическое сочетание может быть непригодной для других задач, таких как обнаружение объектов и классификация временных рядов.

    Автоматическое сочетание входных данных

    Чтобы автоматически переместить вход, NetworkFunctionName принимает следующее на основе входных размерностей, заданных импортированной сетью ONNX.

    Количество входных размерностей модели ONNXИнтерпретация входных данныхСтандартные Размерности ONNX Упорядоченного расположенияСтандартная размерность набора инструментов Deep Learning Toolbox Упорядоченного расположенияАвтоматическое сочетание входа
    42-D изображение

    NCHW

    H, W, и C соответствуют высоте, ширине и количеству каналов изображения, соответственно и N количество наблюдений.

    HWCN

    H, W, и C соответствуют высоте, ширине и количеству каналов изображения, соответственно и N количество наблюдений.

    [ 4 3 1 2 ]

    Если размер входных размерностей является числом, отличным от 4, NetworkFunctionName задает входной параметр 'InputDataPermutation' как 'none'.

    Автоматическое сочетание выходных данных

    Чтобы автоматически переместить выход, NetworkFunctionName принимает следующее на основе выходных размерностей, заданных импортированной сетью ONNX.

    Количество выходных размерностей модели ONNXИнтерпретация Выхода данныхСтандартные Размерности ONNX Упорядоченного расположенияСтандартная размерность набора инструментов Deep Learning Toolbox Упорядоченного расположенияАвтоматическое сочетание выхода
    22-D изображения классификационных оценок

    NK

    K количество классов и N количество наблюдений.

    KN

    K количество классов и N количество наблюдений.

    [ 2 1 ]
    42-D пикселя изображения классификационных оценок

    NKHW

    H и W соответствуют высоте и ширине изображения, соответственно K количество классов и N количество наблюдений.

    HWKN

    H и W соответствуют высоте и ширине изображения, соответственно K количество классов и N количество наблюдений.

    [3 4 2 1]

    Если размер выходных размерностей является числом, отличным от 2 или 4, NetworkFunctionName задает входной параметр 'OutputDataPermutation' как 'none'.

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

    importONNXFunction поддерживает следующие слои ONNX с некоторыми ограничениями. Сравните эти слои со слоями, поддерживаемыми importONNXNetwork.

    Слои ONNX, поддерживаемые importONNXFunctionimportONNXNetwork Поддержка
    AbsНет

    Add

    Да
    AndНет
    ArgMaxНет

    AveragePool

    Да

    BatchNormalization

    Да
    CastНет
    CeilНет

    Clip

    Да
    CompressНет

    Concat

    Да

    Constant

    Да
    ConstantOfShapeНет

    Conv

    Да

    ConvTranspose

    Да
    DepthToSpaceДа

    Div

    Да

    Dropout

    Да
    EqualНет
    ExpНет
    ExpandНет

    Flatten

    Да
    FloorНет
    GatherНет

    Gemm

    Да

    GlobalAveragePool

    Да

    Greater

    Да
    HardmaxНет

    Identity

    Да
    IfНет
    InstanceNormalizationДа

    LeakyRelu

    Да
    LessНет
    LessOrEqualНет
    LogНет
    LoopНет

    LRN

    Да

    LSTM

    Да

    MatMul

    Да

    MaxPool

    Да

    Mul

    Да
    NegНет
    NonMaxSuppressionНет
    NonZeroНет
    NotНет
    OneHotНет
    OrНет
    PadНет
    PowНет

    PRelu

    Да
    RandomUniformНет
    RangeНет
    ReciprocalНет
    ReduceMaxНет
    ReduceMeanНет
    ReduceMinНет
    ReduceProdНет
    ReduceSumНет

    Relu

    Да

    Reshape

    Да
    ResizeДа
    RoiAlignНет
    RoundНет
    ScanНет
    ScatterНет
    ScatterElementsНет
    SequenceAtНет
    ShapeНет

    Sigmoid

    Да
    SliceНет

    Softmax

    Да
    SpaceToDepthДа
    SplitНет
    SplitToSequenceНет
    SqrtНет
    SqueezeНет

    Sub

    Да

    Sum

    Да

    Tanh

    Да
    TileНет
    TopKНет
    TransposeНет
    UnsqueezeНет
    UpsampleНет
    WhereНет

    Совет

    • См. документацию ONNX для каждой модели, чтобы увидеть необходимую предварительную обработку входов сети. Например, вам нужно изменить размер (используя imresize), rescale, и нормализовать входные изображения в сети, обученные с помощью набора данных ImageNet (таких как AlexNet, GoogleNet, ShuffleNet и SqueezeNet).

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

    importONNXFunction полезно, когда вы не можете импортировать предварительно обученную сеть ONNX при помощи importONNXNetwork. Если необходимо сгенерировать код для предварительно обученной сети, используйте importONNXLayers. Поиск и замена сгенерированных слоев-заполнителей с помощью findPlaceholderLayers и replaceLayer, соответственно. Затем используйте assembleNetwork для возврата DAGNetwork объект. Можно сгенерировать код для обученного DAGNetwork.

    Ссылки

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

    Введенный в R2020b