物体追跡 — 予測と観測で動きを追い続ける

検出は「1枚の画像のどこに何があるか」。追跡はそれをフレーム間で結び、同じ個体に同じIDを与え続けるタスクです。心臓部は2つ — 次の位置を見積もる予測(カルマンフィルタ)と、検出結果をどのトラックに繋ぐか決めるデータ関連付け。両方を動かして体感します。

1. 追跡は「予測」と「対応付け」の2本柱

フレームごとの検出器の出力は、ノイズを含む「点の集まり」にすぎません。追跡器はこれを時間方向に縫い合わせます。定石のループはこうです。

  1. 予測 — 各トラックの運動モデル(等速直線など)で次フレームの位置と不確かさを見積もる
  2. 関連付け — 予測位置と新しい検出群を突き合わせ、コスト最小の組合せで対応させる
  3. 更新 — 対応した観測でトラックの状態を補正し、不確かさを縮める

この「予測→観測→更新」の回転を担う標準部品がカルマンフィルタです。ポイントは、位置を1点ではなくガウス分布(平均+共分散)として持つこと。下のデモでは共分散を楕円として描いています。

カルマンフィルタ追跡 — 不確かさの楕円が呼吸する
白=真の軌跡、赤の+=ノイズ付き観測(4Hzでしか届かない)、緑=フィルタの推定、オレンジ楕円=位置の不確かさ(2σ)。観測が来るたび楕円がキュッと縮み、観測の合間は予測だけで楕円が膨らみます。Rを上げると観測を信じなくなり滑らかだが遅れ気味に、Qを上げると機敏だが観測ノイズを拾いやすくなります。

2. カルマンフィルタの直感 — 信頼度の重み付き平均

更新ステップの数式は行列だらけに見えますが、やっていることは「予測と観測を、それぞれの信頼度で重み付けして混ぜる」だけです。

x̂ = x̂⁻ + K (z − H x̂⁻) 新しい推定 = 予測 + カルマンゲイン × (観測とのズレ = イノベーション)
K = P⁻Hᵀ (H P⁻Hᵀ + R)⁻¹ ≈ 予測の不確かさ / (予測の不確かさ + 観測の不確かさ) P⁻=予測誤差共分散、R=観測ノイズ共分散。K は 0〜1 の「観測をどれだけ信じるか」
POINT — Kの両極端を押さえる 観測が正確(R→0)なら K→1 で推定は観測に飛びつく。予測に自信がある(P⁻→0)なら K→0 で観測を無視する。カルマンフィルタが「最適」なのは、線形・ガウスの仮定の下でこの混合比が誤差最小になるよう毎ステップ自動調整されるから。ディープ全盛の現在でも SORT 系トラッカーの運動モデルはほぼこのままである。

3. オクルージョンを乗り越える

実世界の追跡で最大の敵がオクルージョン(遮蔽)です。ターゲットが物陰に入ると観測が途絶えますが、トラックを即座に消してはいけません。予測だけで走り続け(コースティング)、不確かさ楕円を膨らませながら再出現を待ちます。再出現した検出が予測のゲート(探索範囲)内に入れば同一IDで復帰、外れればトラックは失われ、別IDとして再出発するしかありません。

遮蔽の裏を予測で追う — ゲート内に再出現できるか
ターゲットは遮蔽物(グレーの壁)の裏でも実際は曲がり続けていますが、フィルタは等速直線でしか予測できません。遮蔽が短ければ再出現点が破線のゲート円に収まり緑の「復帰」。幅を広げると予測とのズレと楕円の膨張が進み、ゲートを外れて赤の「ロスト」— 再出現しても紫の新IDになってしまいます。
注意 — トラック管理という現実問題 実システムでは「観測が何フレーム途絶えたら削除するか(max age)」「何回連続で当たったら正式トラックに昇格するか(tentative→confirmed)」というライフサイクル管理が精度を大きく左右する。ゲートを広げすぎれば誤対応(ID乗り移り)が増え、狭めすぎればロストが増える — 偽陽性と偽陰性のトレードオフがここにも現れる。

4. 複数物体追跡(MOT)とデータ関連付け

物体が複数になると、「どの検出をどのトラックに割り当てるか」という組合せ問題が生まれます。トラック i の予測位置と検出 j の距離を並べたコスト行列を作り、総コスト最小の1対1割当をハンガリアン法で解くのが定石です(N=3なら全6通りの総当たりと同じ答え)。

危険なのは物体同士が交差する瞬間。予測を使わず「前回位置に一番近い検出」を選ぶだけだと、すれ違いざまにIDが入れ替わるIDスイッチが起きます。下のデモでシナリオと予測の有無を切り替えて、コスト行列の中身と一緒に観察してください。

3物体の交差とコスト行列 — IDスイッチはいつ起きるか
白い図形(○□△)=真の個体、色付きの軌跡=トラックID。右のコスト行列は「トラック×検出」の距離で、枠付きセルが選ばれた割当(緑=正しい、赤=乗り移り)。「難」シナリオで予測チェックを外すと、交差後に色が別の図形に乗り移ったまま戻らなくなります(持続的IDスイッチ)。予測ONでも交差の一瞬は揺れますが、速度の連続性のおかげでほとんどの場合すぐ正しい割当に復帰します。

5. まとめ

一歩先へ — SORT から DeepSORT、ByteTrack へ SORT (2016) は「カルマンフィルタ+IoUコスト+ハンガリアン法」だけの潔い構成で MOT の標準形を作った。だが位置だけの対応付けは長い遮蔽に弱い。DeepSORT (2017) は再識別ネットワークで抽出した見た目の特徴ベクトルをコストに混ぜ、「場所は近いが服装が違う」候補を弾けるようにして ID スイッチを約45%削減した。ByteTrack (2022) は捨てられていた低信頼度検出を第2段の割当に使い、遮蔽中の「かすかな検出」でトラックを繋ぐ。評価には MOTA(検出漏れ・誤検出・IDスイッチの総合)と IDF1(ID の一貫性)が使われ、両者のバランスが今も設計の焦点である。