cnncodegen
В этом примере показано, как использовать cnncodegen
сгенерировать код для приложения классификации Логотипов, которое использует глубокое обучение на процессорах ARM®. Приложение классификации логотипов использует LogoNet
серийная сеть, чтобы выполнить распознавание логотипа от изображений. Сгенерированный код использует в своих интересах библиотеку ARM Compute для компьютерного зрения и машинного обучения.
Процессор ARM, который поддерживает расширение NEON
Библиотека Компьютерного зрения С открытым исходным кодом (OpenCV) v3.1
Переменные окружения для библиотек ARM Compute и OpenCV
MATLAB® Coder™ для генерации Кода С++
Интерфейс MATLAB Coder пакета поддержки для Глубокого обучения
Deep Learning Toolbox™ для использования SeriesNetwork
объект
Для получения дополнительной информации смотрите Предпосылки для Глубокого обучения для MATLAB Coder.
Этот пример поддерживается на Linux® и платформах Windows® и не поддерживаемый для MATLAB Online.
Загрузите предварительно обученный 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 убедитесь, что 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','19.05','ARMArchitecture','armv8'));
Переместите 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 можно использовать putty
команда с -ssh
аргумент, чтобы войти в систему и запустить сделать команду. Например:
system('putty -ssh username@targetname -pw password');
Чтобы создать и запустить исполняемый файл на целевой платформе, используйте команду с форматом: 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