ターゲット検出アルゴリズム: RCNN 論文解釈の高速化

ターゲット検出アルゴリズム: RCNN 論文解釈の高速化

序文

実際、インターネット上にはさまざまな論文を解釈した優れた記事がすでにたくさんありますが、私は自分で記事を書くことにしました。もちろん、私の主な目的は、論文を自分で整理し、深く理解するのに役立つことです。 「自分が学んだことを考慮に入れなければなりません。私が書いたことは明確で正しいです。これは良い練習になると思います。もちろん、ネット民の役に立てれば、それは非常に幸せなことでもあります」

説明する

事務的な間違いや書き間違いがあれば、ご指摘ください(スプレーしないでください)、より良い意見があれば、提案することもできます、一生懸命勉強します。

元の論文のアドレス

ここをクリックするか、リンクをコピーしてください

https://arxiv.org/abs/1506.01497

ディレクトリ構造

1. 記事の内容の概要:

現在の検出アルゴリズムはすべて「領域提案」アルゴリズムに依存しています。SSP-net や Fast-RCNN などの技術の進歩により、検出ネットワークの実行時間は短縮されましたが、領域提案に時間がかかることも明らかになりました。 。

そこで著者はFast-RCNNをベースとしたRPNを導入し、元のCNN構造にいくつかの畳み込み層を追加することで、重みの共有を実現しながらコストフリー領域提案法をほぼ実現する。

2. より高速な RCNN プロセスの導入:

論文の原画におけるプロセスは次のとおりです。

ここに画像の説明を挿入

もちろん、プロセスがどのようになっているのかを知りたいだけで、内部には興味がない場合は、この図を直接見ることができます。プロセスは次のとおりです。

  • まずは画像を入力してください
  • 次に、この画像は CNN アーキテクチャに送信され、特徴マップが出力されます。
  • 次に、RPN ネットワークを使用して地域の提案ボックスをいくつか生成します。
  • 次に、領域提案ボックスを特徴マップにマッピングし、ROI プーリング手法を使用して固定長の出力を生成します。
  • 次に、ROI プーリングによって出力された値を回帰と分類に使用します。

**ただし、上記のプロセスは実際には非常に短く、いくつかの場所で疑問に満ちています。**したがって、インターネット上の一部の上級者は、pytorch の公式コードと論文 (参考資料 1 より) に基づいて詳細なフローチャートをまとめています。

ここに画像の説明を挿入

上の図を簡単に説明すると、

  • まず、画像が指定されたサイズにスケーリングされ、完全に接続されたレイヤーが削除された状態で VGG16 に送信され、特徴マップが出力されます。

質問: 指定されたサイズに拡大縮小するのはなぜですか?

ROI プーリング (入力に関係なく、出力サイズは固定) では、なぜ指定されたサイズにズームする必要があるのでしょう。これは当時の実装ツールの制限があり、tensorflow や pytorch などの簡易フレームワークがなかったので、利便性を考慮して画像を処理しやすいように同じサイズにスケーリングしました。

  • 次に、特徴マップは 2 つのステップに分割され、1 つは RPN に送信され、もう 1 つは ROI プーリングに送信されます。

    • RPN 部分: まず、いわゆるアンカーが特徴マップ走査に従って生成され、次に特徴マップが 3*3 畳み込み層の対象となり、その後回帰 (校正アンカー) と分類 (識別アンカー) がそれぞれ実行されます。上図の RPN 構造では、上のパスが分類、下のパスが回帰です。
  • 次に、RPN によって生成されたプロポーザル ボックス (つまり、上記で調整されたアンカー) を使用して特徴マップ上にマッピングし、ROI Pooling 操作の各プロポーザル ボックスに対応する特徴マップのコンテンツ (サイズが異なる) を抽出して出力します。対応する ROI プーリング特徴ベクトル (同じ長さ)。

  • 最後に、ROI プーリング特徴ベクトルに対して 2 つの全結合操作を実行し、分類と回帰 (ソフトマックス) を実行します。

次に、上記の重要な知識ポイントを解釈します。

3. アンカー/アンカーボックス:

RPN は Faster-RCNN の最も重要な構造であり、最初にその目的を理解する必要があります:適切な領域提案ボックスを生成することです。

次に、論文の元の画像を見てください。

ここに画像の説明を挿入

まず上の図について簡単に説明し、その後詳細を詳しく説明します上図の conv 特徴マップは CNN アーキテクチャの最終出力特徴マップで、赤いボックスはスライディング ウィンドウと呼ばれます。つまり、特徴マップ上でウィンドウをスライドさせます。このウィンドウは特徴マップの n*n (図の 3*3) を入力として受け取り、最終出力 (図の 256-d) を分類と回帰に送信します。 。

実際、このいわゆるスライディング ウィンドウが 3*3 の畳み込み層であることは難しくありませんが、これは魔法のようなものではありません。これは、元の Faster-RCNN の 3*3 畳み込み層にも対応します。

説明: 上記の数字の意味

256-d、これが次元の意味です。Faster-RCNN 論文では、CNN アーキテクチャは ZF モデルを採用しており、モデルの最後の畳み込み層によって出力される特徴マップ チャネルの数は 256 次元であるためです。同様に、VGG16 に変更すると、ここは 512-d になるはずです。

k 個のアンカー ボックスについて知っておく必要があるのは、アンカー ボックスは領域提案ボックスであるということですが、この時点の領域提案ボックスは分類と回帰によって修正されていないため、まだ非常に粗いです。このうち、kは量を意味します。

2k スコアと 4k 座標。1 つは分類スコア (確率値)、もう 1 つは座標値です。2k は 2 つの値 (正の場合の確率 + 負の場合の確率) を持つボックスを意味し、k 個のボックスは 2k の値になります。同様に、4k はボックスの 4 つの座標値 (x+y+w+h) を意味し、k 個のボックスは 4k 値になります。

説明: アンカーボックスの生成方法

まず、Anchor は一般にボックスの中心を指しますが、Anchor Boxex はボックスを指します。

上の図から、k 個のアンカー ボックスの中心が青い点線のスライディング ウィンドウの中心に対応していることがわかります。 **これは、スライディング ウィンドウ (可動) の各中心が k を生成することを意味します。アンカーボックス。また、スライディング ウィンドウが実際には 3*3 の畳み込み層であり、特徴マップがその入力であることもわかっています。これは、特徴マップの各点が k 個のアンカー ボックスを生成することを意味します。**原文では、k は 9 です。

最初の問題、つまりアンカー ボックスがどのように生成されるかは上記で解決されました。そこで、別の質問がありますが、各ポイントは k 個のアンカー ボックスを生成しますが、このアンカー ボックスには何か要件はありますか? 実際、これは人工的なものであり、論文では、次の図 (私が描いたもの) に示すように、3 つの比率と 3 つのアスペクト比が使用され、3*3=9 個のボックスが生成されると著者は考えています。コード、一般的には基本的なアンカーが与えられ、後者は比率などに応じて生成されます)

ここに画像の説明を挿入

説明: 特徴マップ上のアンカー ボックスの数

元の画像のサイズが 400*400 で、CNN アーキテクチャが VGG16 を採用していると仮定すると、元の画像が VGG16 を通過した後、取得された特徴マップは実際には 16 分の 1 (4 つのプーリング層、各層) に縮小されることがわかります。 2倍に減ります)。

次に、アンカー ボックスの総数は次のようになります。

(400/16)*(400/16)*9 = 5625

ここで問題が発生します。5,000 を超える目安箱が多すぎます。次に著者は256 個の適切な提案ボックスを選択し、肯定的な例と否定的な例の比率は 1:1 でした。

目安箱が適切かどうかはどうやって判断するのですか?以下の条件が満たされる場合に限ります。

  • IOU > 0.7 の提案箱は良い例です
  • 最大の IOU を備えた提案箱は良い例です
  • IOU < 0.3 の提案ボックスは否定的な例です
  • 0.3 ~ 0.7 の間の提案ボックスは無視されます

説明: NMS と範囲外の削除

目安箱を取得した後、NMS (非最大抑制。不明な場合は、私の RCNN 論文を参照して解釈してください) および範囲外除去 (つまり、目安箱が元の画像を超えているため、削除されました)。

説明: 以下の図の 18 と 36 はどのようにして得られるのでしょうか?

ここに画像の説明を挿入

まず第一に、18 と 36 は両方ともチャネルまたは次元の数を表します。36=4*9、つまり 9 つのボックス。各ボックスには 4 つの座標値があり、対応するデータ形式は次のようになります。

[batch_size,4*9,W,H]

18=2*9、つまり 9 つのボックス。各ボックスは 2 つのカテゴリ値 (正または負の例) に対応し、対応するデータ形式は次のとおりです。

[batch_size,2*9,W,H]

質問: アンカー ボックスは元の画像または特徴マップで生成されますか?

実際、私の個人的な観点からは、元の画像上に生成されたアンカー ボックスと特徴マップの間に大きな違いはありませんたとえば、元のイメージで生成された場合は、16 で割ることによって特徴マップ (VGG16) にマッピングできます。同様のことが特徴マップにも当てはまります。

ただし、実際的な観点から、アンカー ボックスは元の画像内に生成されます。なぜそんなことを言うのですか?アンカー ボックスと実際のボックスの IOU 値を計算する必要があるため、これにより、元のイメージで生成されたことがある程度わかります (もう 1 ステップ計算してリソースを無駄にしない限り)。

RPN の回帰をどのように認識するか?

これは何と言うか、一般的なフレーム回帰問題で、RCNNのフレーム回帰とほぼ同じです。特別なことは何もありません。興味があれば、私のブログのトップページを開いて、 の解釈の部分を見つけてください。 RCNNの報道。または、以下のリンクをコピーしてください。

https://blog.csdn.net/weixin_46676835/article/details/129929232

4. 損失関数:

Faster-RCNN の損失関数は非常に満足のいくものであり、Fast-RCNN の変換は大きくありません。

具体的な計算式は以下の通りです。

ここに画像の説明を挿入

そのうち:

  • i はバッチ内の i 番目のアンカー ボックスを表します
  • Piはアンカー枠で囲まれた物体が異なる種類である確率を示します(例えば全部で20種類あり、それぞれの種類の確率値です)
  • Pi* は {0, 1} をとり、その値はアンカー i が正例であるかどうかによって決まります。正例の場合は 1 をとり、そうでない場合は 0 をとります。これは、値が 1 の場合にのみ回帰が損失に含まれることを意味します。つまり、オブジェクトを含むボックスのみが損失を含む価値があり、それ以外の場合は意味がありません。
  • tiはi番目のアンカーに対応する4つの座標値を表し、ti*は実フレームの座標値です
  • 論文では、Nclsはbatch_sizeの数(256と仮定)、Nregは特徴マップのサイズ(入力画像が600*1000、VGG16アーキテクチャ、特徴マップのサイズが約2400であると仮定)を受け取ります。 λ は2 つのバランスを取るために使用されます。大きさの関係は、このとき 2400/256、つまり約 10 になります。
  • コードでは、Ncls と Nreg の両方に batch_size サイズを直接指定して、λ を直接 1 として取得できるようにします。これは便利で簡単です。

Lcls は、一般的に使用される分類損失関数、つまりクロス エントロピー損失関数です。

ここに画像の説明を挿入

Lreg は、ターゲット検出の分野で一般的に使用される滑らかな L1 損失関数です。

ここに画像の説明を挿入

5. RCNN トレーニングの高速化:

考えてみてください。Faster-RCNN のトレーニング プロセスは、実際にはアンカーと同じくらい重要です。

実際、Faster-RCNNの学習方法について、著者は4ステップ交互学習、近似結合学習、非近似結合学習の3つの方法を提案しました。

これら 3 つの方法について簡単に説明します。

  • 代替トレーニング:著者が採用した方法(詳細は後述)
  • 近似的な共同トレーニング: トレーニング中に RPN とFast -RCNN を 1 つのネットワークに結合します。フォワード パス中に、RPN は領域提案ボックスを生成し、これらの領域提案ボックスが Fast-RCNN に送信されます。戻すときは通常通り逆伝播しますが、共有畳み込み層 (つまり CNN アーキテクチャ部分) では、RPN 損失と Fast-RCNN 損失が組み合わされます。
    • この方法は実装が簡単ですが、アンカー ボックスの座標の微分値が無視されます。つまり、アンカー ボックスの微分値はバックプロパゲーション中に考慮されません (これは近似の起源でもあります)。
  • 非近似共同トレーニング: 非常に複雑なので考慮しないでください

著者は最終的に Faster-RCNN をトレーニングするための代替トレーニング方法を選択しました。具体的なプロセスは次のとおりです。

  • まず、CNN アーキテクチャ (ここでは VGG に設定) を使用して ImageNet 上でトレーニングする必要があります。
  • 次に、VGG は RPN ネットワーク部分 (重み/畳み込み共有アイデア) を追加し、一連の地域提案ボックスを生成する RPN のトレーニングを開始します。
  • Faster-RCNN の初めてのトレーニング (RPN 部分は含まず、より正確には Fast-RCNN のトレーニング)
  • RPN を再度トレーニングして、新しいリージョン提案ボックスを取得します
  • 2 番目のトレーニング Faster-RCNN (RPN 部分は含まず、より正確に Fast-RCNN をトレーニングします)
  • ...(収束するまで繰り返し繰り返し、筆者は2回ほどで収束することが分かった)

6. 概要:

Faster-RCNN は、これまでのエッセンスをすべて吸収した 2 段階検出の傑作です。その主な貢献は次のとおりです。

  • RPN構造を提案し、畳み込み共有の手法を巧みに利用して計算量を削減
  • アンカーのアイデアを提案
  • 代替トレーニング方法

おすすめ

転載: blog.csdn.net/weixin_46676835/article/details/131049773