Этот пример показывает, как сгенерировать код 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');
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
Сгенерируйте код для платформы 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
Пользовательский основной файл создает и настраивает сетевой объект со слоями и весами. Это использует метод OpenCV VideoCapture
, чтобы считать кадры из камеры, соединенной с TX2. Каждый кадр обрабатывается и классифицируется, пока больше кадров не должно быть считано.
edit(fullfile(matlabroot,'examples','deeplearning_shared','main', 'main_webcam.cu'));
% 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 в любое время, чтобы выйти.