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

R-CNN:物体がありそうな領域からCNNで特徴量を抽出してSVMで分類

thumb image

物体検出にディープラーニングを導入してそれまでの記録を塗り替え、2014年の当時は画期的だったモデルがR-CNNです。今では古いモデルですが、現在までに続く物体検出の発展を理解するために要点を押さえておくのは重要です。その後の物体検出の発展の流れを勉強する上で知識として持っておくと役に立つので概要を掴んでおきましょう。

1. Ross Girshick🔝

R-CNNを開発した中心人物であるRoss Girshickは、当時、カリフォルニア大学バークレー校(UC Berkeley)にポスドクとして所属していましたが、その後マイクロソフトを経て、現在はフェイスブックAIリサーチ(FAIR)に所属しています。

引用元:Ross Girshick

彼はR-CNNだけでなくFast R-CNNとFaster R-CNNの研究開発を行い、Joseph RedmonとともにYOLO(最初のバージョンのみ)の開発に関わり、Kaiming HeとMask R-CNNの論文を発表しています。ちなみにKaimin HeもマイクロソフトにいたときにFaster R-CNNのプロジェクトに参加していおり、その後フェイスブックのFAIRに移籍しています。

そんなRoss Girshickはディープラーニングを物体検出に持ち込んでそれ以前のディープラーニングを使わないモデルと比較して大幅な性能向上を達成しました。

2. R-CNNの概要🔝

Ross Girshickが2014年に発表したR-CNN(Region based CNN)は下図に示されたステップに従って物体検出を行います。

引用元:論文
  1. 入力画像(Input Image)
  2. 領域の選定(Region Proposals)
  3. 特徴量の抽出(CNN Features)
  4. クラスのスコア(SVM Classification)

最後に後処理としてNMS(Non-Maximum Suppression)が行われます。

それでは、ステップ毎に概要を見ていきましょう。

3. 入力画像(Input Image)🔝

物体検出用のデータセットとしてはPASCAL VOCが使われています。当時、PASCAL VOCでの物体検出の成果が伸び悩んでいたところにR-CNNが2014年に登場してそれまでのベストよりも相対的に30%向上した成績を残しました。

この頃の背景として、2012年にILSVRC(The ImageNet Large Scale Visual Recognition Challenge) でAlexNetがディープラーニングを導入して画像分類で大いなる成功を収めています。

その2年後の2014年にRoss Girshickがディープラーニングは画像分類だけでなく物体検出でも効果的であることを証明しましたことになります。

ちなみに、物体検出は初耳だという方は、こちらの記事を参照してください。

物体検出

余談ですが、現在、PASCAL VOCのサイトはアクセス不能になっています。あるいはサーバーがたまたま落ちているだけなのかもしれません。しかし、ここ最近はサイトを開けません。物体検出のデータセットもここ数年来、COCOを使うのが多くなっているので誰も気にしないのかもしれませんが。PASCAL VOCのデータセットを取得したい方はこちらのミラーが利用できます。このミラーはYOLOの開発者Joseph Redmonによるものですが、彼によるとPASCAL VOCのサーバーがしょっちゅう落ちているのでミラーを用意したそうです。

さて、R-CNN以前の物体検出はディープラーニングを使わないものが主流でした。よって、Ross Girshickがディープラーニングを導入した際にも全てをディープラーニングで置き換えたわけではなく、次のステップでは既存のテクニックを使用しています。

3.1. 領域の選定(Region Proposals)🔝

このステップでは、画像の中で物体がありそうな領域を2000個選び出します。

当時から「領域を分ける方法」はいろいろありました。論文によると、「領域を分ける方法」はどれを選んでもモデルの性能はあまり変わらないと考え、先行研究と比較しやすいということでSelective Searchという手法を選んでいます。

引用元:論文

選ばれた領域は様々なサイズの矩形なっていますが、全ての領域を227×227画素の大きさに変形(warp)します。

これは、次のステップでCNNを使って特徴量を抽出する際に、出力の次元が一定になるようにするためです。

3.2. 特徴量の抽出(CNN Features)🔝

227×227画素の大きさに整えられた2000個の領域からCNN(畳み込みニューラルネットワーク)を使って特徴量の抽出をします。これにはAlexNetが使われています。

前述した通り、AlexNetは2012年にILSVRC(ImageNet Large Scale Visual Recognition Challenge)でトップの成績を出しました。さらに、2位以下をはるかに引き離していたので、ディープラーニングの研究熱が再燃するきっかけを作った有名なモデルです。AlexNet以降は画像分類でディープラーニングを使うのが主流となりました。

引用元:論文

R-CNNでは、AlexNetの中にある「5個の畳み込み層」と「2つの完全結合層」の部分を使って特徴量を抽出します。これによって選定された各領域(227×227画素)から4096次元のベクトルの特徴量を取り出します。

この特徴量を使って選定された領域内にある画像の分類を行います。

要するに転移学習なのですが、最後の画像分類の判断をする部分はディープラーニングではなくSVM(サポートベクターマシン)を使用しています。

3.3. クラスのスコア(SVM Classification)🔝

抽出された特徴量をSVMに与えてスコア(Score)を計算します。

引用元:Jonathan Hui

SVMは各クラスに1つずつ用意してあり、例えば犬だけを判別するもの、猫だけを判別するもの、などなどがあります。

下図の一番右側の部分を見るとイメージしやすいかと思います。

R-CNN
引用元:論文

ちなみに、SVMでは線形カーネルを仕様しており、4096次元の値に重みを掛け合わせて計算した数値でクラスごとに真偽を判断しています。よって一つのSVMでは一つのクラスの真偽しか判断できません。

ここまでのステップで、選定された領域ごとの画像分類ができました。しかし、物体検出では後処理が必要となります。

3.4. 後処理(NMS)🔝

後処理であるNMSはNon-Maximum Suppressionの略です。コンピュータービジョンの手法でR-CNN特有なものではありません。

詳しくはこちらに記事があります。

簡単に要約すると、下図のようにたくさんの予測が重なっているところを無くす方法です。

NMS

SVMによって計算されたスコア(自信度)を使って不要なものを取り除く作業になります。重なっている予測のうちスコアの低いものを取り除いていきます。

NMS

こうすることで一つの物体について一つの予測が残るようになります。

NMS

4. 革新的だったが問題も🔝

当時、R-CNNが革新的だったのは、物体検出にディープラーニング(CNN)を導入して特徴量を取り出す仕組みを利用したことです。それまでのディープラーニングを使わないモデルと比べて大きな性能向上を達成できました。

しかし、現在の視点から見ると随分とハイブリッドな仕様のモデルである感を否めません。それなりに速いと論文で言及されていますが、後に登場するYOLOなどから比べるとずっと遅いです。

また、モデルの各部分を別々に訓練する必要があり大変な手間と時間がかかる作業になります。

ここまで読んで、いろいろと改善方法を思いつく方もたくさんいるでしょう。それは我々が未来から覗き込んでいるからですが、当時の研究者にとっては過去からの手法に改善を加えていきながら一生懸命に努力をしていたわけです。

だからR-CNNの論文の中では色々な試行錯誤が見られます。例えば、位置推定の精度が悪かったので、Selective Searchで選択した領域を調節する工夫も行われました。これはSelective Searchで選ばれた領域に対してクラス特有の位置・サイズの調節をするものです。よってSVMでクラスを選定した後に行われるので、クラスごとの訓練がまた別に必要になります。そのため、モデルはより複雑になりスピードも落ちます。精度と速度の両方を上げるには、より根本的な改良をして全体のパイプラインを単純化する必要がありました。

そして、Ross GirshickはR-CNNを発展させたFast R-CNNを開発し、さらにFaster R-CNNへと発展さていきます。

5. 参照🔝

5.1. Rich feature hierarchies for accurate object detection and semantic segmentation🔝

Ross Girshick

https://arxiv.org/abs/1311.2524

5.2. Selective Search for Object Recognition🔝

J.R.R. Uijlings

スライド

5.3. Fast R-CNN and Faster R-CNN🔝

Jonathan Hui

https://jhui.github.io/2017/03/15/Fast-R-CNN-and-Faster-R-CNN/



コメントを残す

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