主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

英伟达TensorRTを使用した深層学習での予測

この例では,NVIDIA TensorRT™ライブラリを使用した深層学習アプリケーションのコード生成について説明します。codegenコマンドを使用し,TensorRTを使用してResNet-50イメージ分類ネットワークで予測を実行する墨西哥人ファイルを生成します。2番目の例では,codegenコマンドを使用して,ロゴ分類ネットワークにTensorRTを使用することで8ビット整数での予測を実行する墨西哥人ファイルを生成する方法について説明します。

サードパーティの必要条件

必須

この例では,CUDA墨西哥人を生成します。以下のサードパーティ要件が適用されます。

  • CUDA®対応NVIDIA 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コードの生成

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')。

テストイメージに対するint8での予測の実行

我= 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));

メモリに読み込まれた静的ネットワークオブジェクトをクリアします。

清晰的墨西哥人