主要内容

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

trainRCNNObjectDetector

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

説明

探测器= trainRCNNObjectDetector (trainingData网络选项)与卷积神经网络はR-CNN(地区)ベースのオブジェクト検出器を学習させます。この関数は,深層学習を使用して,検出器に複数のオブジェクトクラスの検出を学習させます。

このR-CNNの実装では,各オブジェクトクラスのSVM分類器の学習は実行されません。

この関数には,深度学习工具箱™と统计和机器学习工具箱™が必要です。CUDA®対応英伟达®GPUで使用する并行计算工具箱™も推奨されます。サポートされる计算能力の詳細については,リリース別のGPUサポート(并行计算工具箱)を参照してください。

探测器= trainRCNNObjectDetector (___名称,值)は1つ以上の名称,值引数ペアによって指定されたオプションの入力プロパティを使用して探测器オブジェクトを返します。

探测器= trainRCNNObjectDetector (___”,RegionProposalFcn”,proposalFcn)は,オプションで,カスタム領域提案関数を使用してR-CNN検出器を学習させます。

探测器信息) = trainRCNNObjectDetector (___)は,各反復の,学習損失や学習精度などの学習の進行状況に関する情報も返します。

すべて折りたたむ

学習データとネットワーク層を読み込みます。

负载(“rcnnStopSigns.mat”“stopSigns”“层”)

MATLABパスにイメージディレクトリを追加します。

imDir = fullfile (matlabroot,“工具箱”“愿景”“visiondata”...“stopSignImages”);目录(imDir);

ミニバッチのサイズ32を使用してGPUメモリ使用量を削減するようにネットワーク学習オプションを設定します。InitialLearningRateの値を小さくして,ネットワークパラメーターの変更レートを下げます。これは事前学習済みのネットワークを微調整するときに便利で,ネットワークが急激に変化しないようにできます。

选择= trainingOptions (“个”...“MiniBatchSize”32岁的...“InitialLearnRate”1 e-6...“MaxEpochs”10);

R-CNN検出器を学習させます。学習は,完了するのに2 ~ 3分かかることがあります。

rcnn = trainRCNNObjectDetector(stopSigns, layer, options,“NegativeOverlapRange”0.3 [0]);
******************************************************************* 培训一个R-CNN对象探测器以下对象类:* stopSign步骤1的3:从27日训练图像提取区域建议……。步骤2:训练神经网络对训练数据中的对象进行分类…|=========================================================================================| | 时代| |迭代时间| Mini-batch | Mini-batch |基地学习| | | | | | |精度损失速率(秒)  | |=========================================================================================| | 50 | 3 | 9.27 | 0.2895 | 0.000001 | 96.88%| | 100 | | 14.77 | 0.2443 | 93.75% | 0.000001 | | 150 | | 20.29 | 0.0013 | 100.00% | 0.000001 | | 200 | | 25.94 | 0.1524 | 0.000001 | 96.88%  | |=========================================================================================| 网络训练完成。步骤3:训练每个对象类的边界盒回归模型。R-CNN培训完成。*******************************************************************

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

img = imread (“stopSignTest.jpg”);[bbox, score, label] =检测(rcnn, img,“MiniBatchSize”、32);

最も強い検出結果を表示します。

[score, idx] = max(score);Bbox = Bbox (idx,:);注释= sprintf ('%s:(置信度= %f)'标签(idx),得分);detectedImg = insertObjectAnnotation (img,“矩形”bbox,注释);图imshow (detectedImg)

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

rmpath (imDir);

追加のデータを使用して,R-CNNオブジェクト検出器の学習を再開します。この手順について説明するために,最初の検出器の学習にグラウンドトゥルースデータの半分を使用します。次に,すべてのデータを使用して学習を再開します。

学習データを読み込んで学習オプションを初期化します。

负载(“rcnnStopSigns.mat”“stopSigns”“层”) stopSigns。imageFilename = fullfile (toolboxdir (“愿景”),“visiondata”...stopSigns.imageFilename);选择= trainingOptions (“个”...“MiniBatchSize”32岁的...“InitialLearnRate”1 e-6...“MaxEpochs”10...“详细”、假);

グラウンドトゥルースの一部を使用してR-CNN検出器を学習させます。

rcnn = trainRCNNObjectDetector(stopSigns(1:10,:), layers, options,“NegativeOverlapRange”0.3 [0]);

検出器から学習済みのネットワーク層を取得します。ネットワーク層の配列をtrainRCNNObjectDetectorに渡すと,そのネットワーク層をそのまま使用して学習が続行されます。

网络= rcnn.Network;层= network.Layers;

すべての学習データを使用して学習を再開します。

rcnnFinal = trainRCNNObjectDetector(stopSigns, layers, options);

犬と猫の2つのオブジェクトクラスを対象としたR-CNNオブジェクト検出器を作成します。

对象类= {“狗”“猫”};

trainRCNNObjectDetectorを使用してネットワークを学習させるには,ネットワークで犬と猫の両方と“背景”クラスを分類できなければなりません。この例では,背景を含むネットワークが追加されます。

numClassesPlusBackground = nummel (objectClasses) + 1;

ネットワークの最終的な全結合層は,ネットワークで分類できるクラスの数を定義します。クラスの数および背景クラスと同じ出力サイズになるように最終的な全結合層を設定します。

层= [...imageInputLayer([28 28 1])卷积2dlayer (5,20) fulllyconnectedlayer (numClassesPlusBackground);classificationLayer softmaxLayer () ()];

これらのネットワーク層を使用してR-CNN 2クラスオブジェクト検出器を学習させることができるようになりました。

R-CNNオブジェクト検出器を作成して,保存したネットワークチェックポイントを使用するように設定します。ネットワークチェックポイントは,trainingOptionsの‘CheckpointPathパラメーターが設定されている場合,ネットワークの学習中のエポックごとに保存されます。ネットワークチェックポイントは,学習セッションが異常終了した場合に役立ちます。

一時停止標識学習データを読み込みます。

负载(“rcnnStopSigns.mat”“stopSigns”“层”)

イメージファイルの絶対パスを追加します。

stopSigns。imageFilename = fullfile (toolboxdir (“愿景”),“visiondata”...stopSigns.imageFilename);

関数trainingOptionsを使用して‘CheckpointPathを設定します。

checkpointLocation = tempdir;选择= trainingOptions (“个”“详细”假的,...“CheckpointPath”, checkpointLocation);

いくつかのイメージを使用してR-CNNオブジェクト検出器を学習させます。

: rcnn = trainRCNNObjectDetector (stopSigns(1:3),层,选项);

保存したネットワークチェックポイントを読み込みます。

wildcardFilePath = fullfile (checkpointLocation,“convnet_checkpoint__ * .mat”);内容= dir (wildcardFilePath);

いずれかのチェックポイントネットワークを読み込みます。

(1) .folder filepath = fullfile(内容,内容(1). name);检查点=负载(filepath);checkpoint.net
ans = SeriesNetwork with properties: Layers: [15×1 net.cnn.layer. layer]

新しいR-CNNオブジェクト検出器を作成して,保存したネットワークを使用するように設定します。

rcnnCheckPoint = rcnnObjectDetector ();rcnnCheckPoint。RegionProposalFcn = @rcnnObjectDetector.proposeRegions;

网络を保存したネットワークチェックポイントに設定します。

rcnnCheckPoint。网络= checkpoint.net
rcnnCheckPoint = rcnnObjectDetector with properties: Network: [1×1 SeriesNetwork] ClassNames: {'stopSign' ' 'Background'} RegionProposalFcn: @rcnnObjectDetector. proproserregions . properties

入力引数

すべて折りたたむ

ラベル付きのグラウンドトゥルースイメージ。表2列以上のとして指定します。

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

テーブル変数名はオブジェクトクラス名を定義します。グラウンドトゥルーステーブルを作成するには,イメージラベラーアプリを使用します。32行32列より小さいボックスは学習に使用されません。

ネットワーク。SeriesNetwork(深度学习工具箱)(深度学习工具箱)オブジェクトの配列,layerGraph(深度学习工具箱)オブジェクト,またはネットワークの名前で指定します。trainingDataテーブルで定義されているオブジェクトクラスを分類するようネットワークを学習させます。SeriesNetwork(深度学习工具箱)(深度学习工具箱),およびlayerGraph(深度学习工具箱)オブジェクトは深度学习工具箱で使用可能です。

  • ネットワークをSeriesNetworkオブジェクトの配列,またはネットワークの名前で指定する場合,オブジェクト検出をサポートする新しい分類層と回帰層を追加して,ネットワークは自動的にR-CNNネットワークに変換されます。

  • (深度学习工具箱)オブジェクトの配列には,オブジェクトクラスの数と背景クラスをサポートする分類層が含まれていなければなりません。各層の学習率をカスタマイズするには,この入力タイプを使用します。(深度学习工具箱)オブジェクトの配列の例:

    layers = [imageInputLayer([28 28 3])卷积2dlayer ([5 5],10) reluLayer() fulllyconnectedlayer (10) softmaxLayer() classificationLayer()];

  • ネットワークをSeriesNetwork配列として指定するか,ネットワークを名前で指定すると,畳み込み用の重みと全結合層は“narrow-normal”に初期化されます。

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

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

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

学習オプション。trainingOptions(深度学习工具箱)関数によって,深度学习工具箱から返されます。ネットワーク学習に使用するソルバーおよびその他のオプションを指定するには,trainingOptionsを使用します。

メモ

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

  • ValidationDataValidationFrequency,またはValidationPatienceオプション

名前と値のペアの引数

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

例:“PositiveOverlapRange”(0.5 - 1)

境界ボックスのオーバーラップ範囲におけるポジティブ学習サンプルの比率”。PositiveOverlapRange《と2要素ベクトルで構成されるコンマ区切りのペアとして指定します。ベクトルには範囲[0,1]の値が含まれます。指定した範囲内のグラウンドトゥルース境界ボックスとオーバーラップする領域提案がポジティブ学習サンプルとして使用されます。

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

一个 r e 一个 一个 B ) 一个 r e 一个 一个 B )


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

境界ボックスのオーバーラップ範囲におけるネガティブ学習サンプルの比率”。NegativeOverlapRange《と2要素ベクトルで構成されるコンマ区切りのペアとして指定します。ベクトルには範囲[0,1]の値が含まれます。指定した範囲内のグラウンドトゥルース境界ボックスとオーバーラップする領域提案がネガティブ学習サンプルとして使用されます。

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

カスタム領域提案関数ハンドル。”RegionProposalFcn“と関数名で構成されるコンマ区切りのペアとして指定します。カスタム領域提案関数を指定しない場合,rcnnObjectDetectorで設定されている边缘盒子アルゴリズム[3]の既定のバリアントが使用されます。カスタムのproposalFcnは次の関数形式でなければなりません。

[bboxes,分数]= proposalFcn(我)

入力は,groundTruthテーブルで定義されているイメージです。関数は,四角形の境界ボックスを M 行 4 列の配列で返さなければなりません。bboxesの各行には,境界ボックスの左上隅とサイズをピクセル単位で指定する4要素ベクトル[x, y,宽度、高度]が含まれます。また,関数は,各境界ボックスのスコアをM行1列のベクトルで返さなければなりません。スコア値が高い場合,境界ボックスにオブジェクトが含まれている可能性が高いことを示します。スコアは,NumStrongestRegionsで指定できる最も強い領域の選択に使用されます。

ボックス回帰層の名前”。BoxRegressionLayer“と文字ベクトルで構成されるコンマ区切りのペアとして指定します。有効な値は“汽车”または入力ネットワークの層の名前です。この層の出力活性化は,検出された境界ボックスを調整するよう回帰モデルを学習させる特徴として使用されます。

名前が“汽车”の場合,trainRCNNObjectDetectorは,入力ネットワークのタイプに基づいて入力ネットワークから自動的に層を選択します。

  • 入力网络SeriesNetworkまたはオブジェクトの配列の場合,関数は最後の畳み込み層を選択します。

  • 入力网络LayerGraphの場合,関数は最後の全結合層の結合元を選択します。

出力引数

すべて折りたたむ

学習済みのR-CNNベースのオブジェクト検出器。rcnnObjectDetectorオブジェクトとして返されます。R-CNN検出器を学習させて複数のオブジェクトクラスを検出することができます。

学習に関する情報。次のフィールドを持つ構造体として返されます。各フィールドは,学習の反復ごとに1つの要素を持つ数値ベクトルです。特定の反復で計算されていない値は,で表されます。

  • TrainingLoss——各反復での学習損失。これはR-CNNネットワークを学習させるために使用される分類と回帰損失の組み合わせです。

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

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

制限

  • このR-CNNの実装では,各オブジェクトクラスのSVM分類器の学習は実行されません。

ヒント

  • 学習のデータの前処理を高速化するために,trainRCNNObjectDetector並列基本設定の設定値に基づいて並列プールを自動的に作成し,使用します。これには,并行计算工具箱が必要です。

  • VGG-16、VGG-19 resnet - 101,およびInception-ResNet-v2は大きなモデルです。大きなモデルで学習すると,“メモリ不足”エラーが発生する可能性があります。このようなエラーを軽減するには,trainRCNNObjectDetectorを呼び出す前に境界ボックスのグラウンドトゥルースデータと共にイメージのサイズを手動で変更します。

  • この関数は,転移学習をサポートします。ネットワークを“resnet50”などの名前で入力する場合,ネットワークは,事前学習済みのresnet50(深度学习工具箱)モデルベースの有効なR-CNNネットワークモデルに自動的に変換されます。または,事前学習済みのDAGネットワークから抽出したLayerGraph(深度学习工具箱)を使用して手動でカスタムR-CNNネットワークを指定します。R-CNNオブジェクト検出ネットワークの作成を参照してください。

  • 詳細印刷を有効または無効にするには,関数trainingOptions(深度学习工具箱)を使用します。

参照

R.格希克、J.多纳休、T.达雷尔和J.马利克。精确目标检测和语义分割的丰富特征层次计算机工程与应用学报,2014,34(5):548 - 548。

[2] Girshick, R.“Fast R-CNN”。计算机工程与应用,2015,35(4):441 - 446。

兹特尼克,C.劳伦斯和P. Dollar。"边缘框:从边缘定位对象"计算机视觉- eccv,施普林格,2014,pp. 391-405。

拡張機能

R2016bで導入