Anchor Boxes
アンカーボックスが物体検出の基準テンプレートとして機能する仕組みを学びます。精度を向上させる方法と、Ultralytics YOLO26などのモデルがアンカーフリー設計を活用する方法を解説します。
アンカーボックスは、特定のアスペクト比とスケールを持つ、あらかじめ定義された基準矩形です。画像全体に配置され、物体検出モデルが物体の位置を特定して分類するのを支援します。ニューラルネットワークに物体の正確なサイズと位置をゼロから予測させると、物体形状の多様性が非常に大きいため不安定になる可能性があります。そこでモデルは、これらの固定テンプレートを出発点として使用します。初期ボックスを正解データに適合するようどの程度調整、つまり「回帰」すべきかを予測するよう学習することで、システムはより速い収束と高い精度を実現できます。この手法は、位置特定という複雑なタスクをより扱いやすい最適化問題に単純化することで、コンピュータビジョン (CV)の分野を根本的に変革しました。
アンカーボックスの仕組み#
従来のアンカーベース検出器では、入力画像をセルのグリッドに分割します。ネットワークは各セルの位置で、異なる形状の複数のアンカーボックスを生成します。たとえば、背の高い歩行者と横幅の広い車を同時に検出するために、モデルは同じ中心点に、縦長で狭いボックスと横長で低いボックスを提案できます。
モデルの学習中、これらのアンカーは、Intersection over Union (IoU)という指標を使用して実際の物体と照合されます。ラベル付き物体と大きく重なるアンカーは、「positive」サンプルとして指定されます。その後、ネットワークは次の2つのタスクを並行して学習します。
-
分類: アンカーが特定のクラス(例: 「犬」や「自転車」)を含む可能性を示す確率スコアを割り当てます。これは、交差エントロピー損失などの標準的な教師あり学習の目的関数を使用します。
-
ボックス回帰: 汎用的なアンカーを密着したバウンディングボックスに変換するために必要な、正確なオフセット値(座標のシフトとスケーリング係数)を計算します。
このアプローチにより、モデルは互いに近い位置にある、サイズの異なる複数の物体を処理できます。各物体を、その形状に最もよく一致するアンカーに割り当てられるためです。
実世界での利用例#
新しいアーキテクチャはアンカーフリー設計へ移行しつつありますが、物体の特性が予測しやすい多くの確立された本番システムでは、アンカーボックスが依然として重要です。
- 小売・在庫管理: AIを活用した小売ソリューションでは、カメラが棚の商品在庫を監視します。シリアルの箱やソーダ缶などの商品は寸法が標準化されているため、アンカーボックスをこれらの特定のアスペクト比に合わせて調整できます。この事前知識により、モデルは混雑した環境でも高い再現率を維持できます。
- 自動運転: 自動運転車の認識スタックは、歩行者、車両、交通標識の検出に依存しています。遠方から見た車は、道路に対して比較的一貫した形状プロファイルを持つため、これらの形状に合わせたアンカーを使用することで、堅牢な物体追跡と距離推定を実現できます。
アンカーベースとアンカーフリーの比較#
従来のアンカーベース手法と最新のアンカーフリー検出器を区別することが重要です。
- アンカーベース: オリジナルの Faster R-CNN や初期の YOLO バージョン(例: Ultralytics YOLOv5)のようなモデルでは、これらの事前定義されたテンプレートを使用します。堅牢性に優れていますが、新しいデータセットに適応するには、ハイパーパラメーター(アンカーのサイズや比率)の手動調整や、k-meansクラスタリング のようなクラスタリングアルゴリズムが必要になることがよくあります。
- アンカーフリー: YOLO26などの高度なモデルは、アンカーフリーまたはエンドツーエンドのアプローチを採用することがよくあります。これらのネットワークは物体の中心またはキーポイントを直接予測するため、アンカーを手動で設定する必要がありません。これによりアーキテクチャが簡素化され、空の背景アンカー数千個を処理するために必要な計算を排除することで、推論が高速化します。
例: アンカー情報へのアクセス#
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などの手法は、簡単な背景例の重みを下げることで、この問題を緩和するために使用されます。さらに、通常、最終出力には非最大抑制 (NMS)が必要です。これにより、重複するボックスを除外し、各物体について最も信頼度の高い検出だけが残るようにします。









