主要内容

YOLO v3深層学習を使用したオブジェクト検出用のコ,ド生成

この例では,你只看一次(YOLO)意思v3オブジェクト検出器用のCUDA®墨西哥人を生成する方法を説明します。YOLO v3意思はYOLO v2を意思改良したもので,複数のスケールにおける検出を追加してより小さなオブジェクトを検出できるようになっています。さらに,学習で使用される損失関数は,境界ボックス回帰用の平均二乗誤差と,オブジェクト分類用のバイナリ交差エントロピーに分割されており,検出精度が向上しています。この例で使用するYOLO v3意思ネットワークは,计算机视觉工具箱(TM)の”YOLO v3意思深層学習を使用したオブジェクトの検出”の例を使用して学習させたものです。詳細にいては,YOLO v3深層学習を使用したオブジェクトの検出(计算机视觉工具箱)を参照してください。

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

必須

  • Cuda対応nvidia®gpuおよび互換性のあるドラaapl .バ。

オプション

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

Gpu環境の検証

この例を実行するためのコンパ▪▪ラおよびラ▪▪ブラリが正しく設定されていることを確認するために,関数coder.checkGpuInstallを使用します。

envCfg = code . gpuenvconfig (“主机”);envCfg。DeepLibTarget =“cudnn”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);

YOLO v3ネットワ,ク

この例のYOLO v3ネットワ,クは,squeezenet(深度学习工具箱)がベ,スとなっています。このネットワークは,SqueezeNetの特徴抽出ネットワークを使用し,最後に2つの検出ヘッドが追加されています。2番目の検出ヘッドのサイズは,最初の検出ヘッドの2倍となっているため,小さなオブジェクトをより的確に検出できます。検出するオブジェクトのサaapl . exeズに基づいて,さまざまなサaapl . exeズの検出ヘッドを任意の数で指定できます。YOLO v3ネットワ,クは,学習デ,タを使用して推定されたアンカ,ボックスを使用します。これにより,データセットの種類に対応した初期の事前確率が改善され,ボックスを正確に予測できるようにネットワークに学習させることができます。アンカボックスの詳細にいては,アンカ,ボックスによるオブジェクトの検出(计算机视觉工具箱)を参照してください。

この例のYOLO v3ネットワ,クを次の図に示します。

各検出ヘッドは,境界ボックス座標(x, y,幅高さ),オブジェクトの信頼度,および各アンカーボックスマスクに対するクラスの確率を予測します。そのため,各検出ヘッドにおける最終畳み込み層の出力フィルターの数は,アンカーボックスマスクの数と,アンカーボックスあたりの予測要素の数を乗算したものになります。この検出ヘッドは,ネットワ,クの出力層を構成します。

事前学習済みのYOLO v3ネットワ,ク

この例では,事前学習済みのYOLO v3ネットワ,クを含むyolov3SqueezeNetVehicleExample_21aSPKG.zipファ@ @ルを使用します。ファ▪▪ルのサ▪▪ズは約23 MBです。MathWorksの Web サイトからファイルをダウンロードし、ファイルを解凍します。

fileName = matlab.internal.examples.download万博1manbetxSupportFile(“视觉/数据/”“yolov3SqueezeNetVehicleExample_21aSPKG.zip”);数据= unzip(文件名);matFile = data{1,1};vehicleDetector = load(matFile);net = vehicledetector .detect . network
net = dlnetwork with properties: Layers: [75×1 nnet.cnn.layer.Layer] Connections: [84×2 table] Learnables: [66×3 table] State: [6×3 table] InputNames: {'data'} OutputNames: {'customOutputConv1' 'customOutputConv2'}初始化:1

メモ:事前学習済みの検出器ネットワークは,计算机视觉工具箱YOLO v3意思™模型对象检测サポートパッケージからも利用できます。

この事前学習済みネットワークを使用するには,最初にアドオンエクスプローラーから计算机视觉工具箱YOLO v3意思模型对象检测をインストールしなければなりません。アドオンのンストルの詳細にいては,アドオンの取得と管理を参照してください。

次に,yolov3ObjectDetectorオブジェクトをmatファescルに保存して続行します。次に例を示します。

探测器= yolov3ObjectDetector(“darknet53-coco”);matFile =“pretrainedYOLOv3Detector.mat”;保存(matFile,“探测器”);

エントリポ@ @ント関数yolov3Detect

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

类型(“yolov3Detect.m”
function outImg = yolov3Detect(in,matFile) %版权归MathWorks, Inc. persistent yolov3Obj;if isempty(yolov3Obj) yolov3Obj = code . loaddeeplearningnetwork (matFile);调用检测方法[bboxes,~,labels] = yolov3Obj.detect(in,'Threshold',0.5);将类别标签转换为单元格数组的字符向量标签= cellstr(标签);注释图像中的检测。outImg = insertObjectAnnotation(在,'矩形',盒子,标签);

Cuda mexの生成

エントリポイント関数用のCUDAコードを生成するには,墨西哥人ターゲットのGPUコード構成オブジェクトを作成し,ターゲット言語をc++に設定します。関数编码器。DeepLearningConfigを使用してCuDNN深層学習構成オブジェクトを作成し,それをgpuコ,ド構成オブジェクトのDeepLearningConfigプロパティに割り当てます。入力サ@ @ズを227×227×3に指定してcodegenコマンドを実行します。この値はYOLOv3の入力層サズに対応します。

cfg = code . gpuconfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”);cfg。GenerateReport = true;inputArgs = {ones(227,227,3,“uint8”), coder.Constant (matFile)};codegen配置cfgyolov3Detectarg游戏inputArgs报告
代码生成成功:查看报告

TensorRTターゲット用のCUDA®コードを生成するには,CuDNN構成オブジェクトではなく,TensorRT深層学習構成オブジェクトを使用します。同様に,MKLDNNターゲット用のコードを生成するには,CPUコード構成オブジェクトを作成し,そのDeepLearningConfigプロパティとしてMKLDNN深層学習構成オブジェクトを使用します。

生成されたmexの実行

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

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

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

cont = ~isDone(videoFreader);cont I = step(video ofreader);in = imresize(I,[227,227]);out = yolov3Detect_mex(in,matFile);步骤(depVideoPlayer);%如果视频播放器图形窗口关闭,则退出循环cont = ~isDone(videoFreader) && isOpen(depVideoPlayer);结束

gpucoder_YOLOv3_output.png

参考文献

1.雷蒙,约瑟夫和阿里·法哈蒂。“YOLOv3:渐进式改进。”预印本,2018年4月8日提交。https://arxiv.org/abs/1804.02767。

参考

関数

オブジェクト

関連する例

詳細