このペジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
シングルショットマルチボックス検出器を使用したオブジェクト検出のコドの生成
この例では,SSDネットワーク(ssdObjectDetectorオブジェクト)用のCUDA®コードを生成し,NVIDIA®cuDNNライブラリとTensorRTライブラリを活用する方法を説明します。SSDネットワークは,イメージ内の複数のオブジェクトをシングルショットで検出する,フィードフォワード畳み込みニューラルネットワークに基づいています。SSDネットワクは,2。特徴抽出ネットワクに検出ネットワクが続きます。
この例では,计算机视觉工具箱™の“ssd深層学習を使用したオブジェクト検出”の例で学習させたネットワクのコドを生成します。詳細にいては,SSD盘深層学習を使用したオブジェクト検出を参照してください。“SSD深層学習を使用したオブジェクト検出“の例では,特徴抽出にResNet-50を使用します。検出サブネットワークは特徴抽出ネットワークと比べて小さいCNNであり,少数の畳み込み層とSSDに固有の層で構成されます。
サドパティの必要条件
必須
この例では,cuda mexを生成します。以下のサドパティ要件が適用されます。
Cuda対応nvidia gpuおよび互換性のあるドラ视频处理器バ。
オプション
スタティックライブラリ,ダイナミックライブラリ,または実行可能ファイルなどの墨西哥人以外のビルドについて,この例では以下の要件も適用されます。
Nvidiaルキット。
NVIDIA cuDNNラiphone iphoneブラリ。
コンパ邮箱ラおよびラ邮箱ブラリの環境変数。詳細は,サドパティハドウェア(GPU编码器)と前提条件となる製品の設定(GPU编码器)を参照してください。
Gpu環境の検証
関数coder.checkGpuInstall
(GPU编码器)を使用して,この例を実行するのに必要なコンパイラおよびライブラリが正しく設定されていることを検証します。
envCfg = code . gpuenvconfig (“主机”);envCfg。DeepLibTarget =“cudnn”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);
事前学習済みのDAGNetworkの取得
net = getSSDNW();
DAGネットワークには,畳み込み層,ReLU層,バッチ正規化層に加えて,アンカーボックス層,SSDマージ層,焦点損失層など,180個の層が含まれています。深層学習ネットワクアキテクチャを対話的に可視化して表示するには,関数analyzeNetwork
(深度学习工具箱)を使用します。
analyzeNetwork(净);
エントリポ邮箱ント関数ssdObj_detect
エントリポ邮箱ント関数ssdObj_detect.mは,メ,ssdResNet50VehicleExample_20a.mat
ファopenstackルに保存されている深層学習ネットワopenstackクを使用して,openstackメopenstackジに対して検出器を実行します。この関数は,ネットワクオブジェクトをssdResNet50VehicleExample_20a.mat
ファ邮箱ルから永続変数ssdObjに読み込み,それ以降の検出の呼び出しではこの永続オブジェクトを再利用します。
类型(“ssdObj_detect.m”)
The MathWorks, Inc. persistent ssdObj;if isempty(ssdObj) ssdObj = code . loaddeeplearningnetwork (' ssdresnet50vehicleexample_20 .mat');end %传入input [bboxes,~,labels] = ssdObj.detect(in,'Threshold',0.7);将分类标签转换为字符向量的单元格数组,用于执行标签= cellstr(标签);注释图像中的检测。if ~isempty(labels) outImg = insertObjectAnnotation(in,'rectangle',bboxes,labels);else outImg = in;结束
Mexコド生成の実行
エントリポ邮箱ント関数ssdObj_detect.mのCUDAコードを生成するには,墨西哥人ターゲットのGPUコード構成オブジェクトを作成し,ターゲット言語をc++に設定します。関数编码器。DeepLearningConfig
(GPU编码器)を使用してCuDNN
深層学習構成オブジェクトを作成し,それをgpuコド構成オブジェクトのDeepLearningConfig
プロパティに割り当てます。入力サズ[300,300,3]を指定してcodegen
コマンドを実行します。この値はSSD盘ネットワズに対応します。
cfg = code .gpu config (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”);codegen配置cfgssdObj_detectarg游戏{(300300 3 uint8)}报告
代码生成成功:查看报告
生成されたmexの実行
ビデオファ邮箱ルリ邮箱ダ邮箱を設定し,邮箱入力ビデオを読み取ります。ビデオプレヤを作成し,ビデオと出力の検出を表示します。
videoFile =“highway_lanechange.mp4”;videoFreader =视觉。VideoFileReader (videoFile“VideoOutputDataType”,“uint8”);depVideoPlayer = vision.DeployableVideoPlayer (“大小”,“自定义”,“CustomSize”480年[640]);
ビデオ入力をフレムごとに読み取り,検出器を使用してビデオ内の車両を検出します。
cont = ~isDone(videoFreader);而cont I = step(videoFreader);in = imresize(I,[300,300]);out = ssdObj_detect_mex(in);步骤(depVideoPlayer);%如果视频播放器图形窗口关闭,则退出循环cont = ~isDone(videoFreader) && isOpen(depVideoPlayer);结束
参考文献
[1]刘,魏,德拉戈米尔·安格洛夫,杜米特鲁·埃尔汉,克里斯蒂安·舍格迪,斯科特·里德,程杨富,亚历山大·C.伯格。SSD:单发多盒探测器。第14届欧洲计算机视觉会议,ECCV 2016。施普林格Verlag, 2016。