最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

trainCascadeObjectDetector

カスケード型オブジェクト検出器モデルの学習

構文

trainCascadeObjectDetector(outputXMLFilename,positiveInstances,negativeImages)
trainCascadeObjectDetector(outputXMLFilename,'resume')
trainCascadeObjectDetector(___,Name,Value)

説明

trainCascadeObjectDetector(outputXMLFilename,positiveInstances,negativeImages) は、学習済みのカスケード検出器を outputXMLFilename という名前の XML ファイルに書き込みます。ファイル名には XML 拡張子が含まれていなければなりません。この関数の動作の詳細については、オブジェクトのカスケード検出器の学習を参照してください。

trainCascadeObjectDetector(outputXMLFilename,'resume') は、中断された学習セッションを再開します。outputXMLFilename 入力は、中断されたセッションの出力ファイル名と一致していなければなりません。前のセッションで保存されたすべての引数が自動的に再利用されます。

trainCascadeObjectDetector(___,Name,Value) は、1 つ以上の Name,Value 引数ペアによって指定された追加オプションを使用します。

すべて折りたたむ

MAT ファイルからポジティブ サンプル データを読み込みます。ファイルには、複数のオブジェクト カテゴリの境界ボックスを指定するテーブルが含まれます。このテーブルは、Training Image Labeler アプリからエクスポートされたものです。

ポジティブ サンプルを読み込みます。

load('stopSignsAndCars.mat');

テーブルから一時停止標識の境界ボックスを選択します。

positiveInstances = stopSignsAndCars(:,1:2);

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

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

ネガティブ イメージのフォルダーを指定します。

negativeFolder = fullfile(matlabroot,'toolbox','vision','visiondata',...
    'nonStopSigns');

ネガティブ イメージを含む imageDatastore オブジェクトを作成します。

negativeImages = imageDatastore(negativeFolder);

HOG 特徴を使用して 'stopSignDetector.xml' という名前のカスケード オブジェクト検出器を学習させます。メモ: コマンドの実行には数分かかる場合があります。

trainCascadeObjectDetector('stopSignDetector.xml',positiveInstances, ...
    negativeFolder,'FalseAlarmRate',0.1,'NumCascadeStages',5);
Automatically setting ObjectTrainingSize to [35, 32]
Using at most 42 of 42 positive samples per stage
Using at most 84 negative samples per stage

--cascadeParams--
Training stage 1 of 5
[........................................................................]
Used 42 positive and 84 negative samples
Time to train stage 1: 0 seconds

Training stage 2 of 5
[........................................................................]
Used 42 positive and 84 negative samples
Time to train stage 2: 1 seconds

Training stage 3 of 5
[........................................................................]
Used 42 positive and 84 negative samples
Time to train stage 3: 4 seconds

Training stage 4 of 5
[........................................................................]
Used 42 positive and 84 negative samples
Time to train stage 4: 12 seconds

Training stage 5 of 5
[........................................................................]
Used 42 positive and 17 negative samples
Time to train stage 5: 12 seconds

Training complete

新たに学習させた分類器を使用して、イメージ内の一時停止標識を検出します。

detector = vision.CascadeObjectDetector('stopSignDetector.xml');

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

img = imread('stopSignTest.jpg');

一時停止標識を検出します。

bbox = step(detector,img);

境界ボックスの四角形を挿入し、マークしたイメージを返します。

 detectedImg = insertObjectAnnotation(img,'rectangle',bbox,'stop sign');

検出した一時停止標識を表示します。

figure; imshow(detectedImg);

パスからイメージ ディレクトリを削除します。

rmpath(imDir);

入力引数

すべて折りたたむ

ポジティブ サンプル。2 列のテーブルまたは 2 つのフィールドをもつ構造体として指定します。

テーブルの最初の列または構造体の最初のフィールドには、文字ベクトルとして指定されたイメージ ファイル名が含まれます。各イメージは、imread でサポートされているいずれかの形式のトゥルーカラー イメージ、グレースケール イメージまたはインデックス付きイメージになります。

テーブルの 2 番目の列または構造体の 2 番目のフィールドには、M 個の境界ボックスの M 行 4 列の行列が含まれます。各境界ボックスは [x y width height] の形式で、対応するイメージでのオブジェクトの位置を指定します。

イメージ ラベラーまたはビデオ ラベラー アプリを使用して、関心のあるオブジェクトに境界ボックスでラベルを付けることができます。このアプリは、使用するテーブルまたは構造体を positiveInstances として出力します。関数は、カスケードの各段で使用するポジティブ サンプルの数を自動的に決定します。この値は、段数と真陽性率に基づきます。真陽性率は、誤分類される可能性のあるポジティブ サンプルの数を指定します。

データ型: テーブル | struct

ネガティブ イメージ。ImageDatastore オブジェクト、イメージを含むフォルダーへのパス、またはイメージ ファイル名の cell 配列として指定します。イメージを使用してネガティブ サンプルが生成されるため、イメージには対象オブジェクトを含めないでください。代わりに、オブジェクトに関連付けられた背景を含めるようにします。

学習済みのカスケード検出器のファイル名。XML 拡張子付きの文字ベクトルとして指定します。たとえば、'stopSignDetector.xml' とします。

データ型: char

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: 'FeatureType','Haar' は、使用する特徴のタイプに Haar を指定します。

学習用のオブジェクト サイズ。コンマ区切りのペアとして指定します。このペアには、'ObjectTrainingSize' と、2 要素ベクトル [height, width] または 'Auto' が含まれます。学習前に、関数はポジティブ サンプルとネガティブ サンプルのピクセル単位のサイズを ObjectTrainingSize に変更します。'Auto' を選択すると、関数は、ポジティブ インスタンスの幅と高さの比率の中央値に基づいてサイズを自動的に決定します。最適な検出精度を得るには、学習用のオブジェクト サイズを、イメージ内で想定されるオブジェクト サイズに近い値に指定します。ただし、学習と検出にかかる時間を短縮するには、学習用のオブジェクト サイズを、イメージ内で想定されるオブジェクト サイズより小さな値に設定します。

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

ネガティブ サンプル係数。'NegativeSamplesFactor' と実数値のスカラーで構成されるコンマ区切りのペアとして指定します。各段で使用するネガティブ サンプルの数は、次と等しくなります。

NegativeSamplesFactor × [the number of positive samples used at each stage]

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

カスケードの段数。'NumCascadeStages' と正の整数で構成されるコンマ区切りのペアとして指定します。段数を多くすると検出器の精度が向上する可能性がありますが、学習時間も長くなります。各段でいくつかのポジティブ サンプルとネガティブ サンプルが排除されるため、段数を多くするとより多くの学習イメージが必要になります。この値は、FalseAlarmRateTruePositiveRate の値によって異なります。段数が多くなると、FalseAlarmRate の値を大きくすることも可能です。詳細については、オブジェクトのカスケード検出器の学習チュートリアルを参照してください。

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

各段で許容可能な偽警報率。'FalseAlarmRate' と (0 1] の範囲の値で構成されるコンマ区切りのペアとして指定します。偽警報率とは、誤ってポジティブ サンプルとして分類されるネガティブ学習サンプルの割合です。

全体的な偽警報率は、各段の FalseAlarmRate とカスケードの段数 NumCascadeStages を使用して計算されます。

FalseAlarmRateNumCascadeStages

FalseAlarmRate の値を小さくすると、各段の複雑度が増します。複雑度が増すと誤検知が少なくなる可能性がありますが、学習と検出にかかる時間が長くなります。FalseAlarmRate の値を大きくすると、妥当な検出精度を実現するためにカスケードの段数を増やす必要がある場合があります。

データ型: single | double

各段で必要な最小真陽性率。'TruePositiveRate' と (0 1] の範囲の値で構成されるコンマ区切りのペアとして指定します。真陽性率とは、正しくポジティブ学習サンプルとして分類されるサンプルの割合です。

結果として得られる全体的なターゲット陽性率は、各段の TruePositiveRate とカスケードの段数 NumCascadeStages を使用して計算されます。

TruePositiveRateNumCascadeStages

TruePositiveRate の値を大きくすると、各段の複雑度が増します。複雑度が増すと正しい検出の数が多くなる可能性がありますが、学習と検出にかかる時間が長くなります。

データ型: single | double

特徴のタイプ。'FeatureType' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

'Haar'[1] — Haar-like 特徴
'LBP'[2] — ローカル バイナリ パターン
'HOG'[3] — 勾配方向ヒストグラム

特に Haar 特徴の場合、関数は大量のメモリを割り当てます。メモリ不足を回避するため、この関数は、十分な量の RAM がある 64 ビットのオペレーティング システムで使用してください。

データ型: char

ヒント

良質の検出器の学習には数千単位の学習サンプルが必要です。大量のデータを処理する時間は場合によって異なりますが、数時間から数日に及ぶ長い時間がかかります。学習中は、関数によって各ステージの学習にかかった時間が MATLAB® のコマンド ウィンドウに表示されます。

参照

[1] Viola, P., and M. J. Jones. "Rapid Object Detection using a Boosted Cascade of Simple Features." Proceedings of the 2001 IEEE Computer Society Conference. Volume 1, 15 April 2001, pp. I-511–I-518.

[2] Ojala, T., M. Pietikainen, and T. Maenpaa. “Multiresolution Gray-scale and Rotation Invariant Texture Classification With Local Binary Patterns.” IEEE Transactions on Pattern Analysis and Machine Intelligence. Volume 24, No. 7 July 2002, pp. 971–987.

[3] Dalal, N., and B. Triggs. “Histograms of Oriented Gradients for Human Detection.” IEEE Computer Society Conference on Computer Vision and Pattern Recognition. Volume 1, 2005, pp. 886–893.

R2013a で導入