Anchor-Based Detectors
アンカーベース検出器は、Faster R-CNN、SSD、RetinaNet、YOLOv5のように、事前設定済みのアンカーボックスからのオフセットとして物体を予測します。仕組みと比較を解説します。
アンカーベース検出器は、事前定義されたアンカーボックスを画像上に配置し、各アンカーについてクラススコアと、適合したバウンディングボックスに変換するオフセットを予測する物体検出モデルです。この系統には、領域提案ネットワークがアンカーをスコアリングして候補領域を生成するFaster R-CNNなどの2段階モデルと、SSD、RetinaNet、YOLOv2からYOLOv5のように各アンカーを直接分類・調整する1段階モデルがあります。2015年のFaster R-CNNから2019年にFCOSなどのアンカーフリー検出器が同等の精度を達成するまで、物体位置の特定にはアンカーが標準的に使われていました。
アンカーベース検出の仕組み#
バックボーンとネックが画像を特徴マップに変換し、各マップの各セルに、複数のサイズとアスペクト比からなる固定のアンカーセットを配置します。各アンカーについて、検出ヘッドはクラスごとのスコアと、YOLOv2からYOLOv5ではオブジェクトネススコア、さらに4つの回帰値を予測します。Faster R-CNNで広く使われているエンコーディングでは、アンカーの幅と高さに対する割合で中心を移動し、幅と高さを指数関数的にスケーリングします。
import torch
# One anchor as (center x, center y, width, height) in pixels
anchor = torch.tensor([320.0, 240.0, 64.0, 128.0])
# Offsets (tx, ty, tw, th) that the regression branch predicts for this anchor
tx, ty, tw, th = torch.tensor([0.25, -0.10, 0.20, -0.05])
# Faster R-CNN decoding: shift the center in units of anchor size, scale width and height exponentially
cx = anchor[0] + tx * anchor[2]
cy = anchor[1] + ty * anchor[3]
w = anchor[2] * torch.exp(tw)
h = anchor[3] * torch.exp(th)
print(f"anchor 64x128 at (320, 240) -> box {w:.1f}x{h:.1f} at ({cx:.1f}, {cy:.1f})")アンカーは、(336.0, 227.2)を中心とする78.2 × 121.8ピクセルのボックスになります。右に16ピクセル、上に12.8ピクセル移動し、幅が22%拡大(exp(0.2))、高さが5%縮小(exp(−0.05))しました。オフセットはアンカーのサイズに対する相対値であるため、同じ予測値を小さなアンカーにも大きなアンカーにも適用できます。
推論時には、検出器はこの方法ですべてのアンカーをデコードし、信頼度しきい値を下回るボックスを除外してから、非最大抑制 (NMS)を実行し、隣接するアンカーによる重複を取り除きます。
学習:各アンカーへのラベル付け#
学習時には、ラベル付きボックスとのIntersection over Union (IoU)に基づいて、各アンカーにラベルを付けます。RetinaNetでは、次のしきい値を使用します。
Faster R-CNNの領域提案ネットワークでは、より厳しい0.7と0.3を使用します。5つのピラミッドレベルに位置あたり9個ずつ配置するRetinaNetのアンカーは、画像あたり約100,000個に達し、そのほぼすべてが負例です。焦点損失は、学習を圧倒しないよう、こうした簡単な負例の重みを下げます。
主なアンカーベースアーキテクチャ#
- 2段階検出器:Faster R-CNNの領域提案ネットワークはアンカーを物体または背景としてスコアリングし、画像あたり約300個の提案領域に調整します。続いて2つ目のヘッドが各提案を分類・調整します。VGG-16バックボーンを使った場合、GPU上で5 FPSで動作しました。Mask R-CNNは同じ設計にマスクブランチを追加しています。
- 1段階物体検出器:SSD、RetinaNet、YOLOv2からYOLOv5までのYOLOモデルは、1回の処理で各アンカーを分類・調整します。YOLOv2は、人手で選んだアンカーを学習ボックスの幅と高さに対するk-meansクラスタに置き換えました。
UltralyticsのYOLOv5はアンカーベースで、3つの出力レベルそれぞれに3個のアンカーを配置し、形状に基づいてラベルとアンカーをマッチングします。ラベルの幅と高さがどちらもアンカーの4倍以内であれば、そのアンカーは候補になります。UltralyticsパッケージのYOLOv5uバリアントでは、ヘッドがYOLOv8で導入されたアンカーフリーの分離ヘッドに置き換えられており、その設計はYOLO26にも引き継がれています。
アンカーベース検出器とアンカーフリー検出器の比較#
アンカーフリー検出器は、各グリッド点から4辺までの距離としてボックスを予測するか、物体の中心などのキーポイントから予測します。そのため、調整が必要なアンカーサイズ、アスペクト比、IoUしきい値がなく、アンカー形状ごとではなく位置ごとに1つの候補を生成します。ATSSは、RetinaNetとアンカーフリーのFCOSの精度差が、それぞれの正例学習サンプルの選び方に起因することを明らかにしました。同じ選択ルールを使うと、両者は同じ精度に達しました。RetinaNetはCOCO minivalで位置あたり9個のアンカーを使った場合に39.2 AP、1個の場合に39.3 APを記録しました。










