В этом примере показано, как сгенерировать и развернуть код для предсказания на устройстве ARM®-based, не используя пакет аппаратной поддержки.
Когда вы генерируете код для предсказания с помощью ARM, Вычисляют Библиотеку и пакет аппаратной поддержки, codegen
генерирует код по хосту - компьютеру, копирует сгенерированные файлы в целевой компьютер и создает исполняемый файл на целевом компьютере. Без пакета аппаратной поддержки, codegen
генерирует код по хосту - компьютеру. Вы должны команды выполнения, чтобы скопировать файлы и создать исполняемую программу на целевом компьютере.
Этот пример использует packNGo
функционируйте, чтобы группировать все соответствующие файлы в сжатый zip-файл. Используйте этот пример, чтобы изучить, как развернуть сгенерированный код на целях Неона ARM, которые не имеют пакета аппаратной поддержки при помощи packNGo
.
Процессор ARM, который поддерживает расширение NEON
ARM Вычисляет Библиотеку (на целевом оборудовании ARM)
Библиотека компьютерного зрения с открытым исходным кодом (открытый CV)
Переменные окружения для компиляторов и библиотек
MATLAB® Coder™
Интерфейс MATLAB Coder пакета поддержки для Глубокого обучения
Deep Learning Toolbox™
Для поддерживаемых версий библиотек и для получения информации о подготовке переменных окружения, смотрите Предпосылки для Глубокого обучения для MATLAB Coder (MATLAB Coder).
Этот пример не поддержан для MATLAB Online.
Этот пример использует сеть DAG SqueezeNet, чтобы показать, что классификация изображений с ARM Вычисляет Библиотеку. Предварительно обученный SqueezeNet для MATLAB доступен в Deep Learning Toolbox. squeezenet_predict
функционируйте загружает сеть SqueezeNet в персистентный сетевой объект. На последующих вызовах функции снова используется постоянный объект.
type squeezenet_predict
% Copyright 2018 The MathWorks, Inc. function out = squeezenet_predict(in) %#codegen % A persistent object mynet is used to load the DAG network object. % At the first call to this function, the persistent object is constructed and % set up. When the function is called subsequent times, the same object is reused % to call predict on inputs, avoiding reconstructing and reloading the % network object. persistent mynet; if isempty(mynet) mynet = coder.loadDeepLearningNetwork('squeezenet','squeezenet'); end out = mynet.predict(in);
Когда вы генерируете код, предназначающийся для основанного на 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;
codegen
codegen -config cfg squeezenet_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-файл и извлечение в папку и удалите 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
Скопируйте эти вспомогательные файлы от хоста - компьютера до целевого компьютера:
Введите изображение, coffeemug.png
Make-файл для генерации библиотеки, squeezenet_predict_rtw.mk
Make-файл для создания исполняемой программы, makefile_squeezenet_arm_generic.mk
Словарь Synset, synsetWords.txt
В следующих командах, замене:
password
с вашим паролем
username
с вашим именем пользователя
targetname
с именем вашего устройства
targetloc
с папкой назначения для файлов
Выполните шаги ниже, чтобы скопировать все необходимые файлы при выполнении из Linux
if isunix, system('sshpass -p password scp squeezenet_predict_rtw.mk username@targetname:targetloc/arm_compute/'), end if isunix, system('sshpass -p password scp coffeemug.png username@targetname:targetloc/arm_compute/'), end if isunix, system('sshpass -p password scp makefile_squeezenet_arm_generic.mk username@targetname:targetloc/arm_compute/'), end if isunix, system('sshpass -p password scp synsetWords.txt username@targetname:targetloc/arm_compute/'), end
Выполните шаги ниже, чтобы скопировать все необходимые файлы при выполнении от Windows
if ispc, system('pscp.exe -pw password squeezenet_predict_rtw.mk username@targetname:targetloc/arm_compute/'), end if ispc, system('pscp.exe -pw password coffeemug.png username@targetname:targetloc/arm_compute/'), end if ispc, system('pscp.exe -pw password makefile_squeezenet_arm_generic.mk username@targetname:targetloc/arm_compute/'), end if ispc, system('pscp.exe -pw password synsetWords.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_squeezenet_arm_generic.cpp username@targetname:targetloc/arm_compute/'), end if isunix, system(['sshpass -p password ssh username@targetname "make -C targetloc/arm_compute/ -f squeezenet_predict_rtw.mk ARM_ARCH=' dlcfg.ArmArchitecture ' ARM_VER=' dlcfg.ArmComputeVersion ' "']), end
Выполните ниже шагов, чтобы создать библиотеку из окон.
if ispc, system('pscp.exe -pw password main_squeezenet_arm_generic.cpp username@targetname:targetloc/arm_compute/'), end if ispc, system(['plink.exe -l username -pw password targetname "make -C targetloc/arm_compute/ -f squeezenet_predict_rtw.mk ARM_ARCH=' dlcfg.ArmArchitecture ' ARM_VER=' dlcfg.ArmComputeVersion ' "']), end
Создайте библиотеку с источником основной файл обертки, чтобы создать исполняемый файл. main_squeezenet_arm_generic.cpp
C++ основной файл обертки, который вызывает функцию squeezenet_predict, чтобы создать исполняемый файл.
Запуститесь ниже команды, чтобы создать исполняемый файл из Linux.
if isunix, system('sshpass -p password ssh username@targetname "make -C targetloc/arm_compute/ -f makefile_squeezenet_arm_generic.mk targetDirName=targetloc/arm_compute"'), end
Запуститесь ниже команды, чтобы создать исполняемый файл из Windows.
if ispc, system('plink.exe -l username -pw password targetname "make -C targetloc/arm_compute/ -f makefile_squeezenet_arm_generic.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/; ./squeezenet coffeemug.png"'), end
Run the executable from Windows using below command.
if ispc, system('plink.exe -l username -pw password targetname "cd targetloc/arm_compute/; ./squeezenet coffeemug.png"'), end
Top 5 Predictions: ----------------------------- 88.299% coffee mug 7.309% cup 1.098% candle 0.634% paper towel 0.591% water jug