cnncodegen
В этом примере показано, как использовать cnncodegen
сгенерировать код для приложения классификации Логотипов, которое использует глубокое обучение на процессорах ARM®. Приложение классификации логотипов использует LogoNet
серийная сеть, чтобы выполнить распознавание логотипа от изображений. Сгенерированный код использует в своих интересах библиотеку ARM Compute для компьютерного зрения и машинного обучения.
Процессор ARM, который поддерживает расширение NEON
Библиотека Компьютерного зрения С открытым исходным кодом (OpenCV) v3.1
Переменные окружения для библиотек ARM Compute и OpenCV
MATLAB® Coder™ для генерации Кода С++
Интерфейс MATLAB Coder пакета поддержки для Глубокого обучения
Deep Learning Toolbox™ для использования SeriesNetwork
объект
Для получения дополнительной информации смотрите Предпосылки для Глубокого обучения для MATLAB Coder (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 (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
Лучшие пять предсказаний для входного файла изображения: