📷

Tracking-by-Detection型のMultiple Object Trackingについて

に公開

オブジェクトトラッキングとは

物体追跡(オブジェクトトラッキング)は、動画や一連の画像から特定の物体の動きを追跡する技術。

概要

物体追跡の基本的なプロセスは以下の通り。
ここではTracking-by-Detection型のMultiple Object Tracking(MOT)について解説する。

Tracking-by-Detectionとは

各フレームで物体検出を行い、その検出結果を用いて物体を追跡する手法。

物体検出

  • 物体検出アルゴリズムで各フレームの物体を検出。
  • 通常、以下の情報を得る:
    • 物体の位置(x, y座標)
    • 大きさ(幅と高さ)
    • 物体クラス(カテゴリラベル)

追跡の初期化と更新

  • 初回検出時に新たな追跡対象(トラック)が生成される。
  • 次フレーム以降の検出で既存トラックが更新される。

状態の予測と補正

  • カルマンフィルタを用いて物体の状態(位置・速度など)を予測し、検出結果で補正する。

実装詳細

物体追跡の具体的な流れは以下の通り。

追跡物体の状態更新

  • 各追跡物体についてカルマンフィルタで状態を更新。

コストマトリクスの計算

  • 追跡物体と新規検出物体の間の一致度(IoU)を計算し、コストマトリクスを構築。

マッチング(対応付け)

  • ハンガリアン法(ムンカレス法)を用いて、全体のコストが最小となるようにマッチングを行う。

古い追跡物体の削除

  • 一定フレーム数以上未検出のトラックは削除。

コストマトリクスの詳細

各フレームで検出された物体(検出物体)と既存の追跡物体(トラック)の関係を評価するためにコストマトリクスを用いる。

コストマトリクスは次のように構成される:

  • 行:検出物体
  • 列:追跡物体

マトリクス要素は一致度の逆数(1 - IoU)で計算:

\text{IoU} = \frac{\text{Overlap Area}}{\text{Union Area}}

IoUが高いほどコストは低く、適切なマッチングが行われやすい。


ハンガリアン法の詳細

ハンガリアン法(Hungarian Algorithm)は、コストマトリクスをもとに最適なマッチングを行うアルゴリズム。

  • コスト最小化を達成する割り当てを求める。
  • 追跡物体と検出物体のマッチング結果に基づき、カルマンフィルタで状態を更新。

カルマンフィルタの詳細

カルマンフィルタは、ノイズのある観測から状態(位置・速度など)を推定するアルゴリズム。

構成

予測ステップ

物理モデルに基づき、次の状態を予測。

補正ステップ

新たな観測値で予測を補正し、状態推定を更新。

主なパラメータ

パラメータ 説明
初期状態ベクトル 初期の物体位置・速度
観測ノイズ 観測値のばらつき(通常はガウス分布)
プロセスノイズ モデルの不確実性(予測誤差)

これらのパラメータは、問題特性に応じて調整する必要がある。

注意点

カルマンフィルタは「線形・ガウスノイズ」を前提とする。
複雑な動きや非線形性が強い場合は、拡張カルマンフィルタ(EKF)やUnscented Kalman Filter(UKF)の検討も必要。


SORTにおけるカルマンフィルタのパラメータ

SORT(Simple Online and Realtime Tracking)は、近年のMOTの基盤となるシンプルなアルゴリズム。

状態ベクトル

x=\left( \begin{matrix} x\\ y\\ s\\ a\\ x' \\ y' \\ s' \\ \end{matrix} \right)
成分 意味
(x, y) 物体の中心座標
(s) バウンディングボックスの面積(スケール)
(a) アスペクト比(幅/高さ)
(x', y', s') 各速度成分

システム行列

状態遷移行列(F)

F=\left( \begin{matrix} 1 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 \end{matrix} \right)

観測行列(H)

H=\left( \begin{matrix} 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 \end{matrix} \right)

共分散行列

初期誤差共分散行列(P)

P=\left( \begin{matrix} 10 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 10 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 10 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 10 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 10000 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 10000 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 10000 \end{matrix} \right)

プロセスノイズ行列(Q)

Q=\left( \begin{matrix} 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0.01 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0.01 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0.0001 \end{matrix} \right)

観測ノイズ行列(R)

R=\left( \begin{matrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 10 & 0 \\ 0 & 0 & 0 & 10 \end{matrix} \right)

FairMOTにおけるカルマンフィルタのパラメータ

FairMOTでは、以下の8次元状態ベクトルを用いて物体の状態を推定する:

x=\left( \begin{matrix} x \\ y \\ a \\ h \\ x' \\ y' \\ a' \\ h' \\ \end{matrix} \right)
成分 意味
(x, y) バウンディングボックス中心座標
(a) アスペクト比(幅/高さ)
(h) バウンディングボックスの高さ
(x', y', a', h') それぞれの速度成分

状態遷移行列(F)

時刻間隔 (dt) を用いた標準的な運動モデル:

F=\left( \begin{matrix} 1 & 0 & 0 & 0 & dt & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & dt & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & dt & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & dt \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ \end{matrix} \right)

観測行列(H)

観測可能なのは位置・アスペクト比・高さの4次元のみ:

H=\left( \begin{matrix} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \end{matrix} \right)

初期誤差共分散行列(P)

初期の不確かさは以下のように設定される:

P = \begin{pmatrix} (2 \times \text{{std\_weight\_position}} \times h_{\text{init}})^2 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & (2 \times \text{{std\_weight\_position}} \times h_{\text{init}})^2 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1e-2^2 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & (2 \times \text{{std\_weight\_position}} \times h_{\text{init}})^2 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & (10 \times \text{{std\_weight\_velocity}} \times h_{\text{init}})^2 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & (10 \times \text{{std\_weight\_velocity}} \times h_{\text{init}})^2 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1e-5^2 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & (10 \times \text{{std\_weight\_velocity}} \times h_{\text{init}})^2 \end{pmatrix}

速度成分には大きめの不確かさを設定し、初期速度未知を表現する。


プロセスノイズ行列(Q)

物体の動きによるプロセスノイズは次のように定義:

Q = \begin{pmatrix} (\text{{std\_weight\_position}} \times h_{\text{pred}})^2 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & (\text{{std\_weight\_position}} \times h_{\text{pred}})^2 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1e-2^2 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & (\text{{std\_weight\_position}} \times h_{\text{pred}})^2 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & (\text{{std\_weight\_velocity}} \times h_{\text{pred}})^2 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & (\text{{std\_weight\_velocity}} \times h_{\text{pred}})^2 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1e-5^2 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & (\text{{std\_weight\_velocity}} \times h_{\text{pred}})^2 \end{pmatrix}

観測ノイズ行列(R)

観測ノイズも物体の大きさに依存:

R = \begin{pmatrix} (\text{{std\_weight\_position}} \times h_{\text{pred}})^2 & 0 & 0 & 0 \\ 0 & (\text{{std\_weight\_position}} \times h_{\text{pred}})^2 & 0 & 0 \\ 0 & 0 & 1e-1^2 & 0 \\ 0 & 0 & 0 & (\text{{std\_weight\_position}} \times h_{\text{pred}})^2 \end{pmatrix}

標準偏差パラメータ

FairMOTで使われる標準偏差の重みは以下の通り:

\text{{std\_weight\_position}} = \frac{1}{20}
\text{{std\_weight\_velocity}} = \frac{1}{160}

解説

  • FairMOTは、物体の高さを基準にプロセス・観測ノイズをスケーリングしており、小さい物体は敏感、大きい物体は安定に追跡できる設計。
  • 状態にはアスペクト比((a))も含まれており、長方形の形状変化にも対応可能。
  • 再識別特徴量(re-ID)と組み合わせることで、外観情報による補強も可能。

おわりに

本記事では、Tracking-by-Detection型の物体追跡について、基礎から実装・アルゴリズム詳細まで解説した。特にSORTは、シンプルながら非常に効果的なMOT手法であり、現代の多くの実装のベースとなっている。


参考

Discussion