NVIDIA TensorRTラブラリを使用した深層学習予測
この例では,NVIDIA®TensorRT™ライブラリを使用して深層学習アプリケーションのコードを生成する方法を示します。この例では,codegen
コマンドを使用し,TensorRTを使用してロゴ認識分類ネットワークで予測を実行する墨西哥人ファイルを生成します。この例では,codegen
コマンドを使用して,8ビット整数および16ビット浮動小数点予測を実行する墨西哥人ファイルを生成する方法も示します。
サ,ドパ,ティの必要条件
必須
この例ではcuda®mexを生成します。Cuda対応nvidia gpuおよび互換性のあるドラaapl .バ.が必要です。8ビット整数および16ビット浮動小数点の精度モードを使用するには,特定のGPU计算能力を備えていなければなりません。サ,ドパ,ティハ,ドウェアを参照してください。
オプション
静的ライブラリ,動的ライブラリ,実行可能ファイルなどの墨西哥人以外のビルドについては,以下も必要になります。
NVIDIA工具包。
NVIDIA cuDNNとTensorRTラブラリ。
コンパ▪▪ラおよびラ▪▪ブラリの環境変数。詳細にいては,サ,ドパ,ティハ,ドウェアと前提条件となる製品の設定を参照してください。
Gpu環境の検証
関数coder.checkGpuInstall
を使用して,この例を実行するのに必要なコンパイラおよびライブラリが正しく設定されていることを検証します。
envCfg = code . gpuenvconfig (“主机”);envCfg。DeepLibTarget =“tensorrt”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);
事前学習済みネットワ,クのダウンロ,ドと読み込み
この例では,事前学習済みのロゴ認識ネットワ,クを使用して,メ,ジ内のロゴを分類します。MathWorksのWebサescトから事前学習済みのLogoNet
ネットワ、クをダウンロ、ドし、ファ、ルを読み込みます。このネットワ,クはmatlabで開発されたもので,サ,ズは約42 MBです。このネットワクはさまざまなラティング条件とカメラの角度の下で32個のロゴを認識できます。ロゴ認識ネットワクの学習の詳細にいては,ロゴ認識ネットワ,クを参照してください。
net = getLogonet;
エントリポaapl . exeント関数logonet_predict
エントリポ@ @ント関数logonet_predict.m
は,化学键メ,化学键ジ入力を受け取り,LogoNet.mat
ファルに保存されている深層学習ネットワクを使用して,いて予測を実行します。この関数は,LogoNet.mat
からネットワ,クオブジェクトを永続変数logonet
に読み込み,それ以降の予測の呼び出しでこの永続変数を再利用します。
类型(“logonet_predict.m”)
function out = logonet_predict(in) %#codegen %版权所有2017-2022 The MathWorks, Inc. %持久对象logonet用于加载网络对象。在%第一次调用此函数时,将构造持久对象并% setup。当该函数随后被调用时,相同的对象将被%重用,以便对输入调用predict,从而避免重构和%重新加载网络对象。持久logonet;if isempty(logonet) logonet = code . loaddeeplearningnetwork (' logonet .mat','logonet');End out = logonet.predict(in);结束
Mexコ,ド生成の実行
エントリポ@ @ント関数logonet_predict
用のCUDAコードを生成するには,墨西哥人ターゲットのGPUコード構成オブジェクトを作成し,ターゲット言語をc++に設定します。関数编码器。DeepLearningConfig
を使用してTensorRT深層学習構成オブジェクトを作成し,それをGPUコード構成オブジェクトのDeepLearningConfig
プロパティに割り当てます。入力サ@ @ズを227×227×3に指定してcodegen
コマンドを実行します。この値は,ロゴ認識ネットワ,クの入力層サ,ズに対応します。既定では,TensorRTコ,ドを生成すると,32ビット浮動小数点で推論が実行されます。
cfg = code . gpuconfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“tensorrt”);codegen配置cfglogonet_predictarg游戏{code .typeof(single(0),[227 227 3])}报告
代码生成成功:查看报告
テスト▪▪メ▪▪ジに対する予測の実行
入力▪▪メ▪▪ジを読み込みます。入力▪▪メ▪▪ジに対してlogonet_predict_mex
を呼び出します。
Im = imread(“gpucoder_tensorrt_test.png”);Im = imresize(Im, [227,227]);Predict_scores = logonet_predict_mex(单一(im));%得到前5个概率分数和他们的标签[val,indx] = sort(predict_scores,“下”);分数= val(1:5)*100;classnames = net.Layers(end).ClassNames;Top5labels = classnames(indx(1:5));
上位5の分類ラベルを表示します。
outputImage = 0 (227,400,3,“uint8”);为k = 1:3 outputImage(:,174:end,k) = im(:,:,k);结束Scol = 1;麻雀= 20;为k = 1:5 outputImage = insertText(outputImage, [scol, srow],...(char (top5labels (k)),' 'num2str(分数(k),' % 2.2 f '),“%”),...“输入TextColor”,' w ',“字形大小”15岁的“BoxColor”,“黑”);麻雀=麻雀+ 20;结束imshow (outputImage);
読み込まれたmex関数を削除して,gpuメモリを解放します。
清晰的墨西哥人;
8ビット整数予測用のTensorRTコドの生成
int8の精度で推論を実行するTensorRTコ,ドを生成します。
8ビット整数精度の推論計算を備えたNVIDIA TensorRTライブラリを使用してコード生成を行う場合は,次のネットワークもサポートされます。
YOLOv2やSSDなどのオブジェクト検出器ネットワ,ク
回帰ネットワ,クおよびセマンティックセグメンテ,ションネットワ,ク
TensorRTで,浮動小数点で学習済みのネットワークのキャリブレーションを行って8ビット整数精度で推論を計算するには,キャリブレーションデータセットが必要です。デ,タ型をint8
に設定し,キャリブレ,ションデ,タセットへのパスをDeepLearningConfig
を使用して設定します。logos_dataset
は,分類ラベルによりグルプ化されたメジを含むサブフォルダです。int8
をサポートするには,GPUの计算能力が6.1,7.0,またはそれ以上でなければなりません。
セマンティックセグメンテションネットワクでは,キャリブレションデタメジが関数imread
でサポ,トされている形式でなければならないことに注意してください。
解压缩(“logos_dataset.zip”);cfg = code . gpuconfig (墨西哥人的);cfg。TargetLang =“c++”;cfg.GpuConfig.ComputeCapability =“6.1”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“tensorrt”);cfg.DeepLearningConfig.DataType =“int8”;cfg.DeepLearningConfig.DataPath =“logos_dataset”;cfg. deeplearningconfig . numcalibrationbatch = 50;codegen配置cfglogonet_predictarg游戏{code .typeof(int8(0),[227 227 3])}报告
代码生成成功:查看报告
テスト@ @メ@ @ジに対するint8での予測の実行
入力▪▪メ▪▪ジを読み込みます。入力▪▪メ▪▪ジに対してlogonet_predict_mex
を呼び出します。
Im = imread(“gpucoder_tensorrt_test.png”);Im = imresize(Im, [227,227]);Predict_scores = logonet_predict_mex(int8(im));%得到前5个概率分数和他们的标签[val,indx] = sort(predict_scores,“下”);分数= val(1:5)*100;classnames = net.Layers(end).ClassNames;Top5labels = classnames(indx(1:5));
上位5の分類ラベルを表示します。
outputImage = 0 (227,400,3,“uint8”);为k = 1:3 outputImage(:,174:end,k) = im(:,:,k);结束Scol = 1;麻雀= 20;为k = 1:5 outputImage = insertText(outputImage, [scol, srow],...(char (top5labels (k)),' 'num2str(分数(k),' % 2.2 f '),“%”),...“输入TextColor”,' w ',“字形大小”15岁的“BoxColor”,“黑”);麻雀=麻雀+ 20;结束imshow (outputImage);
読み込まれたmex関数を削除して,gpuメモリを解放します。
清晰的墨西哥人;
16ビット浮動小数点予測用のTensorRTコドの生成
fp16
の精度で推論を実行するTensorRTコ,ドを生成します。fp16
をサポートするには,GPUの计算能力が5.3,6.0,6.2,またはそれ以上でなければなりません。
単精度での演算を累積したものを半精度に変換した場合,量子化誤差が発生することに注意してください。詳細にいては,深層ニュ,トラルネットワ,クの量子化を参照してください。
cfg = code . gpuconfig (墨西哥人的);cfg。TargetLang =“c++”;cfg.GpuConfig.ComputeCapability =“5.3”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“tensorrt”);cfg.DeepLearningConfig.DataType =“fp16”;codegen配置cfglogonet_predictarg游戏{code .typeof(half(0),[227 227 3])}报告
代码生成成功:查看报告
テストaapl . exeテストaapl . exeジに対するfp16での予測の実行
入力▪▪メ▪▪ジを読み込みます。入力▪▪メ▪▪ジに対してlogonet_predict_mex
を呼び出します。
Im = imread(“gpucoder_tensorrt_test.png”);Im = imresize(Im, [227,227]);Predict_scores = logonet_predict_mex(一半(im));%得到前5个概率分数和他们的标签[val,indx] = sort(predict_scores,“下”);分数= val(1:5)*100;classnames = net.Layers(end).ClassNames;Top5labels = classnames(indx(1:5));
上位5の分類ラベルを表示します。
outputImage = 0 (227,400,3,“uint8”);为k = 1:3 outputImage(:,174:end,k) = im(:,:,k);结束Scol = 1;麻雀= 20;为k = 1:5 outputImage = insertText(outputImage, [scol, srow],...(char (top5labels (k)),' 'num2str(分数(k),' % 2.2 f '),“%”),...“输入TextColor”,' w ',“字形大小”15岁的“BoxColor”,“黑”);麻雀=麻雀+ 20;结束imshow (outputImage);
読み込まれたmex関数を削除して,gpuメモリを解放します。
清晰的墨西哥人;