主要内容

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

SSD盘深層学習を使用したオブジェクト検出

この例では,シングルショット検出器(ssd)に学習させる方法を説明します。

概要

深層学習は,検出タスクに必要な。深層学習を使用したオブジェクト検出には,R-CNN更快,你只看一次(YOLO v2意思),SSDなど,いくつかの方法があります。この例では,関数trainSSDObjectDetectorを使用してSSD盘車両検出器に学習させます。詳細にいては,オブジェクトの検出(计算机视觉工具箱)を参照してください。

事前学習済みの検出器のダウンロ,ド

学習の完了を待たなくて済むように,事前学習済みの検出器をダウンロ,ドします。検出器に学習させる場合は,変数doTrainingを真实に設定します。

doTraining = false;如果~doTraining && ~exist(“ssdResNet50VehicleExample_20a.mat”“文件”) disp (“下载预训练的检测器(44 MB)…”);pretrainedURL =“//www.tianjin-qmedu.com/万博1manbetxsupportfiles/vision/data/ssdResNet50VehicleExample_20a.mat”;websave (“ssdResNet50VehicleExample_20a.mat”, pretrainedURL);结束
下载预训练的检测器(44 MB)…

デ,タセットの読み込み

この例では,295枚の。これらのイメージの多くは,加州理工学院の汽车1999データセットおよび汽车2001データセットからのものですの(加州理工学院计算愿景网站サ通讯录トで入手可能)。彼得罗·佩罗纳氏によって作成されたもので,許可を得て使用しています。各メジには,1または2個のラベル付けされた車両ンスタンスが含まれています。小さなデータセットはSSDの学習手順を調べるうえで役立ちますが,実際にロバストな検出器に学習させるにはラベル付けされたイメージがより多く必要になります。

解压缩vehicleDatasetImages.zip数据=负载(“vehicleDatasetGroundTruth.mat”);vehicleDataset = data.vehicleDataset;

学習デ,タはテ,ブルに保存されています。最初の列には,。残りの列には,車両のROIラベルが含まれています。デ,タの最初の数行を表示します。

vehicleDataset (1:4,:)
ans =4×2表imageFilename车辆  _________________________________ _________________ {' vehicleImages / image_00001.jpg '} {[220 136 35 28]} {' vehicleImages / image_00002.jpg '} {[45 175 126 61]} {' vehicleImages / image_00003.jpg '} {[45 108 120 33]} {' vehicleImages / image_00004.jpg '} {[124 112 38 36]}

データセットを,検出器を学習させるための学習セットと検出器を評価するためのテストセットに分割します。デタの60%を学習用に選択します。残りを評価用に使用します。

rng (0);shuffledIndices = randperm(height(vehicleDataset));idx =地板(0.6 *长度(shuffledIndices));trainingData = vehicleDataset(shuffledIndices(1:idx),:);testData = vehicleDataset(shuffledIndices(idx+1:end),:);

imageDatastoreおよびboxLabelDatastoreを使用して,学習および評価中にメジとラベルデタを読み込みます。

imdsTrain = imageDatastore(trainingData{:,“imageFilename”});bldsTrain = boxLabelDatastore(trainingData(:,“汽车”));imdsTest = imageDatastore(testData{:,“imageFilename”});bldsTest = boxLabelDatastore(testData(:,“汽车”));

trainingData = combine(imdsTrain,bldsTrain);testData = combine(imdsTest, bldsTest);

学習▪▪メ▪ジとボックスラベルのう▪の1▪▪を表示します。

data = read(trainingData);I =数据{1};Bbox =数据{2};annotatedImage = insertShape(I,“矩形”, bbox);annotatedImage = imresize(annotatedImage,2);图imshow (annotatedImage)

SSD盘オブジェクト検出ネットワ,クの作成

SSDオブジェクト検出ネットワークは,2つのサブネットワークをもつと考えることができます。特徴抽出ネットワ,クに検出ネットワ,クが続きます。

通常,特徴抽出ネットワ,クは事前学習済みのCNNです(詳細にいては事前学習済みの深層ニュ,ラルネットワ,クを参照)。この例では特徴抽出にResNet-50を使用します。用途の要件によって,MobileNet v2やResNet-18など,その他の事前学習済みのネットワークも使用できます。検出サブネットワークは特徴抽出ネットワークと比べて小さいCNNであり,少数の畳み込み層とSSDに固有の層で構成されます。

関数ssdLayersを使用して,事前学習済みのResNet-50ネットワークをSSDオブジェクト検出ネットワークに自動的に変更します。ssdLayersでは,SSDネットワークをパラメーター化するためのいくつかの入力(ネットワーク入力サイズやクラス数など)を指定する必要があります。ネットワーク入力サイズを選択する際には,学習イメージのサイズ,および選択したサイズでのデータの処理によって発生する計算コストを考慮します。。ただし,この例を実行する計算コストを削減するため,ネットワーク入力サイズを[300 300 3]に指定します。学習中、trainSSDObjectDetectorによって,ネットワク入力サズに合わせて学習メジのサズが自動的に変更されます。

inputSize = [300 300 3];

検出するオブジェクトクラスの数を定義します。

numClasses = width(vehicleDataset)-1;

SSD盘オブジェクト検出ネットワ,クを作成します。

lgraph = ssdLayers(inputSize, numClasses,“resnet50”);

深度学习工具箱™からanalyzeNetworkまたはdeepNetworkDesignerを使用してネットワ,クを可視化できます。カスタムSSD盘ネットワ,クを層単位で作成することもできます。詳細にいては,SSD盘オブジェクト検出ネットワ,クの作成(计算机视觉工具箱)を参照してください。

デ,タ拡張

デ,タ拡張は,学習中に元のデ,タをランダムに変換してネットワ,クの精度を高めるために使用されます。デ,タ拡張を使用すると、ラベル付き学習サンプルの数を実際に増やさずに、学習データをさらに多様化させることができます。变换を使用して,以下のように学習デ,タを拡張します。

  • メ,ジおよび関連するボックスラベルを水平方向にランダムに反転。

デ,タ拡張はテストデ,タには適用されないことに注意してください。理想的には,テストデータは元のデータを代表するもので,バイアスのない評価を行うために変更なしで使用されなければなりません。

augmentedTrainingData = transform(trainingData,@augmentData);

同じメジを繰り返し読み取り,拡張された学習デタを可視化します。

augmentedData = cell(4,1);k = 1:4 data = read(augmentedTrainingData);augmentedData{k} = insertShape(数据{1},“矩形”、数据{2});重置(augmentedTrainingData);结束图蒙太奇(augmentedData,“BorderSize”, 10)

学習デ,タの前処理

拡張された学習デ,タを前処理して学習用に準備します。

preprocessedTrainingData = transform(augmentedTrainingData,@(data)preprocessData(data,inputSize));

前処理された学習デ,タを読み取ります。

data = read(preprocessedTrainingData);

メ,ジと境界ボックスを表示します。

I =数据{1};Bbox =数据{2};annotatedImage = insertShape(I,“矩形”, bbox);annotatedImage = imresize(annotatedImage,2);图imshow (annotatedImage)

SSD盘オブジェクト検出器の学習

trainingOptionsを使用してネットワ,ク学習オプションを指定します。“CheckpointPath”を一時的な場所に設定します。これにより,学習プロセス中に部分的に学習させた検出器を保存できます。停電やシステム障害などで学習が中断された場合に,保存したチェックポ。

选项= trainingOptions(“个”...“MiniBatchSize”, 16岁,...“InitialLearnRate”1 e 1,...“LearnRateSchedule”“分段”...“LearnRateDropPeriod”30岁的...“LearnRateDropFactor”, 0.8,...“MaxEpochs”, 300,...“VerboseFrequency”, 50岁,...“CheckpointPath”tempdir,...“洗牌”“every-epoch”);

doTrainingが真の場合,関数trainSSDObjectDetector(计算机视觉工具箱)を使用して,ssdオブジェクト検出器に学習させます。そうでない場合は,事前学習済みのネットワ,クを読み込みます。

如果doTraining培训SSD设备检测器。[detector, info] = trainSSDObjectDetector(preprocsedtrainingdata,lgraph,options);其他的为示例加载预训练的检测器。预训练=负荷(“ssdResNet50VehicleExample_20a.mat”);检测器=预训练的。结束

この例は,12 GBメモリ搭載のNVIDIA™Titan X GPUで検証済みです。Gpuのメモリがこれより少ない場合,メモリ不足が発生する可能性があります。これが発生した場合は,関数trainingOptionsを使用して”MiniBatchSizeを減らします。この設定を使用してこのネットワクに学習させるのに約2時間かかりました。学習所要時間は使用するハ,ドウェアによって異なります。

迅速なテストとして,1のテスト。

data = read(testData);I = data{1,1};I = imresize(I,inputSize(1:2));[bboxes,scores] = detect(检测器,I,“阈值”, 0.4);

結果を表示します。

I = insertObjectAnnotation(I,“矩形”bboxes,分数);图imshow(我)

テストセットを使用した検出器の評価

大規模なメジセットで学習済みのオブジェクト検出器を評価し,パフォマンスを測定します。计算机视觉工具箱™には,平均適合率(evaluateDetectionPrecision)や対数平均ミス率(evaluateDetectionMissRate)などの一般的なメトリクスを測定するオブジェクト検出器の評価関数が用意されています。この例では,平均適合率メトリクスを使用してパフォ,マンスを評価します。平均適合率は、検出器が正しい分類を実行できること(精度)と検出器がすべての関連オブジェクトを検出できること(回忆)を示す単一の数値です。

学習デ,タと同じ前処理変換をテストデ,タに適用します。デ,タ拡張はテスト データには適用されないことに注意してください。テスト データは元のデータを代表するもので、バイアスのない評価を行うために変更なしで使用されなければなりません。

preprocessedTestData = transform(testData,@(data)preprocessData(data,inputSize));

すべてのテスト▪▪メ▪▪ジに対して検出器を実行します。

detectionResults = detect(检测器,preprocsedtestdata,“阈值”, 0.4);

平均適合率メトリクスを使用してオブジェクト検出器を評価します。

[ap,recall,precision] = evaluateDetectionPrecision(detectionResults, preprocessedTestData);

適合率/再現率(pr)の曲線は,さまざまなレベルの再現率における検出器の適合率を示しています。すべてのレベルの再現率で適合率が1になるのが理想的です。より多くのデ,タを使用すると平均適合率を向上できますが,学習に必要な時間が長くなる場合があります。Pr曲線をプロットします。

图(召回率,精度)“回忆”) ylabel (“精度”网格)标题(sprintf ('平均精度= %.2f'据美联社)),

コ,ド生成

検出器に学習させて評価したら,GPU Coder™を使用してssdObjectDetectorのコ,ドを生成できます。詳細にいては,シングルショットマルチボックス検出器を使用したオブジェクト検出のコ,ドの生成(计算机视觉工具箱)の例を参照してください。

サポ,ト関数

函数B = augmentData(A)应用随机水平翻转,随机X/Y缩放。盒子%缩放到边界外,如果重叠大于0.25则被剪切。同时,%抖动图像颜色。B = cell(size(A));I = a {1};sz = size(I);如果==3 && sz(3) ==3 I = jitterColorHSV(I,...“对比”, 0.2,...“颜色”0,...“饱和”, 0.1,...“亮度”, 0.2);结束%随机翻转和缩放图像。tform = randomAffine2d(“XReflection”,真的,“规模”1.1 [1]);rout = affineOutputView(sz,tform,“BoundsStyle”“CenterOutput”);B{1} = imwarp(I,tform,“OutputView”,溃败);如果需要,消毒盒子。。A{2} = helperSanitizeBoxes(A{2}, sz);对方框应用相同的变换。[B{2}, indexes] = bboxwarp(A{2},tform,rout,“OverlapThreshold”, 0.25);B{3} = A{3}(指数);%仅当所有方框通过扭曲删除时才返回原始数据。如果isempty(indexes) B = A;结束结束函数data = preprocessData(data,targetSize)将图像和包围框的大小调整为targetSize。Sz = size(data{1},[1 2]);scale = targetSize(1:2)./sz;数据{1}= imresize(数据{1},targetSize(1:2));如果需要,消毒盒子。。data{2} = helperSanitizeBoxes(data{2}, sz);%调整盒子大小。数据{2}= bboxresize(数据{2},规模);结束

参考文献

[1]刘,魏,Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed,程阳,Alexander C. Berg。“SSD:单发多盒探测器。”第14届欧洲计算机视觉会议,ECCV 2016。施普林格Verlag, 2016。

参考

アプリ

関数

オブジェクト

関連するトピック