Kalman Filter (KF)
Kalman Filterが不確実性のある状況でシステム状態を推定する仕組みを説明します。Ultralytics YOLO26による物体追跡に利用し、AIの精度を高める方法を学びます。
**カルマンフィルター (KF)**は、動的システムの状態を時間の経過に伴って推定するために使用される、再帰的な数学アルゴリズムです。Rudolf E. Kálmánによって初めて提案されたこの手法は、不確実で不正確なデータや、一般に「ノイズ」と呼ばれるランダムな変動を含むデータの処理に不可欠です。統計的な誤差を含む、時間の経過に伴って観測された一連の測定値を組み合わせることで、カルマンフィルターは、単一の測定値だけに基づく場合よりも正確な未知変数の推定値を生成します。機械学習 (ML)や人工知能 (AI)の分野では、予測モデリングの重要なツールとして機能し、ばらつきの大きいデータポイントを平滑化して、根底にある真の傾向を明らかにします。
カルマンフィルターの仕組み#
このアルゴリズムは、予測と更新(補正とも呼ばれます)という2段階のサイクルで動作します。基礎となるシステムは線形であり、ノイズはガウス分布(釣鐘型の曲線)に従うと仮定します。
-
予測: フィルターは物理モデルを使用して、現在の状態を時間的に先へ投影します。たとえば、物体が一定の速度で移動している場合、フィルターは標準的な運動学方程式に基づいて次の位置を予測します。このステップでは、その予測に伴う不確実性も推定します。
-
更新: センサーから新しい測定値が届くと、フィルターは予測された状態と観測データを比較します。そして、カルマンゲインによって決定される加重平均を計算し、不確実性が小さい方の値(予測または測定値)をより信頼します。その結果、次のサイクルの基準となる、洗練された状態推定が得られます。
コンピュータビジョンとAIにおける応用#
もともとは制御理論や航空宇宙ナビゲーションを基盤としていたカルマンフィルターは、現在では最新のコンピュータービジョン (CV)パイプラインで広く利用されています。
- 物体追跡: これは最も一般的なユースケースです。YOLO26のような検出モデルがビデオフレーム内の物体を識別すると、静的なスナップショットが提供されます。動きを把握するため、BoT-SORTのようなトラッカーはカルマンフィルターを利用して、フレーム間の検出結果を関連付けます。物体が一時的にオクルージョン(視界から遮られた状態)になると、フィルターは物体の過去の速度を使用して位置を予測し、システムが「追跡」を失ったり、IDを切り替えたりすることを防ぎます。
- ロボティクスにおけるセンサーフュージョン: ロボティクスでは、複数のノイズの多いセンサーを使用して機械をナビゲートする必要があります。配送ロボットは、ドリフトする可能性のあるGPS、スリップする可能性のあるホイールエンコーダー、ノイズの多いIMUsを使用することがあります。カルマンフィルターは、これらの異なる入力を融合して、ナビゲーション用の単一の信頼性の高い座標を提供します。これは、自動運転車の安全な運用に不可欠です。
関連する概念との違い#
統計的AIで使用される標準カルマンフィルターと、その派生手法および代替手法を区別して理解すると役立ちます。
- カルマンフィルターと拡張カルマンフィルター (EKF)の比較: 標準のKFは、システムが線形方程式(直線)に従うと仮定します。しかし、ドローンが旋回時にバンクする場合のように、現実世界の動きは非線形であることがよくあります。EKFは、各ステップで微分を使用してシステムのダイナミクスを線形化することでこの問題を解決し、複雑な軌道に適したものにします。
- カルマンフィルターとパーティクルフィルターの比較: KFがガウス分布を仮定するのに対し、パーティクルフィルターは、確率分布を表現するためにランダムサンプル(パーティクル)の集合を使用します。パーティクルフィルターは非ガウスノイズに対してより柔軟ですが、より多くの計算能力を大幅に必要とするため、リアルタイム推論の速度に影響する可能性があります。
実装例#
Ultralyticsエコシステムでは、カルマンフィルターが追跡アルゴリズムに直接統合されています。方程式を手動で記述する必要はありません。追跡モードを有効にすることで利用できます。Ultralytics Platformでは、データセットを管理し、これらの追跡機能を使用して簡単にデプロイできるモデルをトレーニングできます。
以下は、Ultralytics YOLO26を使用してPythonで追跡を実行する簡潔な例です。基盤となるトラッカーがカルマンフィルタリングを自動的に適用し、バウンディングボックスの動きを平滑化します。
from ultralytics import YOLO
# Load the latest YOLO26 model
model = YOLO("yolo26n.pt")
# Run tracking on a video source
# The 'botsort' tracker uses Kalman Filters internally for state estimation
results = model.track(source="traffic_video.mp4", tracker="botsort.yaml")
# Process results
for result in results:
# Access the tracked IDs (assigned and maintained via KF logic)
if result.boxes.id is not None:
print(f"Tracked IDs in frame: {result.boxes.id.cpu().numpy()}")データ品質にとっての重要性#
現実世界のデプロイでは、データが完全であることはほとんどありません。カメラはモーションブラーの影響を受け、センサーでは信号ノイズが発生します。カルマンフィルターは、意思決定ループ内で高度なデータクレンジングメカニズムとして機能します。推定値を継続的に洗練することで、AIエージェントが入力ストリームの一時的な乱れすべてに反応するのではなく、最も可能性の高い現実に基づいて動作することを保証します。この信頼性は、空港運用の監視から高精度な産業オートメーションまで、安全性が重要なアプリケーションにとって極めて重要です。









