codegenВ этом примере показано, как использовать codegen сгенерировать код для приложения классификации Логотипов, которое использует глубокое обучение на процессорах ARM®. Приложение классификации логотипов использует LogoNet серийная сеть, чтобы выполнить распознавание логотипа от изображений. Сгенерированный код использует в своих интересах библиотеку ARM Compute для компьютерного зрения и машинного обучения.
Процессор ARM, который поддерживает расширение NEON
Библиотека Компьютерного зрения С открытым исходным кодом (OpenCV) v3.1
Переменные окружения для библиотек ARM Compute и OpenCV
MATLAB® Coder™ для генерации Кода С++
Интерфейс MATLAB Coder пакета поддержки для Глубокого обучения
Deep Learning Toolbox™ для использования SeriesNetwork объект
Версия библиотеки ARM Compute, что этим примером использование не может быть последняя версия та генерация кода поддержки. Для поддерживаемых версий библиотек и для получения информации о подготовке переменных окружения, смотрите Необходимые условия для Глубокого обучения для MATLAB Coder (MATLAB Coder).
Этот пример поддерживается на Linux® и платформах Windows® и не поддерживаемый для MATLAB Online.
Загрузите предварительно обученный LogoNet сеть и сохраняет его как logonet.mat, если это не существует. Сеть была разработана в MATLAB®, и его архитектура похожа на тот из AlexNet. Эта сеть может распознать 32 логотипа при различных условиях освещения и углах камеры.
net = getLogonet();
Сеть содержит 22 слоя включая свертку, полностью соединенную, и классификация выходные слои.
net.Layers
ans =
22×1 Layer array with layers:
1 'imageinput' Image Input 227×227×3 images with 'zerocenter' normalization and 'randfliplr' augmentations
2 'conv_1' Convolution 96 5×5×3 convolutions with stride [1 1] and padding [0 0 0 0]
3 'relu_1' ReLU ReLU
4 'maxpool_1' Max Pooling 3×3 max pooling with stride [2 2] and padding [0 0 0 0]
5 'conv_2' Convolution 128 3×3×96 convolutions with stride [1 1] and padding [0 0 0 0]
6 'relu_2' ReLU ReLU
7 'maxpool_2' Max Pooling 3×3 max pooling with stride [2 2] and padding [0 0 0 0]
8 'conv_3' Convolution 384 3×3×128 convolutions with stride [1 1] and padding [0 0 0 0]
9 'relu_3' ReLU ReLU
10 'maxpool_3' Max Pooling 3×3 max pooling with stride [2 2] and padding [0 0 0 0]
11 'conv_4' Convolution 128 3×3×384 convolutions with stride [2 2] and padding [0 0 0 0]
12 'relu_4' ReLU ReLU
13 'maxpool_4' Max Pooling 3×3 max pooling with stride [2 2] and padding [0 0 0 0]
14 'fc_1' Fully Connected 2048 fully connected layer
15 'relu_5' ReLU ReLU
16 'dropout_1' Dropout 50% dropout
17 'fc_2' Fully Connected 2048 fully connected layer
18 'relu_6' ReLU ReLU
19 'dropout_2' Dropout 50% dropout
20 'fc_3' Fully Connected 32 fully connected layer
21 'softmax' Softmax softmax
22 'classoutput' Classification Output crossentropyex with 'adidas' and 31 other classes
На целевом компьютере ARM убедитесь, что ARM_COMPUTELIB установлен и что LD_LIBRARY_PATH содержит путь к папке ARM Compute Library.
Смотрите необходимые условия для глубокого обучения для MATLAB Coder (MATLAB Coder).
logonet_predict.m функция точки входа берет вход изображений и выполняет предсказание на изображении с помощью нейронной сети для глубокого обучения, сохраненной в LogoNet Matfile. Функция загружает сетевой объект от LogoNet.mat в персистентную сетевую переменную logonet. На последующих вызовах функции снова используется постоянный объект.
type logonet_predict
function out = logonet_predict(in)
%#codegen
% Copyright 2017-2020 The MathWorks, Inc.
persistent logonet;
if isempty(logonet)
logonet = coder.loadDeepLearningNetwork('LogoNet.mat','logonet');
end
out = logonet.predict(in);
end
Когда вы генерируете код, предназначающийся для основанного на ARM устройства, и не используете пакет аппаратной поддержки, создаете объект настройки для библиотеки. Не создавайте объект настройки для исполняемой программы.
Настройте объект настройки для генерации Кода С++ и генерации кода только.
cfg = coder.config('lib'); cfg.TargetLang = 'C++'; cfg.GenCodeOnly = true;
Создайте coder.ARMNEONConfig объект. Задайте версию библиотеки и архитектуру целевого процессора ARM. Например, предположите, что требуемая плата является платой HiKey/Rock960 с архитектурой ARMv8, и ARM Вычисляют версию 19.05 Библиотеки.
dlcfg = coder.DeepLearningConfig('arm-compute'); dlcfg.ArmComputeVersion = '19.05'; dlcfg.ArmArchitecture = 'armv8';
Установите DeepLearningConfig свойство настройки генерации кода возражает против объекта настройки глубокого обучения.
cfg.DeepLearningConfig = dlcfg;
codegencodegen -config cfg logonet_predict -args {ones(227, 227, 3, 'single')} -d arm_compute
Код сгенерирован в arm_compute папка в текущей рабочей папке на хосте - компьютере.
packNGo функцияПакеты функции packNGo все соответствующие файлы в сжатом zip-файле.
zipFileName = 'arm_compute.zip';
bInfo = load(fullfile('arm_compute','buildInfo.mat'));
packNGo(bInfo.buildInfo, {'fileName', zipFileName,'minimalHeaders', false, 'ignoreFileMissing',true});Скопируйте zip-файл и извлечение в папку. Удалите zip-файл из целевого компьютера.
В следующих командах, замене:
password с вашим паролем
username с вашим именем пользователя
targetname с именем вашего устройства
targetloc с папкой назначения для файлов
Запустите эти команды, чтобы скопировать и извлечь zip-файл из Linux.
if isunix, system(['sshpass -p password scp -r ' fullfile(pwd,zipFileName) ' username@targetname:targetloc/']), end if isunix, system('sshpass -p password ssh username@targetname "if [ -d targetloc/arm_compute ]; then rm -rf targetloc/arm_compute; fi"'), end if isunix, system(['sshpass -p password ssh username@targetname "unzip targetloc/' zipFileName ' -d targetloc/arm_compute"']), end if isunix, system(['sshpass -p password ssh username@targetname "rm -rf targetloc' zipFileName '"']), end
Запустите эти команды, чтобы скопировать и извлечь zip-файл из Windows.
if ispc, system(['pscp.exe -pw password -r ' fullfile(pwd,zipFileName) ' username@targetname:targetloc/']), end if ispc, system('plink.exe -l username -pw password targetname "if [ -d targetloc/arm_compute ]; then rm -rf targetloc/arm_compute; fi"'), end if ispc, system(['plink.exe -l username -pw password targetname "unzip targetloc/' zipFileName ' -d targetloc/arm_compute"']), end if ispc, system(['plink.exe -l username -pw password targetname "rm -rf targetloc' zipFileName '"']), end
Скопируйте эти вспомогательные файлы от хоста - компьютера до целевого компьютера:
Введите изображение, coderdemo_google.png
Make-файл для генерации библиотеки, logonet_predict_rtw.mk
Make-файл для создания исполняемой программы, makefile_arm_logo.mk
Словарь Synset, synsetWordsLogoDet.txt
В следующих командах, замене:
password с вашим паролем
username с вашим именем пользователя
targetname с именем вашего устройства
targetloc с папкой назначения для файлов
Выполните шаги ниже, чтобы скопировать все необходимые файлы при выполнении из Linux
if isunix, system('sshpass -p password scp logonet_predict_rtw.mk username@targetname:targetloc/arm_compute/'), end if isunix, system('sshpass -p password scp coderdemo_google.png username@targetname:targetloc/arm_compute/'), end if isunix, system('sshpass -p password scp makefile_arm_logo.mk username@targetname:targetloc/arm_compute/'), end if isunix, system('sshpass -p password scp synsetWordsLogoDet.txt username@targetname:targetloc/arm_compute/'), end
Выполните шаги ниже, чтобы скопировать все необходимые файлы при выполнении от Windows
if ispc, system('pscp.exe -pw password logonet_predict_rtw.mk username@targetname:targetloc/arm_compute/'), end if ispc, system('pscp.exe -pw password coderdemo_google.png username@targetname:targetloc/arm_compute/'), end if ispc, system('pscp.exe -pw password makefile_arm_logo.mk username@targetname:targetloc/arm_compute/'), end if ispc, system('pscp.exe -pw password synsetWordsLogoDet.txt username@targetname:targetloc/arm_compute/'), end
Чтобы создать библиотеку по целевому компьютеру, выполните сгенерированный make-файл на оборудовании ARM.
Убедитесь, что вы устанавливаете переменные окружения ARM_COMPUTELIB и LD_LIBRARY_PATH на целевом компьютере. Смотрите Необходимые условия для Глубокого обучения для MATLAB Coder (MATLAB Coder). Переменная ARM_ARCH используется в Make-файле, чтобы передать флаги компилятора на основе Архитектуры Руки. Переменная ARM_VER используется в Make-файле, чтобы скомпилировать код на основе Руки, Вычисляют Версию. Замените аппаратные учетные данные и пути в этих командах, похожих на предыдущий раздел.
Выполните ниже шагов, чтобы создать библиотеку из Linux.
if isunix, system('sshpass -p password scp main_arm_logo.cpp username@targetname:targetloc/arm_compute/'), end if isunix, system(['sshpass -p password ssh username@targetname "make -C targetloc/arm_compute/ -f logonet_predict_rtw.mk ARM_ARCH=' dlcfg.ArmArchitecture ' ARM_VER=' dlcfg.ArmComputeVersion ' "']), end
Выполните ниже шагов, чтобы создать библиотеку из окон.
if ispc, system('pscp.exe -pw password main_arm_logo.cpp username@targetname:targetloc/arm_compute/'), end if ispc, system(['plink.exe -l username -pw password targetname "make -C targetloc/arm_compute/ -f logonet_predict_rtw.mk ARM_ARCH=' dlcfg.ArmArchitecture ' ARM_VER=' dlcfg.ArmComputeVersion ' "']), end
Создайте библиотеку с источником основной файл обертки, чтобы создать исполняемый файл. main_arm_logo.cpp C++ основной файл обертки, который вызывает logonet_predict функция.
Запуститесь ниже команды, чтобы создать исполняемый файл из Linux.
if isunix, system('sshpass -p password ssh username@targetname "make -C targetloc/arm_compute/ -f makefile_arm_logo.mk targetDirName=targetloc/arm_compute"'), end
Запуститесь ниже команды, чтобы создать исполняемый файл из Windows.
if ispc, system('plink.exe -l username -pw password targetname "make -C targetloc/arm_compute/ -f makefile_arm_logo.mk targetDirName=targetloc/arm_compute"'), end
Run the executable from Linux using below command.
if isunix, system('sshpass -p password ssh username@targetname "cd targetloc/arm_compute/; ./logonet coderdemo_google.png"'), end
Run the executable from Windows using below command.
if ispc, system('plink.exe -l username -pw password targetname "cd targetloc/arm_compute/; ./logonet coderdemo_google.png"'), end
Top 5 Predictions: ----------------------------- 99.992% google 0.003% corona 0.003% singha 0.001% esso 0.000% fedex
