exponenta event banner

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

В этом разделе показано, как импортировать предварительно подготовленную сеть и затем развернуть импортированную сеть с помощью 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). В этом случае можно развернуть импортированную сеть как автономное приложение с помощью компилятора MATLAB. Автономный исполняемый файл, созданный с помощью компилятора MATLAB, не зависит от MATLAB; поэтому его можно развернуть для пользователей, не имеющих доступа к MATLAB.

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

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

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

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

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

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

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

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

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 в автономное приложение с помощью -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 функция помощника. 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

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

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

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

Использовать importKerasNetwork для импорта digitsDAGnet и сохраните его в MAT-файле. Функция importKerasNetwork требуется пакет поддержки Deep Learning Toolbox Converter для моделей TensorFlow. Если этот пакет поддержки не установлен, importKerasNetwork содержит ссылку на загрузку необходимого пакета поддержки в обозревателе надстроек. (Дополнительные сведения об импорте предварительно обученной сети и сохранении образа для классификации см. в разделе Развертывание импортированной предварительно обученной сети с использованием 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 щелкните Компилятор приложения. (Можно также открыть приложение, выбрав его в коллекции приложений, доступной на вкладке Приложения.)

В разделе «Основной файл» вкладки «Компилятор» добавьте основной файл приложения, щелкнув на знаке «плюс». В диалоговом окне «Добавление файлов» укажите основной файл в качестве функции классификации. KerasNetClassify.m.

Add main file for the standalone application

Приложение предлагает пакеты поддержки программного обеспечения из установленных пакетов поддержки, которые могут быть включены в исполняемый файл. Поскольку вы установили конвертер Deep Learning Toolbox Converter для моделей TensorFlow и конвертер Deep Learning Toolbox для пакетов поддержки формата модели ONNX, приложение отображает оба варианта. Необходимо выбрать пакет поддержки Deep Learning Toolbox Converter для моделей TensorFlow. Выбор пакета поддержки Deep Learning Toolbox Converter for 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) | (Компилятор MATLAB)

Связанные темы