R-CNNとFast R-CNN

に公開

はじめに

概要

  • シラバス:E資格2024#2
  • シラバスの項目に出ないが、キーワードで出ている
  • Not End-to-End Learningの2つR-CNNを勉強する

キーワード

バウンディングボックス, End-to-End Learning, 2ステージ検出, Selective Search,
R-CNN, Fast R-CNN, RoI Pooling, RoI

学習内容

物体検出における代表的な7つのCNNネットワーク

  • 物体検出:画像中の「物体の種類(クラス)」と「位置(バウンディングボックス)」を同時に見つけるタスクである
CNNネットワーク名 概要 物体検出の手法
R-CNN 領域探索と画像認識するモデルを組み合わせて物体検出をするアーキテクチャ NOT End-to-End Learning
Fast R-CNN R-CNNを改良し、演算時間を大幅に早めたアーキテクチャ NOT End-to-End Learning
Faster R-CNN Fast R-CNNを改良し、物体候補を検出するアルゴリズムにRegion Proposal Networkを使用することでEnd to Endで学習できるようにしたアーキテクチャ End-to-End Learning
Mask R-CNN Faster R-CNNにInstance Segmentationというタスクを追加したアーキテクチャ。
バウンディングボックスの検出すると同時に物体マスク(物体かそうでないか)を予測する仕組みを追加している
End-to-End Learning
YOLO バウンディングボックスとクラスの確率回帰問題として検出を行うことで、リアルタイムに近い処理速度を実現したアーキテクチャ End-to-End Learning
SSD 処理速度がYOLOv1よりも高速で、Faster R-CNNと同程度の認識精度をもつアーキテクチャ End-to-End Learning
FCOS SSD、YOLO、Faster R-CNNなどで使われているアンカーボックスに依存したモデルの欠点をなくし、計算コストを下げて精度を上げたアンカーフリーな物体検出モデル End-to-End Learning

バウンディングボックス(Bounding Box)

  • 画像認識や物体検出で、「物体の位置や大きさ」を表すための箱(矩形)
  • 代表的な表現方法は2つ:
    • 左上と右下の座標(x_min, y_min, x_max, y_max)
    • 中心座標と幅・高さ(x_center, y_center, width, height)

End-to-End Learning

  • データを最初から最後まで一つのモデルに全部お任せする学習方法

2ステージ検出(Two-Stage Detection)

  • 「 物体がありそうな場所をまず見つけてから、詳しく分類する」という2段階の処理を行う手法
  • 「候補を出す」+「分類する」の2ステップ検出方式
    • 精度が高い、小さな物体にも強い
    • 位置補正やマスク予測(Mask R-CNN)も付けやすい
ステージ 処理内容 目的
第1段階 物体の「候補領域(RoI)」を提案 「どこに物体があるか?」を粗く見つける
第2段階 候補領域を分類 + 位置補正 「何の物体か?」と「正確な位置は?」を判断

代表的な2ステージ検出モデル

モデル名 説明
R-CNN 最初のTwo-Stage検出モデル(遅い)
Fast R-CNN CNNを全体で1回だけ通すことで高速化
Faster R-CNN RPN(Region Proposal Network)を導入し、RoI提案も学習可能に
Mask R-CNN Faster R-CNNにマスク(セグメンテーション)機能を追加したもの

物体検出アーキテクチャーの系譜

R-CNN ---- Fast R-CNN ---- Faster R-CNN --------------Mask R-CNN
               |
               |-----------YOLO
                             |-----------SSD

|======================|===========================|=======================|                            
|Not end to end        | end to end                | instance segmentation |
  • 「このへんに何か写ってそう!」という矩形候補(RoI)を、画像から自動的にたくさん出す手法
    • 古典的な物体検出では、画像のすべての領域をスライドして探索(スライディングウィンドウ)していました→ 計算量がとても多く、効率が悪い
    • Selective Searchが登場→ 画像の中から「それっぽい領域」だけを数千個選び出すことで、計算を大幅に削減
  • Faster R-CNN以前の物体検出モデル(例:R-CNN)で使用されていました

仕組み

  1. 画像を細かくセグメンテーション(色や質感で領域を分割)
  2. 似ている領域を段階的に統合していて、隣り合う領域をマージ(統合)
  3. 統合の過程でできた矩形領域を全部「物体候補」として記録
  4. 最終的に数千個の矩形(物体候補)が得られる

Faster R-CNNとの違い

項目 Selective Search Faster R-CNN (RPN)
候補領域の生成方法 手作業のルールベース(非学習) 学習可能なネットワーク(RPN)
候補生成の速度 遅い(数秒かかる) 高速(数ミリ秒)
精度 悪くはないが固定的 より柔軟・高精度

Selective Searchとバウンディングボックスの関係

用語 役割 関係性
バウンディングボックス 物体の位置を表す四角形([x, y, w, h]など) Selective Searchの「出力結果」
Selective Search 「物体っぽい領域」を見つけるアルゴリズム 多数のバウンディングボックスを生成するために使われる

R-CNN

  • 「Selective Searchで候補を出して、CNNで1個ずつ分類」する物体検出手法

処理の流れ

  1. 物体候補の抽出:Selective Searchを使って、画像から「物体が写ってそうな矩形領域(RoI)」を程度抽出
  2. 特徴抽出:
    • 各候補領域(RoI)をリサイズして、CNN(AlexNetなど)に通す
    • 得られた特徴ベクトルを保存
  3. 分類 & バウンディングボックス回帰
    • 特徴ベクトルを使って、SVMで「何の物体か」を分類(クラス分類)
    • 特徴ベクトルを使って、回帰モデルでバウンディングボックスの微調整(位置補正)

課題

  • 計算コストが非常に高い
  • 学習がバラバラ
  • 推論速度が遅い
  • リアルタイム不可

Fast R-CNN

  • R-CNNの欠点(特に処理速度の遅さ)を大幅に改善した物体検出モデル
  • 1回のCNN処理で画像全体の特徴マップを作り、そこから候補領域を抽出して分類・回帰を高速に行う

処理の流れ

  1. 画像をCNNに通し、特徴マップを1回だけ計算→ 複数の候補領域(RoI)を1枚の画像に対して複数回CNNに通す必要がなくなる
  2. Selective Searchなどで候補領域(RoI)を取得
  3. 特徴マップ上でRoI Poolingを使い、各RoIを固定サイズの特徴に変換
  4. 変換した特徴を全結合層に入力し、クラス分類 + バウンディングボックス回帰を同時に実施

課題

  • 候補領域は外部生成:Selective Searchなどのアルゴリズムに依存し、時間がかかる
  • 完全end-to-endではない:RPNがないため、領域提案は別モジュールで行う必要がある

Fast R-CNNとR-CNNの比較

特徴 R-CNN Fast R-CNN
CNNの回数 RoIごとにCNNを何千回も通す 画像ごとにCNNを1回だけ通す
特徴抽出 各RoIを独立して処理 共有特徴マップからRoI Poolingで切り出し
学習 CNN, SVM, 回帰器を別々に学習 分類と回帰を一緒にend-to-endで学習
処理速度 遅い(数分) 速い(数秒〜数十秒)

RoI Pooling(Region of Interest Pooling)

  • Fast R-CNNなどの物体検出モデルで、画像中の領域(RoI)を固定サイズの特徴マップに変換する操作
  • R-CNNは使わっていない

RoI(Region of Interest)

  • 画像の中で「ここに物体があるかもしれない!」と注目した矩形領域
  • 入力画像の全体をいきなり分類するのではなく、小さな領域ごとに「何が写っているか」を判断するため
  • 全体を一括分類すると複数の物体を扱えないが、RoIごとに分類すれば複数物体に対応できる
  • 役割
    • 入力画像から特徴マップを抽出(CNN)
    • RPNが物体がありそうな領域(RoI)を複数提案
    • 各RoIを分類・位置補正する
GitHubで編集を提案

Discussion