importONNXFunction

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

    Описание

    пример

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

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

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

    Примеры

    свернуть все

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

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

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

    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). Перемасштабируйте изображение. Нормируйте изображение путем вычитания учебного среднего значения изображений, и деление на обучение отображает стандартное отклонение.

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

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

    Разархивируйте и загрузите новые изображения как datastore изображений. imageDatastore автоматически помечает изображения на основе имен папок и хранит данные как ImageDatastore объект. 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. В результате сеть изучила богатые представления функции для широкого спектра изображений. Сеть может классифицировать изображения в 1 000 категорий объектов, таких как клавиатура, мышь, карандаш и многие животные.

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

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

    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);

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

    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
    

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

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

    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

    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

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

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

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

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

    lstmNet имеет подобную архитектуру к сети LSTM, созданной в Классификации Последовательностей Используя Глубокое обучение. 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 используемый в этом примере.

    preparePermutationVector функция возвращает вектор сочетания perm, который переставляет упорядоченное расположение размерности в fromDimOrder к упорядоченному расположению размерности в toDimOrder. Можно задать входные параметры fromDimOrder и toDimOrder как векторы символов, строковые скаляры, строковые массивы, массивы ячеек из символьных векторов или числовые векторы. Оба аргумента должны иметь тот же тип и те же уникальные элементы. Например, если fromDimOrder вектор символов 'hwcn', toDimOrder может быть вектор символов 'nchw' (где hW, и 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-файле в текущей папке, или необходимо включать полный или относительный путь в файл. NetworkFunctionName файл требуется для использования сети. Для получения дополнительной информации смотрите Импортированную Функцию Модели ONNX.

    Пример: 'shufflenetFcn'

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

    свернуть все

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

    Ограничения

    • importONNXFunction поддержки эти версии ONNX:

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

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

    Больше о

    свернуть все

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

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

    Синтаксис

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

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

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

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

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

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

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

    'InputDataPermutation'

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

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

    'OutputDataPermutation'

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

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

    Выходные аргументы
    АргументОписание
    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Автоматическое сочетание входа
    42D изображение

    NCHW

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

    HWCN

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

    [ 4 3 1 2 ]

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

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

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

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

    NK

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

    KN

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

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

    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] Открытый Exchange Нейронной сети. https://github.com/onnx/.

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

    Введенный в R2020b