07- アルゴリズム解釈の高速化_R-CNN (ターゲット検出)

要点:

  • Faster_R-CNN = RPN + 高速 R-CNN

GitHub地址:メインでのvision/torchvision/models/detection · pytorch/vision · GitHub


スリーファスター_R-CNN

Faster R-CNN は、 Fast R-CNNに続く著者Ross Girshickのもう 1 つの傑作 です。 また、ネットワークのバックボーンとしてVGG16を使用することで、推論速度はGPU上で5fpsに達し(候補領域の生成を含む) 精度率がさらに向上しました。2015 年I L S V R CおよびC O C Oコンペティションはいくつかのプロジェクトで優勝しました。  

 Faster R-CNN アルゴリズムのプロセスは 3 つのステップに分割できます

  • 画像をネットワークに入力して、対応する特徴マップを取得します
  • RPN 構造を使用して候補フレームを生成し、RPN によって生成された候補フレームを特徴マップに投影して、対応する特徴行列を取得します。
  • ROI プーリング層を介して各特徴行列を 7x7 特徴マップにスケーリングし、その後、完全に接続された一連の層を介して特徴マップを平坦化して、予測結果を取得します

3.1 損失ロジック

特徴マップ上の 3x3 スライディング ウィンドウごとに、元の画像の中心点に対応するスライディング ウィンドウの中心点を計算し、k 個のアンカー ボックスを計算します(提案との違いに注意してください)。

  • 3 つのスケール (面積) { 1282 、 2562 、 5122 }
  • 3 つの比率 { 1:1、1:2、2:1 } 
  • 各位置 (各スライディング ウィンドウ) は、元の画像上の 3x3=9 のアンカーに対応します。

1000x600x3 の画像の場合、約 60x40x9 (20k) のアンカーがあり、境界を越えるアンカーを無視すると、約 6k のアンカーが残ります。RPN によって生成された候補フレーム間には多くの重複があります。候補フレームの cls スコアに基づいて、非最大抑制が使用され、IoU が 0.7 に設定されるため、ピクチャごとに 2k の候補フレームのみが残ります。 。

3.2 RPN マルチタスク損失

3.3分類損失

3.4境界ボックス回帰損失

 3.5 より高速な R-CNN トレーニング

RPN Loss + Fast R-CNN Loss の共同トレーニング方法を直接採用

元の論文では、RPNとFast R-CNNをそれぞれ学習させる方法

(1) imageNet の事前トレーニング済み分類モデルを使用して、事前畳み込みネットワーク層のパラメーターを初期化し、 RPNネットワーク パラメーターのトレーニングを個別に開始します。

(2) RPN ネットワークの固有の畳み込み層と全結合層パラメータを修正し、marelNet 事前トレーニング分類を使用して事前畳み込みネットワーク パラメータを初期化し、RPN ネットワークによって生成されたターゲット候補ボックスを使用して FastRCNN ネットワークパラメータ

(3) Fast RCNN によってトレーニングされた事前畳み込みネットワーク層パラメーターを修正し、RPN ネットワークの固有の畳み込み層と全結合層パラメーターを微調整します。

(4)また、事前畳み込みネットワーク層のパラメータを固定したままにし、FatRCNN ネットワークの全結合層のパラメータを微調整します。最後に、RPN ネットワークと FastRCN ネットワークは、事前畳み込みネットワーク層のパラメーターを共有して、統合ネットワークを形成します。

3.6高速なR-CNNフレームワーク

構造比較:


3.7 FPNネットワーク

  • 物体検出タスク用
  • cocoAP 2.3ポイント増加
  • PascalAP が 3.8 ポイント増加

3.7.1 異なる予測特徴層に対するRPNFast RCNNの重み共有


3.8 ソースコードの解釈

環境構成:

  • Python3.6/3.7/3.8
  • Pytorch1.7.1 (注: 公式混合精度トレーニング 1.6.0 を使用した後でのみサポートされるため、1.6.0 以降である必要があります)
  • pycocotools(Linux: pip install pycocotools; Windows: pip install pycocotools-windows(vs をインストールする必要はありません))
  • トレーニングには GPU を使用するのが最適
  • 詳細な環境構成については、を参照してください。requirements.txt

ファイル構造:

  §── バックボーン: 特徴抽出ネットワーク、独自の要件に応じて選択できます
  §── network_files: 高速 R-CNN ネットワーク (高速 R-CNN および RPN モジュールを含む)
  §── train_utils: トレーニングおよび検証関連モジュール (cocotools を含む) )
  §── my_dataset.py: VOC データセットを読み取るためのカスタム データセット
  §── train_mobilenet.py: バックボーンとして MobileNetV2 を使用したトレーニング
  §── train_resnet50_fpn.py: バックボーンとして resnet50+FPN を使用したトレーニング
  §── train_multi_GPU .py:複数の GPU を使用するユーザー
  §── detect.py: シンプルな予測スクリプト、予測テストにトレーニング済みの重みを使用します
  §── validation.py: トレーニング済みの重みを使用してデータの COCO インジケーターを検証/テストし、record_mAP.txt ファイルを生成します
  ━── pascal_voc_classes.json: pascal_voc ラベルファイル

トレーニング前ウェイトのダウンロード アドレス(ダウンロード後、バックボーン フォルダーに置きます):

このプロジェクトでは PASCAL VOC2012 データセットが使用されています

トレーニング方法:

  • 必ず事前にデータセットを準備してください
  • 対応する事前トレーニング済みモデルの重みを必ず事前にダウンロードしてください。
  • mobilenetv2+fasterrcnn をトレーニングするには、train_mobilenet.py トレーニング スクリプトを直接使用します。
  • resnet50+fpn+fasterrcnn をトレーニングするには、train_resnet50_fpn.py トレーニング スクリプトを直接使用します。

予防:

  • トレーニング スクリプトを使用するときは、「--data-path」(VOC_root) を「VOCdevkit」フォルダーを保存するルート ディレクトリに設定するように注意してください。
  • FPN 構造を備えた高速 RCNN は大量のビデオ メモリを消費するため、GPU ビデオ メモリが十分でない場合 (batch_size が 8 未満の場合)、create_model 関数でデフォルトの Norm_layer、つまり Norm_layer を使用することをお勧めします。変数は渡されず、FrozenBatchNorm2d がデフォルトで使用されます (つまり、更新されません。パラメーターの bn 層) が使用されており、その効果は非常に優れていることがわかります。
  • 予測スクリプトを使用する場合は、「train_weights」を独自に生成したウェイト パスに設定します。
  • 検証ファイルを使用する場合は、検証セットまたはテスト セットに各カテゴリのターゲットが含まれていることを確認してください。また、変更する必要があるのは--num-classes 」、「 --data-path 」「 --weights 」のみです。はい、他のコードは変更しないようにしてください。

おすすめ

転載: blog.csdn.net/March_A/article/details/130569656