目次
1. Faster R-CNN とは [概要]
Faster R-CNN (Faster Region-CNN) とは「領域提案を用いた2ステージ型物体検出 CNN」の元祖となった提案である [Ren et al., 2015].効率的な2ステージ計算を通じて,物体検出ネットワークのEnd-to-End学習化と,準リアルタイム計算を初めて達成した.
画期的な研究であり,初めて達成したことだらけで貢献は多いが,その中でも特に,1ステージの「 (1)領域提案(region proposal)のみ1ステージ目でまず推定する」仕組みと,「(2)アンカーボックス(3.1.1) の導入による計算効率化」の達成が, [Ren et al., 2015]の一番大きな貢献である.
この記事では,まず Faster R-CNN の前身手法である R-CNN [Girshick et al., 2014] と Fast R-CNN [Girshick, 2015] の概要を紹介する(2.1節,2.2節).それを踏まえたうえで,本題である Faster R-CNN について紹介する(3節).
まず 1.1節では,Faster R-CNN 3部作の「全体の流れ」を先にまとめておくことで,読者の方々の俯瞰度を高めてから2節以降の詳細紹介に入りたい.
1.1 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] に相当するステージ).
- 後半ステージ(領域提案のみ処理):領域提案内のCNN特徴マップをもとに,以下の2個の出力をRegion-CNN に学習・推定する:
- 識別ネットワーク:数10種類程度の物体クラス(Pascal VOCの20種の物体クラス).
- 回帰ネットワーク:領域候補BBoxから正解BBoxへの修正量の4次元ベクトル$(\mathit{\Delta} x,\mathit{\Delta}y,\mathit{\Delta}w,\mathit{\Delta}h)$.

これに対し,まず Fast R-CNN [Girshick, 2015] は,後半ステージを2ヘッドのマルチタスクネットワークを用いて,識別と回帰を1つのネットワークに一体化することを提案した(2.2節). 画像全体をCNNバックボーンで特徴マップ化したのち,領域候補内の特徴だけをROI Poolingで取り出したのち,2つのヘッド小ネットワークで,それぞれ「物体クラスの識別」と「BBox修正量の回帰」を行う.
しかし,前半はSelective Searchのままで,非ディープニューラルネットの手法なので,まだ全体の処理速度がかなり遅かったうえ,Selective Searchの抽出する関心領域(ROI)はノイジーであり,物体ではないもの検出も多数混ざっており,全体の物体検出精度もいまひとつであった.
そこで,Faster R-CNN [Ren et al., 2016]では,前半ステージもCNN化する, 領域提案ネットワーク(RPN: Region Proposal Network) を導入することで,初めて前半ステージのCNN化も達成した(3節).これにより,前半と後半でCNN特徴マップを共有化もでき計算効率化ができ,高速化できた.また,前半ステージをCNNとして学習できることで,領域提案が高精度になり,全体の検出精度も向上した.
Faster R-CNNにより,複数クラス物体検出手法が初めて実用的な速度・精度に到達した.以降は,実用レベルの物体検出が発展していく.また,他のタスクの前処理としても,物体検出結果が活用されるようにもなっていく(物体追跡や,画像キャプション生成など)
1.2 記事の構成
2節以降は,以下の構成で Faster R-CNN の構成要素について紹介する:
- 2節 前身の2手法: Region-CNN と Fast R-CNN
- 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節)に焦点を当てて紹介していきたい.
2. 前身の2手法: R-CNN と Fast R-CNN
画像認識CNN流行後の初期(2012~2013年頃)に,以下のような(素直な)改善案の仮説が,研究者たちの中に生まれはじめた:
- 従来の物体検出で使われてきた,HOG特徴・Haar-like特徴や,SVM・Boostingの代わりに,CNNを特徴抽出+識別器でまるごと使用すれば,CNNの恩恵で物体検出の精度が大きく向上するはず.
- ImageNetから学習する,画像認識CNNと同様に,大規模クラス数を対象とした物体検出器CNNも実現できるはず.
しかし,当時の画像認識CNN(AlexNetやVGGNet)を従来の「スライディングウィンドウ方式の物体検出」で,クラス識別器や特徴抽出をCNNに差し替えるだけだと,計算負荷の高いCNNの順伝搬を何万回も1から行うことになってしまう.よって,その計算非効率性を突破していく必要があった.
そこで研究者らは,以下の「2ステージ構成の手法」を研究し始める:
- 前半ステージ:
- 物体候補となる領域を,数100~数1000個だけに絞る,検出処理を行う.
- 検出された,物体領域候補のBBboxと前景マスクを,領域提案(Region Proposal)と呼ぶ .
- 後半ステージ:
- 後処理:
- 非極大値抑制(NMS)
2節では,次の3節でFaster R-CNNを説明する前段の準備として,同じ著者の研究グループから先に提案されていたシリーズ3部作の前身である,R-CNN (2.1節)と,Fast R-CNN (2.2節)の概要を紹介する(詳細は,それぞれの記事を参照).
2.1 R-CNN
関連記事:

R-CNN(Region-CNN) [Girshick et al., 2014] は,初めて提案された2ステージ型のCNN物体検出である (図2).Pascal VOC Challenge の 物体画像20クラスの検出に対して実験が行われた.
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: 後半ステージの全ニューラルネット化

Fast R-CNN [Girshick et al., 2015]は,R-CNNの筆頭著者による,後半の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) bbox回帰」をそれぞれ学習する.
テスト時:
後半ステージの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は良くなったが,前半ステージはSelective Searchのままであるので,領域提案の過検出や未検出は起こりがちである.つまり,前段ステージが精度向上のボトルネックである点が,解決できていなかった.
したがって,前半ステージもCNN化して,安定した領域提案検出を行いたいという動機のもと,この記事の本題であるFaster R-CNNが登場する.
3. Faster R-CNN

Faster R-CNN [Ren et al., 2015] は,Fast R-CNNの前半ステージを領域提案ネットワーク(RPN: Region Proposal Network)に差し替えたものである(図6).
RPNでは,特徴マップ上のグリッドでスライディングウィンドウ窓の中心点に相当する,入力画像上のアンカー(Anchor) 点に対して,領域候補の事前分布(Prior)群であるアンカーボックス(Anchor Box) を複数個用意する (3.1.1節).RPNでは,各アンカー位置において,k個のアンカーボックス群から「Objectness 推定(confidence) + bbox 修正量回帰 」を学習する.このRPNの導入により,Faster R-CNNは,高速かつ正確でありながらも,物体内遮蔽・物体間遮蔽の双方について頑健な領域候補の検出が,1ステージ目で可能となった.
また2ステージ間で,序盤の特徴マップ抽出層(図6オレンジ色の枠内:VGGNet Pool5 + 3 × 3 畳み込み層)を 全画像の特徴マップを共有することにより,2モデルとも同一の特徴マップを用いて,残りの推定器ヘッドを学習できるようになった (3.2節).これにより,後半ステージ用の正解ラベルも加味した「共有畳み込み層群」を学習できるようになったので,RPNの方も高品質な領域候補の検出が可能となった(3.4節)
Faster R-CNN の2ステージ構成は,以下のようになっている:
- 前半ステージ (RPN, 3.1 節):
- アンカーボックス方式のRPNで,領域提案を検出.
- 後半ステージ (Fast R-CNN, 3.2節):
- RPNで計算した,全画像の特徴マップを入力特徴に用いる.
- ROI Poolingした領域特徴を入力に,以下の2タスクを実施:
- 識別ヘッド(タスク1): 領域提案を$N$クラス識別.
- 回帰ヘッド(タスク2): 領域提案を残差回帰して洗練.
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 アスペクト比」の事前分布として,アンカーボックスを用意する.[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修正量回帰」を推定することを行った.
以上をまとめると,RPNは以下の手順で処理を行う(図7):
- 特徴マップ上で$3 \times 3$セルの窓でスライディングウィンドウを行う.
- その各アンカー位置において,$k$種類のアンカーボックスについて,それぞれ以下の2つを推定する:
- アンカーボックス内に「物体が有る or 物体が無い」の2クラス識別.
- アンカーボックスから領域提案への,位置$(x,y)$・サイズ$(w,h)$の修正量を回帰.
アンカーボックス導入の利点
アンカーボックスの導入は,領域提案ネットワークに以下の長所をもたらした:
- 効率・高速化:「セル窓(3 x 3)上の特徴から,k個分の特徴をいっぺんに1ヘッドで出力する設計にした.これにより,特徴抽出層が$k$ボックス分共有されており,処理が効率化されている.
- 物体サイズ多様性への対応:各窓位置において,スケール・アスペクト比が異なる物体同士を,複数個検出できる.
- 物体内,物体間遮蔽への対応:領域提案のアンカーボックスを回帰させて修正,また,複数クラス間での見え方の関係性を学習できる.よって,「馬に乗った人」のような別クラス間での遮蔽と,「上半身しか写っていない人」のようなインスタンス内の遮蔽,の双方に強いモデルを学習できる(元論文 Figure 1 右の,検出例画像などを参照).
この結果,各スライディングウィンドウ窓の位置に対して,$(2+k)$チャンネルのマップが出力され,それらをもとにNMS処理をおこなった後,最終的な領域候補が確定する.
3.1.2 RPNの損失関数
RPNは(Fast R-CNN方式の)以下の合成損失関数で学習する:
\[ \mathcal{L}_{RPN} (\{p_i\},\{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{t_i},t_i) \tag{3.1}\]
ここで,各変数は以下の変数を指している:
- $i$: バッチ内のアンカー(ボックス)のインデックス.
- $p_i$: $i$番目のアンカーボックスのObjectness確率(1: 物体, 0: 背景)の正解値.
- $\tilde{p_i}$: $p_i$の予測値.
- $t_i$: アンカーボックス$i$の修正量$(t_x,t_y,t_w,t_h)$の正解(2.1.1節).
- $\tilde{t_i}$: アンカーボックスの修正量の予測値.
RPNでは,1つの正解物体領域に対して,複数のアンカーボックスを紐づけされており,それらアンカーボックス損失の合計を計算する点に注意.
式(3.1)では,回帰ロス側$\mathcal{L}_{reg}$にはsmooth L1損失を用いる.$\mathcal{L}_{reg}$をObjectnessスコア$\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つを,以下の手順で交互に学習する:
- 初期化 (RPNのみ初期化):ImageNetでRPNを事前学習.そののち,領域候補の正解データを用いてRPN全体を学習.
- Faster R-CNNの学習:ステップ1で学習したRPNから得られる領域候補を元に,Faster R-CNNを学習.
- RPNの再学習: ステップ2で学習したFaster R-CNNからの検出結果を元に,共有畳み込み層は固定しながら,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の「アンカーボックスを利用した領域提案ネットワーク」と,「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.
参照リンク
- http://www.rossgirshick.info/
- What do we learn from region based object detectors (Faster R-CNN, R-FCN, FPN)? , Jonathan Hui
- Lil’s log: Object Detection for Dummies Part 3: R-CNN Family
関連記事
関連書籍
- 画像認識(機械学習プロフェッショナルシリーズ),原田達也,講談社,2017.
- 7.6.3 Faster R-CNN (p 218)
- 7.6.2 Fast R-CNN (p216)
- 7.6.1 R-CNN (p214)