キカベン
機械学習でより便利な世の中へ
G検定対策
お問い合わせ
   

Faster R-CNN:リアルタイム物体検出を可能にしたRPNとは

thumb image

Fast R-CNNが速くなったのは良いが、領域選定(Resion Proposal)の部分が遅いことが浮き彫りになりました。実は、Fast R-CNNの実験結果には領域選定の部分は含まれておりません。Selective Searchという手法が使われていましたが、それだけで1画像につき2秒もかかっていました。Fast R-CNN自体が1画像につき0.22秒なので、全体の推論時間は領域選定がほぼ全てを占めることになります。よってRoss GirshickKaiming HeShaoqing RenJian Sunらと共同で領域選定を畳み込みで行うFaster R-CNNを開発しました。

Kaiming He, Shaoqing Ren, Jian SunはMicrosoftから発表されたResNetの研究開発者4名のうちの3人でもあります。ResNetは2015年のILSVRCで優勝しています。

まずは、R-CNNとFast R-CNNに関して少しおさらいをします。その後に、Faster R-CNNでの変更点であるRegion Proposal Networkを紹介します。

1. R-CNNとFast R-CNNのおさらい🔝

1.1. R-CNN🔝

R-CNN以前の物体検出では、画像の隅から隅までを大小の枠を使ってスキャンし物体がある場所とそのクラスを特定するというものでした。その手法に畳み込みを適用すると畳み込みの処理がものすごく多くなるので遅くなり使い物になりません。これを解決したのがR-CNNで、最初に領域選定を行うことで畳み込みをする回数を減らすことに成功しました。畳み込みを使ったおかげで精度を上げることができました。

R-CNN 全体図

ただし、R-CNNは全ての選定領域に畳み込み処理を行うので選定領域が重なっている部分に対して何度も同じ処理を繰り返すことになり無駄が生じていました。また、R-CNNでは作業が分断されているために推論や訓練に時間がかかるという問題がありました。これは画像分類はSVMを使い、物体位置(矩形領域)の調節にはクラスごとに訓練された回帰モデルを使うなど別々の手順になっているためでした。

1.2. Fast R-CNN🔝

Fast R-CNNでは画像全体で畳み込み処理を1回だけ行い特徴量を抽出した上で選択領域ごとに特徴量を取り出す方法にしました。これによって畳み込みの回数が大幅に減り速度が速くなりました。また、Fast R-CNNでは画像分類をニューラルネットワークで行い物体位置の調節もクラス別ではなく一つのニューラルネットワークで行うことにしました。つまり、領域選定の処理を除けば全てニューラルネットワークによる処理になり、途中でデータを保存したりする手間がなくなったので学習時間も大幅に改善しました。

Fast R-CNN 全体図

しかし、今度は領域選定の遅さが突出してしまいます。領域選定はCPUを使う処理だったのでGPUの利用もできずスピードを速くするには大きな変更が必要でした。ここでRegion Proposal Networkが登場します。

2. Region Proposal Network(RPN)🔝

Faster R-CNNの論文のタイトルは「Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks」、つまり「Faster-RCNN:RPNでリアルタイム物体検出へ」となっており、RPNが主役であるのがわかります。

領域選定もニューラルネットワークにしてしまえば、画像を入力するだけで全ての処理を分断なく行え、GPUの利用もできるので推論時間も訓練時間も短縮できます。そのために領域選定を行うニューラルネットワーク(Region Proposal Network、RPN)が発案されました。

Faster R-CNN 全体図

画像全体から畳み込みで抽出した特徴量を入力として領域候補(物体のありそうな場所)を出力するネットワークがRPNです。GPUの利用も可能なので領域選定にかかる時間を大幅に削減できます。これがFaster R-CNNにおける主な変更であり、Faster R-CNNはFast R-CNNの領域選定をRPNに置き換えたものとして捉えることができます。

以上によって画像入力から推論結果を出すまでのスピードが5FPS(毎秒5画像)になり、RPNのおかげで以前の領域選定を使った時より精度もより良くなりました。

2.1. Sliding Windows?🔝

論文の中で「sliding windows」という言葉が繰り返し登場するのですが、畳み込みのことです。そういう言葉を使う理由は、R-CNN以前の手法では実際にスライドしならが領域の画像分類を行なっており、その頃の名残かもしれません。畳み込みは以前の「sliding windows」に相当するものだという意味合いだと思われます。

最初はちょっと戸惑いましたが、畳み込みの仕組みとしてカーネルを適用する場所が、カーネルをスライドした各位置になるのでそういう表現をしているのだと思われます。いずれにせよ、畳み込みでは実際に3×3の枠をスライドさせるわけではなく、GPUによる並列処理が行われます。

さて、下図一番下のconv layersの部分が畳み込み処理で画像から特徴量(特徴マップ、feature maps)を抽出する部分です。論文ではZFNetAlexNetの改良版)あるいはVGG16からの複数の畳み層が使われています。

画像元:論文

ここからの出力である特徴マップがRPNへの入力となり領域選定が行われます。この特徴マップのサイズは元の画像のサイズから縮小されており、特徴マップ内の1点は元画像でのある領域に相当します。

VGG16を使った場合で説明します。Faster RCNNでは入力画像が1064×1064としており、それをVGG16が扱う224×224へ縮小して入力画像とします。これが上記のconv layersへ渡されます。VGG16の畳み込み層をくぐると特徴マップのサイズは入力画像の16分の1(2分の1になるプーリング4回分:$2^4=16$)になります。つまり、1064×1064の画像からすると縦横それぞれが$\frac{1064}{224} \times 2^4 = 76$分の1になるので、特徴マップの1点は1064×1064の画像内の76×76の領域に相当します。

よって、RPNが畳み込みを行う際の3×3の領域は実際の画像のサイズにするとVGG16なら228x228のサイズ(ZFNetなら171x171)に匹敵します。RPNは畳み込み処理(GPUを利用)になっているので以前の領域選定であるSelectiveSearch(CPUを使用)と比べて遥かに高速になります。また、SelectiveSearchでは生の画像から特徴量を計算して領域選定をするのに対し、RPNはすでに抽出された特徴マップを利用するのでモデル内での情報共有の面でも効率がよくなっています。

次に、RPNは畳み込みで得た情報から、どのように物体のありそうな位置を予測するのかについて解説します。

2.2. Anchors(アンカー)🔝

一般に畳み込みの処理は場所を選びません。同じパラメータ(重さ)が至る所で使われます。しかし、物体位置は場所の情報そのものです。では、畳み込みで得られた情報からどのようにして物体の位置情報を計算するのでしょうか。

この問題を解く鍵はAnchors(アンカー)にあります。畳み込みをする場所を中心に複数の仮想の矩形領域があるとします。仮に二つ縦長と横長の矩形領域があるとすると下図のようなものが想像できます。つまり、二つの矩形領域が畳み込みをする各場所の中心に固定(アンカー)されているイメージです。これをアンカーボックス(略してアンカー)と呼びます。下図の青い矩形領域がアンカーですが、これは元の画像での大きさをイメージしています。それに対して赤い正方形は畳み込みのカーネルのサイズです。中央の点が入力画像のある一点に相当します。

物体位置を示す矩形領域の予測はこのアンカーを基準に行われているとみなします。つまり基準となるアンカーボックスの中央位置、幅、高さ$(x, y, w, h)$を調節するための相対位置と相対の幅と高さ$(\delta x, \delta y, \delta w, \delta h)$を予測することになるので絶対位置に関わらず同じ予測をすることができることになります。

下図では横長のアンカー(水色)に予測された矩形領域(紫色)を重ねて比較したものです。

特徴マップ上の各点におけるアンカーに対しての相対の位置とサイズの予測をするので、物体(例えば、犬)が画像上の上にいても下にいても大丈夫というわけです。

物体が常に正方形だとは限らないので様々な形のアンカーを用意した方が学習が楽になります。一つの正方形を様々な形に変えるよりも、様々な矩形領域を用意して微調整する方が簡単だろうという意図です。

論文では3つのスケール(128, 256, 512)に3つの縦横比(1対1、1対2、2対1)を使いました。アンカーの種類の数を$k$とすると$k=3 \times 3 = 9$になります。RPNが畳み込みを行う特徴マップのサイズが縦$H$横$W$であれば、全部で$kWH$のアンカーがあることになります。

VGG16であれば224×224の入力画像が14×14(縦横16分の1)の特徴マップになっているので$WH = 14\times14=196$のアンカー点があり、全部で$kWH = 9\times196=1764$個のアンカーを使うことになります。

2.3. 領域選定の仕組み🔝

1つアンカーに対して2種類の出力を計算します。

  • 物体の位置を表す矩形領域である4つの値$(x, y, w, h)$
  • 物体があるかどうか(背景ではない)を示す2つのスコア。ソフトマックス(softmax)関数で計算。

よって、1つのアンカーにつき$4 + 2 = 6$の値が出力されます。全てのアンカーでは$6kWH$の値が出力されることになります。VGG16を使う場合は、$6kWH=6\times1764=10584$個の値になります。

なお、論文の中では、ソフトマックス関数ではなくロジスティック関数を使えば、物体があるかどうかの予測値の数は $2k$ではなく$k$になるとの注釈があります。

なお、$2k$の物体スコアと$4k$の矩形領域を計算する際に1x1の畳み込みを使います。

画像元:論文

256-dとは、ZFNetの特徴マップに256チャンネルあることを意味します。VGG16なら512チャンネルになります。つまり、各アンカー点の特徴量(256次元あるいは512次元の値)から$2k$の物体スコアと$4k$の物体位置(矩形領域)を計算していることになります。

ここではまだ物体の分類は行いません。背景ではなく物体があるかどうかの判断とその矩形領域の予測のみです。これによって物体がありそうな場所を予測する領域選定の役割を果たすことになるます。

以上によりRPNが領域選定を行う仕組みを説明しました。このRPNがFast R-CNNにおける領域選定の仕組みを置き換えたものがFaster R-CNNになります。

2.4. 損失関数🔝

RPNの訓練では物体があるかどうかのラベルとしてアンカーに対し以下の正例と負例を決めます。これがスコア(物体があるかどうかの予測)の損失計算に使われます。また、正例のアンカーに対してだけ矩形領域の予測と正解領域を比べて損失を計算します。

正例:訓練を行うためにどのアンカー(ボックス)が正解データに対応するかを決める必要があります。以下の2つの条件のどちらかを満たしたアンカーは正例(positive label)として扱われます。

  • 正解の矩形領域とのIoUが最大のアンカー
  • 正解の矩形領域とのIoUが0.7より高いアンカー

1番目の条件はIoUが0.7以下でも最大であれば正例とされます。つまり、2番目のケースが当てはまらない場合に必要となる条件です。論文によると、たまにそういうケースがあるそうです。上記2つの条件があれば全ての正解領域をカバーできることになります。

負例:背景として扱われるアンカーを負例(negative label)と呼びます。どの正解の矩形領域に対してもIoUが0.3より低いアンカーは負例になります。背景に関しては物体があるかどうかのスコアだけが必要なので実際に全ての背景がカバーされているかどうかは問題にはなりません。よって、中途半端に物体を含んだアンカーは除外した方が無難です。

以上により、正例でも負例を使ってRPNの訓練のための損失計算が行われます。正例でも負例でもないアンカーは損失の計算に含まれません。

RPNの損失は以下のように計算されます。

$L(\{p_i\}, \{t_i\}) = \frac{1}{N_{cls}} \sum_i L_{cls}(p_i, p_i^*) + \lambda \frac{1}{N_{reg}} \sum_i p_i^* L_{reg}(t_i, t^*_t)$

  • $i$はミニバッチ内でのアンカーのインデックス
  • $p_i$はアンカー$i$に物体が含まれるスコア(予測確率)。$\{p_i\}$はスコアの集合
  • $t_i$はベクトル値で予測した物体位置(矩形領域)。$\{t_i\}$は予測された矩形領域の集合
  • $p^*_i$はアンカーが正例なら1か負例なら0。つまりは、ラベルデータ
  • $L_{cls}$は2つのクラス(物体がある・ない)における分類損失
  • $t^*_i$は正解の矩形領域
  • $L_{reg}$は矩形領域の予測の回帰損失:$L_{reg}(t_i, t^*_i) = R(t_i – t^*_i)$。$R$はロバスト損失(smooth L1)
  • $p^*_i L_{reg}$となっているのは矩形領域の回帰は物体がある(正例の)場合のみ計算されるから
  • $N_{cls}$はミニバッチのサイズ(256)で分類損失を標準化するのに使われる
  • $N_{reg}$はアンカーの数で回帰損失を標準化する。$N_{reg} \sim 2,400$
  • $\lambda$は分類損失と回帰損失のバランスをとるためのハイパーパラメータ。$\lambda=10$がデフォルト

PASCAL VOC 2007で$\lambda$の値によるmAPの違いが計測されています。

論文の表9

3. Mask R-CNNでマルチタスク学習へ🔝

Faster R-CNNの開発後にRoss GirshickはFacebookに移籍してKaiming HeとともにMask R-CNNを発表します。これはFaster R-CNNをさらに拡張して姿勢推定やインスタンスセグメンテーションも取り入れたマルチタスク学習を行うものです。

4. 参照🔝

4.1. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks🔝

Shaoqing RenKaiming HeRoss GirshickJian Sun

https://arxiv.org/abs/1506.01497

What do we learn from region based object detectors (Faster R-CNN, R-FCN, FPN)?

Jonathan Hui

https://jonathan-hui.medium.com/what-do-we-learn-from-region-based-object-detectors-faster-r-cnn-r-fcn-fpn-7e354377a7c9

4.3. Faster R-CNN: Down the rabbit hole of modern object detection🔝

https://tryolabs.com/blog/2018/01/18/faster-r-cnn-down-the-rabbit-hole-of-modern-object-detection/



コメントを残す

メールアドレスは公開されません。