Anchor Boxes
アンカーボックスが物体検出の参照テンプレートとしてどのように機能するかを学びます。それらがどのように精度を向上させるか、またUltralytics YOLO26のようなモデルがどのようにアンカーフリー設計を活用しているかを発見しましょう。
アンカーボックスは、特定のアスペクト比とスケールを持つ事前定義された基準矩形であり、画像全体に配置されて、オブジェクト検出モデルがオブジェクトの位置特定と分類を行うのを支援します。オブジェクトの形状が多岐にわたるため不安定になりやすい、オブジェクトの正確なサイズと位置をゼロから予測するようニューラルネットワークに要求する代わりに、モデルはこれらの固定テンプレートを出発点として使用します。初期ボックスをグラウンドトゥルースに合わせるためにどれだけ調整するか、つまり「回帰」するかを学習することで、システムはより高速な収束と高い精度を実現できます。この技術は、複雑な位置特定のタスクをより管理しやすい最適化問題に単純化することにより、computer vision (CV) の分野を根本的に変革しました。
アンカーボックスの仕組み#
従来の anchor-based detectors では、入力画像がセルのグリッドに分割されます。各セルの位置で、ネットワークは異なるジオメトリを持つ複数のアンカーボックスを生成します。たとえば、背の高い歩行者と幅の広い車を同時に検出するために、モデルは同じ中心点で背の高い狭いボックスと、低い広いボックスを提案する場合があります。
model training の間、これらのアンカーは、Intersection over Union (IoU) と呼ばれるメトリックを使用して実際のオブジェクトと照合されます。ラベル付けされたオブジェクトと大幅にオーバーラップするアンカーは、「ポジティブ」サンプルとして指定されます。その後、ネットワークは次の2つの並列タスクを学習します。
-
分類: 特定のクラス(「犬」や「自転車」など)が含まれている確率を示すスコアをアンカーに割り当てます。これには、交差エントロピー損失のような標準的な supervised learning の目的関数が使用されます。
-
ボックス回帰: 一般的なアンカーを密着した bounding box に変換するために必要な正確なオフセット値(座標のシフトとスケーリング係数)を計算します。
このアプローチにより、モデルは互いに近くに配置された異なるサイズの複数の物体を処理できるようになります。これは、各物体をその形状に最も一致するアンカーに割り当てることができるためです。
実社会での応用#
新しいアーキテクチャではアンカーフリー設計へと移行していますが、物体の特性が予測可能な多くの確立された本番システムにおいて、アンカーボックスは依然として不可欠な存在です。
- 小売および在庫管理: AI-driven retail solutions では、カメラが棚の在庫を監視します。シリアルボックスやソーダ缶などの製品には標準化された寸法があるため、アンカーボックスをこれらの特定のアスペクト比に合わせて調整できます。この事前知識により、モデルは複雑な環境でも高い recall を維持することができます。
- 自動運転: autonomous vehicles の知覚スタックは、歩行者、車両、交通標識の検出に依存しています。遠くから見え道路に対する車の形状プロファイルが比較的一貫しているため、これらの形状に合わせたアンカーを使用することで、堅牢な object tracking と距離推定が保証されます。
アンカーベースとアンカーフリーの比較#
従来のアンカーベースの方法と、現代の anchor-free detectors を区別することが重要です。
- アンカーベース: オリジナルの Faster R-CNN や初期の YOLO バージョン(例: Ultralytics YOLOv5)などのモデルは、これらの事前定義されたテンプレートを使用します。これらは堅牢ですが、新しいデータセットに適応させるために、ハイパーパラメータ(アンカーのサイズ/比率)の手動チューニングや、k-means法のようなクラスタリングアルゴリズムを必要とする事がよくあります。
- アンカーフリー: YOLO26 を含む高度なモデルは、多くの場合、アンカーフリーまたはエンドツーエンドのアプローチを採用しています。これらのネットワークは、オブジェクトの中心やキーポイントを直接予測するため、手動でのアンカー設定が不要になります。これにより、数千もの空の背景アンカーを処理するために必要な計算が排除され、アーキテクチャが単純化され、inference が高速化されます。
例:アンカー情報の取得#
Ultralytics Platform のような現代の高レベル API は、トレーニング中のこれらの詳細を抽象化しますが、アンカーを理解することは、古いモデルアーキテクチャを扱う場合やモデル設定ファイルを分析する際に役立ちます。次のスニペットは、モデルをロードし、その設定を検査する方法を示しており、通常、アンカー設定(存在する場合)が定義されます。
from ultralytics import YOLO
# Load a pre-trained YOLO model (YOLO26 is anchor-free, but legacy configs act similarly)
model = YOLO("yolo26n.pt")
# Inspect the model's stride, which relates to grid cell sizing in detection
print(f"Model strides: {model.model.stride}")
# For older anchor-based models, anchors might be stored in the model's attributes
# Modern anchor-free models calculate targets dynamically without fixed boxes
if hasattr(model.model, "anchors"):
print(f"Anchors: {model.model.anchors}")
else:
print("This model architecture is anchor-free.")課題と考慮事項#
効果的ではありますが、アンカーボックスは複雑さをもたらします。生成されるアンカーの膨大な数(画像ごとに数万個になることも多い)は、ほとんどのアンカーが背景のみをカバーするため、クラスの不均衡の問題を引き起こします。簡単な背景の例のウェイトを下げることにより、これを軽減するために Focal Loss のような技術が使用されます。さらに、最終的な出力には、冗長なオーバーラップボックスをフィルタリングして、各オブジェクトに対して最も確信度の高い検出のみが残るようにするために、通常 Non-Maximum Suppression (NMS) が必要になります。






