Anchor Boxes
アンカーボックスが物体検出の参照テンプレートとしてどのように機能するかを学びます。それらがどのように精度を向上させるか、またUltralytics YOLO26のようなモデルがどのようにアンカーフリー設計を活用しているかを発見しましょう。
アンカーボックスは、特定の縦横比とスケールを持つあらかじめ定義された参照用長方形であり、物体検出モデルが物体の位置特定や分類を行うのを支援するために画像全体に配置されます。ニューラルネットワークに対して、膨大な種類の物体形状のために不安定になりがちな「物体の正確なサイズと位置をゼロから予測する」よう求めるのではなく、モデルはこれらの固定されたテンプレートを出発点として使用します。これらの初期ボックスを正解データ(グラウンドトゥルース)に適合させるためにどれだけ調整(回帰)すべきかを学習することで、システムはより高速な収束と高い精度を達成できます。この手法は、位置特定という複雑なタスクをより扱いやすい最適化問題へと単純化することで、コンピュータビジョン (CV) の分野を根本的に変革しました。
Link to this sectionアンカーボックスの仕組み#
古典的な アンカーベース検出器 では、入力画像はセルのグリッドに分割されます。各セルの位置で、ネットワークは異なる形状を持つ複数のアンカーボックスを生成します。例えば、背の高い歩行者と幅の広い車両を同時に検出するために、モデルは同じ中心点に対して背が高く狭いボックスと、背が低く広いボックスを提案する可能性があります。
モデルトレーニング 中、これらのアンカーは Intersection over Union (IoU) と呼ばれる指標を使用して実際の物体と照合されます。ラベル付けされた物体と大きく重なるアンカーは「正解(ポジティブ)」サンプルとして指定されます。その後、ネットワークは以下の2つの並列タスクを学習します。
-
分類: アンカーに対して確率スコアを割り当て、特定のクラス(例:「犬」や「自転車」)が含まれている可能性を示します。これには、交差エントロピー損失のような標準的な 教師あり学習 の目的関数が使用されます。
-
ボックス回帰: 汎用的なアンカーを、物体にぴったり適合する バウンディングボックス に変換するために必要な正確なオフセット値(座標のずれとスケール係数)を計算します。
このアプローチにより、モデルは互いに近くに配置された異なるサイズの複数の物体を処理できるようになります。これは、各物体をその形状に最も一致するアンカーに割り当てることができるためです。
Link to this section実社会での応用#
新しいアーキテクチャではアンカーフリー設計へと移行していますが、物体の特性が予測可能な多くの確立された本番システムにおいて、アンカーボックスは依然として不可欠な存在です。
- 小売および在庫管理: AIを活用した小売ソリューション では、カメラが棚の在庫を監視します。シリアルボックスや炭酸飲料の缶のような製品は標準化された寸法を持っているため、これらの特定の縦横比に合わせてアンカーボックスを調整できます。この事前知識は、環境が散らかっている場合でも、モデルが高い 再現率 を維持するのに役立ちます。
- 自動運転: 自動運転車 の認識スタックは、歩行者、車両、道路標識の検出に依存しています。遠くから見た車両は道路に比べて比較的安定した形状プロファイルを持っているため、これらの形状に合わせたアンカーを使用することで、堅牢な 物体追跡 と距離推定が可能になります。
Link to this sectionアンカーベースとアンカーフリーの比較#
従来のアンカーベースの手法と現代の アンカーフリー検出器 を区別することは重要です。
- アンカーベース: オリジナルの Faster R-CNN や初期の YOLO バージョン(例:YOLOv5)のようなモデルは、これらのあらかじめ定義されたテンプレートを使用します。これらは堅牢ですが、ハイパーパラメータ(アンカーのサイズや比率)の手動調整や、新しいデータセットに適応させるための k-means クラスタリング のようなクラスタリングアルゴリズムを必要とすることがよくあります。
- アンカーフリー: YOLO26 を含む先進的なモデルでは、アンカーフリーやエンドツーエンドのアプローチが採用されることがよくあります。これらのネットワークは物体の中心点やキーポイントを直接予測するため、手動によるアンカー設定が不要になります。これによりアーキテクチャが簡素化され、空の背景を示す数千ものアンカーを処理するために必要な計算が削減されることで、推論 が高速化されます。
Link to this section例:アンカー情報の取得#
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.")Link to this section課題と考慮事項#
アンカーボックスは効果的ですが、複雑さも伴います。生成されるアンカーの膨大な数(1画像あたり数万個になることもあります)は、ほとんどのアンカーが背景のみをカバーするため、クラス不均衡の問題を引き起こします。Focal Loss のような手法は、簡単な背景のサンプルの重みを下げることでこれを軽減するために使用されます。さらに、最終的な出力では通常、冗長で重なり合うボックスを除去するために Non-Maximum Suppression (NMS) が必要であり、これにより各物体に対して最も確信度の高い検出結果のみが確実に残るようになります。






