Main Content

trainACFObjectDetector

ACF オブジェクト検出器に学習させる

説明

detector = trainACFObjectDetector(trainingData) は、学習済みの集合チャネル特徴 (ACF) オブジェクト検出器を返します。この関数は、table またはデータストアに格納され trainingData で指定されたイメージ内のオブジェクトの陽性インスタンスを使用します。この関数は、学習中にイメージから陰性インスタンスを自動的に収集します。グラウンド トゥルース table を作成するには、イメージ ラベラーまたはビデオ ラベラー アプリを使用します。

detector = trainACFObjectDetector(trainingData,Name=Value) は、前の構文にある引数の任意の組み合わせに加えて、名前と値の引数を 1 つ以上使用してオプションを指定します。たとえば、ObjectTrainingSize=[100,100] は、学習中のオブジェクトの高さと幅を設定します。

すべて折りたたむ

trainACFObjectDetector と学習イメージを使用して、一時停止標識を検出できる ACF オブジェクト検出器を作成します。検出器を個別のイメージでテストします。

学習データを読み込みます。

load('stopSignsAndCars.mat')

一時停止標識のイメージの前に絶対パスを付けます。

stopSigns = fullfile(toolboxdir('vision'),'visiondata',stopSignsAndCars{:,1});

データストアを作成して、一時停止標識のグラウンド トゥルース データを読み込みます。

imds = imageDatastore(stopSigns);
blds = boxLabelDatastore(stopSignsAndCars(:,2));

イメージ データストアとボックス ラベル データストアを組み合わせます。

ds = combine(imds,blds);

ACF 検出器に学習させます。各ステージで使用するネガティブ サンプルの数を 2 に設定します。Verbose=false,Name-Value の引数として指定することで、学習プロセスの出力をオフにできます。

acfDetector = trainACFObjectDetector(ds,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 27.5907 seconds.

ACF 検出器をテスト イメージでテストします。

img = imread('stopSignTest.jpg');
[bboxes,scores] = detect(acfDetector,img);

検出結果を表示し、オブジェクトの境界ボックスをイメージに挿入します。

for i = 1:length(scores)
   annotation = sprintf('Confidence = %.1f',scores(i));
   img = insertObjectAnnotation(img,'rectangle',bboxes(i,:),annotation);
end

figure
imshow(img)

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

入力引数

すべて折りたたむ

ラベル付きのグラウンド トゥルース。データストアまたは table として指定します。

  • データストアを使用する場合は、関数 read および関数 readall を使用してデータストアを呼び出すと、cell 配列か、列が少なくとも 2 つある table が返されるよう、データを設定しなければなりません。この表は、列に含まれるデータを示しています。

    Imagesboxeslabels (optional)

    グレースケールまたは RGB イメージの cell ベクトル。

    [x, y, width, height] の形式の境界ボックスで構成される M 行 4 列の行列。ここで、[x,y] は境界ボックスの左上の座標を表します。

    オブジェクト クラス名を含む M 要素の categorical ベクトルを含む cell 配列。データストアが返すすべての categorical データには、同じカテゴリが含まれていなければなりません。

    このデータを与えると、関数はクラス ラベルを使用して、acfObjectDetector オブジェクトとして指定された学習済みの検出器の ModelName プロパティを埋めます。それ以外の場合、ACF オブジェクト検出器は単一クラスの検出器であるため、学習にクラス ラベルは必要ありません。

  • table を使用する場合、table は 2 列以上でなければなりません。table の最初の列には、パスを含むイメージ ファイル名が含まれていなければなりません。イメージは、グレースケールまたはトゥルーカラー (RGB) でなければならず、imread でサポートされている任意の形式を指定できます。残りの各列は、vehicle、flower、stop sign などの単一のオブジェクト クラスを表す M 行 4 列の行列を含む cell ベクトルでなければなりません。これらの列には、[x,y,width,height] 形式の、M 個の境界ボックスの 4 要素 double 配列が含まれます。この形式は、対応するイメージでの境界ボックスの左上隅の位置とサイズを指定します。グラウンド トゥルース table の作成には、イメージ ラベラーアプリまたはビデオ ラベラー アプリを使用できます。生成されたグラウンド トゥルースから学習データの table を作成するには、関数 objectDetectorTrainingData を使用します。

名前と値の引数

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

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

例: ObjectTrainingSize=[100,100] は、学習中のオブジェクトの高さと幅を設定します。

学習中のオブジェクトのサイズ。ピクセル単位の [height width] の形式の 2 要素ベクトルとして指定します。最小の学習サイズは [8 8] です。学習プロセス中に、オブジェクトは 'ObjectTrainingSize' で指定された高さと幅にサイズ変更されます。サイズを大きくすると検出精度が向上する可能性がありますが、学習時間と検出時間も長くなります。

'Auto' を指定する場合、サイズは陽性インスタンスの幅と高さの比率の中央値に基づいて設定されます。

例: [100,100]

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

反復学習プロセスを行う学習ステージ数。正の整数として指定します。この数を増加させると学習時間は長くなりますが、検出器が改善し、学習誤差を減らすことができます。

データ型: double

ネガティブ サンプル係数。実数値のスカラーとして指定します。各ステージで使用するネガティブ サンプルの数は、次と等しくなります。

NegativeSamplesFactor × number of positive samples used at each stage

データ型: double

最後のステージにおける弱学習器の最大数。正の整数スカラーまたは正の整数のベクトルとして指定します。入力がスカラーの場合、MaxWeakLearners は最後のステージの最大数を指定します。入力がベクトルの場合、MaxWeakLearners は各ステージの最大数を指定し、'NumStages' の同じ長さでなければなりません。これらの値は通常、ステージを通じて増加します。ACF オブジェクト検出器は、ブースティング アルゴリズムを使用して弱学習器のアンサンブルを作成します。大きな値を使用すると、検出パフォーマンスの速度が遅くなりますが、検出精度を向上できます。推奨値の範囲は 300 ~ 5000 です。

データ型: double

学習プロセスの進行状況を表示するオプション。true または false として指定します。

データ型: logical

出力引数

すべて折りたたむ

学習済みの ACF ベースのオブジェクト検出器。acfObjectDetector オブジェクトとして返されます。

参照

[1] Dollar, Piotr, Ron Appel, Serge Belongie, and Pietro Perona. “Fast Feature Pyramids for Object Detection.” IEEE Transactions on Pattern Analysis and Machine Intelligence. 36, no. 8 (August 2014): 1532–45. DOI.org (Crossref), https://doi.org/10.1109/TPAMI.2014.2300479.

バージョン履歴

R2017a で導入