1. Faster R-CNN とは [概要]
Faster R-CNN とは「領域提案を用いた2ステージ型物体検出向けCNN」の元祖となった提案である [Ren et al., 2015].効率的な2ステージ計算を通じて,物体検出CNNのEnd-to-End 学習化と,準リアルタイム計算を初めて達成した.つまりは,「アンカーありの2ステージ物体検出CNN」の元祖定番である.
この記事では,まず 前身手法の R-CNN [Girshick et al., 2014] (2.1節) と Fast R-CNN [Girshick, 2015](2.2節)の概要を紹介する.それを踏まえたうえで,本題である End-to-End学習されたFaster R-CNN について紹介する(3節).
Faster R-CNNは,画期的な研究で貢献は大きいが,その中でも特に,以下2点の達成が主たる貢献である(※ ROI poolingは,その1つ前のFast R-CNN (2.2節)で提案済み):
- 領域提案(Region Proposal)を推定する,領域提案ネットワーク(RPN)の提案(3.1節).
- アンカーボックス(3.1.1節) の導入による計算効率化.
まず 1.2節では,Faster R-CNN 3部作の「全体の流れ」を先にまとめておくことで,読者の方々の俯瞰度を高めてから2節以降の詳細紹介に入りたい.
1.1 記事の構成
以降は,以下のような構成である:
- 1.2節:Faster R-CNN 3部作の変遷
- 2節 前身の2手法:
- 2.1 R-CNN (bboxの修正量回帰,マルチタスク学習の導入)
- 2.2 Fast R-CNN (ROI Poolingによる,後半ステージの全ニューラルネット化)
- 3節 Faster R-CNN
- 3.1 アンカーボックスの導入
- 3.2 [前半ステージ] RPN
- 3.3 [後半ステージ] Fast R-CNN
- 3.4 モデルの交互学習
- 4節 まとめ
なかでも,前半ー後半ステージの間をつなぐ上で重要な,ROI Pooling(2.2.1節)とアンカーボックス(3.1節)に焦点を当てて紹介していきたい.
1.2 Faster R-CNN 3部作の変遷
2014年ごろの当時は,AlexNetの登場を受けて,画像認識CNNの物体検出への活用が探られていたという段階にあった.
その1手法として,Faster R-CNNの著者グループは,領域提案を前後半ステージ間で受け渡す,2ステージ型物体検出手法の,R-CNN [Girshick et al., 2014] を既に提案していた(2.1節):
- 前半ステージ(領域提案の検出):
- 非 DNN手法(selective search など)を用いて,後半ステージの処理対象領域である領域提案(region proposal)を検出する (※ Objectness領域の検出 [Cheng et al., 2014] に相当するステージ).
- 後半ステージ(領域提案のみ処理):
これに対し,まず Fast R-CNN [Girshick, 2015] (2.2節)は,後半ステージを2ヘッドのマルチタスクネットワークを用いて,「識別と回帰」を1つのネットワークに一体化することを提案した(2.2節). 画像全体をCNNバックボーンで特徴マップ化したのち,領域候補内の特徴だけをROI Poolingで取り出す.その後,2つのヘッド(小)ネットワークで,「物体クラスの識別」と「BBox修正量の回帰」をそれぞれ行う.しかし,前半は非DNNなSelective Searchのままなので,まだ全体の処理速度がかなり遅かったうえ,Selective Searchの抽出する関心領域(ROI)はノイジーであり,物体ではないもの検出も多数混ざっており,全体の物体検出精度もいまひとつであった.
そこで,Faster R-CNN [Ren et al., 2016] では,前半ステージにCNN(FCN)化した領域提案ネットワーク(RPN: Region Proposal Network)を導入し,初めて前半ステージのCNN化も達成した(3節).これにより,前半と後半でCNN特徴マップを共有化もでき計算効率化ができ,テストも高速化できた.また,前半ステージをFCNとして学習できるので,(学習していないSelective Searchと比べて)RPNの推定した領域提案の結果が高精度になり,全体の検出精度も向上した.
こうしてFaster R-CNNの提案により,ディープラーニングを用いた複数クラス物体検出手法が,初めて実用的な速度・精度に到達した.また,直後にYOLOとSSDの登場もあり,これ移行,実用レベルの複数クラス物体検出ネットワークが休息に発展していく.また,他のタスクの前処理としても,物体検出結果が活用されるようにもなっていく(物体追跡や,画像キャプション生成など)
2. 前身の2手法
画像認識CNN流行後の初期(2012~2013年頃)に,以下のような(素直な)改善案の仮説が,研究者たちの中に生まれはじめた:
- 従来の物体検出で使われてきた,HOG特徴・Haar-like特徴や,SVM・Boostingの代わりに,CNNを特徴抽出+識別器でまるごと使用すれば,CNNの恩恵で物体検出の精度が大きく向上するはず.
- ImageNetから学習する,画像認識CNNと同様に,大規模クラス数を対象とした物体検出器CNNも実現できるはず.
しかし,当時の画像認識CNN(AlexNetやVGGNet)を,従来の「スライディングウィンドウ方式の物体検出」に差し替えるだけだと,各窓で計算負荷の高いCNN順伝搬を,何万回も各ウィンドウ位置で行うはめになってしまう.この「計算非効率性」を突破していく必要があった.
そこで研究者らは,前半ステージで候補を少数にしぼり,後半ステージでだけ少数候補に対して高い負荷の計算を行うという戦略の,以下の「2ステージ構成の手法」を研究し始める:
2ステージ物体検出の構成
- 前半ステージ:
- 物体候補となる領域を,数100~数1000個だけに絞る,検出処理を行う.
- 検出された,物体領域候補BBboxを,領域提案(Region Proposal)と呼ぶ .
- 後半ステージ:
- VGGNetバックボーンが全結合層手前間でに抽出した特徴マップ([7 × 7] × 128チャンネル) から,ROI Poolingを用いて,書く領域提案のBBox範囲内に対応する特徴マップを抽出する.
- 抽出した特徴マップに「Region-CNN」を適用することで以下の2つを推定する:
- [classification] 物体クラスの識別.
- [localization] バウンディングボックスの位置・サイズの,回帰による修正.
- 後処理:
2節では,次の3節でFaster R-CNNを説明する準備として,同じ著者の研究グループから先に提案されていたシリーズ3部作の前身「R-CNN (2.1節)」「Fast R-CNN (2.2節)」の概要を先に紹介する(詳細は,それぞれの記事を参照).その後,本題のFaster R-CNNについて3節で述べる.
2.1 R-CNN (Region CNN)
R-CNN(Region-CNN)は,初めて提案された2ステージ型のCNN物体検出である (図2)[Girshick et al., 2014].Pascal VOC Challenge の物体画像20クラスの検出に対して実験が行われた.
R-CNNでは,以下の処理を順に行う:
R-CNNの処理手順
- 前半ステージ(図2 左側):
- Selective Search [Uijlings et al., 2013] を使用し,後半ステージで処理する領域候補を検出.
- 後半ステージ(図2 右側)::
- 各領域候補において,以下の処理を実施:
- 領域提案のBBox内画像から,R-CNNを順伝搬し特徴ベクトルを算出.
- そのCNN特徴ベクトルを入力として,以下2つの予測を独立に実行:
- [Classification] SVMで,物体クラスを識別.
- [Localization] 線形回帰により,領域候補に対するbboxの修正量を回帰.
- 各領域候補において,以下の処理を実施:
以上の処理により,各領域の最終的な物体検出結果が得られる.
2.1.1 R-CNN の意義と課題
Pascal VOC 2010 において,CNN以前の最高性能手法であった DPM [Felzenszwalb et al., 2010] や Regionlets [Wang et al., 2013] を,mAPで10%以上更新する,大幅な性能向上を達成した.このインパクトにより,ImageNetでの多数クラス物体認識に続き,物体検出問題もCNNで取り組まれるようになっていく.
しかし,R-CNNには以下のような課題があった [Girshick et al., 2014]:
- 学習が3ステージに分離している:
- 各モデル間全体が独立して学習されて一貫性がない.
- 学習が遅い:
- 1画像につき2000個くらいの領域候補が出る.
- 従って2000回/画像も,CNNを順伝搬する必要があり,膨大に学習時間がかかる.
- テストも遅い:
- 1枚の画像を処理するのに47秒もかかる.実用的には到底使えない.
そこで,著者らは,高速化版として,次に(2番目の)Fast R-CNN (2.1節)を提案する.
2.2 Fast R-CNN: 後半ステージの全NN化

Fast R-CNN [Girshick et al., 2015]は,R-CNNの筆頭著者であるRoss Girshick氏による,後半のR-CNNを全CNN化することで処理高速化した改善版である(図4).Fast R-CNNで導入された関心領域プーリング (ROI Pooling) により,後半ステージが完全ニューラルネット化されたことで軽量モデル化され,精度・速度の両面での向上を達成した (※ 前半ステージは変更がなくR-CNNと同じである).
2.2.1 ROI Pooling
ROI pooling(関心領域プーリング)は,画像空間上の関心領域(ROI: Region of Interest)内において,そのROI領域に対応する特徴マップにおいて,空間グリッド領域ごとに,局所的な最大値プーリングをおこなう(微分可能な)プーリング層である(図5).
VGGNetで抽出したCNN特徴マップ(pool5層後)の [H x W] x C 上において(図5の例では [7 x 7] x C),入力画像上の領域提案ROIに対応する範囲から,最大値プーリングによって固定縦横サイズ [h x w] x C (図5では [3 x 3] x C)に特徴を集約する.これにより,前半の領域提案のサイズがバラバラであっても,ROI Pooling実施後は同じサイズの特徴マップに統一されるので,2ステージ目のFast R-CNN の入力サイズを統一することができる.
2.2.2 後半ステージ: Fast R-CNN
まずROI pooling済みの領域提案内の特徴マップ [h x w] x C を,フラット化した特徴ベクトルを作り,全結合層2層を通してROI表現を推定する (図4-右).その結果の,ROI表現ベクトルを入力にして,2つの全結合層ヘッドに「 (1) 物体クラス」「(2) バウンディングボックス回帰」をそれぞれ学習する.
テスト時:
後半ステージのFast R-CNNでは,以下の手順でテストの計算を行う(図4 右側):
処理手順
- 画像全体を先にCNNバックボーンに入力し,画像全体の特徴マップを計算.
- 各$i$番目の領域提案に対して,以下の計算を行う:
- ROI Pooling層で,領域提案$i$の特徴マップをプーリング.
- MLP(全結合層2層)により,領域提案$i$の特徴ベクトルを抽出.
- 全結合層のヘッド2つにより「softmax確率ベクトルをKクラス分」と「bboxの修正量 × Kクラス分」をそれぞれ推定.
- クラス確率最大のクラス$k$と.そのクラスに対応するbbox修正量(のみ)を出力.
- (NMS)非極大値抑制を行い,その結果を最終的な検出結果として出力.
以上がテスト時の処理である.
学習時:正解ROIごとの,マルチタスク損失による学習
Fast R-CNNの(SGD)学習では,物体クラス$u$にラベル付されたROIごとに,以下のマルチタスク損失関数で誤差を計算する:
\[
\mathcal{L}_{fast}(\bm{p},u,\bm{t}^u,\bm{v}) = \mathcal{L}_{cls}(\bm{p},u) + \lambda [ u \geq 1]\mathcal{L}_{bbox}(\bm{t}^u, \bm{t}) \tag{2.1}
\]
($[u \geq 1]$は,アイバーソンの記法(Wikipedia).$u>1$が真の時に値が1で,偽のときは値が0)
式(2.1)で使用されている各変数は以下の通りである:
- $u$: 正解クラスのラベル; $u \in \{0,…..,K \}$.$u = 0$が背景クラス.
- $\bm{p}$: softmax出力の$K+1$次元クラス確率ベクトル; $\bm{p} = (p_0,p_1,\ldots, p_K)$
- $\bm{v}$: 正解bboxの位置とサイズ; $\bm{v} = (v_x,v_y,v_w,v_h)$
- $\bm{t}^u$: 推定されたbboxの修正量; $\bm{t}^u = (t_x^u,t_y^u,t_w^u,t_h^u)$
式(2.1)のクラス識別の損失には,事後確率の負の対数を用いる:
\[ \mathcal{L}_{cls}(\bm{p},u) = – \log p^u \tag{2.2}\]
式(2.1)のbbox修正量回帰の損失には,外れ値に頑健な,Smooth L1損失を用いる:
\[\mathcal{L}_{bbox} (\bm{v}, \bm{t} )= \sum_{i \in \{ x,y,w,h \}} L_1^{smooth}(t_i^u-v_i)\tag{2.3}\]
\[
L_1^{smooth}(x)=\begin{cases}
0.5x^2 & if |x| < 1 \\
|x| – 0.5 & otherwise
\end{cases}
\tag{2.4}
\]
式(2.1)の損失関数$\mathcal{L}_{fast}$を用いてFast R-CNN を学習することに,R-CNNと比べて高速化と性能向上に成功した.こうしてFast R-CNN は,1つのニューラルネットワークに統一できた.
2.2.3 Fast R-CNN の課題
Fast R-CNNは良くなったが,前半ステージは非Deep手法で精度は微妙なSelective Searchのままなので,領域提案の過検出・未検出は起こりがちである.つまり,前段ステージが精度向上のボトルネックである点が,解決できていなかった.したがって,前半ステージもCNN化して,安定した領域提案検出を行いたいという動機のもと,この記事の本題であるFaster R-CNN(3節)が登場する.
3. Faster R-CNN
Faster R-CNN [Ren et al., 2015] は,Fast R-CNNの前半ステージを領域提案ネットワーク(RPN: Region Proposal Network)に差し替えたものである(図6).
Faster R-CNN の2ステージ構成は,以下のようになっている:
Faster R-CNNの処理手順
- RPN [前半ステージ] (3.1 節):
- アンカーボックス方式で,領域提案のバウンディングボックス群を検出.
- Fast R-CNN [後半ステージ] (3.2 節):
- RPNで計算した,全画像の特徴マップを,入力特徴に用いる.
- ROI Poolingした領域特徴を入力に,以下の2タスクを並列に実施:
- 識別ヘッド[タスク1]: 領域提案を$N$クラス識別.
- 回帰ヘッド[タスク2]: 領域提案を残差回帰して洗練.
RPNでは,特徴マップグリッド上の各グリッドの中心 =アンカー(Anchor) 点に対して,領域候補の事前分布(Prior)群に相当するアンカーボックス(Anchor Box) を,K個用意する(3.1.1節).そして,各アンカー位置において,K個のアンカーボックス群から「Objectness(物体らしさ)値 + バウンディングボックス 修正量の回帰値 」を学習する.このRPNの導入により,Faster R-CNNは,高速かつ正確でありながらも,物体内遮蔽・物体間遮蔽の双方について頑健な領域候補の検出が,1ステージ目で可能となった.
また2ステージ間で,序盤の特徴マップ抽出層(図6オレンジ色の枠内:VGGNet Pool5 + [3 × 3] 畳み込み層)を 全画像の特徴マップを共有する.これにより2モデルとも同一の特徴マップを用いて,残りの推定器ヘッドを学習できるようになった (3.2節).以上より,後半ステージ用の正解ラベルも加味した「共有畳み込み層群」を学習できるようになり,RPN(1ステージ)も,高品質な領域候補検出が可能となった(3.4節)
3.1 前半: 領域提案ネットワーク(RPN)

前半ステージのRPNをFCN化したことで,RPNの特徴マップを再利用して,後半ステージの推定処理を実施できるようになった.これにより,後半ステージでイチから画像の特徴マップを再度計算する必要性がなくなり,計算効率が向上した.更に,正解BBoxからRPNを学習できるので,前半の領域候補検出の精度も向上した.
3.1.1 アンカーボックス群の導入
RPNでは,アンカーボックス群を用いた評価が導入された (図7 中央部と右側).スライディングウィンドウ時の窓内特徴マップ座標上で,同一の矩形中心点 (= アンカー)を共有する$k$個の領域候補bboxを,領域候補のPriorとして用意するという仕組みである.
スライディングウィンドウ処理を用いて,特徴マップ上を各[3 x 3] 窓内の特徴から処理する際に,その [3 x 3] x C の特徴マップ入力に対して,Fast R-CNNのように「クラス識別 + bbox回帰」評価を行うネットワークを設計したい.
そこで,ROI Poolingと同様に,入力画像座標とCNN特徴マップの座標系のあいだで,ROI矩形中心点同士を対応付けてておく.そして入力画像における「領域提案のスケール and アスペクト比」の事前分布として,アンカーボックスを用意する.そしてFaster R-CNN [Ren et al., 2015] では,入力画像の3スケール(128 x 128, 256 x 256, 512 x 512)と,3アスペクト比(w+hの値をそれぞれ 1:1, 1:2, 2:1に分配したもの)の組み合わせ,計 $k = 9$個のアンカーボックスを用意する.
その窓位置の特徴マップをもとに「(1)その領域候補物体が,アンカーボックス内に存在するかどうかのObjectness識別」と「(2)アンカーボックスに対しての,正解の領域提案領域のBBox修正量回帰」を推定することを行った.
以上をまとめると,(1ステージ目の)RPNでは,以下の手順で処理を行う(図7):
アンカーボックス導入の利点
アンカーボックスの導入は,領域提案ネットワーク(RPN)に,以下の長所をもたらした:
- 効率・高速化:
- 「セル窓(3 x 3)上の特徴から,$k$個分の特徴をいっぺんに1ヘッドで出力する設計にした.
- これにより,特徴抽出層が$k$ボックス分共有されており,処理が効率化されている.
- 物体サイズ多様性への対応:
- 各窓位置において,スケール・アスペクト比が異なる物体同士を,複数個検出できる.
- 物体内,物体間遮蔽への対応:
- 領域提案のアンカーボックスを回帰させて修正,また,複数クラス間での見え方の関係性を学習できる.
- よって,「馬に乗った人」のような別クラス間での遮蔽と,「上半身しか写っていない人」のようなインスタンス内の遮蔽(※ VOC 2007で言うtruncatedラベル) ,の双方に強いモデルを学習できる(元論文 Figure 1 右の,検出例画像などを参照).
この結果,各スライディングウィンドウ窓の位置に対して,$(2+k)$チャンネルのマップが出力され,それらをもとにNMS処理をおこなった後,最終的な領域候補が確定する.
3.1.2 RPNの損失関数
RPNは,Fast R-CNN(2.2節)方式の,以下の合成損失関数で学習する:
\[ \mathcal{L}_{RPN} (\{p_i\},\{\bm{t}_i\}) = \frac{1}{N_{cls}}\mathcal{L}_{cls}(\tilde{p_i},p_i) + \lambda \frac{1}{N_{reg}} \sum_i \tilde{p_i} \mathcal{L}_{reg} (\tilde{\bm{t}_i},\bm{t}_i) \tag{3.1}\]
ここで,各変数は以下の変数を指している:
- $i$: バッチ内のアンカーボックスのインデックス.
- $p_i$: $i$番目アンカーボックスの物体らしさ(Objectness)確率の[1: 物体, 0: 背景]の正解値.
- $\tilde{p_i}$: $p_i$の予測値.
- $\bm{t}_i$: $i$番目アンカーボックスの修正量$(t_x,t_y,t_w,t_h)$の正解ベクトル (2.1.1節).
- $\tilde{\bm{t}_i}$: アンカーボックスの修正量の予測ベクトル.
RPNでは,1つの正解物体領域に対して,複数のアンカーボックスを紐づけされており,それらアンカーボックス損失の合計を計算する点に注意.
式(3.1)では,回帰ロス側$\mathcal{L}_{reg}$にはsmooth L1損失を用いる.$\mathcal{L}_{reg}$を物体らしさスコア$\tilde{p_i}$で重み付けしているので,ポジティブクラスにラベル付けされた正解bboxに対応するアンカー($\tilde{p_i} = 1$)にしか,損失を加えない.
3.2 [後半] Faster R-CNN
後半ステージのFaster R-CNNは,Fast R-CNN [Girshick, 2015] のネットワーク構造の各全結合層を,すべて畳み込み層に変更したネットワークに,RPNと同じ畳み込み層を前半に共有したネットワークである (図6 右側).
Fast R-CNN [Girshick, 2015] と同じマルチタスク出力であるので,損失関数の式(2.1)を用いて学習する (2.2.2節).
3.3 モデルの交互学習
RPNが完全畳込みネットワークであるおかげで,RPNの出力「入力画像全体の特徴マップ」は,そのまま後半ステージの「Fast R-CNNの入力」として共有される.よって2モデル間で共有する畳み込み層は固定しながら,RPNとFaster-RCNNの2つを,以下の手順で交互に学習する:
Faster R-CNNの学習処理
- 初期化 (RPNのみ初期化):
- ImageNetでRPNを事前学習.
- 領域候補の正解データを用いてRPN全体を学習.
- Faster R-CNNの学習:
- ステップ1で学習したRPNから得られる領域候補を元に,Faster R-CNNを学習.
- RPNの再学習:
- ステップ2で学習したFaster R-CNNからの検出結果を元に,2者が共有する畳み込み層は固定しながら,RPNにのみにある後方の層のみfine-tuningする.
- これにより,2モデルが畳み込み層を共有.
- Faster R-CNNの再学習:
- Faster R-CNNを,共有畳み込み層は固定してFine-turingする.
- ステップ3と4を,損失が終了値以下に減るまで繰り返す.
この手順により,2ステージのモデルに一貫性を持たせることができる.したがって,RPNが出力する領域候補が,きちんとFaster R-CNNの事前分布としてはたらく結果となる.こうして前半で高精度な領域候補の出力ができ,なおかつFaster R-CNNによる識別・回帰に適した特徴マップを提供できるようになった.
4. Faster R-CNN のまとめ
この記事ではFaster R-CNNのついて紹介した.前進版のR-CNNと,Fast R-CNNについて紹介することで,Fast R-CNNの構成要素でもある「bbox修正量のパラメタライズ」「マルチタスク損失による学習」「ROI Pooling」について,準備知識として先に述べた.
それを踏まえて,Faster R-CNNの紹介では,重要として「領域提案ネットワーク(1ステージ目のFCN化)」「アンカーボックスを利用した領域提案ネットワーク」と,「2ステージの特徴計算層(FCN)の共有」について紹介した.
References
- [Cheng et al., 2014] Cheng, M. M., Zhang, Z., Lin, W. Y., & Torr, P. (2014). BING: Binarized normed gradients for objectness estimation at 300fps. In CVPR 2014.
- [Felzenszwalb et al., 2008] P. Felzenszwalb, D. McAllester, and D. Ramanan. A discriminatively trained, multiscale, deformable part model. In CVPR, 2008.
- [Felzenszwalb et al., 2010] P. Felzenszwalb, R. Girshick, D. McAllester, and D. Ramanan. Object detection with discriminatively trained part based models. TPAMI, 2010.
- [Girshick et al., 2014] Girshick, R., Donahue, J., Darrell, T., & Malik, J. (2014). Rich feature hierarchies for accurate object detection and semantic segmentation. In CVPR, 2014.
- [Girshick, 2015] Girshick, R. Fast r-cnn. In ICCV, 2015.
- [He et al., 2014] He K., Zhang X., Ren, S., and Sun, J. Spatial pyramid pooling in deep convolutional networks for visual recognition. In ECCV, 2014.
- [Ren et al., 2015] Ren, S., He, K., Girshick, R., & Sun, J. (2015). Faster R-CNN: towards real-time object detection with region proposal networks. In NIPS, 2015.
- [Uijlings et al., 2013] Uijlings, J. R., Van De Sande, K. E., Gevers, T., and Smeulders, A. W. Selective search for object recognition. International journal of computer vision, 104(2), 154–171.
- [Wang et al., 2013] X.Wang, M.Yang, S.Zhu, and Y.Lin. Regionlets for generic object detection. In ICCV, 2013.
- [Wu et al., 2020] Wu, X., Sahoo, D., & Hoi, S. C. (2020). Recent advances in deep learning for object detection. Neurocomputing, 396, 39-64.
関連書籍
- 画像認識(機械学習プロフェッショナルシリーズ),原田達也,講談社,2017.
- 7.6.3 Faster R-CNN (p 218)
- 7.6.2 Fast R-CNN (p216)
- 7.6.1 R-CNN (p214)