Развертывание импортированной сети с помощью MATLAB Compiler

В этом разделе показано, как импортировать предварительно обученную сеть и затем развернуть импортированную сеть с помощью MATLAB® Compiler™. Можно импортировать предварительно обученную TensorFlow™-Keras или ONNX™ сеть (Open Neural Network Exchange), используя importKerasNetwork или importONNXNetwork, соответственно. Эти функции требуют соответствующего пакета поддержки: Deep Learning Toolbox™ Converter для моделей TensorFlow или Deep Learning Toolbox Converter для формата модели ONNX. Если необходимый пакет поддержки не установлен, то importKerasNetwork или importONNXNetwork содержит ссылку на загрузку.

Импортированная сеть может включать слои Keras или ONNX, которые MATLAB Coder™ не поддерживает для развертывания. Список поддерживаемых слоев см. в разделе Сети и слои, поддерживаемые для генерации кода (MATLAB Coder). В этом случае можно развернуть импортированную сеть как автономное приложение с помощью MATLAB Compiler. Независимый исполняемый файл, созданный вами с помощью MATLAB Compiler, не зависит от MATLAB; поэтому его можно развернуть для пользователей, у которых нет доступа к MATLAB.

В рабочем процессе развертывания сначала задается функция классификации, которая загружает импортированную сеть и предсказывает метки классов. Затем вы компилируете функцию классификации в автономное приложение либо программно, используя mcc (MATLAB Compiler) функция, или в интерактивном режиме, с использованием приложения Application Compiler (MATLAB Compiler).

  • Использовать mcc если вы предпочитаете работать в командной строке. Необходимо вручную указать путь к папке слоев Keras или ONNX, которую MATLAB Compiler включает в автономное приложение. Пример развертывания импортированной сети Keras см. в разделе Развертывание импортированной предварительно обученной сети с помощью mcc. Можно использовать тот же рабочий процесс для развертывания сети, импортированной из ONNX, используя mcc.

  • Используйте приложение Application Compiler, если вы предпочитаете интерактивный рабочий процесс. Вы можете получить доступ к приложению, используя deploytool (MATLAB Compiler) или галерея Apps. Приложение предлагает пакеты поддержки, которые MATLAB Compiler может включить в автономное приложение. Затем приложение автоматически включает пути к папке слоев Keras или ONNX в выбранном пакете поддержки. Пример развертывания импортированной сети Keras см. в разделе Развертывание импортированной предварительно обученной сети с помощью приложения Application Compiler. Можно использовать тот же рабочий процесс для развертывания сети, импортированной из ONNX, с помощью Application Compiler приложения.

Развертывание импортированной предварительно обученной сети с помощью mcc

Импортируйте предварительно обученную сеть Keras, чтобы классифицировать изображение, а затем скомпилируйте классификационную функцию в автономное приложение с помощью mcc. Этот пример использует вспомогательную функцию, которая импортирует сеть с importKerasNetwork, задает имена классов и сохраняет импортированную сеть. Чтобы просмотреть код для этой функции, смотрите Helper Function.

Загрузить необходимый пакет поддержки

Функция importKerasNetwork требуется пакет поддержки Deep Learning Toolbox Converter для моделей TensorFlow. Если этот пакет поддержки не установлен, importKerasNetwork содержит ссылку на загрузку необходимого пакета поддержки в Add-On Explorer. Рекомендуемая практика состоит в том, чтобы загрузить пакет поддержки в расположение по умолчанию для версии MATLAB, которую вы запускаете. Однако во время установки можно указать другое местоположение.

Отобразите корень пакета поддержки и номер релиза для выполняемой версии MATLAB. Эта информация необходима при указании пути к папке слоев Keras позже в примере. Пакет поддержки расположен в расположении по умолчанию для R2020b MATLAB.

supportPKGFolder = matlabshared.supportpkg.getSupportPackageRoot
supportPKGFolder = 
'C:\ProgramData\MATLAB\SupportPackages\R2020b'
version('-release')
ans = 
'2020b'

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

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

net = importDAGnet
net = 
  DAGNetwork with properties:

         Layers: [13×1 nnet.cnn.layer.Layer]
    Connections: [13×2 table]
     InputNames: {'input_1'}
    OutputNames: {'ClassificationLayer_activation_1'}

Чтение и сохранение изображения

Чтение и сохранение изображения для классификации.

digitDatasetPath = fullfile(toolboxdir('nnet'),'nndemos','nndatasets','DigitDataset');
I = imread(fullfile(digitDatasetPath,'5','image4009.png'));
imwrite(I,'testImg.png')

Отобразите изображение.

imshow(I)

Задайте классификационную функцию

Задайте классификационную функцию с именем KerasNetClassify который принимает цифровое изображение, загружает импортированную сеть Keras и предсказывает метку класса с помощью загруженной сети.

type KerasNetClassify.m
function KerasNetClassify(imFile)
% KERASNETCLASSIFY Classify image using imported network
% KERASNETCLASSIFY loads the imported Keras pretrained network
% 'digitsDAGnet.mat', reads the image in imFile, and predicts the image
% label using the imported network.
load('digitsDAGnet.mat','net');
I = imread(imFile);
label = classify(net, I);
disp(label)    
end

Создание исполняемого файла

Развертывание импортированной сети с помощью mccнеобходимо вручную задать путь к папке слоев Keras. Папка слоев находится в папке пакета поддержки. Отображение пути к папке слоев Keras.

fullfile(supportPKGFolder,'\toolbox\nnet\supportpackages\keras_importer\+nnet\+keras\+layer')
ans = 
'C:\ProgramData\MATLAB\SupportPackages\R2020b\toolbox\nnet\supportpackages\keras_importer\+nnet\+keras\+layer'

Скомпилируйте классификационную функцию в автономный исполняемый файл KerasNetClassify.exe при помощи mcc функция. Укажите путь к папке слоев Keras, которую MATLAB Compiler включает в автономное приложение при помощи -a path.

mcc -m KerasNetClassify.m...
    -a 'C:\ProgramData\MATLAB\SupportPackages\R2020b\toolbox\nnet\supportpackages\keras_importer\+nnet\+keras\+layer'...
    -n

Классификация изображения

Сравнение меток, классифицированных с помощью classify, KerasNetClassify.m, и KerasNetClassify.exe.

classify(net,I)
ans = categorical
     5 

KerasNetClassify('testImg.png')
     5 
!KerasNetClassify.exe 'testImg.png'
     5  
 

Все три способа классификации изображения возвращают одну и ту же метку.

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

В этом разделе представлен код importDAGnet вспомогательная функция. The importDAGnet функция импортирует предварительно обученную сеть в файл digitsDAGnet.h5, задает имена классов и сохраняет импортированную сеть в digitsDAGnet.mat.

function net = importDAGnet
 
    % Specify the model file.
    modelfile = 'digitsDAGnet.h5';
    
    % Specify the class names.
    classNames = {'0','1','2','3','4','5','6','7','8','9'};
    
    % Import the Keras network with the class names.
    net = importKerasNetwork(modelfile,'Classes',classNames);
    
    % Save the imported network to a MAT file.
    save('digitsDAGnet.mat', 'net');
    
end

Развертывание импортированной предварительно обученной сети с помощью приложения Application Compiler

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

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

Использовать importKerasNetwork для импорта digitsDAGnet и сохраните его в файл MAT. Функция importKerasNetwork требуется пакет поддержки Deep Learning Toolbox Converter для моделей TensorFlow. Если этот пакет поддержки не установлен, importKerasNetwork содержит ссылку на загрузку необходимого пакета поддержки в Add-On Explorer. (Дополнительные сведения об импорте предварительно обученной сети и сохранении изображения для классификации см. в разделе Развертывание импортированной предварительно обученной сети с помощью mcc.)

Задайте классификационную функцию

Задайте классификационную функцию с именем KerasNetClassify который принимает цифровое изображение, загружает импортированную сеть Keras и предсказывает метку класса с помощью загруженной сети.

function KerasNetClassify(imFile)
% KERASNETCLASSIFY Classify image using imported network
% KERASNETCLASSIFY loads the imported Keras pretrained network
% 'digitsDAGnet.mat', reads the image in imFile, and predicts the image
% label using the imported network.
load('digitsDAGnet.mat','net');
I = imread(imFile);
label = classify(net, I);
disp(label)    
end

Создание исполняемого файла

Откройте список приложений развертывания приложений при помощи deploytool функция.

deploytool

В окне MATLAB Compiler нажмите Application Compiler. (Можно также открыть приложение, выбрав его из галереи Apps, доступной на вкладке Apps.)

В разделе Main File вкладки Compiler добавьте основной файл приложения, нажав на знак плюс. В диалоговом окне Add Files укажите основной файл как функцию классификации KerasNetClassify.m.

Add main file for the standalone application

Приложение предлагает пакеты поддержки программного обеспечения из установленных пакетов поддержки, которые может включать исполняемый файл. Поскольку вы установили Deep Learning Toolbox Converter для Модели и Deep Learning Toolbox Converter для ONNX Model Format пакеты поддержки, приложение отображает оба. Необходимо выбрать пакет поддержки Deep Learning Toolbox Converter для TensorFlow Models. Выбор пакета поддержки Deep Learning Toolbox Converter для ONNX Model Format не влияет на выполнение приложения, но излишне увеличивает площадь приложения.

Support packages suggested by app

В разделе «Пакет» нажмите «Пакет», чтобы сохранить автономное приложение.

Package the standalone application

Программа компилирует автономное приложение. Имя по умолчанию для папки выхода KerasNetClassifyи исполняемый файл KerasNetClassify.exe находится в подпапке for_redistribution_files_only.

Software compiling the standalone application

Классификация изображения

Скопируйте файл изображения testImg.png (изображение цифры 5) в папку, содержащую исполняемый файл. Измените текущую папку на папку, содержащую исполняемый файл.

copyfile('testImg.png','KerasNetClassify\for_redistribution_files_only')
cd('KerasNetClassify\for_redistribution_files_only')

Запустите исполняемый файл KerasNetClassify.exe, который вы создали с помощью приложения Application Compiler, чтобы классифицировать изображение testImg.png.

!KerasNetClassify.exe testImg.png
     5  
 

Классификационная метка, возвращенная KerasNetClassify.exe верно.

См. также

| | | | (MATLAB Compiler) | (компилятор MATLAB)

Похожие темы