物体検出の概要 - YOLO、SSD、Faster R-CNN のアーキテクチャと性能比較
物体検出とは - 画像中の物体を見つけて分類する技術
物体検出 (Object Detection) は、画像中に存在する物体の位置 (バウンディングボックス) とカテゴリ (クラス) を同時に推定するタスクです。画像分類が「画像全体に何が写っているか」を判定するのに対し、物体検出は「どこに何があるか」を特定します。自動運転、監視カメラ、医療画像診断、小売業の在庫管理など、産業応用が最も進んでいる画像認識技術です。
物体検出の出力: 各検出結果は以下の情報を含みます。
- バウンディングボックス: 物体を囲む矩形の座標 (x, y, width, height)
- クラスラベル: 物体のカテゴリ (人、車、犬など)
- 信頼度スコア: 検出の確信度 (0.0-1.0)
評価指標:
- mAP (mean Average Precision): 全クラスの AP (Precision-Recall 曲線の下面積) の平均。COCO データセットでは mAP@[0.5:0.95] (IoU 閾値 0.5-0.95 の平均) が標準。
- IoU (Intersection over Union): 予測ボックスと正解ボックスの重なり度合い。0.5 以上で正解とみなすのが一般的。
- FPS (Frames Per Second): 1 秒あたりの処理フレーム数。リアルタイム性の指標。
検出器の分類:
- 2 段階検出器 (Two-Stage): 領域提案 → 分類の 2 段階。高精度だが低速。Faster R-CNN が代表。
- 1 段階検出器 (One-Stage): 領域提案と分類を同時に実行。高速だが精度はやや劣る。YOLO、SSD が代表。
- アンカーフリー: 事前定義のアンカーボックスを使用しない。CenterNet、FCOS が代表。
Faster R-CNN - 高精度な 2 段階検出器
Faster R-CNN (2015) は、Region Proposal Network (RPN) を導入した 2 段階物体検出器で、高精度な検出が求められる場面で依然として広く使用されています。R-CNN → Fast R-CNN → Faster R-CNN と進化し、エンドツーエンドの学習が可能になりました。
アーキテクチャ:
- Backbone: 特徴抽出ネットワーク (ResNet-50/101, FPN)。入力画像から多スケールの特徴マップを生成。
- RPN (Region Proposal Network): 特徴マップ上の各位置でアンカーボックス (複数のサイズ・アスペクト比) を評価し、物体が存在する可能性の高い領域 (Region Proposal) を約 300 個生成。
- RoI Pooling/Align: 各 Region Proposal を固定サイズの特徴ベクトルに変換。RoI Align は量子化誤差を排除し精度を向上。
- Head: 各 Region Proposal のクラス分類とバウンディングボックス回帰を実行。
FPN (Feature Pyramid Network): マルチスケール検出の鍵となる技術です。Backbone の各解像度レベルの特徴マップをトップダウンで統合し、小さな物体から大きな物体まで均一に検出できるようにします。
性能: COCO データセットで mAP 42-47% (ResNet-101 + FPN)。処理速度は約 5-15 FPS (GPU)。精度は最高クラスですが、リアルタイム処理には不向きです。
Cascade R-CNN (2018): Faster R-CNN の改良で、複数の検出ヘッドを段階的に適用し、IoU 閾値を徐々に上げることで高精度な検出を実現します。mAP で 2-4% の改善が得られます。
適用場面: 精度が最優先で速度制約が緩い場面 (医療画像診断、衛星画像解析、オフラインのバッチ処理) に最適です。
YOLO シリーズ - リアルタイム物体検出の進化
YOLO (You Only Look Once) は 2016 年に登場した 1 段階検出器で、画像全体を 1 回のフォワードパスで処理し、リアルタイムの物体検出を実現しました。v1 から v11 まで進化を続け、速度と精度の両面で大幅に改善されています。
YOLO の基本原理: 入力画像を SxS のグリッドに分割し、各グリッドセルが B 個のバウンディングボックスと C クラスの確率を同時に予測します。全ての予測が 1 回の CNN フォワードパスで完了するため、非常に高速です。
YOLOv5 (2020): Ultralytics が開発した PyTorch 実装で、実務での使いやすさを重視しています。モデルサイズのバリエーション (n/s/m/l/x) があり、用途に応じて速度と精度のバランスを選択できます。
- YOLOv5n: 1.9M パラメータ、640 × 640入力で約 200 FPS
- YOLOv5s: 7.2M パラメータ、mAP 37.4%、約 150 FPS
- YOLOv5x: 86.7M パラメータ、mAP 50.7%、約 30 FPS
YOLOv8 (2023): アンカーフリー設計を採用し、アンカーボックスの事前定義が不要になりました。Decoupled Head (分類と回帰を分離) により精度が向上し、COCO で mAP 53.9% (YOLOv8x) を達成しています。
YOLO11 (2024): 最新バージョンで、C3k2 ブロックと SPPF の改良により、YOLOv8 と同等の精度を 22% 少ないパラメータで実現しています。エッジデバイスでの推論に最適化されています。
実装例:
from ultralytics import YOLO
model = YOLO('yolov8n.pt')
results = model('image.jpg', conf=0.5)
SSD と RetinaNet - 1 段階検出器のバリエーション
YOLO 以外の 1 段階検出器として、SSD と RetinaNet を解説します。それぞれ異なるアプローチでマルチスケール検出と精度向上を実現しています。
SSD (Single Shot MultiBox Detector, 2016): 複数の解像度の特徴マップから同時に検出を行うマルチスケール検出器です。VGG-16 をベースに、追加の畳み込み層で段階的に解像度を下げながら、各レベルで検出を実行します。
特徴: (1) 6 つの異なる解像度の特徴マップで検出 (38x38, 19x19, 10x10, 5x5, 3x3, 1x1)。(2) 各位置で 4-6 個のデフォルトボックス (アンカー) を使用。(3) 小さな物体は高解像度マップ、大きな物体は低解像度マップで検出。
性能: COCO mAP 25-28% (SSD300)、約 60 FPS。YOLO v1 より高精度で、Faster R-CNN より高速という位置づけでしたが、現在は YOLOv5 以降に性能で劣ります。
RetinaNet (2017): Focal Loss を導入し、1 段階検出器の精度を 2 段階検出器と同等レベルに引き上げた画期的なモデルです。
クラス不均衡問題: 1 段階検出器は画像全体の全位置で検出を試みるため、背景 (負例) が圧倒的に多く (正例の 1000 倍以上)、学習が背景に支配されます。
Focal Loss: FL(p) = -α(1-p)^γ × log(p)。簡単な例 (背景) の損失を下げ、難しい例 (物体) の損失を相対的に上げることで、クラス不均衡を解決します。γ=2, α=0.25 がデフォルトです。
性能: COCO mAP 40.4% (ResNet-101 + FPN)、約 8 FPS。Faster R-CNN と同等の精度を 1 段階で達成した最初のモデルです。Focal Loss のアイデアは後続の多くの検出器に採用されています。
EfficientDet (2020): EfficientNet をバックボーンに、BiFPN (Bidirectional FPN) で効率的なマルチスケール特徴統合を実現。パラメータ効率が高く、モバイルデバイスからサーバーまで幅広いスケールに対応します。
最新動向 - Transformer ベースの検出器と基盤モデル
2020 年以降、Vision Transformer の導入により物体検出のパラダイムが変化しています。アンカーフリー、NMS フリーの検出器や、大規模事前学習モデルの活用が主流になりつつあります。
DETR (Detection Transformer, 2020): Facebook が提案した Transformer ベースの検出器で、物体検出を集合予測問題として定式化しました。NMS (Non-Maximum Suppression) が不要で、エンドツーエンドの学習が可能です。
アーキテクチャ: CNN Backbone → Transformer Encoder → Transformer Decoder → 予測ヘッド。Decoder の Object Query (学習可能なクエリ) が各物体に対応し、Hungarian マッチングで正解と対応付けます。
DINO (2022): DETR の改良で、Deformable Attention と対照学習を組み合わせ、COCO で mAP 63.3% を達成しました。Faster R-CNN を大幅に上回る精度で、Transformer ベース検出器の優位性を確立しました。
RT-DETR (2023): リアルタイム DETR で、YOLO と同等の速度 (100+ FPS) で DETR レベルの精度を実現します。NMS 不要のため後処理が簡潔で、デプロイが容易です。
Grounding DINO (2023): テキストプロンプトで検出対象を指定できるオープンボキャブラリ検出器です。「赤い車」「眼鏡をかけた人」など、事前に学習していないカテゴリも検出可能です。SAM と組み合わせることで、テキスト指示によるセグメンテーションも実現します。
YOLO-World (2024): YOLO にオープンボキャブラリ機能を追加したモデルで、リアルタイムのテキスト指定検出が可能です。事前定義のクラスに限定されず、任意のテキストで検出対象を指定できます。
基盤モデルの活用: DINOv2、SAM、CLIP などの大規模事前学習モデルを特徴抽出器として使用し、少量のタスク固有データでファインチューニングするアプローチが主流になっています。
実務での選択基準とデプロイ戦略
物体検出モデルの選択は、精度要件、速度要件、デプロイ環境、データ量によって決まります。実務での判断基準とデプロイ時の最適化手法を解説します。
用途別推奨モデル:
- 自動運転: YOLOv8/YOLO11 (リアルタイム性必須、30+ FPS)
- 監視カメラ: YOLOv8m (精度と速度のバランス)
- 医療画像: Faster R-CNN / DINO (精度最優先、速度制約なし)
- 小売 (棚卸し): EfficientDet (エッジデバイスでの推論)
- ドローン映像: YOLOv8s (軽量、エッジ推論)
- オープンボキャブラリ: Grounding DINO / YOLO-World
デプロイ最適化:
- 量子化 (INT8): FP32 → INT8 で推論速度 2-4 倍、精度低下 1-2% mAP
- TensorRT: NVIDIA GPU 向け最適化で 2-3 倍高速化
- ONNX Runtime: クロスプラットフォーム推論エンジン
- OpenVINO: Intel CPU/GPU 向け最適化
- CoreML: Apple デバイス向け (iPhone, Mac)
エッジデバイスでの推論: Jetson Nano/Xavier、Raspberry Pi、スマートフォンでの推論には、モデルの軽量化が必須です。YOLOv8n (1.9M パラメータ) は Jetson Nano で 25 FPS、iPhone 15 Pro で 60 FPS を達成します。
カスタムデータでの学習: 独自のデータセットで物体検出モデルを学習する場合、最低 300-500 枚のアノテーション画像が必要です。転移学習 (COCO 事前学習モデルからのファインチューニング) により、少量データでも高精度なモデルが構築可能です。アノテーションツールとして Roboflow、CVAT、Label Studio が広く使用されています。