Запуск встраиваемого приложения на комплекте разработчика Джетсона TX2 NVIDIA

Этот пример показывает, как сгенерировать код CUDA® от объекта SeriesNetwork и предназначаться для платы NVIDIA® TX2 с внешней камерой. Этот пример использует нейронную сеть для глубокого обучения AlexNet, чтобы классифицировать изображения от видеопотока веб-камеры USB.

Предпосылки

  • Deep Learning Toolbox™, чтобы загрузить объект SeriesNetwork.

  • GPU Coder™ для генерации кода CUDA.

  • Интерфейс GPU Coder для Библиотек Глубокого обучения поддерживает пакет. Чтобы установить этот пакет поддержки, используйте Add-On Explorer.

  • NVIDIA комплект разработчика Jetson TX2.

  • Камера USB, чтобы соединиться с TX2.

  • NVIDIA инструментарий CUDA установлен на TX2.

  • Библиотека NVIDIA cuDNN 5.0 установлена на TX2.

  • Библиотеки OpenCV 3.3.0 для видео чтения и изображения отображают операции, установленные на TX2.

  • Заголовок OpenCV и файлы библиотеки должны быть на пути поиска файлов компилятора NVCC TX2.

  • Переменные окружения для компиляторов и библиотек. Для получения информации о поддерживаемых версиях компиляторов и библиотек, смотрите Сторонние продукты (GPU Coder). Для подготовки переменных окружения смотрите Подготовку Необходимых как условие продуктов (GPU Coder).

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

Проверьте среду графического процессора для целевого компьютера

Используйте coder.checkGpuInstall, функционируют и проверяют, что компиляторы и библиотеки, необходимые для выполнения этого примера, настраиваются правильно.

coder.checkGpuInstall('tx2','quiet');

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

AlexNet содержит 25 слоев включая свертку, полностью соединенную и классификация выходные слои.

net = getAlexnet();
net.Layers
ans = 

  25x1 Layer array with layers:

     1   'data'     Image Input                   227x227x3 images with 'zerocenter' normalization
     2   'conv1'    Convolution                   96 11x11x3 convolutions with stride [4  4] and padding [0  0  0  0]
     3   'relu1'    ReLU                          ReLU
     4   'norm1'    Cross Channel Normalization   cross channel normalization with 5 channels per element
     5   'pool1'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
     6   'conv2'    Convolution                   256 5x5x48 convolutions with stride [1  1] and padding [2  2  2  2]
     7   'relu2'    ReLU                          ReLU
     8   'norm2'    Cross Channel Normalization   cross channel normalization with 5 channels per element
     9   'pool2'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
    10   'conv3'    Convolution                   384 3x3x256 convolutions with stride [1  1] and padding [1  1  1  1]
    11   'relu3'    ReLU                          ReLU
    12   'conv4'    Convolution                   384 3x3x192 convolutions with stride [1  1] and padding [1  1  1  1]
    13   'relu4'    ReLU                          ReLU
    14   'conv5'    Convolution                   256 3x3x192 convolutions with stride [1  1] and padding [1  1  1  1]
    15   'relu5'    ReLU                          ReLU
    16   'pool5'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
    17   'fc6'      Fully Connected               4096 fully connected layer
    18   'relu6'    ReLU                          ReLU
    19   'drop6'    Dropout                       50% dropout
    20   'fc7'      Fully Connected               4096 fully connected layer
    21   'relu7'    ReLU                          ReLU
    22   'drop7'    Dropout                       50% dropout
    23   'fc8'      Fully Connected               1000 fully connected layer
    24   'prob'     Softmax                       softmax
    25   'output'   Classification Output         crossentropyex with 'tench' and 999 other classes

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

Сгенерируйте код для платформы TX2.

cfg = coder.gpuConfig('lib');
cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn');
cfg.GenerateReport = true;
cfg.TargetLang = 'C++';
cfg.Toolchain = 'NVIDIA CUDA for Jetson Tegra X2 | gmake (64-bit Linux)';
cfg.HardwareImplementation.TargetHWDeviceType = 'Generic->Custom';

codegen -config cfg -args {ones(227,227,3,'single'), coder.Constant('alexnet.mat')} alexnet_test.m
Code generation successful: To view the report, open('codegen/lib/alexnet_test/html/report.mldatx').

Описание сгенерированного кода

Сгенерированный код скомпилирован в статическую библиотеку alexnet_test.a. Сгенерированный код включает код для файла проекта точки входа, сетевых классов и бинарных файлов веса, содержащих сетевые коэффициенты.

dir(fullfile('codegen', 'lib', 'alexnet_test'))
.                             alexnet_test_terminate.h      
..                            alexnet_test_terminate.o      
DeepLearningNetwork.cu        alexnet_test_types.h          
DeepLearningNetwork.d         buildInfo.mat                 
DeepLearningNetwork.h         cnn_alexnet_avg               
DeepLearningNetwork.o         cnn_alexnet_conv1_b           
MWCNNLayerImpl.cu             cnn_alexnet_conv1_w           
MWCNNLayerImpl.d              cnn_alexnet_conv2_b           
MWCNNLayerImpl.hpp            cnn_alexnet_conv2_w           
MWCNNLayerImpl.o              cnn_alexnet_conv3_b           
MWCudaDimUtility.cu           cnn_alexnet_conv3_w           
MWCudaDimUtility.d            cnn_alexnet_conv4_b           
MWCudaDimUtility.h            cnn_alexnet_conv4_w           
MWCudaDimUtility.o            cnn_alexnet_conv5_b           
MWFusedConvReLULayer.cpp      cnn_alexnet_conv5_w           
MWFusedConvReLULayer.d        cnn_alexnet_fc6_b             
MWFusedConvReLULayer.hpp      cnn_alexnet_fc6_w             
MWFusedConvReLULayer.o        cnn_alexnet_fc7_b             
MWFusedConvReLULayerImpl.cu   cnn_alexnet_fc7_w             
MWFusedConvReLULayerImpl.d    cnn_alexnet_fc8_b             
MWFusedConvReLULayerImpl.hpp  cnn_alexnet_fc8_w             
MWFusedConvReLULayerImpl.o    cnn_alexnet_labels.txt        
MWTargetNetworkImpl.cu        cnn_api.cpp                   
MWTargetNetworkImpl.d         cnn_api.d                     
MWTargetNetworkImpl.hpp       cnn_api.hpp                   
MWTargetNetworkImpl.o         cnn_api.o                     
alexnet_test.a                codeInfo.mat                  
alexnet_test.cu               examples                      
alexnet_test.d                gpu_codegen_info.mat          
alexnet_test.h                html                          
alexnet_test.o                interface                     
alexnet_test_initialize.cu    predict.cu                    
alexnet_test_initialize.d     predict.d                     
alexnet_test_initialize.h     predict.h                     
alexnet_test_initialize.o     predict.o                     
alexnet_test_ref.rsp          rtw_proj.tmw                  
alexnet_test_rtw.mk           rtwtypes.h                    
alexnet_test_terminate.cu     
alexnet_test_terminate.d      

MainFile

Пользовательский основной файл создает и настраивает сетевой объект со слоями и весами. Это использует метод OpenCV VideoCapture, чтобы считать кадры из камеры, соединенной с TX2. Каждый кадр обрабатывается и классифицируется, пока больше кадров не должно быть считано.

edit(fullfile(matlabroot,'examples','deeplearning_shared','main', 'main_webcam.cu'));

Скопируйте файлы в папку Codegen

% Copy the files required for the executable.

copyfile('create_exe.mk', fullfile('codegen', 'lib', 'alexnet_test', 'create_exe.mk'));
copyfile('synsetWords.txt', fullfile('codegen', 'lib', 'alexnet_test', 'synsetWords.txt'));
copyfile('main_webcam.cu', fullfile('codegen', 'lib', 'alexnet_test', 'main_webcam.cu'));

Создание и запуск на целевом компьютере

Скопируйте содержимое codegen папки к местоположению на TX2.

scp -r ./codegen/lib/alexnet_test username@jetson-tx2-name:/path/to/desired/location

На TX2 перейдите к скопированной codegen папке и выполните следующие команды.

sudo ~/jetson_clocks.sh

Скрипт jetson_clocks.sh используется, чтобы повысить производительность TX2.

Запустите make, чтобы сгенерировать исполняемый файл с помощью основного файла, статическая библиотека alexnet_test.a и библиотеки OpenCV.

make -f create_exe.mk

Запустите исполняемый файл на платформе TX2 с номером устройства для вашей веб-камеры.

./alexnet_exe 1

Эта команда отображает живой видео канал от веб-камеры, сопровождаемой прогнозами AlexNet текущего изображения. Нажмите Escape в любое время, чтобы выйти.

Классификация AlexNet Вывод на TX2

Похожие темы