サイトアイコン NegativeMindException

Faster R-CNN:ディープラーニングによる一般物体検出手法

R-CNNFast R-CNNに引き続きFaster R-CNNのアルゴリズムのお勉強。名前が似ていてややこしいですな。


ディープラーニングによる一般物体検出アルゴリズムまとめ
これまで勉強したディープラーニングによる一般物体検出手法のアルゴリズム一覧。


しつこくこちらの系譜図を引用する↓

Faster R-CNNからEnd-to-Endのアプローチが始まります。


Faster R-CNN

NIPS 2015で発表された論文 Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networksで提案されたFaster R-CNNでは、従来Selective Searchで行っていた候補領域(region proposals)の検出処理をRPN (Region Proposal Network)というニューラルネットワークに置き換えてさらなる効率化を実現した。

Faster R-CNNのネットワークアーキテクチャ図でregion proposalと表記されているのがRPN

これで物体検出の全ての処理が1つのニューラルネットワークにつながった。End-to-Endアプローチということですね。

ZFNet

この論文で例示されている特徴抽出CNNは、Visualizing and understanding convolutional neural networksで提案されたZF(Zeiler and Fergus)Net。(AlexNetの改良版)

ZFNetの5つの畳み込み層を経て出力される特徴マップは256チャンネル(256-d)となる。
(特徴抽出に使うCNNVGGでも良いらしく、その場合の特徴マップは512チャンネルとなる)

通常、一般物体検出の対象となる画像のサイズは1000×600程度で、CNNで特徴マップ化すると16分の1の程度のサイズ(60×40)に縮小される。

RPN (Region Proposal Network)

物体領域候補の検出を行うRPN (Region Proposal Network)は、画像全体からCNNで抽出した特徴マップに対して、候補領域のBounding Boxと、その領域の物体らしさ(Objectness)を表すスコアを出力する。

RPNは小さなニューラルネットワークで、特徴マップ上をn×nサイズのスライディングwindowで走査し、各々のn×nサイズの注目領域をネットワークの入力とする。
そして、各スライディングwindow位置に対してk個の候補領域を推定する。

k個の候補領域を推定するために、RPNは以下2つの全結合層へ分岐する。


スポンサーリンク

cls layerには、k個の各候補領域がオブジェクトか、背景かの確率を推定した2k個のスコアが出力される。
reg layerには、k個のBounding Boxの座標・サイズを表す4k個の出力がある。(x座標、y座標、幅、高さ)

この論文ではn=3とし、実際にはスライディングwindowではなく3×3サイズの畳み込み層と、それに続く2つに分岐した1×1サイズの畳み込み層(Fully Convolutional Networks)として実装している。
(これは3×3のスライディングwindowと等価)

Anchor

スライディングwindowに対して、写っている物体の形状が必ずしも正方形に収まらないことを考慮して、Anchorと呼ばれるk個の検出矩形パターンを用意する。
各スライディングwindowで検出する候補の数k個とはつまり、用意するAnchorの種類の数というわけ。

Anchorはスライディングwindowの中心を基準に設定される。
論文では、アスペクト比の違う3種類の矩形をさらにスケール違いで3種類用意し、k=9としている。

特徴マップのサイズをW×H(2,400以下)とすると、RPNは合計W×H×k個の領域について物体候補かどうかを判定することになる。

RPNAnchorごとの判別を行い、物体である可能性が高いものは、Fast R-CNNと同様にRoIプーリング以降のネットワークへと進み、物体の分類が行われる。

特徴抽出の畳み込み層をRPNと共有する

ここまで、「RPNCNNで抽出した特徴マップを入力とする」と説明してきたけど、正確には「特徴マップを抽出するCNNRPNも共有している」と言う方が適切で、RPN自体も畳み込みニューラルネットワークの構造を持っている↓

単純に畳み込み層を共有するだけでは学習するパラメータが相互に依存してしまうため、段階的に学習する方法が採られている。

  1. ImageNetで学習済みの畳み込み層を使ってRPNを学習する
  2. 学習済みRPNが出力する矩形を使って畳み込み層のパラメータを更新する
  3. 畳み込み層をfixしてRPNを学習し直す

Faster R-CNNの実装

Learn OpenCVにPyTorch実装のチュートリアルがある↓
https://www.learnopencv.com/faster-r-cnn-object-detection-with-pytorch/

Faster R-CNNの特許

一時期話題になりましたが、MicrosoftからFaster R-CNNの特許が出願されています。
https://qiita.com/yu4u/items/6bc9571c19181c1600a7

権利化について結局どうなったのかオイラにはちょっと分からないのですが。。。

今更だけど、R-CNN, Fast R-CNN, Faster R-CNNについて詳細に解説している記事を見つけた↓
http://www.telesens.co/2018/03/11/object-detection-and-classification-using-r-cnns/

次はYOLO (You Only Look Once)についてまとめよう↓


ディープラーニングによる一般物体検出アルゴリズムまとめ
これまで勉強したディープラーニングによる一般物体検出手法のアルゴリズム一覧。


スポンサーリンク

関連記事

  • 機械学習で遊ぶ
  • GAN (Generative Adversarial Networks):敵対的生成ネットワーク
  • Physics Forests:機械学習で流体シミュレーションを近似する
  • Google App Engineのデプロイ失敗
  • Digital Emily Project:人間の顔をそっくりそのままCGで復元する
  • Two Minute Papers:先端研究を短時間で紹介するYouTubeチャンネル
  • openMVG:複数視点画像から3次元形状を復元するライブラリ
  • PCA (主成分分析)
  • UnityのTransformクラスについて調べてみた
  • VCG Library:C++のポリゴン操作ライブラリ
  • Kubric:機械学習用アノテーション付き動画生成パイプライン
  • HD画質の無駄遣い
  • Mechanizeで要認証Webサイトをスクレイピング
  • Iridescence:プロトタイピング向け軽量3D可視化ライブラリ
  • WordPressのテーマを自作する
  • 機械学習手法『Random Forest』
  • OpenCVでPhotoshopのプラグイン開発
  • KelpNet:C#で使える可読性重視のディープラーニングライブラリ
  • 仮想関数
  • iPhone x ロボットハッカソン~RomoのiPhone用SDKで目覚ましアプリを作る~
  • Raspberry Pi 2のGPIOピン配置
  • UnityでShaderの入力パラメータとして行列を渡す
  • サンプルコードにも間違いはある?
  • データサイエンティストって何だ?
  • Point Cloud Utils:Pythonで3D点群・Meshを扱うライブラリ
  • UnityのAR FoundationでARKit 3
  • オープンソースの物理ベースレンダラ『Mitsuba』をMayaで使う
  • viser:Pythonで使える3D可視化ライブラリ
  • trimesh:PythonでポリゴンMeshを扱うライブラリ
  • Math.NET Numerics:Unityで使える数値計算ライブラリ
  • Blender 2.8がついに正式リリース!
  • Pythonの自然言語処理ライブラリ『NLTK(Natural Language Toolkit)』
  • ManuelBastioniLAB:人体モデリングできるBlenderアドオン
  • GoogleのDeep Learning論文
  • Unity ARKitプラグインサンプルのドキュメントを読む
  • Regard3D:オープンソースのStructure from Motionツール
  • cvui:OpenCVのための軽量GUIライブラリ
  • OpenFace:Deep Neural Networkによる顔の個人識別フレームワーク
  • CycleGAN:ドメイン関係を学習した画像変換
  • CGALDotNet:計算幾何学ライブラリ CGALのC#ラッパー
  • まだ続くブログの不調
  • Google App Engine上のWordPressでAmazonJSを利用する
  • モバイルバージョンを終了