Object Tracking
コンピュータービジョンにおける物体追跡の仕組みを学びます。Ultralytics YOLO26を使用して一意のIDで物体を識別・監視し、リアルタイム分析を行う方法を確認します。
物体追跡は、コンピュータビジョン(CV)における動的なプロセスであり、動画内の特定の対象を識別し、一連のフレームにわたってその動きを監視します。各スナップショットを個別に扱う静的な画像解析とは異なり、追跡では時間という次元が加わります。これにより、人工知能(AI)システムは、車、人、動物など、検出された各対象に固有の識別番号(ID)を割り当て、対象が移動したり、向きが変わったり、一時的に遮蔽されたりしても、その同一性を維持できます。この機能は高度な動画理解の基盤であり、機械が行動を分析し、軌跡を計算し、生の映像から実行可能なインサイトを導き出せるようにします。
物体追跡の仕組み#
最新の追跡システムでは、一般に「検出による追跡」というパラダイムを利用します。このワークフローでは、高性能な検出モデルと、時間経過に伴う検出結果を関連付ける専用アルゴリズムを組み合わせます。通常、このプロセスは次の3つの主な段階で構成されます。
-
検出: 各フレームで、物体検出モデル(最先端のYOLO26など)が画像をスキャンし、関心のある物体を特定します。モデルは、各物体の空間的な範囲を定義するバウンディングボックスを出力します。
-
動きの予測: カルマンフィルターなどのアルゴリズムは、現在の速度と軌跡に基づいて、物体の将来の位置を推定します。この予測により、次のフレームでの探索範囲が狭まり、システムの効率が向上します。
-
データ関連付け: システムは、ハンガリアンアルゴリズムなどの最適化手法を使用して、新しい検出結果を既存のトラックに対応付けます。この段階では、予測されたボックスと新しい検出結果がどの程度重なっているかを測定するために、交差/和集合(IoU)などの指標を使用することがよくあります。高度なトラッカーでは、外観が類似した物体を再識別するために、視覚的な特徴抽出を使用することもあります。
物体追跡と物体検出の違い#
これらの用語は密接に関連していますが、機械学習(ML)パイプライン内では異なる機能を果たします。
- 物体検出は、「この画像には何が存在し、どこにあるのか」という問いに答えます。これはステートレスであり、以前のフレームの記憶を持ちません。車が動画内を走行している場合、検出器はフレーム1の「車」とフレーム2の「車」を認識しますが、それらが同じ車両であることは把握しません。
- 物体追跡は、「この特定の物体はどこへ向かっているのか」という問いに答えます。これはステートフルです。フレーム1の「車」とフレーム2の「車」を関連付けることで、システムは「車両ID #42が左から右へ移動している」と記録できます。これは、予測モデリングやカウントなどのタスクに不可欠です。
実世界での利用例#
物体の同一性を維持する機能により、さまざまな業界で複雑なリアルタイム推論アプリケーションを実現できます。
- 高度道路交通システム: 追跡は、自動運転車が安全に走行するために不可欠です。歩行者や他の車両を追跡することで、車両は衝突の可能性を予測できます。さらに、交通工学の専門家はこれらのシステムを速度推定に利用し、安全規制の適用や交通の流れの最適化に役立てています。
- 小売分析: 実店舗では、小売業におけるAIを利用して顧客行動を把握します。追跡により、店舗管理者は物体カウントを実行して来店者数を測定し、ヒートマップを使用してディスプレイ前の滞在時間を分析し、待ち行列管理を最適化して待ち時間を短縮できます。
- スポーツ分析: プロスポーツでは、コーチが追跡と姿勢推定を組み合わせて、選手の生体力学やチームのフォーメーションを分析します。このデータは、肉眼では見えないパターンを明らかにすることで、競争上の優位性をもたらします。
Pythonでの追跡の実装#
Ultralyticsを使用すると、高性能な追跡を簡単に実装できます。ライブラリのtrackモードは、検出、動きの予測、IDの割り当てを自動的に処理します。以下の例では、Ultralytics Platformと互換性のあるYOLO26モデルを使用して、動画内の物体を追跡する方法を示します。
from ultralytics import YOLO
# Load the official YOLO26n model (nano version for speed)
model = YOLO("yolo26n.pt")
# Track objects in a video file or webcam (source=0)
# 'show=True' displays the video with bounding boxes and unique IDs
results = model.track(source="https://ultralytics.com/images/bus.jpg", show=True)
# Access the unique tracking IDs from the results
if results[0].boxes.id is not None:
print(f"Detected Track IDs: {results[0].boxes.id.cpu().numpy()}")関連する概念#
追跡のエコシステムを十分に理解するには、単なるボックスではなく、物体のピクセルレベルの正確な輪郭を追跡するインスタンスセグメンテーションについても確認すると役立ちます。さらに、Multi-Object Tracking(MOT)のチャレンジでは、アルゴリズムが混雑したシーンやオクルージョンをどの程度適切に処理できるかを評価するために、MOTChallengeなどの広く利用されているベンチマークが使用されることがよくあります。本番環境にデプロイする場合、開発者はこれらのモデルを効率的なパイプラインに統合するために、NVIDIA DeepStreamやOpenCVなどのツールを利用することがよくあります。









