Noesworthy

R-CNN(Region-based Convolutional Neural Network)ってなぁに

2014年にRoss Girshickさんが考案した物体検出アルゴリズムの一つ。

物体検出とは

画像の中で“何がどこにあるか”を認識する」技術。

「犬がいる」だけでなく「左から何px 上から何px のところに 高さ何px 幅何px の犬がいる」って教えてくれる

CNNってなぁに

Convolutional Neural Network(畳み込みニューラルネットワーク)の略

画像認識が得意なニューラルネットの一種

R-CNNのRは?

「Region-based」って意味で、画像の中の“部分(領域)ごと”にCNNをかけることを指す

R-CNNの考え方

R-CNNが使われてた分野

などなど

R-CNN進化の流れ

モデル 特徴
2014 R-CNN 初代!めっちゃ遅いけど正確🐢
2015 Fast R-CNN 特徴マップを共有して高速化⚡
2015 Faster R-CNN Region ProposalもCNNで!🚀
2017 Mask R-CNN ピクセル単位で領域分割もOK🎭

R-CNNの新しかったところ

GPTとの会話

😃 2000個の箱は座標みたいな役割をしてるっていうことだよね

😃 2000個の中の1個に猫っぽい画像がいたら、いったんその箱の座標を取得して、あとはboundingなんとかで微調整する

🐹 そうそう、正確には元画像をグリッド状に2000個に分けるんじゃなくて、Selective Searchっていう技術で「あやしい箱」を2000個抽出するんだけどね

🐹 最初にこう言う感じの座標をあやしい箱2000個分出す

Box1: (100, 120, 80, 60)
Box2: (130, 140, 90, 70)
Box3: (200, 180, 110, 90)

🐹 んで、それぞれのあやしい箱をCNNとSVMに通して、「猫っぽさ」をスコアで出す

Box1: スコア 0.65
Box2: スコア 0.9
Box3: スコア 0.6

😃 一番スコアが高い箱だけ残して、あとは捨てるんでしょ、はい読めましたぁ

🐹 はい残念でしたぁww R-CNNはもっと賢いですぅww

🐹 実際はこんな感じで箱同士がかぶることが多い

┌──────────────┐ 0.90 ← Box A
 ┌────────────┐ 0.92 ← Box B
  ┌──────────┐ 0.95 ← Box C
   🐱 ←猫

🐹 だから、「Non-Maximum Suppression(NMS)」っていう計算で重なり合ってる箱を削除するんだ

🐹 1匹の猫に対して3個箱が重なってたら1個だけ残るし、

🐹 元の画像の別々の場所に3匹猫がいたら、スコアが高い箱が3個残る

🐹 それぞれに対してBounding Box Regressionで猫がぴったりおさまるように四角の位置を微調整する

🐹 その四角の座標を「ここに猫がいたよ」✖️3 って出力するわけ

⬇️猫がぴったりおさまってる
(0,0) ─────────────▶ x
   │
   │   ┌───────────────┐
   │   │               │
   │   │     🐱猫       │
   │   │               │
   │   └───────────────┘
   ▼
   y

😃 思ったより手が込んでたわ

😃 じゃぁさー1匹の猫が、頭、胴、お尻で3つの箱にまたがってたらどうなるの?

🐹 あーそれはですねー

🐹 R-CNNの根本的な問題の一つだったんだけど、

🐹 一番スコアが高い箱だけ残して、NMSであとの2つは消えちゃう

🐹 R-CNNは一個一個の箱を独立した画像として扱うんだ

🐹 だから3つの箱を統合して1匹の猫みたいに出力する能力はなかったんだ

🐹 後継モデルや他の進化したモデルはそこらへん工夫してるよ

モデル 改善ポイント
Faster R-CNN 特徴マップ全体を見て位置推定(部分でも特徴が共有される)
Mask R-CNN ピクセル単位の領域を予測(尻尾だけでも認識可能)
DETR 画像全体をトランスフォーマーで見て“猫全体”を理解できる🐈‍⬛

😃 R-CNN自体は今でも使われてるの?

🐹 いんや、精度はいいけど1枚の2000回CNN回すっていう鬼計算量のせいで、オリジナルのR-CNNは今はほとんど使われてない

🐹 でも今主流のYOLO系やSSD系もR-CNNからアイディアもらってる

😃 物体検知の元祖ってことね、おっけー

#ai #tech