物体検出 | 深層学習の応用
物体検出(Object Detection)は、画像中に写っている物体それぞれについて「どこにあるか(バウンディングボックス)」と「何であるか(クラスラベル)」を同時に予測するタスクです。
0. 関連タスクとの違い
| タスク | 出力 | 個体の区別 |
|---|---|---|
| 画像分類(Classification) | 画像全体に対するクラスラベル1つ | 不要 |
| 物体検出(Object Detection) | 物体ごとのバウンディングボックス+クラスラベル | する |
| セマンティックセグメンテーション | 画素ごとのクラスラベル | しない |
| インスタンスセグメンテーション | 物体ごとの画素単位マスク | する |
物体検出は「画像分類」と「回帰(ボックス座標の予測)」を組み合わせたタスクだと捉えると理解しやすくなります。各物体候補に対して「このクラスである確率」(分類)と「ボックスの中心座標・幅・高さ」(回帰)の両方を同時に出力します。
1. 2段階検出器(Two-Stage Detector)
「物体がありそうな領域を提案する(Region Proposal)」→「提案領域それぞれを分類・ボックス回帰する」という2段階で処理する方式です。精度は高い傾向がありますが、提案領域の数だけ処理が必要になるため低速になりがちです。
R-CNN(Regions with CNN features)
- Selective Search(CNNを使わない古典的な画像処理アルゴリズム)で、画像中から物体らしき矩形領域(Region Proposal)を約2,000個抽出する
- 各領域を一定サイズにリサイズし、個別に CNN に入力して特徴量を得る
- 得られた特徴量を SVM で分類し、別途ボックス位置を回帰で補正する
問題点:2,000個の候補領域それぞれに対して個別に CNN の順伝播を行うため、同じ画像の重複した領域でも特徴抽出が何度も走り、非常に低速(1枚の画像に数十秒)でした。
Fast R-CNN
R-CNN の「候補領域ごとにCNNを回す」非効率を解消したモデルです。
- 画像全体を1回だけ CNN に通し、1枚の特徴マップを得る
- Selective Search で得た候補領域を、元画像の座標系から特徴マップ上の座標系に変換する
- RoI Pooling(Region of Interest Pooling)により、サイズの異なる各候補領域を固定サイズの特徴ベクトルに変換する
- 固定サイズの特徴ベクトルを全結合層に通し、クラス分類とボックス回帰を同時に行う
CNN の計算を画像全体で共有できるため、R-CNN に比べて大幅に高速化されました。ただし候補領域の生成自体(Selective Search)は依然として CNN の外部で行われる古典的アルゴリズムであり、ここがボトルネックとして残りました。
Faster R-CNN
Fast R-CNN に残っていた「候補領域生成(Selective Search)」もニューラルネットワークに置き換えたモデルです。
- RPN(Region Proposal Network):CNN の特徴マップから、候補領域(物体がありそうな矩形)自体を予測する小さなネットワーク。これにより候補領域生成もエンドツーエンドで学習可能になった
- Anchor(アンカー):特徴マップの各位置に、あらかじめ複数のサイズ・アスペクト比を持つ基準ボックス(アンカー)を仮定しておく仕組み。RPN は「各アンカーが物体かどうか(objectness スコア)」と「アンカーからのボックスのずれ(オフセット)」を予測する
- RPN と後段の分類・回帰ヘッドが、CNN の特徴マップを共有するため、Selective Search が不要になり大幅に高速化された
2段階検出器のまとめ
| モデル | 候補領域の生成方法 | 特徴 |
|---|---|---|
| R-CNN | Selective Search(外部アルゴリズム) | 候補領域ごとにCNNを実行するため低速 |
| Fast R-CNN | Selective Search(外部アルゴリズム) | CNNの計算は画像全体で1回のみ共有、RoI Poolingを導入 |
| Faster R-CNN | RPN(CNN内で学習) | 候補領域生成までエンドツーエンドで学習可能、最速 |
2. 1段階検出器(One-Stage Detector)
候補領域の提案という中間ステップを経ず、画像全体から直接「各位置に物体があるか・どのクラスか・ボックスはどこか」を1回のネットワーク通過で予測します。2段階検出器に比べて高速です。
YOLO(You Only Look Once)
- 画像を $S \times S$ のグリッドに分割し、各グリッドセルが「そのセルの中心を持つ物体」のクラス確率とボックス座標を直接予測する
- 候補領域生成のステップが存在しないため、非常に高速(リアルタイム検出が可能)
- 一方で、1つのグリッドセルが検出できる物体数に制限があるため、小さな物体が密集している場面では精度が落ちやすい
SSD(Single Shot MultiBox Detector)
- CNN の複数の階層(浅い層から深い層まで)それぞれの特徴マップに対してアンカーボックスに基づく予測を行う、マルチスケール検出が特徴
- 浅い層の特徴マップ(解像度が高い)は小さな物体の検出に、深い層の特徴マップ(解像度が低いが意味的情報が豊富)は大きな物体の検出に強い、という役割分担が生まれる
- YOLO と同様に1段階検出器だが、マルチスケール化によって YOLO(v1) より小物体検出に強いとされる
1段階 vs 2段階の比較
| 2段階検出器(R-CNN系) | 1段階検出器(YOLO, SSD) | |
|---|---|---|
| 処理の流れ | 候補領域提案 → 分類・回帰 | 直接、分類・回帰を出力 |
| 速度 | 遅い | 速い(リアルタイム向き) |
| 精度 | 高い傾向 | やや劣る傾向(ただし後継モデルで差は縮小) |
| 主な用途 | 精度重視のオフライン処理 | リアルタイム性が求められる用途(自動運転、監視カメラ等) |
3. 評価指標
IoU(Intersection over Union)
予測したバウンディングボックスと正解ボックスがどれだけ重なっているかを表す指標です。
\[\text{IoU} = \frac{\text{予測ボックスと正解ボックスの重なり面積}}{\text{予測ボックスと正解ボックスの和集合面積}}\]- 完全に一致すれば $\text{IoU}=1$、まったく重ならなければ $\text{IoU}=0$
- 検出タスクでは一般に IoU が一定のしきい値(例:0.5)以上のとき、その予測を TP(True Positive、正しい検出)とみなす
NMS(Non-Maximum Suppression, 非極大値抑制)
物体検出モデルは、同一の物体に対して複数の重複したボックスを予測してしまうことが多くあります。NMS はこの重複を1つに絞り込む後処理です。
手順:
- 予測されたボックス群を、クラスごとの信頼度スコアが高い順に並べる
- 最もスコアが高いボックスを採用し、残りの候補と IoU を計算する
- IoU が一定のしきい値(例:0.5)を超える(=ほぼ同じ物体を指している)ボックスは重複とみなして削除する
- 残ったボックスに対して 2〜3 を繰り返す
これにより、1つの物体に対して1つのボックスだけが最終的に残ります。
mAP(mean Average Precision)
物体検出の代表的な総合評価指標です。
- 各クラスについて、信頼度スコアの高い順に予測を並べ、Precision(適合率)と Recall(再現率)を計算しながら Precision-Recall 曲線 を描く
- この曲線の下側の面積(あるいは一定の Recall 水準ごとの Precision の平均)を Average Precision(AP) と呼ぶ
- すべてのクラスについて AP を計算し、その平均を取ったものが mAP である
IoU のしきい値によって TP/FP の判定が変わるため、mAP@0.5(IoU閾値0.5でのmAP)のように、しきい値を明記して表記することが一般的です。
4. 既存ノートとの関連
- Anchor(アンカー)は、物体検出における「あらかじめ用意した基準ボックス」を指す概念で、Transformer の Attention(Query/Key/Value)とはまったく別の概念なので混同しないよう注意
- CNN の畳み込み・プーリングの基礎的な仕組み(受容野、ストライド、パディング)が前提知識になります
まとめ
- 物体検出は「分類」と「ボックス回帰」を組み合わせたタスクである
- 2段階検出器(R-CNN系)は精度重視・低速、1段階検出器(YOLO, SSD)は速度重視
- Faster R-CNN の RPN によって候補領域生成までエンドツーエンドで学習可能になった
- 評価には IoU、NMS(後処理)、mAP(総合指標)の3つの概念がセットで登場する