Yolo 深圳
深セン
今すぐ参加
用語集

アンカーボックス

アンカーボックスが物体検出の参照テンプレートとして機能する仕組みを学びましょう。精度向上への貢献方法や、Ultralytics のようなモデルがアンカーフリー設計を活用する手法を解説します。

アンカーボックスは、特定のアスペクト比とスケールを持つ事前定義された参照矩形で、画像全体に配置され、物体検出モデルが物体の位置特定と分類を支援します。物体の形状が多様であるため不安定になり得る、物体の正確なサイズと位置をゼロから予測するようニューラルネットワークに要求する代わりに、モデルはこれらの固定テンプレートを出発点として使用します。 初期ボックスを実測値に合わせるための調整量(回帰量)を予測することを学習することで、システムは収束速度の向上と精度向上を実現します。この手法は、複雑な位置特定タスクをより扱いやすい最適化問題へと簡素化することで、コンピュータビジョン(CV)分野に根本的な変革をもたらしました。

アンカーボックスの仕組み

古典的なアンカーベース検出器では、入力画像はセルのグリッドに分割される。各セル位置において、ネットワークは異なる形状を持つ複数のアンカーボックスを生成する。例えば背の高いdetect 幅の広い自動車detect 同時にdetect 、モデルは同一中心点に背が高く細長いボックスと背が低く幅広のボックスを提案することがある。

モデル学習中、これらのアンカーは 交差率(Intersection over Union:IoU)と呼ばれる指標を用いて 実際の物体と照合される。ラベル付けされた物体と 大きく重なるアンカーは「陽性」サンプルとして指定される。ネットワークはその後 二つの並行タスクを学習する:

  1. 分類:アンカーに確率スコアを割り当て、特定のクラス(例: 「犬」や「自転車」)を含む可能性を示します。これはクロスエントロピー損失などの標準的な教師あり学習目標を使用します。
  2. ボックス回帰:汎用アンカーをぴったりフィットする境界ボックスに変換するために必要な正確なオフセット値(座標シフトとスケーリング係数)を計算します。

この手法により、モデルは互いに近接した異なるサイズの複数の物体を処理できるようになる。各物体は、その形状に最も適合するアンカーに割り当てられるためである。

実際のアプリケーション

新しいアーキテクチャではアンカーフリー設計が主流になりつつあるものの、オブジェクトの特性が予測可能な多くの確立された生産システムでは、アンカーボックスが依然として不可欠である。

  • 小売と在庫管理: AI駆動型小売ソリューションでは、カメラが棚の在庫を監視する。 シリアルボックスやソーダ缶のような製品は標準化された寸法を持つため、アンカーボックスをこれらの特定の縦横比に合わせて調整できる。この事前知識により、モデルは雑然とした環境でも高いリコール率を維持できる。
  • 自動運転: 自動運転車両の知覚スタックは、歩行者、車両、交通標識の検出に依存している。遠方から見た自動車は道路と比較して形状プロファイルが比較的安定しているため、これらの形状に合わせたアンカーを使用することで、堅牢な物体追跡と距離推定が保証される。

アンカーベースとアンカーフリー

従来のアンカーベースの手法と現代のアンカーフリー検出器を区別することが重要である。

  • アンカーベース:オリジナルの Faster R-CNNや初期のYOLO (例:YOLOv5)などのモデルは、 こうした事前定義されたテンプレートを使用します。これらは頑健ですが、新しいデータセットに適応させるために、 ハイパーパラメータ(アンカーサイズ/比率)の手動調整や k-means クラスタリングなどのクラスタリングアルゴリズムを 必要とする場合が多くあります。
  • アンカーフリー: YOLO26を含む先進モデルは、しばしばアンカーフリーまたはエンドツーエンドの手法を採用する。これらのネットワークは物体の中心点やキーポイントを直接予測するため、手動でのアンカー設定が不要となる。これにより、何千もの空の背景アンカーを処理する計算を排除することで、アーキテクチャが簡素化され、推論が高速化される。

例:アンカー情報へのアクセス

Ultralytics 現代的な高レベル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)が必要であり、各オブジェクトに対して最も確度の高い検出のみが残るようにする。

Ultralytics コミュニティに参加する

AIの未来を共に切り開きましょう。グローバルなイノベーターと繋がり、協力し、成長を。

今すぐ参加