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

Faster R-CNN Network

これで物体検出の全ての処理が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:物体かどうか(objectness)を分類する
  • reg layer:Bounding Boxの回帰を行う


スポンサーリンク

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

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

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

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

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

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

Region proposal network

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

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

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)についてまとめよう↓



スポンサーリンク

関連記事

openMVGをWindows10 Visual Studio 2015環境でビルドする
RefineNet (Multi-Path Refinement Network):ディープラーニン...
畳み込みニューラルネットワーク (CNN:Convolutional Neural Network)
Googleが画像解析旅行ガイドアプリのJetpac社を買収
ZBrushトレーニング
オープンソースのStructure from Motionライブラリ『Theia』
OpenCVで顔のモーフィングを実装する
SSII2014 チュートリアル講演会の資料
池袋パルコで3Dのバーチャルフィッティング『ウェアラブル クロージング バイ アーバンリサーチ』
AnacondaとTensorFlowをインストールしてVisual Studio 2015で使う
AfterEffectsプラグイン開発
読みやすくて高速なディープラーニングのフレームワーク『Caffe』
Deep Neural Networkによる顔の個人識別フレームワーク『OpenFace』
BlenderでPhotogrammetryできるアドオン
Facebookの顔認証技術『DeepFace』
represent
OpenCVのための軽量GUIライブラリ『cvui』
OpenCVのfindEssentialMat関数を使ったサンプルを読んでみる
Two Minute Papers:最新の研究論文を数分間で紹介するYouTubeチャンネル
複数視点画像から3次元形状を復元するライブラリ『openMVG』
ディープラーニング
オープンソースのPhotogrammetryフレームワーク『Alice Vision』
OpenCVでカメラ画像から自己位置認識 (Visual Odometry)
OpenMVSのサンプルを動かしてみる
統計的な顔モデル
複数画像から3次元形状を再構築するライブラリ『Multi-View Environment』
U-Net:ディープラーニングによるSemantic Segmentation手法
UnityでOpenCVを使うには?
画像処理を基礎から学べるキーエンスのサイト『画像道場』
ベイズ推定とグラフィカルモデル
PSPNet (Pyramid Scene Parsing Network):ディープラーニングによ...
OpenCV3.3.0でsfmモジュールのビルドに成功!
Houdiniのライセンスの種類
CGのためのディープラーニング
OpenCV バージョン4がリリースされた!
Point Cloud Libraryに動画フォーマットが追加されるらしい
オープンソースの顔の動作解析ツールキット『OpenFace』
全脳アーキテクチャ勉強会
C#で使える可読性重視のディープラーニングライブラリ『KelpNet』
顔画像処理技術の過去の研究
DCGAN (Deep Convolutional GAN):畳み込みニューラルネットワークによる敵...
機械学習手法『SVM(Support Vector Machine)』

コメント