Main Content

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

trainFasterRCNNObjectDetector

Faster R-CNN 深層学習オブジェクト検出器の学習

説明

検出器の学習

trainedDetector = trainFasterRCNNObjectDetector(trainingData,network,options) は、深層学習を使用して、Faster R-CNN (Regions with Convolutional Neural Networks) オブジェクト検出器に学習させます。Faster R-CNN 検出器に学習させて複数のオブジェクト クラスを検出することができます。

この関数には、Deep Learning Toolbox™ が必要です。CUDA® 対応 NVIDIA® GPU で使用する Parallel Computing Toolbox™ も推奨されます。サポートされる Compute Capability の詳細については、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。

[trainedDetector,info] = trainFasterRCNNObjectDetector(___) は、各反復の、学習損失や学習精度などの学習の進行状況に関する情報も返します。

検出器の学習の再開

trainedDetector = trainFasterRCNNObjectDetector(trainingData,checkpoint,options) は検出器のチェックポイントから学習を再開します。

検出器の微調整

trainedDetector = trainFasterRCNNObjectDetector(trainingData,detector,options) は、追加の微調整オプションを使用して Faster R-CNN オブジェクト検出器の学習を継続します。検出器の精度を向上させるには、追加の学習データと共にこの構文を使用するか、さらに多くの学習の反復回数を実行します。

追加プロパティ

trainedDetector = trainFasterRCNNObjectDetector(___,Name,Value) では、Name,Value ペアの引数を 1 つ以上指定した追加オプションと、前の入力のいずれかを使用します。

すべて折りたたむ

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

data = load('fasterRCNNVehicleTrainingData.mat');

trainingData = data.vehicleTrainingData;

trainingData.imageFilename = fullfile(toolboxdir('vision'),'visiondata', ...
    trainingData.imageFilename);

学習のためにデータをランダムにシャッフルします。

rng(0);
shuffledIdx = randperm(height(trainingData));
trainingData = trainingData(shuffledIdx,:);

table のファイルを使用してイメージ データストアを作成します。

imds = imageDatastore(trainingData.imageFilename);

table のラベル列を使用してボックス ラベル データストアを作成します。

blds = boxLabelDatastore(trainingData(:,2:end));

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

ds = combine(imds, blds);

ネットワーク層をセットアップします。

lgraph = layerGraph(data.detector.Network);

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

 options = trainingOptions('sgdm', ...
      'MiniBatchSize', 1, ...
      'InitialLearnRate', 1e-3, ...
      'MaxEpochs', 7, ...
      'VerboseFrequency', 200, ...
      'CheckpointPath', tempdir);

検出器に学習させます。学習には 2 ~ 3 分かかります。NegativeOverlapRange と PositiveOverlapRange を調整して、学習サンプルがグラウンド トゥルースと必ず厳密にオーバーラップするようにします。

detector = trainFasterRCNNObjectDetector(ds, lgraph, options, ...
        'NegativeOverlapRange',[0 0.3], ...
        'PositiveOverlapRange',[0.6 1]);
*************************************************************************
Training a Faster R-CNN Object Detector for the following object classes:

* vehicle

Training on single GPU.
Initializing input data normalization.
|=============================================================================================================================================|
|  Epoch  |  Iteration  |  Time Elapsed  |  Mini-batch  |  Mini-batch  |  Mini-batch  |  RPN Mini-batch  |  RPN Mini-batch  |  Base Learning  |
|         |             |   (hh:mm:ss)   |     Loss     |   Accuracy   |     RMSE     |     Accuracy     |       RMSE       |      Rate       |
|=============================================================================================================================================|
|       1 |           1 |       00:00:00 |       0.8771 |       97.30% |         0.83 |           91.41% |             0.71 |          0.0010 |
|       1 |         200 |       00:01:15 |       0.5324 |      100.00% |         0.15 |           88.28% |             0.70 |          0.0010 |
|       2 |         400 |       00:02:40 |       0.4732 |      100.00% |         0.15 |           92.19% |             0.63 |          0.0010 |
|       3 |         600 |       00:04:03 |       0.4776 |       97.14% |         0.09 |           96.88% |             0.59 |          0.0010 |
|       3 |         800 |       00:05:23 |       0.5269 |       97.44% |         0.18 |           89.06% |             0.68 |          0.0010 |
|       4 |        1000 |       00:06:44 |       0.9749 |      100.00% |              |           85.16% |             1.00 |          0.0010 |
|       5 |        1200 |       00:08:07 |       1.1952 |       97.62% |         0.13 |           77.34% |             1.27 |          0.0010 |
|       5 |        1400 |       00:09:24 |       0.6577 |      100.00% |              |           76.38% |             0.72 |          0.0010 |
|       6 |        1600 |       00:10:46 |       0.6951 |      100.00% |              |           90.62% |             0.94 |          0.0010 |
|       7 |        1800 |       00:12:08 |       0.5341 |       96.08% |         0.09 |           86.72% |             0.53 |          0.0010 |
|       7 |        2000 |       00:13:26 |       0.3333 |      100.00% |         0.12 |           94.53% |             0.61 |          0.0010 |
|       7 |        2065 |       00:13:52 |       1.0564 |      100.00% |              |           71.09% |             1.23 |          0.0010 |
|=============================================================================================================================================|
Detector training complete.
*******************************************************************

テスト イメージで Faster R-CNN 検出器をテストします。

img = imread('highway.png');

検出器を実行します。

[bbox, score, label] = detect(detector,img);

検出結果を表示します。

detectedImg = insertShape(img,'Rectangle',bbox);
figure
imshow(detectedImg)

入力引数

すべて折りたたむ

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

各境界ボックスは [x,y,width,height] の形式でなければなりません。

  • データストアを使用する場合は、関数 read および関数 readall を使用してデータストアを呼び出すと、cell 配列か 2 列または 3 列の table が返されるよう、データを設定しなければなりません。出力が 2 列の場合、{boxes,labels} のように、1 列目には境界ボックスが、2 列目にはラベルが含まれていなければなりません。出力が 3 列の場合、2 列目には境界ボックスが、3 列目にはラベルが含まれていなければなりません。この場合、1 列目には任意の型のデータを含められます。たとえば、1 列目にイメージや点群データを含められます。

    databoxeslabels

    最初の列はイメージでなければなりません。

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

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

    詳細については、深層学習用のデータストア (Deep Learning Toolbox)を参照してください。

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

ネットワーク。SeriesNetwork (Deep Learning Toolbox)Layer (Deep Learning Toolbox) オブジェクトの配列、layerGraph (Deep Learning Toolbox) オブジェクト、またはネットワークの名前で指定します。trainingData テーブルで定義されているオブジェクト クラスを分類するようネットワークに学習させます。SeriesNetwork (Deep Learning Toolbox) オブジェクト、Layer (Deep Learning Toolbox) オブジェクトおよび layerGraph (Deep Learning Toolbox) オブジェクトを使用するには、Deep Learning Toolbox が必要です。

  • ネットワークを SeriesNetworkLayer オブジェクトの配列、またはネットワークの名前で指定すると、関数は、オブジェクト検出をサポートする領域提案ネットワーク (RPN)、ROI 最大プーリング層、および新しい分類層と回帰層を追加して、ネットワークを Faster R-CNN ネットワークに変換します。さらに、ROI 最大プーリング層の GridSize プロパティは、ネットワークの最後の最大プーリング層の出力サイズに設定されます。

  • Layer (Deep Learning Toolbox) オブジェクトの配列には、オブジェクト クラスの数と背景クラスをサポートする分類層が含まれていなければなりません。各層の学習率をカスタマイズするには、この入力タイプを使用します。Layer (Deep Learning Toolbox) オブジェクトの配列の例を以下に示します。

    layers = [imageInputLayer([28 28 3])
            convolution2dLayer([5 5],10)
            reluLayer()
            fullyConnectedLayer(10)
            softmaxLayer()
            classificationLayer()];
    

  • ネットワークを SeriesNetwork オブジェクト、Layer 配列、またはネットワーク名で指定すると、追加の畳み込み用の重みと全結合層は 'narrow-normal' に初期化されます。関数はこれらの重みを追加して、ネットワークを作成します。

  • ネットワークの名前は、次の有効なネットワークの名前のいずれかでなければなりません。また、対応するアドオンをインストールしなければなりません。

    ネットワークの名前特徴抽出層の名前ROI プーリング層の出力サイズ説明
    alexnet (Deep Learning Toolbox)'relu5'[6 6]最後の最大プーリング層は ROI 最大プーリング層によって置き換えられる
    vgg16 (Deep Learning Toolbox)'relu5_3'[7 7]
    vgg19 (Deep Learning Toolbox)'relu5_4'
    squeezenet (Deep Learning Toolbox)'fire5-concat'[14 14]
    resnet18 (Deep Learning Toolbox)'res4b_relu'ROI プーリング層が特徴抽出層の後に挿入される。
    resnet50 (Deep Learning Toolbox)'activation_40_relu'
    resnet101 (Deep Learning Toolbox)'res4b22_relu'
    googlenet (Deep Learning Toolbox)'inception_4d-output'
    mobilenetv2 (Deep Learning Toolbox)'block_13_expand_relu'
    inceptionv3 (Deep Learning Toolbox)'mixed7'[17 17]
    inceptionresnetv2 (Deep Learning Toolbox)'block17_20_ac'

  • LayerGraph オブジェクトは、有効な Faster R-CNN オブジェクト検出ネットワークでなければなりません。関数 fasterRCNNLayers を使用して LayerGraph オブジェクトを作成し、カスタム Faster R-CNN ネットワークに学習させることもできます。

    ヒント

    ネットワークが DAGNetwork の場合、関数 layerGraph (Deep Learning Toolbox) を使用してネットワークを LayerGraph オブジェクトに変換します。その後、Faster R-CNN オブジェクト検出ネットワークの作成の例の説明に従って、カスタム Faster R-CNN ネットワークを作成します。

Faster R-CNN ネットワークの作成の詳細については、R-CNN、Fast R-CNN および Faster R-CNN 入門を参照してください。

学習オプション。関数 trainingOptions (Deep Learning Toolbox) によって返されます (Deep Learning Toolbox が必要)。ネットワーク学習に使用するソルバーおよびその他のオプションを指定するには、trainingOptions を使用します。

メモ

trainFasterRCNNObjectDetector は以下の学習オプションをサポートしていません。

  • 学習オプション DispatchInBackgroundtrue に設定した場合、データストアの入力はサポートされません。

また、統合されたデータストア入力を使用する場合、関数は次の学習オプションをサポートしません。

  • 引数 Shuffle に対する 'once' 値および 'every-epoch'

  • ExecutionEnvironment 引数に対する 'parallel''multi-gpu' の値

保存した検出器のチェックポイント。fasterRCNNObjectDetector オブジェクトとして指定します。学習中に検出器のチェックポイントを定期的に保存するには、CheckpointPath を指定します。チェック ポイントの保存頻度を制御するには、CheckPointFrequency および CheckPointFrequencyUnit の学習オプションを参照してください。

前に学習させた検出器のチェックポイントを読み込むには、チェックポイント パスから MAT ファイルを読み込みます。たとえば、options'CheckpointPath' プロパティが '/tmp' の場合、以下を使用してチェックポイントの MAT ファイルを読み込みます。

data = load('/tmp/faster_rcnn_checkpoint__105__2016_11_18__14_25_08.mat');

MAT ファイルの名前には、反復回数と、検出器のチェックポイントが保存された時間を示すタイムスタンプが含まれます。検出器はファイルの変数 detector に保存されます。このファイルを関数 trainFasterRCNNObjectDetector に渡します。

frcnn = trainFasterRCNNObjectDetector(stopSigns,...
                           data.detector,options);

前に学習させた Faster R-CNN オブジェクト検出器。fasterRCNNObjectDetector オブジェクトとして指定します。追加の学習データを使用して検出器の学習を継続するか、さらに多くの学習の反復回数を実行して検出器の精度を向上させるには、この構文を使用します。

名前と値の引数

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

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

例: 'PositiveOverlapRange',[0.75 1]

学習手法。'TrainingMethod' と、'end-to-end' または 'four-step' で構成されるコンマ区切りのペアとして指定します。

  • 'end-to-end' — 領域提案サブネットワークと領域分類サブネットワークの学習を同時に行います。

  • 'four-step' — 領域提案サブネットワークと領域分類サブネットワークの学習を 4 つの手順で個別に行います。

ポジティブ学習サンプルに対する境界ボックスのオーバーラップ率。'PositiveOverlapRange' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 4 つの学習ステージすべてに対し、同一のオーバーラップ率を指定する 2 要素ベクトル。

  • エンドツーエンドの学習手法にのみ使用される 2 行 2 列の行列。行列の最初の行は、領域提案サブネットワークのオーバーラップ率を定義します。2 番目の行は、領域分類サブネットワークのオーバーラップ率を定義します。

  • 4 ステップの学習手法にのみ使用される 4 行 2 列の行列。行列の各行は、4 つの学習ステージのそれぞれについてオーバーラップ率を指定します。

値は [0,1] の範囲内です。指定した範囲内のグラウンド トゥルース境界ボックスとオーバーラップする領域提案がポジティブ学習サンプルとして使用されます。

PositiveOverlapRangeNegativeOverlapRange の両方で使用されるオーバーラップ率は、次のように定義されます。

area(AB)area(AB)


A と B は境界ボックスです。

ネガティブ学習サンプルに対する境界ボックスのオーバーラップ率。'NegativeOverlapRange' と次のいずれかで構成されるコンマ区切りのペアとして指定します。

  • オーバーラップ率を指定する 2 要素ベクトル。

  • エンドツーエンドの学習手法にのみ使用される 2 行 2 列の行列。行列の最初の行は、領域提案サブネットワークのオーバーラップ率を定義します。2 番目の行は、領域分類サブネットワークのオーバーラップ率を定義します。

  • 4 ステップの学習手法にのみ使用される 4 行 2 列の行列。行列の各行は、4 つの学習ステージのそれぞれについてオーバーラップ率を指定します。

値は [0,1] の範囲内です。指定した範囲内のグラウンド トゥルース境界ボックスとオーバーラップする領域提案がネガティブ学習サンプルとして使用されます。

PositiveOverlapRangeNegativeOverlapRange の両方で使用されるオーバーラップ率は、次のように定義されます。

area(AB)area(AB)


A と B は境界ボックスです。

学習サンプルの生成に使用する最も強い領域提案の最大数。'NumStrongestRegions' と正の整数で構成されるコンマ区切りのペアとして指定します。この値を小さくすると処理時間が短縮されますが、学習精度は低下します。すべての領域提案を使用するには、この値を Inf に設定します。

各学習イメージからランダムにサンプリングする領域提案の数。整数、1 行 2 列のベクトル、または 1 行 4 列のベクトルとして指定します。エンドツーエンドの学習には 1 行 2 列のベクトルを使用します。4 ステップの学習には 1 行 4 列のベクトルを使用します。メモリ使用量を削減し、学習速度を高めるには、サンプリングする領域の数を減らします。この値を減らすと、学習精度も低下する可能性があります。

'TrainingMethod' を 'end-to-end' にすると、領域提案の数を 1 行 2 列のベクトルに設定できます。ベクトルの最初の要素は、領域提案サブネットワーク用にサンプリングされる領域の数でなければなりません。2 番目の要素は、領域分類サブネットワーク用にサンプリングされる領域の数でなければなりません。

'TrainingMethod' を 'four-step' にする場合は、領域提案の数を 1 行 4 列のベクトルに設定できます。i 番目の要素は、i 番目の学習ステップ用にサンプリングする領域の数を指定します。

最小イメージの次元の長さ。幅または高さで 'SmallestImageDimension' と正の整数で構成されるコンマ区切りのペアとして指定します。学習イメージは最小の次元の長さが指定した整数と等しくなるようにサイズが変更されます。既定では、学習イメージのサイズは変更されません。学習イメージのサイズを変更すると、学習イメージが大きい場合に使用される計算コストとメモリの低減に役立ちます。一般的な値の範囲は、400 ~ 600 ピクセルです。

依存関係

  • SmallestImageDimension プロパティは、table 入力の学習データのみをサポートします。データストア入力の入力データのサイズを変更するには、関数 transform を使用します。

領域提案ネットワーク (RPN) のアンカー ボックス ピラミッドを作成するための最小アンカー ボックス サイズ。'MinBoxSizes' と m 行 2 列の行列で構成されるコンマ区切りのペアとして指定します。各行はアンカー ボックスの [height width] を定義します。

既定の 'auto' 設定では、グラウンド トゥルース データの各クラスに対する境界ボックスから最小サイズと縦横比の中央値を使用します。冗長なボックス サイズを削除するために、関数は、Intersection over Union 値が 0.5 以下であるボックスを保持します。この動作により、最小数のアンカー ボックスを使用してすべてのオブジェクト サイズと縦横比がカバーされるようになります。

アンカー ボックスが MinBoxSizes に基づいて計算される場合、i 番目のアンカー ボックスのサイズは以下です。

round(MinBoxSizes(i,:) .* BoxPyramidScale ,^ (0:NumBoxPyramidLevels-1)')

依存関係

  • ネットワークを LayerGraph オブジェクトとして指定している場合、または検出器のチェックポイントから学習を再開する場合は、このプロパティを使用できません。

  • MinBoxSizes プロパティは、table 形式の入力学習のみをサポートします。データストア入力に対するアンカー ボックスを推定するには、関数 estimateAnchorBoxes を使用します。

アンカー ボックス サイズを連続的にスケール アップするアンカー ボックス ピラミッドのスケールの倍率。'BoxPyramidScale' とスカラーで構成されるコンマ区切りのペアとして指定します。推奨値は 1 ~ 2 です。この値を大きくすると、結果が早く得られます。精度を高くするには、この数値を小さくしてください。

依存関係

  • BoxPyramidScale プロパティは、table 形式の入力学習データのみをサポートします。データストア入力に対するアンカー ボックスを推定するには、関数 estimateAnchorBoxes を使用します。

アンカー ボックス ピラミッドのレベル数。'NumBoxPyramidLevels' とスカラーで構成されるコンマ区切りのペアとして指定します。マルチスケール アンカー ボックスがグラウンド トゥルース データのオブジェクトのサイズと同等のサイズになるような値を選択します。

既定の設定である 'auto' では、グラウンド トゥルース データ内のオブジェクトのサイズに基づいたレベル数を選択します。オブジェクト サイズの範囲をカバーするようにレベル数は選択されます。

依存関係

  • NumBoxPyramidLevels プロパティは、table 形式の入力学習データのみをサポートします。データストア入力に対するアンカー ボックスを推定するには、関数 estimateAnchorBoxes を使用します。

学習中に凍結されたバッチ正規化。'FreezeBatchNormalization' と true または false で構成されるコンマ区切りのペアとして指定します。この値は、学習中にネットワークへの入力層を凍結するかどうかを示します。小さいミニバッチのサイズで学習する場合、この値を true に設定します。バッチ サイズを小さくすると、効果的なバッチ正規化に必要なバッチの平均と分散の推定精度が低くなります。

'FreezeBatchNormalization' に値を指定しない場合、関数はプロパティを以下に設定します。

  • 関数 trainingOptions (Deep Learning Toolbox) の名前と値の引数 'MiniBatchSize' が 8 未満の場合、true

  • 関数 trainingOptions (Deep Learning Toolbox) の名前と値の引数 'MiniBatchSize' が 8 以上の場合、false

この既定の動作をオーバーライドするには、'FreezeBatchNormalization' の値を指定しなければなりません。

検出器の学習実験の監視。実験マネージャー (Deep Learning Toolbox) アプリで使用するexperiments.Monitor (Deep Learning Toolbox) オブジェクトとして指定します。このオブジェクトを使用して、学習の進行状況を追跡したり、学習結果テーブルで情報フィールドを更新したり、学習で使用したメトリクスの値を記録したり、学習プロットを生成したりできます。このアプリの使用例については、Train Object Detectors in Experiment Managerを参照してください。

学習中に監視される情報:

  • 各反復での学習損失。

  • 各反復での学習精度。

  • ボックス回帰層の学習の平方根平均二乗誤差 (RMSE)。

  • 各反復での学習率。

学習の options 入力に検証データが含まれている場合の検証情報:

  • 各反復での検証損失。

  • 各反復での検証精度。

  • 各反復での検証の RMSE。

出力引数

すべて折りたたむ

学習済み Faster R-CNN オブジェクト検出器。fasterRCNNObjectDetector オブジェクトとして返されます。

学習の進行状況の情報。8 つのフィールドを持つ構造体配列として返されます。各フィールドが学習の段階に対応しています。

  • TrainingLoss — 各反復での学習損失は、位置推定誤差、信頼度損失、および分類損失の合計として計算される平均二乗誤差 (MSE) です。学習損失関数の詳細については、Training Lossを参照してください。

  • TrainingAccuracy — 各反復での学習セット精度。

  • TrainingRMSE — 学習の平方根平均二乗誤差 (RMSE) は、各反復での学習損失から計算される RMSE です。

  • BaseLearnRate — 各反復での学習率。

  • ValidationLoss — 各反復での検証損失。

  • ValidationAccuracy — 各反復での検証精度。

  • ValidationRMSE — 各反復での検証の RMSE。

  • FinalValidationLoss — 学習終了時の最終検証損失。

  • FinalValidationRMSE — 学習終了時の最終検証 RMSE。

各フィールドは、学習の反復ごとに 1 つの要素を持つ数値ベクトルです。特定の反復で計算されていない値は、NaN が割り当てられます。options で検証データを指定した場合のみ、この struct には ValidationLossValidationAccuracyValidationRMSEFinalValidationLoss、および FinalValidationRMSE フィールドが含まれます。

ヒント

  • 学習のデータの前処理を高速化するために、trainFastRCNNObjectDetector は並列基本設定の設定値に基づいて並列プールを自動的に作成し、使用します。これらの基本設定の詳細については、並列基本設定を参照してください。並列計算基本設定を使用するには、Parallel Computing Toolbox が必要です。

  • VGG-16、VGG-19、ResNet-101、および Inception-ResNet-v2 は大きなモデルです。大きなイメージで学習すると、"メモリ不足" エラーが発生する可能性があります。これらの誤差を軽減するには、これらのオプションの 1 つ以上を試してください。

  • この関数は、転移学習をサポートします。network'resnet50' などの名前で入力すると、事前学習済みの resnet50 (Deep Learning Toolbox) モデルに基づき、関数はネットワークを有効な Faster R-CNN ネットワーク モデルに自動的に変換します。または、事前学習済みの DAG ネットワークから抽出した LayerGraph (Deep Learning Toolbox) を使用して手動でカスタム Faster R-CNN ネットワークを指定します。詳細については、Faster R-CNN オブジェクト検出ネットワークの作成を参照してください。

  • それぞれの名前付きネットワークが Faster R-CNN ネットワークにどのように変換されるかを次の表に示します。特徴抽出層の名前は、ROI プーリング層によって処理される層を指定します。ROI 出力サイズは、ROI プーリング層によって出力される特徴マップのサイズを指定します。

    ネットワークの名前特徴抽出層の名前ROI プーリング層の出力サイズ説明
    alexnet (Deep Learning Toolbox)'relu5'[6 6]最後の最大プーリング層は ROI 最大プーリング層によって置き換えられる
    vgg16 (Deep Learning Toolbox)'relu5_3'[7 7]
    vgg19 (Deep Learning Toolbox)'relu5_4'
    squeezenet (Deep Learning Toolbox)'fire5-concat'[14 14]
    resnet18 (Deep Learning Toolbox)'res4b_relu'ROI プーリング層が特徴抽出層の後に挿入される。
    resnet50 (Deep Learning Toolbox)'activation_40_relu'
    resnet101 (Deep Learning Toolbox)'res4b22_relu'
    googlenet (Deep Learning Toolbox)'inception_4d-output'
    mobilenetv2 (Deep Learning Toolbox)'block_13_expand_relu'
    inceptionv3 (Deep Learning Toolbox)'mixed7'[17 17]
    inceptionresnetv2 (Deep Learning Toolbox)'block17_20_ac'

    ネットワークを Faster R-CNN ネットワークに変換する方法の変更の詳細については、R-CNN、Fast R-CNN、Faster R-CNN モデルの設計を参照してください。

  • 学習中、学習イメージから複数のイメージ領域が処理されます。イメージごとのイメージ領域の数は NumRegionsToSample プロパティで制御されます。PositiveOverlapRange プロパティおよび NegativeOverlapRange プロパティによって、学習に使用されるイメージ領域が制御されます。学習のポジティブ サンプルは、境界ボックスの Intersection over Union (IoU) メトリクスで測定した場合に、グラウンド トゥルース ボックスとのオーバーラップが 0.6 ~ 1.0 のサンプルです。学習のネガティブ サンプルは、オーバーラップが 0 ~ 0.3 のサンプルです。これらのプロパティの値は、学習済みの検出器を検証セットでテストすることによって選択します。

    オーバーラップ値説明
    [0.6 1] に設定された PositiveOverlapRange学習のポジティブ サンプルは、境界ボックスの IoU メトリクスで測定した場合に、グラウンド トゥルース ボックスとのオーバーラップが 0.6 ~ 1.0 に等しいサンプルに設定されます。
    [0 0.3] に設定された NegativeOverlapRange学習のネガティブ サンプルは、グラウンド トゥルース ボックスとのオーバーラップが 0 ~ 0.3 に等しいサンプルに設定されます。

    PositiveOverlapRange[0.6 1] に設定すると、関数はグラウンド トゥルース ボックスとのオーバーラップが 0.6 ~ 1.0 (境界ボックスの IoU メトリクスで測定) のサンプルに等しいポジティブ学習サンプルを設定します。NegativeOverlapRange[0 0.3] に設定すると、関数はグラウンド トゥルース ボックスとのオーバーラップが 0 ~ 0.3 のサンプルに等しいネガティブ学習サンプルを設定します。

  • 詳細印刷を有効または無効にするには、関数 trainingOptions (Deep Learning Toolbox) を使用します。

参照

[1] Ren, S., K. He, R. Girschick, and J. Sun. "Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks." Advances in Neural Information Processing Systems. Vol. 28, 2015.

[2] Girshick, R. "Fast R-CNN." Proceedings of the IEEE International Conference on Computer Vision, 1440-1448. Santiago, Chile: IEEE, 2015.

[3] Girshick, R., J. Donahue, T. Darrell, and J. Malik. "Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation." Proceedings of the 2014 IEEE Conference on Computer Vision and Pattern Recognition, 580-587. Columbus, OH: IEEE, 2014.

[4] Zitnick, C. L., and P. Dollar. "Edge Boxes: Locating Object Proposals from Edges." Computer Vision-ECCV 2014, 391-405. Zurich, Switzerland: ECCV, 2014.

拡張機能

バージョン履歴

R2017a で導入

すべて展開する