物体検出の代表的な2ステージ検出モデルであるFaster R-CNNと、それを拡張したMask R-CNNを学ぶ項目です。R-CNN系列がどのように高速化・end-to-end化されてきたかという発展の流れは、E資格で頻出のテーマです。
📖 概要
物体検出は、画像の中の「どこに」「何が」写っているかを推定するタスクです。位置はBounding Box(物体を囲む矩形)で表現し、精度はmAP(mean Average Precision)などで評価します。R-CNN系列のモデルは、まず物体がありそうな候補領域(ROI: Region of Interest)を抽出し、次に各候補領域を分類・回帰するという2段階の処理を行うため、2ステージ検出と呼ばれます。
初代R-CNNは、Selective Searchという画像処理ベースの手法で候補領域を約2,000個抽出し、それぞれをCNNに入力して特徴抽出・分類していました。候補ごとにCNNを実行するため非常に低速でした。Fast R-CNNは、画像全体に対して1回だけCNNを適用して特徴マップを作り、そこから各候補領域の特徴をROI Poolingで切り出す方式に変更して大幅に高速化しました。しかし候補領域の抽出には依然としてSelective Searchを使っていました。
Faster R-CNNは、候補領域の抽出自体をニューラルネットワーク(Region Proposal Network (RPN))に置き換え、検出処理全体を1つのネットワークとしてend-to-endに学習可能にしました。さらにMask R-CNNは、Faster R-CNNにマスク予測ブランチを追加し、物体ごとの領域を画素単位で切り出すインスタンスセグメンテーションを実現しています。
🔍 キーワード解説
Bounding BoxとmAP
Bounding Boxは、物体の位置を表す矩形で、中心座標と幅・高さ(または左上・右下の座標)で表現されます。検出モデルはクラスラベルとBounding Boxの両方を出力します。評価指標のmAPは、予測ボックスと正解ボックスの重なり(IoU)がしきい値以上なら正解とみなしてクラスごとにAP(Average Precision)を計算し、全クラスで平均したものです。物体検出の標準的な評価指標として広く用いられます。
2ステージ検出とSelective Search
2ステージ検出は、「候補領域の抽出」と「候補の分類・位置の微調整」を分けて行う方式です。精度が高い一方、後述の1ステージ検出に比べると処理は重くなる傾向があります。初代R-CNNとFast R-CNNで候補抽出に使われたSelective Searchは、色やテクスチャの類似度に基づいて小領域を階層的に統合し、物体らしい領域を提案する非学習型のアルゴリズムです。学習できないうえ処理が遅いことがボトルネックでした。
Fast R-CNNとROI Pooling
Fast R-CNNは、画像全体を1回だけCNNに通して特徴マップを得て、Selective Searchで得た各ROIに対応する特徴を特徴マップ上から切り出します。このとき使うのがROI Poolingで、大きさの異なるROIを固定サイズ(例えば7×7)のグリッドに分割し、各セルで最大値プーリングを行うことで、後段の全結合層に入力できる固定長の特徴に変換します。これによりCNNの計算が候補間で共有され、大幅に高速化されました。
Region Proposal Network (RPN)とアンカー
Faster R-CNNの中核がRegion Proposal Network (RPN)です。RPNは特徴マップ上の各位置に、あらかじめ大きさとアスペクト比の異なる複数の基準矩形(Anchor box、アンカー)を配置し、各アンカーについて「物体か背景か」のスコアと、アンカーから正解ボックスへのずれ(オフセット)を予測します。これにより候補領域の抽出が学習可能になり、特徴マップを検出ヘッドと共有できるため、システム全体をend-to-endに近い形で学習・実行できるようになりました。
Mask R-CNNとROI Align、インスタンスセグメンテーション
Mask R-CNNは、Faster R-CNNの分類・回帰ブランチに加えて、ROIごとに物体の形を画素単位で予測するマスクブランチを追加したモデルで、インスタンスセグメンテーション(同じクラスでも個体ごとに領域を区別する画素単位の認識)を行えます。また、ROI Poolingでは座標を整数に丸める量子化によって位置ずれが生じ、画素単位の予測に悪影響がありました。そこでMask R-CNNではROI Alignが導入され、丸めを行わずにバイリニア補間で特徴値をサンプリングすることで、空間的な位置合わせの精度を高めています。
📝 試験でのポイント
- R-CNN → Fast R-CNN → Faster R-CNNの改善点の対応付けが頻出です(Fast R-CNN=CNN計算の共有とROI Pooling、Faster R-CNN=Selective SearchをRPNに置換)
- RPNがアンカーごとに「物体/背景のスコア」と「ボックスのオフセット」を予測することを押さえましょう
- ROI PoolingとROI Alignの違い(量子化による丸めの有無、バイリニア補間の利用)は選択肢で問われやすいポイントです
- Mask R-CNNが行うのは「インスタンスセグメンテーション」であり、クラス単位で領域を塗り分けるセマンティックセグメンテーションとの区別が重要です
- mAPの計算にIoUのしきい値判定が関わることも確認しておきましょう
📚 まとめ
R-CNN系列は、候補領域抽出と分類を分けて行う2ステージ検出の代表です。Fast R-CNNはROI PoolingでCNN計算を共有して高速化し、Faster R-CNNはRPNとアンカーで候補抽出を学習可能にしてend-to-endな検出を実現しました。Mask R-CNNはROI Alignとマスクブランチの追加により、インスタンスセグメンテーションまで拡張しています。
