cnncodegen
Этот пример показывает, как использовать cnncodegen
, чтобы сгенерировать код для приложения классификации Логотипов, которое использует глубокое обучение на процессорах ARM®. Приложение классификации логотипов использует сеть серии LogoNet
, чтобы выполнить распознавание логотипа от изображений. Сгенерированный код использует в своих интересах библиотеку ARM Compute для компьютерного зрения и машинного обучения.
Процессор ARM, который поддерживает расширение NEON
Библиотека Компьютерного зрения С открытым исходным кодом (OpenCV) v3.1
Переменные окружения для библиотек ARM Compute и OpenCV
MATLAB® Coder™ для генерации Кода С++
Интерфейс MATLAB Coder пакета поддержки для Глубокого обучения
Deep Learning Toolbox™ для использования объекта SeriesNetwork
Для получения дополнительной информации смотрите Предпосылки для Глубокого обучения для MATLAB Coder.
Этот пример поддерживается на платформах Windows® и Linux®.
Загрузите предварительно обученную сеть LogoNet
и сохраните ее как logonet.mat
, если она не существует. Сеть была разработана в MATLAB®, и его архитектура подобна тому из AlexNet. Эта сеть может распознать 32 логотипа при различных условиях освещения и углах камеры.
net = getLogonet();
Сеть содержит 22 слоя включая свертку, полностью соединенную, и классификация выходные слои.
net.Layers
ans = 22x1 Layer array with layers: 1 'imageinput' Image Input 227x227x3 images with 'zerocenter' normalization and 'randfliplr' augmentations 2 'conv_1' Convolution 96 5x5x3 convolutions with stride [1 1] and padding [0 0 0 0] 3 'relu_1' ReLU ReLU 4 'maxpool_1' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0] 5 'conv_2' Convolution 128 3x3x96 convolutions with stride [1 1] and padding [0 0 0 0] 6 'relu_2' ReLU ReLU 7 'maxpool_2' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0] 8 'conv_3' Convolution 384 3x3x128 convolutions with stride [1 1] and padding [0 0 0 0] 9 'relu_3' ReLU ReLU 10 'maxpool_3' Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0 0 0] 11 'conv_4' Convolution 128 3x3x384 convolutions with stride [2 2] and padding [0 0 0 0] 12 'relu_4' ReLU ReLU 13 'maxpool_4' Max Pooling 3x3 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_COMPUTELIB
, чтобы указать на местоположение ARM Вычисляют Библиотеку по цели ARM. Например:
setenv('ARM_COMPUTELIB','/usr/local/arm_compute/')
На целевом компьютере ARM убедитесь, что ARM_COMPUTELIB установлен и что LD_LIBRARY_PATH содержит путь к папке ARM Compute Library.
Смотрите предпосылки для глубокого обучения для MATLAB Coder.
Для глубокого обучения на целях ARM вы генерируете код по компьютеру разработчика хоста. Затем вы перемещаете сгенерированный код в платформу ARM, где вы создаете и запускаете исполняемую программу. Целевая платформа должна поддержать Неоновую архитектуру системы команд (ISA). Raspberry Pi3, Светлячок, HiKey являются некоторыми целевыми платформами, на которых может быть выполнен сгенерированный код.
Вызовите cnncodegen
, указав, что целевая библиотека является ARM, Вычисляют Библиотеку. Задайте версию библиотеки и архитектуру целевого процессора ARM. Параметр ARMArchitecture
требуется.
cnncodegen(net,'targetlib','arm-compute','targetparams', struct('ArmComputeVersion','18.05','ARMArchitecture','armv8'));
В сгенерированном make-файле, cnnbuild_rtw.mk
, в разделе MACROS
, START_DIR
задает местоположение на цели ARM сгенерированного кода. Замените сгенерированное значение START_DIR
с путем к папке, где вы планируете переместить сгенерированные файлы. Например:
START_DIR = /home/username/codegen/
Переместите codegen папку и другие необходимые файлы от компьютера разработчика хоста до целевой платформы при помощи вашего предпочтительного клиента scp/ssh
.
Например, на платформе Linux, чтобы передать файлы Raspberry Pi, используют scp команду с форматом:
system('sshpass -p [password] scp (sourcefile) [username]@[targetname]:~/');
system('sshpass -p password scp main_arm_logo.cpp username@targetname:~/'); system('sshpass -p password scp coderdemo_google.png username@targetname:~/'); system('sshpass -p password scp makefile_arm_logo.mk username@targetname:~/'); system('sshpass -p password scp synsetWordsLogoDet.txt username@targetname:~/'); system('sshpass -p password scp -r codegen username@targetname:~/');
На платформе Windows можно использовать инструмент pscp
, который идет с установкой PuTTY. Например,
system('pscp -pw password-r codegen username@targetname:/home/username');
Примечание: утилиты PSCP должны быть или на вашем ПУТИ или в вашем текущем каталоге.
Чтобы создать библиотеку по целевой платформе, используйте сгенерированный make-файл cnnbuild_rtw.mk
.
Например, чтобы создать библиотеку по Raspberry Pi с платформы Linux:
system('sshpass -p password ssh username@targetname "make -C /home/username/codegen -f cnnbuild_rtw.mk"');
Для платформы Windows можно использовать инструмент pscp
, ранее упомянутый.
Чтобы создать и запустить исполняемый файл на целевой платформе, используйте команду с форматом: make -C /home/$(username)
и ./execfile -f makefile_arm_logo.mk
Например, на Raspberry Pi:
make -C /home/pi arm_neon -f makefile_arm_logo.mk
Запустите исполняемый файл с входным файлом изображения.
./logo_recognition_exe coderdemo_google.png
Лучшие пять прогнозов для входного файла изображения:
cnncodegen
| coder.DeepLearningConfig
| coder.loadDeepLearningNetwork