Прогноз глубокого обучения с ARM вычисляет Используя 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).

Этот пример поддерживается на платформах Windows® и Linux®.

Получите предварительно обученный SeriesNetwork

Загрузите предварительно обученную сеть 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 (MATLAB Coder).

Сгенерируйте код

Для глубокого обучения на целях ARM вы генерируете код по компьютеру разработчика хоста. Затем вы перемещаете сгенерированный код в платформу ARM, где вы создаете и запускаете исполняемую программу. Целевая платформа должна поддержать Неоновую архитектуру системы команд (ISA). Raspberry Pi3, Светлячок, HiKey являются некоторыми целевыми платформами, на которых может быть выполнен сгенерированный код.

Вызовите cnncodegen, указав, что целевая библиотека является ARM, Вычисляют Библиотеку. Задайте версию библиотеки и архитектуру целевого процессора ARM. Параметр ARMArchitecture требуется.

cnncodegen(net,'targetlib','arm-compute','targetparams', struct('ArmComputeVersion','18.05','ARMArchitecture','armv8'));

Задайте местоположение файлов сгенерированного кода на цели ARM

В сгенерированном 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

Лучшие пять прогнозов для входного файла изображения: