Object Tracking
物体追跡は、動画フレーム間で検出結果を対応付け、移動やオクルージョンを経ても各物体のIDを維持します。トラッカーの仕組みとコードを解説します。
物体追跡はコンピュータービジョンのタスクです。連続する動画フレーム内で物体の位置を特定し、その位置を軌跡として結び付けることで、各物体に永続的なIDを付与します。フレームにID 7として入った車は、移動、旋回、バスの陰に一時的に隠れる間もID 7のままです。これにより、システムは車を一度だけ数え、速度を測定し、進行方向を推定できます。単一物体追跡は最初のフレームで選んだ1つの対象を追跡します。一方、実務で最も一般的な複数物体追跡(MOT)は、対象クラスのすべての物体を同時に追跡します。
物体追跡の仕組み#
ほとんどの複数物体トラッカーは、検出ベースの追跡を採用しています。物体検出モデルが各フレーム内の物体を検出し、トラッカーが時間を追って検出結果を結び付けます。トラッカーは、通常はカルマンフィルターであるモーションモデル、Intersection over Union(IoU)で測定するバウンディングボックスの重なり、物体再識別(Re-ID)モデルによる任意の外観埋め込み、およびハンガリアンアルゴリズムなどの線形割り当てソルバーを使います。各フレームで、次の4つのステップを実行します。
- 予測: カルマンフィルターは速度一定を仮定し、新しいフレームで既存トラックのボックスがどこに現れるかを予測します。
- スコア付け: トラッカーは、IoU、モーション、トラッカーによっては外観の類似度を基に、予測したトラックと新しい検出結果とのコスト行列を作成します。
- 割り当て: ソルバーがコスト最小の一対一のマッチングを選びます。
- トラックの管理: マッチしたトラックは状態を更新します。信頼度の高い未マッチ検出は新しいトラックを開始します。未マッチのトラックは「ロスト」として数フレーム分保持し、遮蔽後に復元できるようにします。
検出が数フレーム途切れてもIDを安定させるのが、ライフサイクル処理です。
基本となる設計は2016年のSORTにまでさかのぼります。SORTはカルマンフィルター、IoUコスト、ハンガリアンアルゴリズムのみを使用しました。DeepSORTは外観特徴を追加して遮蔽後のIDを復元できるようにしました。ByteTrackは、しばしば一部が遮蔽された物体である低信頼度の検出結果も第2パスでマッチさせることで、再現率を改善しました。後続のトラッカーは、移動カメラ向けのカメラモーション補償や、混雑したシーンに対応する高度な関連付けルールを追加しています。
追跡と検出の比較#
検出器はステートレスです。各フレームを独立して処理するため、フレーム1の車とフレーム2の車は、互いに無関係な検出結果になります。追跡では状態を追加し、フレーム間でIDを引き継ぎます。これはカウント、滞在時間、速度推定に不可欠です。追跡はポイントトラッキングやオプティカルフローとも異なります。これらはピクセルや表面上の点を追跡しますが、ラベル付き物体としてグループ化しません。
Ultralytics YOLOのトラックモードは、あらゆるYOLO26の検出、セグメンテーション、姿勢推定、または回転ボックスモデルに状態を追加します。組み込みトラッカー6種類が用意されており、ByteTrack、BoT-SORT、デフォルトのTrackTrackなどを使用できます。
from ultralytics import YOLO
# Load a YOLO26 detector; track() pairs it with a tracker that assigns persistent IDs
model = YOLO("yolo26n.pt")
detections, track_ids = 0, set()
for result in model.track(
"https://github.com/ultralytics/assets/releases/download/v0.0.0/decelera_portrait_min.mov", stream=True
):
detections += len(result.boxes)
if result.boxes.is_track:
track_ids.update(result.boxes.id.int().tolist())
print(f"Detections summed over all frames: {detections}")
print(f"Unique tracked objects: {len(track_ids)}")各IDは、物体が映るすべてのフレームを通じて1つの物体を表すため、IDのユニーク数は検出数の合計より少なくなります。
実際のアプリケーション#
- 交通量監視と速度推定: 各車両をフレーム間で追跡することで、車両数のカウント、車線単位の交通流分析、トラックが1秒間に移動した距離に基づく速度推定が可能になります。
- 小売分析: 店舗のカメラで買い物客を追跡し、同じ人を二重に数えることなく、来店者数、行列の長さ、陳列棚の前での滞在時間を測定します。
- スポーツ分析: 放送局やコーチは選手とボールを追跡し、移動距離、速度、チームのフォーメーションを算出します。
- 自動運転車とロボティクス: 認識パイプラインで歩行者や車両を追跡し、速度を推定するとともに、次の1秒間にどこにいるかを予測します。
追跡品質の測定#
トラッカーは、ベンチマークで比較します。たとえば、MOT17、密集した群衆を対象とするMOT20、見た目が似ていて動きが予測しにくい人々を対象とするDanceTrackがあります。MOTAは見逃し、誤検出、ID切り替えを1つのスコアにまとめますが、検出品質の影響が大きくなります。IDF1は、正解の各物体に単一のIDがどれほど一貫して付与されるかを測定します。HOTAは、検出精度と関連付け精度の幾何平均を使って両者のバランスを取ります。










