メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

objectDetectorTrainingData

オブジェクト検出器用の学習データの作成

説明

[imds,blds] = objectDetectorTrainingData(gTruth) は、指定されたグラウンド トゥルースからイメージ データストアとボックス ラベル データストアの学習データを作成します。この関数は、1 つ以上の注釈付きオブジェクトを含むイメージのみをグラウンド トゥルース入力から選択します。

combine(imds,blds) を使用してイメージとボックス ラベルのデータストアを統合し、学習に必要なデータストアを作成することができます。統合されたデータストアは、trainACFObjectDetectortrainYOLOv2ObjectDetectortrainYOLOv3ObjectDetector、および trainYOLOv4ObjectDetector などの学習関数で使用します。

この関数は、複数の MATLAB® ワーカーを使用する並列計算をサポートします。Computer Vision Toolbox の基本設定 ダイアログを使用して並列計算を有効にします。

[___,arrds] = objectDetectorTrainingData(gTruth) は、ラベルに関連付けられた属性とサブラベルを含むデータストア arrds も返します。

trainingDataTable = objectDetectorTrainingData(gTruth) は、指定されたグラウンド トゥルースから学習データの table を返します。gTruth は、groundTruth オブジェクトの配列です。table は、Computer Vision Toolbox™ の学習関数を使用したオブジェクト検出器の学習に使用できます。

[___] = objectDetectorTrainingData(gTruth,Name=Value) は、前の構文にある引数の任意の組み合わせに加えて、名前と値の引数を 1 つ以上使用してオプションを指定します。たとえば、Verbose=True は、ワークスペース環境への表示を有効にします。

gTruthgroundTruth オブジェクトを、ビデオ ファイル、カスタム データ ソース、または異なるカスタム読み取り関数を指定した imageDatastore オブジェクトを使用して作成する場合、任意の組み合わせの名前と値の引数を指定できます。イメージ コレクションまたはイメージ シーケンス データ ソースから groundTruth オブジェクトを作成した場合は、SamplingFactorLabelType の名前と値の引数のみ指定できます。

すべて折りたたむ

YOLO v2 ネットワークに基づいて車両検出器に学習させます。

学習イメージを含むフォルダーをワークスペースに追加します。

imageDir = fullfile(matlabroot,"toolbox","vision","visiondata","vehicles");
addpath(imageDir);

車両のグラウンド トゥルース データを読み込みます。

data = load("vehicleTrainingGroundTruth.mat");
gTruth = data.vehicleTrainingGroundTruth;

グラウンド トゥルース オブジェクトを使用して、イメージ データストアとボックス ラベル データストアを作成します。

[imds,bxds] = objectDetectorTrainingData(gTruth);

データストアを統合します。

cds = combine(imds,bxds);

学習用の dlnetwork オブジェクトを含む検出器を読み込みます。

load("yolov2VehicleDetectorNet.mat","net");
classes = "vehicle";
aboxes = [8 8; 32 48; 40 24; 72 48];
detector = yolov2ObjectDetector(net,classes,aboxes);

学習オプションを設定します。

options = trainingOptions("sgdm", ...
       InitialLearnRate=0.001, ...
       Verbose=true, ...
       MiniBatchSize=16, ...
       MaxEpochs=30, ...
       Shuffle="every-epoch", ...
       VerboseFrequency=10); 

検出器に学習させます。

[detector,info] = trainYOLOv2ObjectDetector(cds,detector,options);
*************************************************************************
Training a YOLO v2 Object Detector for the following object classes:

* vehicle

Training on single CPU.
|========================================================================================|
|  Epoch  |  Iteration  |  Time Elapsed  |  Mini-batch  |  Mini-batch  |  Base Learning  |
|         |             |   (hh:mm:ss)   |     RMSE     |     Loss     |      Rate       |
|========================================================================================|
|       1 |           1 |       00:00:00 |         7.17 |         51.4 |          0.0010 |
|       1 |          10 |       00:00:04 |         1.78 |          3.2 |          0.0010 |
|       2 |          20 |       00:00:07 |         1.57 |          2.5 |          0.0010 |
|       2 |          30 |       00:00:11 |         1.40 |          1.9 |          0.0010 |
|       3 |          40 |       00:00:16 |         1.11 |          1.2 |          0.0010 |
|       3 |          50 |       00:00:19 |         1.28 |          1.6 |          0.0010 |
|       4 |          60 |       00:00:23 |         0.96 |          0.9 |          0.0010 |
|       4 |          70 |       00:00:27 |         0.90 |          0.8 |          0.0010 |
|       5 |          80 |       00:00:31 |         0.79 |          0.6 |          0.0010 |
|       5 |          90 |       00:00:36 |         0.83 |          0.7 |          0.0010 |
|       6 |         100 |       00:00:40 |         0.84 |          0.7 |          0.0010 |
|       7 |         110 |       00:00:44 |         0.57 |          0.3 |          0.0010 |
|       7 |         120 |       00:00:49 |         0.62 |          0.4 |          0.0010 |
|       8 |         130 |       00:00:52 |         0.59 |          0.3 |          0.0010 |
|       8 |         140 |       00:00:56 |         0.56 |          0.3 |          0.0010 |
|       9 |         150 |       00:01:01 |         0.54 |          0.3 |          0.0010 |
|       9 |         160 |       00:01:05 |         0.54 |          0.3 |          0.0010 |
|      10 |         170 |       00:01:09 |         0.62 |          0.4 |          0.0010 |
|      10 |         180 |       00:01:12 |         0.53 |          0.3 |          0.0010 |
|      11 |         190 |       00:01:16 |         0.58 |          0.3 |          0.0010 |
|      12 |         200 |       00:01:19 |         0.45 |          0.2 |          0.0010 |
|      12 |         210 |       00:01:22 |         0.52 |          0.3 |          0.0010 |
|      13 |         220 |       00:01:26 |         0.53 |          0.3 |          0.0010 |
|      13 |         230 |       00:01:29 |         0.49 |          0.2 |          0.0010 |
|      14 |         240 |       00:01:33 |         0.50 |          0.2 |          0.0010 |
|      14 |         250 |       00:01:36 |         0.44 |          0.2 |          0.0010 |
|      15 |         260 |       00:01:40 |         0.50 |          0.3 |          0.0010 |
|      15 |         270 |       00:01:44 |         0.56 |          0.3 |          0.0010 |
|      16 |         280 |       00:01:47 |         0.55 |          0.3 |          0.0010 |
|      17 |         290 |       00:01:50 |         0.46 |          0.2 |          0.0010 |
|      17 |         300 |       00:01:54 |         0.40 |          0.2 |          0.0010 |
|      18 |         310 |       00:01:57 |         0.50 |          0.3 |          0.0010 |
|      18 |         320 |       00:02:01 |         0.51 |          0.3 |          0.0010 |
|      19 |         330 |       00:02:05 |         0.44 |          0.2 |          0.0010 |
|      19 |         340 |       00:02:12 |         0.47 |          0.2 |          0.0010 |
|      20 |         350 |       00:02:20 |         0.43 |          0.2 |          0.0010 |
|      20 |         360 |       00:02:24 |         0.51 |          0.3 |          0.0010 |
|      21 |         370 |       00:02:27 |         0.46 |          0.2 |          0.0010 |
|      22 |         380 |       00:02:31 |         0.49 |          0.2 |          0.0010 |
|      22 |         390 |       00:02:34 |         0.53 |          0.3 |          0.0010 |
|      23 |         400 |       00:02:38 |         0.49 |          0.2 |          0.0010 |
|      23 |         410 |       00:02:42 |         0.38 |          0.1 |          0.0010 |
|      24 |         420 |       00:02:46 |         0.48 |          0.2 |          0.0010 |
|      24 |         430 |       00:02:50 |         0.40 |          0.2 |          0.0010 |
|      25 |         440 |       00:02:56 |         0.44 |          0.2 |          0.0010 |
|      25 |         450 |       00:03:02 |         0.41 |          0.2 |          0.0010 |
|      26 |         460 |       00:03:08 |         0.46 |          0.2 |          0.0010 |
|      27 |         470 |       00:03:12 |         0.51 |          0.3 |          0.0010 |
|      27 |         480 |       00:03:16 |         0.49 |          0.2 |          0.0010 |
|      28 |         490 |       00:03:20 |         0.48 |          0.2 |          0.0010 |
|      28 |         500 |       00:03:24 |         0.44 |          0.2 |          0.0010 |
|      29 |         510 |       00:03:28 |         0.27 |      7.3e-02 |          0.0010 |
|      29 |         520 |       00:03:31 |         0.37 |          0.1 |          0.0010 |
|      30 |         530 |       00:03:35 |         0.32 |          0.1 |          0.0010 |
|      30 |         540 |       00:03:38 |         0.33 |          0.1 |          0.0010 |
|========================================================================================|
Training finished: Max epochs completed.
Detector training complete.
*************************************************************************

テスト イメージを読み取ります。

I = imread("detectcars.png");

検出器を実行します。

[bboxes,scores] = detect(detector,I);

結果を表示します。

if(~isempty(bboxes))
  I = insertObjectAnnotation(I,"rectangle",bboxes,scores);
end
figure
imshow(I)

Figure contains an axes object. The hidden axes object contains an object of type image.

学習データを使用して、ACF ベースの一時停止標識用オブジェクト検出器に学習させます。

イメージを含むフォルダーを MATLAB® パスに追加します。

imageDir = fullfile(matlabroot, 'toolbox', 'vision', 'visiondata', 'stopSignImages');
addpath(imageDir);

グラウンド トゥルース データを読み込みます。これには、一時停止標識と自動車のデータが含まれます。

load('stopSignsAndCarsGroundTruth.mat','stopSignsAndCarsGroundTruth')

ラベルの定義を表示して、グラウンド トゥルースに含まれるラベル タイプを確認します。

stopSignsAndCarsGroundTruth.LabelDefinitions
ans=3×3 table
        Name          Type        Group  
    ____________    _________    ________

    {'stopSign'}    Rectangle    {'None'}
    {'carRear' }    Rectangle    {'None'}
    {'carFront'}    Rectangle    {'None'}

学習用の一時停止標識データを選択します。

stopSignGroundTruth = selectLabelsByName(stopSignsAndCarsGroundTruth,'stopSign');

一時停止標識オブジェクト検出器のための学習データを作成します。

trainingData = objectDetectorTrainingData(stopSignGroundTruth);
summary(trainingData)
trainingData: 41×2 table

Variables:

    imageFilename: cell array of character vectors
    stopSign: cell

Statistics for applicable variables:

                     NumMissing

    imageFilename        0     
    stopSign             0     

ACF ベースのオブジェクト検出器に学習させます。

acfDetector = trainACFObjectDetector(trainingData,'NegativeSamplesFactor',2);
ACF Object Detector Training
The training will take 4 stages. The model size is 34x31.
Sample positive examples(~100% Completed)
Compute approximation coefficients...Completed.
Compute aggregated channel features...Completed.
--------------------------------------------
Stage 1:
Sample negative examples(~100% Completed)
Compute aggregated channel features...Completed.
Train classifier with 42 positive examples and 84 negative examples...Completed.
The trained classifier has 19 weak learners.
--------------------------------------------
Stage 2:
Sample negative examples(~100% Completed)
Found 84 new negative examples for training.
Compute aggregated channel features...Completed.
Train classifier with 42 positive examples and 84 negative examples...Completed.
The trained classifier has 20 weak learners.
--------------------------------------------
Stage 3:
Sample negative examples(~100% Completed)
Found 84 new negative examples for training.
Compute aggregated channel features...Completed.
Train classifier with 42 positive examples and 84 negative examples...Completed.
The trained classifier has 54 weak learners.
--------------------------------------------
Stage 4:
Sample negative examples(~100% Completed)
Found 84 new negative examples for training.
Compute aggregated channel features...Completed.
Train classifier with 42 positive examples and 84 negative examples...Completed.
The trained classifier has 61 weak learners.
--------------------------------------------
ACF object detector training is completed. Elapsed time is 13.9558 seconds.

ACF ベースの検出器をサンプル イメージでテストします。

I = imread('stopSignTest.jpg');
bboxes = detect(acfDetector,I);

検出したオブジェクトを表示します。

annotation = acfDetector.ModelName;
I = insertObjectAnnotation(I,'rectangle',bboxes,annotation);

figure 
imshow(I)

Figure contains an axes object. The hidden axes object contains an object of type image.

パスからイメージ フォルダーを削除します。

rmpath(imageDir); 

イメージの場所、ラベルの定義、およびラベル データを読み込みます。

data = load('labelsWithAttributes.mat');
images = fullfile(matlabroot,'toolbox','vision','visiondata','stopSignImages', data.imageFilenames);

グラウンド トゥルース オブジェクトを作成します。

dataSource = groundTruthDataSource(images);
gTruth = groundTruth(groundTruthDataSource(images), data.labeldefs, data.labelData);

グラウンド トゥルース オブジェクトを使用して、イメージ データストア、ボックス ラベル データストア、および配列データストアを作成します。

[imds, blds, arrds] = objectDetectorTrainingData(gTruth);

すべての属性を読み取ります。

readall(arrds)
ans=2×1 cell array
    {1×1 struct}
    {1×1 struct}

入力引数

すべて折りたたむ

グラウンド トゥルース データ。スカラー、または groundTruth オブジェクトの配列として指定します。groundTruth オブジェクトを使用して、既存のグラウンド トゥルース データからグラウンド トゥルース オブジェクトを作成できます。

並列計算を有効にして groundTruth のカスタム データ ソースを使用すると、リーダー関数は MATLAB ワーカーのプールを使用してデータ ソースからイメージを並列で読み取ると想定されます。

メモ

gTruthgroundTruth オブジェクトの配列として指定する場合、すべてのラベルの定義は同じラベル名をもたなければなりません。

名前と値の引数

すべて折りたたむ

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: (SamplingFactor=5) は、サブサンプリング係数を 5 に設定します。

グラウンド トゥルース データ ソースのイメージをサブサンプリングするための係数。"auto"、整数、または整数のベクトルとして指定します。サンプリング係数が N の場合、返される学習データには、グラウンド トゥルース データ ソースのイメージが N 個おきに含まれます。関数は、ラベル データが空のグラウンド トゥルース イメージを無視します。投影された直方体データを使用して SamplingFactor を設定するには、名前と値の引数 LabelTypelabelType.ProjectedCuboid に指定しなければなりません。

サンプリングされたデータを使用して、同じシーンとラベルをもつイメージのシーケンスなどの重複データを減らします。これは、学習時間の短縮にも役立ちます。

サンプリング係数
"auto"関数は、ビデオなどのタイムスタンプ付きのデータ ソースを係数 5 でサンプリングします。イメージのコレクションの場合の係数は 1 です。
整数すべてのデータに適用するサンプリング係数を手動で設定します。
整数のベクトルグラウンド トゥルース オブジェクトの配列を入力すると、関数は対応するベクトル要素で指定されたサンプリング係数を使用します。

グラウンド トゥルース データから抽出するラベルのタイプ。"labelType.Rectangle""labelType.RotatedRectangle"、または "labelType.ProjectedCuboid" として指定します。学習させるオブジェクト検出器のタイプと一致するラベルのタイプを使用します。

メモ

関数 trainYOLOv2ObjectDetector は、"labelType.RotatedRectangle" をサポートしていません。

抽出されたイメージを書き込むフォルダー名。string スカラーまたは文字ベクトルとして指定します。指定されたフォルダーが存在している必要があります。また、そのフォルダーへの書き込み権限が必要です。

この引数は、次の場合にのみ適用されます。

  • ビデオ ファイルまたはカスタム データ ソースを使用して作成された groundTruth オブジェクト。

  • 異なるカスタム read 関数を指定して imageDatastore を使用して作成された groundTruth オブジェクトの配列。

次の場合、関数はこの引数を無視します。

  • 入力 groundTruth オブジェクトがイメージ シーケンス データ ソースから作成された。

  • 入力 groundTruth オブジェクトの配列すべてに、同じカスタム read 関数を使用するイメージ データストアが含まれている。

  • データストアを含む入力 groundTruth オブジェクトのいずれかで、既定の read 関数を使用している。

イメージ ファイル形式。string スカラーまたは文字ベクトルとして指定します。ファイル形式は imwrite によってサポートされていなければなりません。

この引数は、次の場合にのみ適用されます。

  • ビデオ ファイルまたはカスタム データ ソースを使用して作成された groundTruth オブジェクト。

  • 異なるカスタム read 関数を指定して imageDatastore を使用して作成された groundTruth オブジェクトの配列。

次の場合、関数はこの引数を無視します。

  • 入力 groundTruth オブジェクトがイメージ シーケンス データ ソースから作成された。

  • 入力 groundTruth オブジェクトの配列すべてに、同じカスタム read 関数を使用するイメージ データストアが含まれている。

  • データストアを含む入力 groundTruth オブジェクトのいずれかで、既定の read 関数を使用している。

出力ファイル名の接頭辞。string スカラーまたは文字ベクトルとして指定します。イメージ ファイルは次のように命名されます。

<name_prefix><source_number>_<image_number>.<image_format>

既定の値では、イメージ抽出元のデータ ソースの名前を使用します。ビデオおよびカスタム データ ソースでは strcat(sourceName,"_")、イメージ データストアでは "datastore" を使用します。

この引数は、次の場合にのみ適用されます。

  • ビデオ ファイルまたはカスタム データ ソースを使用して作成された groundTruth オブジェクト。

  • 異なるカスタム read 関数を指定して imageDatastore を使用して作成された groundTruth オブジェクトの配列。

次の場合、関数はこの引数を無視します。

  • 入力 groundTruth オブジェクトがイメージ シーケンス データ ソースから作成された。

  • 入力 groundTruth オブジェクトの配列すべてに、同じカスタム read 関数を使用するイメージ データストアが含まれている。

  • データストアを含む入力 groundTruth オブジェクトのいずれかで、既定の read 関数を使用している。

MATLAB コマンド ラインに学習の進行状況を表示するためのフラグ。true (1) または false (0) として指定します。このプロパティは、ビデオ ファイルまたはカスタム データ ソースを使用して作成された groundTruth オブジェクトにのみ適用されます。

出力引数

すべて折りたたむ

イメージ データストア。gTruth オブジェクトから抽出されたイメージを含む imageDatastore オブジェクトとして返されます。imds 内のイメージには、注釈付きラベルのクラスが少なくとも 1 つ含まれています。関数は、注釈が付けられていないイメージを無視します。

ボックス ラベル データストア。boxLabelDatastore オブジェクトとして返されます。データストアには、ROI ラベル名の categorical ベクトルと、M 個の境界ボックスの M 行 4 列の行列が含まれています。境界ボックスの位置とサイズは、[x,y,width,height] 形式の double の M x 4 要素ベクトルとして表されます。

配列データ ストア。struct 配列として返されます。struct のフィールドには、ボックス ラベル データストア blds 内の対応するラベルの属性とサブラベル名が格納されます。サブラベル データは、サブラベル属性に対応するフィールドとともに、Position フィールドを使用して struct にパッケージ化されます。

学習データの table。2 列以上の table として返されます。table の最初の列には、パスを含むイメージ ファイル名が含まれています。imread でサポートされている任意の形式のグレースケールまたはトゥルーカラー (RGB) イメージを指定できます。残りの各列は、ROI ラベルに対応し、そのラベルのイメージにおける境界ボックスの位置 (最初の列で指定) が含まれます。境界ボックスは、[x,y,width,height] の形式で M 個の境界ボックスの M 行 4 列の行列として指定します。[x,y] は左上隅の位置を指定します。グラウンド トゥルース table の作成には、イメージ ラベラーアプリまたはビデオ ラベラー アプリを使用できます。

出力 table は、入力 gTruth オブジェクトに存在するサブラベルや属性データを無視します。

バージョン履歴

R2017a で導入

すべて展開する