主要内容

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

シングルショットマルチボックス検出器を使用したオブジェクト検出のコードの生成

この例では,SSDネットワーク(ssdObjectDetectorオブジェクト)用のCUDA®コードを生成し,NVIDIA®cuDNNライブラリとTensorRTライブラリを活用する方法を説明します。SSDネットワークは,イメージ内の複数のオブジェクトをシングルショットで検出する,フィードフォワード畳み込みニューラルネットワークに基づいています。SSDネットワークは2つのサブネットワークをもつと考えることができます。特徴抽出ネットワークに検出ネットワークが続きます。

この例では、计算机视觉工具箱™ の“固态硬盘深層学習を使用したオブジェクト検出" の例で学習させたネットワークのコードを生成します。詳細については、固态硬盘深層学習を使用したオブジェクト検出(计算机视觉工具箱)を参照してください。“固态硬盘深層学習を使用したオブジェクト検出" の例では、特徴抽出に ResNet-50を使用します。検出サブネットワークは特徴抽出ネットワークと比べて小さい 有线电视新闻网であり、少数の畳み込み層と 固态硬盘に固有の層で構成されます。

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

必須

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

  • CUDA®対応NVIDIA GPU®および互換性のあるドライバー。

オプション

スタティック ライブラリ、ダイナミック ライブラリ、または実行可能ファイルなどの 墨西哥以外のビルドについて、この例では以下の要件も適用されます。

GPU環境の検証

関数coder.checkGpuInstallを使用し,この例を実行するのに必要なコンパイラおよびライブラリが正しく設定されていることを検証します。

envCfg = coder.gpuEnvConfig (“主持人”);envCfg。DeepLibTarget =“cudnn”;envCfg.DeepCodegen=1;envCfg.Quiet=1;coder.checkGpuInstall(envCfg);

事前学習済みのDAGNetworkの取得

网= getSSDNW ();
下载预训练检测器(44mb)…

DAGネットワークには,畳み込み層,ReLU層,バッチ正規化層に加えて,アンカーボックス層,SSDマージ層,焦点損失層など,180個の層が含まれています。深層学習ネットワークアーキテクチャを対話的に可視化して表示するには,関数analyzeNetwork(深度学习工具箱)を使用します。

analyzeNetwork(净);

エントリポイント関数ssdObj_detect

エントリポイント関数ssdObj_detect.mは,イメージ入力を受け取り,ssdResNet50VehicleExample_20a.matファイルに保存されている深層学習ネットワークを使用して,イメージに対して検出器を実行します。この関数は,ネットワークオブジェクトをssdResNet50VehicleExample_20a.matファイルから永続変数ssdObjに読み込み,それ以降の検出の呼び出しではこの永続オブジェクトを再利用します。

类型(“ssdObj_detect.m”
function outImg = ssdObj_detect(in) % Copyright 2019-2020 The MathWorks, Inc. persistent ssdObj;if isempty(ssdObj) ssdObj = code . loaddeeplearningnetwork ('ssdResNet50VehicleExample_20a.mat');end % Pass in input [bboxes,~,labels] = ssdObj.detect(in,'Threshold',0.7);%将类别标签转换为字符向量的单元格数组%执行标签= cellstr(标签);%在图像中注释检测。if ~isempty(labels) outImg = insertObjectAnnotation(in,'rectangle',bboxes,labels);else outtimg = in;结束

墨西哥コード生成の実行

エントリポイント関数ssdObj_detect.mの 库达コードを生成するには、墨西哥ターゲットの GPUコード構成オブジェクトを作成し、ターゲット言語を C++に設定します。関数coder.DeepLearningConfigを使用してCuDNN深層学習構成オブジェクトを作成し,それをGPUコード構成オブジェクトの深度学习配置プロパティに割り当てます。入力サイズ [300,300,3] を指定してcodegenコマンドを実行します。この値は 固态硬盘ネットワークの入力層サイズに対応します。

cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”);codegen配置cfgssdObj_detectarg游戏{(300300 3 uint8)}报告
代码生成成功:要查看报告,打开('codegen/mex/ssdObj_detect/html/report.mldatx')。

生成された 墨西哥の実行

ビデオファイルリーダーを設定し,入力ビデオを読み取ります。ビデオプレイヤーを作成し,ビデオと出力の検出を表示します。

视频文件=“highway_lanechange.mp4”;videoFreader =愿景。VideoFileReader (videoFile“VideoOutputDataType”“uint8”);depVideoPlayer =愿景。DeployableVideoPlayer (“大小”“自定义”“CustomSize”480年[640]);

ビデオ入力をフレームごとに読み取り,検出器を使用してビデオ内の車両を検出します。

续= ~结束(videoFreader);虽然cont I = step(videoFreader);在= imresize(我,[300300]);= ssdObj_detect_mex(的);步骤(depVideoPlayer);= ~isDone(videoFreader) && isOpen(depVideoPlayer);%如果视频播放器图形窗口关闭,退出循环结束

参考文献

[1] Liu, Wei, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng Yang Fu, Alexander C. Berg。“SSD:单次发射多盒探测器。”第十四届欧洲计算机视觉大会,ECCV 2016。施普林格1 - 2016。

参考

関数

オブジェクト

関連するトピック