このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,NVIDIA TensorRT™ライブラリを使用した深層学習アプリケーションのコード生成について説明します。codegen
コマンドを使用し,TensorRTを使用してResNet-50イメージ分類ネットワークで予測を実行する墨西哥人ファイルを生成します。2番目の例では,codegen
コマンドを使用して,ロゴ分類ネットワークにTensorRTを使用することで8ビット整数での予測を実行する墨西哥人ファイルを生成する方法について説明します。
必須
この例では,CUDA墨西哥人を生成します。以下のサードパーティ要件が適用されます。
CUDA®対応NVIDIA GPU®および互換性のあるドライバー。
オプション
スタティックライブラリ,ダイナミックライブラリ,または実行可能ファイルなどの墨西哥人以外のビルドについて,この例では以下の要件も適用されます。
英伟达ツールキット。
英伟达cuDNNとTensorRTライブラリ。
コンパイラおよびライブラリの環境変数。詳細は,サードパーティハードウェア(GPU编码器)と前提条件となる製品の設定(GPU编码器)を参照してください。
関数coder.checkGpuInstall
(GPU编码器)を使用して,この例を実行するのに必要なコンパイラおよびライブラリが正しく設定されていることを検証します。
envCfg = coder.gpuEnvConfig (“主机”);envCfg。DeepLibTarget =“tensorrt”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);
resnet_predict
この例では,DAGネットワークResNet-50を使用して,TensorRTを使用したイメージの分類を表示します。MATLAB® 用の事前学習済み ResNet-50 モデルは、Deep Learning Toolbox の ResNet-50 サポート パッケージに含まれています。このサポート パッケージをダウンロードしてインストールするには、アドオン エクスプローラーを使用します。
関数resnet_predict.m
はResNet-50ネットワークを永続ネットワークオブジェクトに読み込み,以降の予測呼び出しではこの永続オブジェクトを再利用します。
类型(“resnet_predict.m”)
% Copyright 2020 The MathWorks, Inc. function out = resnet_predict(in) %#codegen %第一次调用这个函数时,将构造持久对象并设置。当后续调用该函数时,将重用相同的对象%来调用预测输入,从而避免重新构造和重新加载%网络对象。持久mynet;调用函数resnet50,返回一个DAG网络%的ResNet-50模型。mynet = coder.loadDeepLearningNetwork(“resnet50”、“resnet”);输入输出= mynet.predict(in);
エントリポイント関数resnet_predict
用のCUDAコードを生成するには,墨西哥人ターゲットのGPUコード構成オブジェクトを作成し,ターゲット言語をc++に設定します。関数编码器。DeepLearningConfig
(GPU编码器)を使用してTensorRT
深層学習構成オブジェクトを作成し,それをGPUコード構成オブジェクトのDeepLearningConfig
プロパティに割り当てます。入力サイズ(224224 3)を指定してcodegen
コマンドを実行します。この値はResNet-50ネットワークの入力層サイズに対応します。
cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“tensorrt”);codegen配置cfgresnet_predictarg游戏{1 (224224 3)}报告
代码生成成功:要查看报告,打开('codegen/mex/resnet_predict/html/report.mldatx')。
我= imread (“peppers.png”);Im = imresize(Im, [224,224]);predict_scores = resnet_predict_mex(双(im));%%得到前5个概率分数和他们的标签[val, indx] =排序(predict_scores,“下”);成绩=瓦尔(1:5)* 100;网= resnet50;一会= net.Layers .ClassNames(结束);标签=一会(indx (1:5));
メモリに読み込まれた静的ネットワークオブジェクトをクリアします。
清晰的墨西哥人;
int8の精度で推論を実行するTensorRTコードを生成します。事前学習済みのロゴ分類ネットワークを使用してイメージのロゴを分類します。事前学習済みのLogoNet
ネットワークをダウンロードし,logonet.mat
ファイルとして保存します。このネットワークはMATLABで開発されました。このネットワークはさまざまなライティング条件とカメラの角度の下で32個のロゴを認識できます。このネットワークは単精度の浮動小数点形式で事前学習済みです。
网= getLogonet ();
TensorRTで,浮動小数点で学習済みのネットワークのキャリブレーションを行って8ビット整数精度で推論を計算するには,キャリブレーションデータセットが必要です。データ型をint8に設定し,キャリブレーションデータセットへのパスをDeepLearningConfig
を使用して設定します。logos_dataset
は,対応する分類ラベルによりグループ化されたイメージを含むサブフォルダーです。int8をサポートするには,GPUの计算能力が6.1以上でなければなりません。
解压缩(“logos_dataset.zip”);cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg.GpuConfig.ComputeCapability =“6.1”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“tensorrt”);cfg.DeepLearningConfig.DataType =“int8”;cfg.DeepLearningConfig.DataPath =“logos_dataset”;cfg.DeepLearningConfig.NumCalibrationBatches = 50;codegen配置cfglogonet_predictarg游戏{(227227 3 int8)}报告
代码生成成功:要查看报告,打开('codegen/mex/logonet_predict/html/report.mldatx')。
我= imread (“gpucoder_tensorrt_test.png”);Im = imresize(Im, [227,227]);predict_scores = logonet_predict_mex (int8 (im));%%得到前5个概率分数和他们的标签[val, indx] =排序(predict_scores,“下”);成绩=瓦尔(1:5)* 100;一会= net.Layers .ClassNames(结束);标签=一会(indx (1:5));
メモリに読み込まれた静的ネットワークオブジェクトをクリアします。
清晰的墨西哥人;