このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
YOLO v4 深層学習を使用したオブジェクト検出用のコード生成
この例では、You Only Look Once v4 (YOLO v4) オブジェクト検出器用のスタンドアロン CUDA® 実行可能ファイルを生成する方法を示します。この例では、ネットワーク層を少なくした軽量バージョンの YOLO v4 ネットワークを使用します。特徴ピラミッド ネットワークをネックとして使用し、2 つの YOLO v4 検出ヘッドを備えています。ネットワークは、COCO データセットで学習させました。YOLO v4 オブジェクト検出ネットワークの詳細については、YOLO v4 入門 (Computer Vision Toolbox)およびyolov4ObjectDetector
(Computer Vision Toolbox)を参照してください。
サードパーティの必要条件
必須
CUDA 対応 NVIDIA® GPU および互換性のあるドライバー
スタティック ライブラリ、ダイナミック ライブラリ、または実行可能ファイルなどの MEX 以外のビルドについて、この例の要件は次のとおりです。
NVIDIA CUDA Toolkit。
NVIDIA cuDNN ライブラリ。
コンパイラおよびライブラリの環境変数。詳細については、サードパーティ ハードウェアと前提条件となる製品の設定を参照してください。
GPU 環境の検証
この例のためにコンパイラおよびライブラリが正しく設定されていることを確認するために、関数coder.checkGpuInstall
を使用します。
envCfg = coder.gpuEnvConfig('host'); envCfg.DeepLibTarget = 'cudnn'; envCfg.DeepCodegen = 1; envCfg.Quiet = 1; coder.checkGpuInstall(envCfg);
事前学習済みのネットワークの読み込み
この例では、COCO データセットで学習させた事前学習済みの YOLO v4 オブジェクト検出ネットワークを使用します。オブジェクト検出器は、80 種類の異なるオブジェクトを検出して識別することができます。このネットワークを使用するには、アドオン エクスプローラーから Computer Vision Toolbox Model for YOLO v4 Object Detection をダウンロードしてインストールします。アドオンのインストールの詳細については、アドオンの取得と管理を参照してください。
ネットワークの名前を指定し、ネットワークを MAT ファイルに保存します。
name = "tiny-yolov4-coco"; vehicleDetector = yolov4ObjectDetector(name); save('tinyyolov4coco.mat','vehicleDetector'); net = vehicleDetector.Network; disp(vehicleDetector)
yolov4ObjectDetector with properties: Network: [1×1 dlnetwork] AnchorBoxes: {2×1 cell} ClassNames: {80×1 cell} InputSize: [416 416 3] PredictedBoxType: 'axis-aligned' ModelName: 'tiny-yolov4-coco'
テスト用の交通量ビデオのダウンロード
モデルをテストするには、MathWorks® の Web サイトからビデオ ファイルをダウンロードします。ファイルのサイズは約 40 MB です。
if ~exist('./downtown_short.mp4', 'file') url = 'https://www.mathworks.com/supportfiles/gpucoder/media/downtown_short.mp4'; websave('downtown_short.mp4', url); end
エントリポイント関数 tinyyolov4cocoDetect
エントリポイント関数 tinyyolov4Detect
は、tinyyolov4coco.mat
ファイルの深層学習ネットワークを使用して、ビデオ ファイルに対して検出器を実行します。この関数は、ネットワーク オブジェクトを tinyyolov4coco.mat
ファイルから永続変数 yolov4Obj
に読み込み、それ以降の検出呼び出し中に永続オブジェクトを再利用します。次に、ビデオ ファイル リーダーを設定して入力ビデオを読み取り、ビデオ プレーヤーを作成してビデオと出力の検出を表示します。
type('tinyyolov4cocoDetect.m')
function tinyyolov4cocoDetect() %#codegen % Copyright 2022 The MathWorks, Inc. persistent yolov4Obj; if isempty(yolov4Obj) yolov4Obj = coder.loadDeepLearningNetwork('tinyyolov4coco.mat'); end % Read the input video and create a video player videoFile = 'downtown_short.mp4'; videoFreader = vision.VideoFileReader(videoFile, 'VideoOutputDataType', 'uint8'); depVideoPlayer = vision.DeployableVideoPlayer(); cont = ~isDone(videoFreader); while cont I = step(videoFreader); in = imresize(I, [416,416]); % Call to detect method [bboxes, ~, labels] = detect(yolov4Obj, in, Threshold = 0.3); % Convert categorical labels to cell array of charactor vectors labels = cellstr(labels); % Annotate detections in the image. outImg = insertObjectAnnotation(in, 'rectangle', bboxes, labels); step(depVideoPlayer, outImg); % display video cont = ~isDone(videoFreader); % pause(0.05); % adjust frame rate end
実行可能ファイルの生成
エントリポイント関数の CUDA 実行可能コードを生成するには、GPU コード構成オブジェクトを作成し、ターゲット言語を C++ に設定します。関数 coder.DeepLearningConfig
を使用して CuDNN
深層学習構成オブジェクトを作成し、それを GPU コード構成オブジェクトの DeepLearningConfig
プロパティに割り当てます。次に、codegen
コマンドを実行します。
cfg = coder.gpuConfig('exe'); cfg.GenerateExampleMain = 'GenerateCodeAndCompile'; cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn'); codegen -config cfg tinyyolov4cocoDetect -report
Code generation successful: View report
スタンドアロン コードの実行
生成されたスタンドアロン実行可能ファイルを実行すると、検出結果がフレームごとに表示されます。
参考文献
[1] Bochkovskiy, Alexey, Chien-Yao Wang, and Hong-Yuan Mark Liao. “YOLOv4: Optimal Speed and Accuracy of Object Detection.” arXiv, April 22, 2020. http://arxiv.org/abs/2004.10934.
[2] Redmon, Joseph, Santosh Divvala, Ross Girshick, and Ali Farhadi. “You Only Look Once: Unified, Real-Time Object Detection.” In 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 779–88. Las Vegas, NV, USA: IEEE, 2016. https://doi.org/10.1109/CVPR.2016.91.
[3] Lin, Tsung-Yi, Michael Maire, Serge Belongie, James Hays, Pietro Perona, Deva Ramanan, Piotr Dollár, and C. Lawrence Zitnick. “Microsoft COCO: Common Objects in Context.” In Computer Vision – ECCV 2014, edited by David Fleet, Tomas Pajdla, Bernt Schiele, and Tinne Tuytelaars, 740–55. Lecture Notes in Computer Science. Cham: Springer International Publishing, 2014. https://doi.org/10.1007/978-3-319-10602-1_48.
参考
関数
オブジェクト
coder.gpuConfig
|coder.gpuEnvConfig
|coder.CuDNNConfig
|vision.VideoFileReader
(Computer Vision Toolbox) |vision.DeployableVideoPlayer
(Computer Vision Toolbox) |yolov4ObjectDetector
(Computer Vision Toolbox)
関連する例
- YOLO v4 深層学習を使用したオブジェクトの検出 (Computer Vision Toolbox)
- YOLO v2 を使用したオブジェクト検出のコードの生成
- YOLO v3 深層学習ネットワークを使用したオブジェクト検出用のコード生成
詳細
- YOLO v4 入門 (Computer Vision Toolbox)