たかおLab

物体検出とR-CNNについて

機械学習
R-CNNのネットワーク

物体検出とR-CNNについて学んだことを備忘録として残します.

 

 

 

物体検出ってなんだ?

 

物体検出(object detection)とは,クラスの識別(classification)と物体の位置特定(localization)を合わせたものです.

 

 

 

クラス識別(classification)ってなんだ?

 

クラス識別(classification)とは,入力画像に対してその画像が何を示すかを出力することで,

一つの入力に対して出力も一つになります.

 

ちなみに,この「5」の画像は”MNIST”という画像データセットのものです.

 

 

 

位置特定(localization)ってなんだ?

 

位置特定(localization)とは,入力画像から特定の個所を出力することで,

一つの入力に対して出力は複数になります.

 

また,特定の個所を囲んだ矩形をバウンディングボックス(Bounding Box)といいます.

 

localizationの例

 

 

 

つまり,物体検出ってなんだ?

 

物体検出とは,このクラス識別と物体の位置特定を合わせたものになります.

 

物体検出

 

 

 

どうやって物体検出するか?

 

今回のもう一つのテーマはR-CNNですが,このR-CNNが出る前は,

 

ウィンドウを細かくずらしていって,そのウィンドウごとに得られた領域をそれぞれCNNで分類していました.

 

R-CNN以前の物体検出方法

(https://qiita.com/arutema47/items/8ff629a1516f7fd485f9)

 

ただこれだと,入力画像1枚に対して,複数回(ウィンドウで得た領域分)CNNを回さなければ
ならないので,非常に遅くなってしまいます.

 

(CNNについては前に記事を書いたので,こちらを参照してください)

 

 

 

R-CNN

 

上記の問題を解決するため,R-CNNが提案されました.

 

R-CNNのネットワーク

(論文はこちら:https://www.cv-foundation.org/openaccess/content_cvpr_2014/papers/Girshick_Rich_Feature_Hierarchies_2014_CVPR_paper.pdf)

 

  1. 画像を入力
  2. 入力した画像から,RoI(region of interest, 候補領域)と呼ばれるものを
    複数(2000個ほど)抽出する.そして,抽出したRoIすべてを,次のCNNへの
    入力のためにリサイズする.
  3. 先ほどリサイズしたRoIすべてをCNNに入力し,分類する.

 

 

「CNNに入れる前に,先に物体っぽい部分(RoI)を見つけよう」というのがR-CNNの新規性です.

 

このRoIを見つけるアルゴリズムとして,R-CNNではSelective Searchという手法を採用しています.

Selective Searchについての詳細は,以下のURLが分かりやすいです.

https://qiita.com/Almond/items/7850cf81903fbe2a2c6c

 

ちなみに,このRoIを生成するアルゴリズムのことをregion proposalと言うらしいです.

(RoIとregion proposalの使い分けがごっちゃになってるのを見ますが,僕が調べた感じだとこのように使い分けてるらしい)

 

次の記事では,R-CNNの欠点を改善したFast R-CNNについて書きたいと思います,