このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
YOLO v2 と Intel MKL-DNN を使用したオブジェクト検出用 C++ コードの生成
この例では、Intel® プロセッサで YOLO v2 オブジェクト検出ネットワーク用の C++ コードを生成する方法を説明します。生成されたコードは、Intel Math Kernel Library for Deep Neural Networks (MKL-DNN) を使用します。
詳細については、YOLO v2 深層学習を使用したオブジェクトの検出 (Computer Vision Toolbox)を参照してください。
必要条件
Intel Math Kernel Library for Deep Neural Networks (MKL-DNN)
MKLDNN CPU Support を参照して MKL-DNN ライブラリをサポートするプロセッサのリストの確認
MATLAB® Coder™ (C++ コード生成用)
MATLAB Coder Interface for Deep Learning サポート パッケージ
Deep Learning Toolbox™ (
DAGNetwork
オブジェクトを使用するため)ビデオ I/O 操作のための Computer Vision Toolbox™
サポートされているコンパイラおよびライブラリのバージョンの詳細は、サードパーティ ライブラリを使用するコードの生成 (MATLAB Coder)を参照してください。
この例は、Linux®、Windows®、および macOS のプラットフォームでサポートされていますが、MATLAB Online ではサポートされていません。
事前学習済みの DAGNetwork
オブジェクトの取得
DAG ネットワークには、畳み込み層、ReLU 層、バッチ正規化層に加えて、YOLO v2 変換層や YOLO v2 出力層など、150 個の層が含まれています。
net = getYOLOv2();
net.Layers
コマンドを使用して、ネットワークのすべての層を表示します。
net.Layers
関数 yolov2_detection
のコードの生成
この例に添付されている関数 yolov2_detection
は、イメージ入力を受け取り、yolov2ResNet50VehicleExample.mat
に保存されているネットワークを使用してイメージに対して検出器を実行します。この関数は、yolov2ResNet50VehicleExample.mat
からネットワーク オブジェクトを永続変数 yolov2Obj
に読み込みます。関数のそれ以降の呼び出しでは、永続オブジェクトを再利用して検出が行われます。
type('yolov2_detection.m')
function outImg = yolov2_detection(in) % Copyright 2018-2019 The MathWorks, Inc. % A persistent object yolov2Obj is used to load the YOLOv2ObjectDetector object. % At the first call to this function, the persistent object is constructed and % set up. Subsequent calls to the function reuse the same object to call detection % on inputs, thus avoiding having to reconstruct and reload the % network object. persistent yolov2Obj; if isempty(yolov2Obj) yolov2Obj = coder.loadDeepLearningNetwork('yolov2ResNet50VehicleExample.mat'); end % pass in input [bboxes,~,labels] = yolov2Obj.detect(in,'Threshold',0.5); outImg = in; % convert categorical labels to cell array of character vectors labels = cellstr(labels); if ~(isempty(bboxes) && isempty(labels)) % Annotate detections in the image. outImg = insertObjectAnnotation(in,'rectangle',bboxes,labels); end
コードを生成するには、MEX ターゲットのコード構成オブジェクトを作成し、ターゲット言語を C++ に設定します。関数 coder.DeepLearningConfig
を使用して MKL-DNN 深層学習の構成オブジェクトを作成します。このオブジェクトをコード構成オブジェクトの DeepLearningConfig
プロパティに割り当てます。codegen
コマンドへの引数として入力サイズを指定します。この例では、YOLO v2 ネットワークの入力層のサイズは [224,224,3]
です。
cfg = coder.config('mex'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn'); codegen -config cfg yolov2_detection -args {ones(224,224,3,'uint8')} -report
Code generation successful: To view the report, open('codegen\mex\yolov2_detection\html\report.mldatx')
サンプル入力に対する生成された MEX 関数の実行
ビデオ ファイル リーダーを設定し、サンプルの入力ビデオ highway_lanechange.mp4
を読み取ります。ビデオ プレーヤーを作成し、ビデオと出力の検出を表示します。
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_detection_mex(in); 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." In 2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 6517–25. Honolulu, HI: IEEE, 2017.
参考
coder.DeepLearningConfig
(MATLAB Coder) | coder.hardware
(MATLAB Coder)
関連するトピック
- Intel ターゲットにおける異なるバッチ サイズの深層学習コードの生成 (MATLAB Coder)
- MATLAB Coder を使用した深層学習コード生成のワークフロー (MATLAB Coder)