このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。
この例では、You Only Look Once (YOLO) v2 オブジェクト検出器用の CUDA® MEX を生成する方法を説明します。YOLO v2 オブジェクトの検出ネットワークは 2 つのサブネットワークで構成されます。特徴抽出ネットワークに検出ネットワークが続きます。この例では、Computer Vision Toolbox™ の "YOLO v2 深層学習を使用したオブジェクト検出" の例で学習させたネットワークのコードを生成します。詳細は、YOLO v2 深層学習を使用したオブジェクトの検出 (Computer Vision Toolbox) を参照してください。この例を変更すれば、"事前学習済みの ONNX YOLO v2 オブジェクト検出器のインポート" の例で Computer Vision Toolbox™ からインポートしたネットワーク用の CUDA® MEX を生成できます。詳細は、事前学習済みの ONNX YOLO v2 オブジェクト検出器のインポート (Computer Vision Toolbox) を参照してください。
Compute Capability 3.2 以上の CUDA 対応 NVIDIA® GPU。
NVIDIA CUDA ツールキットおよびドライバー。
NVIDIA cuDNN ライブラリ。
コンパイラおよびライブラリの環境変数。サポートされているコンパイラおよびライブラリのバージョンの詳細は、サードパーティ製品を参照してください。環境変数の設定は、前提条件となる製品の設定を参照してください。
GPU Coder Interface for Deep Learning Libraries サポート パッケージ。このサポート パッケージをインストールするには、アドオン エクスプローラーを使用します。
関数 coder.checkGpuInstall
を使用し、この例を実行するのに必要なコンパイラおよびライブラリが正しく設定されていることを検証します。
envCfg = coder.gpuEnvConfig('host'); envCfg.DeepLibTarget = 'cudnn'; envCfg.DeepCodegen = 1; envCfg.Quiet = 1; coder.checkGpuInstall(envCfg);
net = getYOLOv2();
Downloading pretrained detector (98 MB)...
DAG ネットワークには、畳み込み層、ReLU 層、バッチ正規化層に加えて、YOLO v2 変換層や YOLO v2 出力層など、150 個の層が含まれています。深層学習ネットワーク アーキテクチャを対話的に可視化して表示するには、関数 analyzeNetwork
(Deep Learning Toolbox) を使用します。
analyzeNetwork(net);
yolov2_detect
エントリポイント関数 yolov2_detect.m は、イメージ入力を受け取り、yolov2ResNet50VehicleExample.mat
ファイルに保存されている深層学習ネットワークを使用して、イメージに対して検出器を実行します。この関数は、ネットワーク オブジェクトを yolov2ResNet50VehicleExample.mat
ファイルから永続変数 yolov2Obj に読み込み、それ以降の検出の呼び出しではこの永続オブジェクトを再利用します。
type('yolov2_detect.m')
function outImg = yolov2_detect(in) % Copyright 2018-2019 The MathWorks, Inc. persistent yolov2Obj; if isempty(yolov2Obj) yolov2Obj = coder.loadDeepLearningNetwork('yolov2ResNet50VehicleExample.mat'); end % pass in input [bboxes,~,labels] = yolov2Obj.detect(in,'Threshold',0.5); % convert categorical labels to cell array of charactor vectors for MATLAB % execution if coder.target('MATLAB') labels = cellstr(labels); end % Annotate detections in the image. outImg = insertObjectAnnotation(in,'rectangle',bboxes,labels);
エントリポイント関数 yolov2_detect.m の CUDA コードを生成するには、MEX ターゲットの GPU コード構成オブジェクトを作成し、ターゲット言語を C++ に設定します。関数 coder.DeepLearningConfig
を使用して CuDNN
深層学習構成オブジェクトを作成し、それを GPU コード構成オブジェクトの DeepLearningConfig
プロパティに割り当てます。入力サイズ [224,224,3] を指定して codegen
コマンドを実行します。この値は YOLOv2 の入力層サイズに対応します。
cfg = coder.gpuConfig('mex'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn'); codegen -config cfg yolov2_detect -args {ones(224,224,3,'uint8')} -report
Code generation successful: To view the report, open('codegen/mex/yolov2_detect/html/report.mldatx').
ビデオ ファイル リーダーを設定し、入力ビデオを読み取ります。ビデオ プレイヤーを作成し、ビデオと出力の検出を表示します。
videoFile = 'highway_lanechange.mp4'; videoFreader = vision.VideoFileReader(videoFile,'VideoOutputDataType','uint8'); depVideoPlayer = vision.DeployableVideoPlayer('Size','Custom','CustomSize',[640 480]);
ビデオ入力をフレームごとに読み取り、検出器を使用してビデオ内の車両を検出します。
cont = ~isDone(videoFreader); while cont I = step(videoFreader); in = imresize(I,[224,224]); out = yolov2_detect_mex(in); step(depVideoPlayer, out); cont = ~isDone(videoFreader) && isOpen(depVideoPlayer); % Exit the loop if the video player figure window is closed end
[1] Redmon, Joseph, and Ali Farhadi. "YOLO9000: Better, Faster, Stronger." 2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). IEEE, 2017.
codegen
| coder.CuDNNConfig
| coder.DeepLearningConfig
| coder.gpuEnvConfig
| coder.loadDeepLearningNetwork