Closed6

物体追跡(オブジェクトトラッキング)について整理する

0y00y0

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

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

概要

物体追跡の基本的なプロセスは次の通りである。
※ここではTracking-By-DetectionなMultiple Object Trackingについてまとめる

物体検出

  • 物体検出アルゴリズム(例:Yolo、SSD、Faster R-CNNなど)が各フレームから物体を検出。
  • 各検出は、物体の位置(x, y座標)とその大きさ(幅と高さ)を含む。

追跡の初期化と更新

  • 初めて物体が検出されると、その物体を追跡する新たな「追跡物体」が作成される。
  • 次のフレームで物体が再び検出されると、追跡物体は更新される。

状態の予測と補正

  • カルマンフィルタを使って追跡物体の新たな状態(位置や速度など)を予測、新たな検出によってその予測を補正。

実装詳細

物体追跡の実装は一般的には以下の手順で行う。

追跡物体の更新

  • カルマンフィルタで追跡物体の状態を更新する。

コストマトリクスの計算

  • 各追跡物体と新しく検出した物体間の「一致度」を計算。(一般的には、Intersection over Union (IoU) を用いる)

マッチング

  • ハンガリアン法(あるいはムンカレス法)を用いて、全体のコストが最小となるような追跡物体と検出物体の対応付けを行う。

古い追跡物体の削除

  • 一定フレーム数以上検出されなかった追跡物体をリストから削除する。
0y00y0

コストマトリックスの詳細

物体追跡では、各フレームで検出された物体(検出物体)と既存の追跡物体の間の関係性を評価するためにコストマトリックスを作成する。このマトリックスは、検出物体が行を、追跡物体が列を表す2次元配列として表現される。

各マトリックスの要素(すなわち、特定の検出物体と追跡物体の組み合わせ)は、その2つの物体がどれだけ一致しているかを表す「コスト」で定義される。このコストは、2つの物体の一致度を表す指標であるIoU(Intersection over Union)の逆数(1 - IoU)で計算される。

IoUは、物体の予測領域(Bounding Box)と真の領域との重なりを、その和集合で除した値を示す。IoUが高いほど、予測と真の領域の一致度が高いことを意味する。したがって、1 - IoUをコストとすることで、一致度が高いほど(IoUが高いほど)コストが低くなり、一致度が低いほど(IoUが低いほど)コストが高くなるようになる。

0y00y0

ハンガリアン法の詳細

ハンガリアン法(またはムンカレス法)は、全体のコストを最小化するような検出物体と追跡物体の対応付けを求めるために使用される。

具体的には、まずコストマトリックスが与えられる。そして、ハンガリアン法はこのマトリックスを基に、全体のコストが最小となるような「最適」な検出物体と追跡物体の対応付け(割り当て)を計算する。

このアルゴリズムの結果として得られる対応付けに基づいて、各追跡物体は新たな検出物体の情報を用いて更新される。具体的には、新たな検出物体の位置と大きさ、そしてカルマンフィルタによる状態の予測と補正を用いて追跡物体の位置と速度が更新される。

0y00y0

カルマンフィルタの詳細

カルマンフィルタは、ノイズのある観測値から状態を推定するためのアルゴリズムである。自動制御やデータの平滑化など、さまざまな分野で広く使用されている。物体追跡において、カルマンフィルタは物体の位置や速度などの状態を予測し、新たな観測値に基づいてその予測を補正する。

カルマンフィルタの構成

カルマンフィルタは以下の2つのステップで構成されている。

予測ステップ

前の状態と物理モデル(物体の動きを記述する数学的な式)を用いて次の状態を予測する。

補正ステップ

新たな観測値を用いて予測を補正し、状態の「最良」推定値を得る。

カルマンフィルタのパラメータ

カルマンフィルタは数学的なモデルを用いて動作する。このモデルの中にはいくつかのパラメータが含まれており、その設定は結果の精度に大きく影響する。以下に主要なパラメータを示す。

初期状態ベクトル

  • カルマンフィルタの初期状態を定義する。
  • 物体追跡では、物体の初期位置と速度を用いて設定。

観測ノイズ

  • 観測値のノイズを表す。
  • 通常はガウス分布の標準偏差として定義される。
  • 観測ノイズの値が大きいほど、観測値に含まれるノイズが多いと考えられる。

プロセスノイズ

  • モデルの不確実性を表す。
  • 物体の動きがモデルから大きく逸脱する可能性があるほど、プロセスノイズは大きくなる。

パラメータに関する注意点

これらのパラメータは経験的に設定することが多い。観測ノイズとプロセスノイズの値は、問題の特性(観測値の精度、物体の動きの予測性など)に基づいて適切に選択する必要がある。
物体追跡では、物体の動きのモデルは通常、一定速度や一定加速度のモデルが用いられる。観測値は物体検出の結果(物体の位置と大きさ)で、その精度(観測ノイズ)は物体検出アルゴリズムの性能に依存する。

0y00y0

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

SORTは近年のMOTアルゴリズムのベースとなった手法である。
以下にSORTで設定されているカルマンフィルタのパラメータをまとめる。

x=\left( \begin{matrix} x\\ y\\ s\\ a\\ x' \\ y' \\ s' \\ \end{matrix} \right)
F=\left( \begin{matrix} 1 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 1 \\ 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=\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=\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=\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=\left( \begin{matrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 10 & 0 \\ 0 & 0 & 0 & 10 \end{matrix} \right)
0y00y0

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

FairMOTはアンカーフリーな物体検出と再識別(re-ID)を単一ネットワークで実現する手法である。

x=\left( \begin{matrix} x \\ y \\ a \\ h \\ x' \\ y' \\ a' \\ h' \\ \end{matrix} \right)
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=\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 = \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 = \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 = \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}
\text{{std\_weight\_position}} = 1. / 20
\text{{std\_weight\_velocity}} = 1. / 160
このスクラップは2023/09/12にクローズされました