ドキュメンテーション

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

NVIDIA Jetson TX2 開発者キットでの組み込みアプリケーションの実行

この例では、SeriesNetwork オブジェクトから CUDA® コードを生成し、外部カメラ付きの NVIDIA® TX2 ボードをターゲットにする方法を説明します。この例では、AlexNet 深層学習ネットワークを使用して、USB Web カメラのビデオ ストリームのイメージを分類します。

必要条件

  • Deep Learning Toolbox™ (SeriesNetwork オブジェクトを読み込むため)。

  • GPU Coder™ (CUDA コードを生成するため)。

  • GPU Coder Interface for Deep Learning Libraries サポート パッケージ。このサポート パッケージをインストールするには、アドオン エクスプローラーを使用します。

  • NVIDIA Jetson TX2 開発者キット。

  • USB カメラ (TX2 に接続するため)。

  • TX2 にインストールされている NVIDIA CUDA ツールキット。

  • TX2 にインストールされている NVIDIA cuDNN 5.0 ライブラリ。

  • TX2 にインストールされている OpenCV 3.3.0 ライブラリ (ビデオ読み取りとイメージ表示操作用)。

  • OpenCV ヘッダー ファイルおよびライブラリ ファイルは、TX2 の NVCC コンパイラ検索パスになければなりません。

  • コンパイラおよびライブラリの環境変数。サポートされているコンパイラおよびライブラリのバージョンの詳細は、サードパーティ製品 (GPU Coder)を参照してください。環境変数の設定は、前提条件となる製品の設定 (GPU Coder)を参照してください。

  • この例は、Linux® プラットフォームのみでサポートされています。

ターゲット ハードウェアの GPU 環境の検証

関数 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      

メイン ファイル

カスタム メイン ファイルは、層と重みのあるネットワーク オブジェクトを作成して設定します。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

Web カメラのデバイス番号を指定して、TX2 プラットフォームで実行可能ファイルを実行します。

./alexnet_exe 1

このコマンドは、Web カメラのライブ ビデオ フィードを現在のイメージの AlexNet による予測と共に表示します。Esc キーを押すと、いつでも終了できます。

TX2 での AlexNet による分類の出力

関連するトピック