В этом разделе показано, как импортировать предварительно обученную сеть и затем развернуть импортированную сеть с помощью 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
Импортируйте предварительно обученную сетевую 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
.
Приложение предлагает пакеты поддержки программного обеспечения из установленных пакетов поддержки, которые может включать исполняемый файл. Поскольку вы установили Deep Learning Toolbox Converter для Модели и Deep Learning Toolbox Converter для ONNX Model Format пакеты поддержки, приложение отображает оба. Необходимо выбрать пакет поддержки Deep Learning Toolbox Converter для TensorFlow Models. Выбор пакета поддержки Deep Learning Toolbox Converter для ONNX Model Format не влияет на выполнение приложения, но излишне увеличивает площадь приложения.
В разделе «Пакет» нажмите «Пакет», чтобы сохранить автономное приложение.
Программа компилирует автономное приложение. Имя по умолчанию для папки выхода KerasNetClassify
и исполняемый файл KerasNetClassify.exe
находится в подпапке for_redistribution_files_only
.
Скопируйте файл изображения 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
верно.
importKerasLayers
| importKerasNetwork
| importONNXLayers
| importONNXNetwork
| deploytool
(MATLAB Compiler) | mcc
(компилятор MATLAB)