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の考え方
- Selective Search で「物体がありそうな領域」をざっくり2000個くらい切り出す
- 各領域に CNN(AlexNet) を通して特徴量を抽出
- SVM(サポートベクターマシン) でそれが「犬」「車」「人」などかを分類
- Bounding box regression で位置を微調整
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の新しかったところ
- 2012年のAlexNetで「画像分類(これは犬?猫?)」はできるようになっていたけど、「どこにあるか」まで全自動でわかる技術がなかった
- 当時は「手作り特徴量(HOGとかSIFT)」+「SVMで分類」とかやってた時代
- 最初にざっくり2000個の領域に分けて、それぞれをCNNとSVMで分類することで物体の位置把握までできるようになったのが革新的だった
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からアイディアもらってる
😃 物体検知の元祖ってことね、おっけー