MLエンジニアへの道 #66 - 特徴追跡

Last Edited: 7/10/2025

このブログ記事では、コンピュータビジョンにおける特徴追跡について紹介します。

ML

これまでの記事では、深層学習モデルが単視点計測とエピポーラ幾何の限界にどのように対処し、 単眼深度推定とステレオマッチングにおいて十分に良好な性能を発揮できるかについて議論しました。 そこで本記事では、動画から意味のある特徴(主に物体と人間)を追跡する、 Structure from Motionに対応するコンピュータビジョンタスクの一つである特徴追跡について議論します。

オプティカルフロー & シーンフロー

動画を扱う様々なコンピュータビジョンタスクにとって有用な値の一つがオプティカルフローであり、これは全ての画像画素の見かけの動きを記述する2Dベクトル場です。 オプティカルフローはシーン内の3D点の実際の移動の2D投影を記述する2Dベクトル場であるモーションフィールドと混同されがちですが、これらは明確に違います。 画素(x,y)(x, y)のx軸とy軸における見かけの速度を、それぞれu(x,y,t)=ΔxΔtu(x, y, t)=\frac{\Delta x}{\Delta t}v(x,y,t)=ΔyΔtv(x, y, t)=\frac{\Delta y}{\Delta t}として数学的に表現することで、 画素のオプティカルフローベクトルをu=[u,v]T\vec{\text{u}} = [u, v]^Tとして表現できます。 Lucas-Kanade法は、様々な仮定を利用して最小二乗法を用いて画素パッチのオプティカルフローベクトルu\vec{\text{u}}を求めます。

I(x,y,t)=I(x+Δx,y+Δy,t+Δt)I(x+Δx,y+Δy,t+Δt)=I(x,y,t)+IxΔx+IyΔy+ItΔt...I(x,y,t)+IxΔx+IyΔy+ItΔt0=IxΔx+IyΔy+ItΔt=Ixu+Iyv+It I(x, y, t) = I(x+\Delta x, y+\Delta y, t+\Delta t) \\ I(x+\Delta x, y+\Delta y, t+\Delta t) = I(x, y, t) + \frac{\partial I}{\partial x}\Delta x + \frac{\partial I}{\partial y}\Delta y + \frac{\partial I}{\partial t}\Delta t ... \\ \approx I(x, y, t) + \frac{\partial I}{\partial x}\Delta x + \frac{\partial I}{\partial y}\Delta y + \frac{\partial I}{\partial t}\Delta t \\ 0 = \frac{\partial I}{\partial x}\Delta x + \frac{\partial I}{\partial y}\Delta y + \frac{\partial I}{\partial t}\Delta t \\ = I_x u + I_y v + I_t

上記の最初の2つの方程式は、それぞれ輝度一定性の仮定と小さな動きの仮定の結果です。 輝度一定性の仮定は、同じ物体に属する画素の強度がフレーム間で変化しないと仮定し、小さな動きの仮定は、 動きは小さいため1次のテイラー近似で近似できると仮定します。その後の導出では、 これら2つの方程式を利用してオプティカルフロー方程式を得て、 これをさらに線形システムIt=Ixu+Iyv=Iu-I_t = I_x u + I_y v = \nabla I \cdot \vec{\text{u}}と表すことができます。 ここでI=[Ix,Iy]T\nabla I=[I_x, I_y]^Tは空間勾配またはエッジを表します。この線形システムは一見解けるように思えますが、 制約が1つで未知数が2つあるため、ItI\frac{-I_t}{||\nabla I||}で与えられるノーマルフローしか求めることができません。 これが、エッジに垂直な方向の画素フローは容易に決定できるのに対して、エッジに平行なフローを得ることが困難である理由です。

この制限を軽減するため、Lucas-Kanade法は空間的平滑性の仮定を伴う半局所的アプローチを取ります。 この仮定は、隣接する画素が同じ表面に属し、オプティカルフローベクトルu\vec{\text{u}}を共有すると仮定することで、 様々な方向に複数の制約を設定することを可能にするものです。 具体的には、N2N^2個の隣接画素pi=[xi,yi]Tp_i=[x_i, y_i]^TのそれぞれについてIt(pi)=I(pi)u-I_t(p_i)=\nabla I(p_i) \cdot \vec{\text{u}}を得ることができます。 このように画素数、つまり制約の数を増やすことは一般的に有効ですが、画素パッチが同じ方向に勾配を持ち、 テクスチャが低い場合には、依然として曖昧なオプティカルフローベクトルになる可能性があります。 そこで、Lucas-Kanade法のこれらの制限を克服し、特徴追跡に有用な高品質なオプティカルフローを得るために、 深層学習モデルを使用する試みがなされています。この様にして生まれた深層オプティカルフローモデルは、 自動運転やロボティクスなどの後続タスクのために、フレームからシーン内の全ての点の3Dモーションフィールドを推定するシーンフロー推定にも活用できます。

ベイズフィルター

オプティカルフローやシーンフローは、物体の見かけの動きや短期的な動きを追跡するのに有用かもしれませんが、 自動運転やロボティクスでしばしば必要とされる遮蔽や過去の軌跡および動きパターンに基づく予測を含む特徴追跡には適していません。 そこで、長期依存性を持つ特徴追跡をモデル化するために、部分観測マルコフ決定過程(POMDP)を使用することができます。 ここで、特徴追跡の文脈では制御入力UUはカメラの位置と動きを、状態XXは物体の真の位置、速度などを、観測ZZは物体検出の結果などと表すことができです。 (MDPやPOMDPに馴染みがない場合は、このMLシリーズのRLシリーズを確認することをお勧めします。) このPOMDPにおける目標は、他のすべての既知変数に基づいて、すべてのttに対する現在の状態xtx_tの分布(事後分布と呼ばれる)を推定することです。

POMDP

状態推定を行う際、状態遷移モデルp(xtxt1,ut)p(x_t | x_{t-1}, u_t)(マルコフ状態を仮定)と測定モデルp(ztxt)p(z_t | x_t) (観測は前の状態にのみ依存すると仮定)が容易に得られると仮定します。 そうすると、前の事後分布、現在の観測ztz_t、制御入力utu_tのみに依存する状態事後分布p(xtz1:t,u1:t)p(x_t|z_{1:t}, u_{1:t})の再帰的表現を導出できます。 具体的には、ベイズの定理と観測の条件付き独立性を利用してp(xtz1:t,u1:t)p(x_t|z_{1:t}, u_{1:t})の表現に到達し、 マルコフ仮定を活用して事前分布または予測された現在の事後分布p(xtz1:t1,u1:t)p(x_{t}|z_{1:t-1}, u_{1:t})の表現を、 前の事後分布、遷移モデル(前の状態と制御入力に依存)、測定モデル(および正規化因子)のみを使用して決定できます。

p(xtz1:t,u1:t)=p(ztxt)p(xtz1:t1,u1:t)p(ztz1:t1,u1:t)p(xtz1:t1,u1:t)=xt1p(xt,xt1z1:t1,u1:t)dxt1=xt1p(xtxt1,z1:t1,u1:t)p(xt1z1:t1,u1:t)dxt1=xt1p(xtxt1,u1:t)p(xt1z1:t1,u1:t)dxt1 p(x_t|z_{1:t}, u_{1:t}) = \frac{p(z_t | x_t)p(x_{t}|z_{1:t-1}, u_{1:t})}{p(z_{t}|z_{1:t-1}, u_{1:t})} \\ p(x_{t}|z_{1:t-1}, u_{1:t}) = \int_{x_{t-1}} p(x_t, x_{t-1} | z_{1:t-1}, u_{1:t}) dx_{t-1} \\ = \int_{x_{t-1}} p(x_t | x_{t-1}, z_{1:t-1}, u_{1:t})p(x_{t-1} | z_{1:t-1}, u_{1:t}) dx_{t-1} \\ = \int_{x_{t-1}} p(x_t | x_{t-1}, u_{1:t})p(x_{t-1} | z_{1:t-1}, u_{1:t}) dx_{t-1}

上記の導出は状態事後分布の再帰的関係を明らかにするものです。現在の状態事後分布を決定するために、 まず状態遷移モデルと前の状態事後分布の積の積分を取ることで、事前分布または予測された現在の事後分布(観測ztz_tなし)を計算できます(2つめの式)。 次に、予測された現在の事後分布に測定モデルを掛け、正規化定数で割ることでフィルタリングできます(1つめの式)。 フィルタリングされた現在の状態事後分布は、次のt+1t+1の予測における前の事前分布として使用できます。 1つめのステップ(新しい観測なしで現在の事後分布を予測する)は予測ステップと呼ばれ、 2つめのステップ(新しい観測を組み込み、現在の事後分布の予測をフィルタリングする)は更新ステップと呼ばれ、 状態推定を行うためのベイズの定理を利用したこれらのステップの再帰的適用はベイズフィルターと呼ばれます。

カルマンフィルター

ベイズフィルターは単純で任意の確率分布に一般化できるものの、正規化定数の計算は確率分布全体を知る必要があるため、 実際に使用することができない場合が多いです。そのため、実際には特定の種類のシステムを仮定し、 それらのシステムに対してベイズフィルターアプローチを適応することが多いです。 この様なベイズフィルターの一般的な実用的適応の一つがカルマンフィルターであり、これはノイズを含む線形ガウシアンシステムを仮定します。 線形ガウシアンシステムでは、すべての確率変数(状態、観測、入力、ノイズ)が多変量ガウス分布であり、 状態遷移モデルと測定モデルが以下のように線形であると仮定します。

xt=Atxt1+But+wtzt=Ctxt+vt x_t = A_t x_{t-1} + B u_{t} + w_t \\ z_t = C_t x_t + v_t

ここで、AtA_tBtB_tCtC_tは既知であると仮定され、wtN(0,Qt)w_t \sim N(0, Q_t)vtN(0,Rt)v_t \sim N(0, R_t)はランダムガウシアンノイズで、 それぞれプロセスノイズと測定ノイズと呼ばれ、QtQ_tRtR_tも既知です。すべての確率変数が多変量ガウス分布であると仮定することで、 確率分布全体を表現するために平均と共分散のみを追跡すれば十分になります。また、システムの線形性により、 後続の変数がガウス分布のままであることが保証され、実世界での使用が実用的になります(多くの物体の動きは線形変換として記述できます)。 ここで、初期状態x0x_0x0N(μ00,Σ00)x_0 \sim N(\mu_{0|0}, \Sigma_{0|0})であり、平均と共分散は既知で、 すべてのttに対して状態事後分布p(xtz1:t,u1:t)N(μtt,Σtt)p(x_t | z_{1:t}, u_{1:t}) \sim N(\mu_{t|t}, \Sigma_{t|t})を求めたいと考えます。 これらのモデルと仮定を用いて、状態遷移から観測なしの予測現在事後分布p(xtz1:t1,u1:t)N(μtt1,Σtt1)p(x_t | z_{1:t-1}, u_{1:t}) \sim N(\mu_{t|t-1}, \Sigma_{t|t-1})を得るための予測ステップを以下のように導出できます。

μtt1=Atμt1t1+ButΣtt1=At1Σt1t1At1T+Qt1 \mu_{t|t-1} = A_t \mu_{t-1 | t-1} + B u_{t} \\ \Sigma_{t|t-1} = A_{t-1} \Sigma_{t-1|t-1} A_{t-1}^T + Q_{t-1}

最初の式にはwtw_tが含まれていません。これはwtw_tの平均が0であり、μtt1\mu_{t|t-1}に影響を与えないためです。 2番目の式では、Cov(Ax)=AΣAT\text{Cov}(Ax) = A \Sigma A^Tを元にAt1Σt1t1A_{t-1} \Sigma_{t-1|t-1}を使用して共分散を考慮しています。 すべての共分散行列は正定値であるため、Σtt1\Sigma_{t|t-1}は常にΣt1t1\Sigma_{t-1|t-1}より大きくなります。 これは直感的にも理にかなっており、前の事後分布が前の観測を考慮に入れているのに対して、 現在の事後分布は現在の観測ztz_tを使用せずに予測されているため、予測ステップ後に共分散が大きくなります。 次の更新ステップでは、μtt1\mu_{t|t-1}Σtt1\Sigma_{t|t-1}、および測定モデルを使用して、以下のように現在の事後分布をフィルタリングできます。

μtt=μtt1+Kt(ztCtμtt1)Σtt=Σtt1KtCtΣtt1Kt=Σtt1CtT(CtΣtt1CtT+Rt)1(=Ct1CtΣtt1CtTCtΣtt1CtT+Rt) \mu_{t|t} = \mu_{t|t-1} + K_t(z_t - C_t \mu_{t|t-1}) \\ \Sigma_{t|t} = \Sigma_{t|t-1} - K_t C_t \Sigma_{t|t-1} \\ K_t = \Sigma_{t|t-1} C_t^T (C_t \Sigma_{t|t-1} C_t^T + R_t)^{-1} (= C_t^{-1} \frac{C_t \Sigma_{t|t-1} C_t^T}{C_t \Sigma_{t|t-1} C_t^T+R_t})

ここで、ztCtμtt1z_t - C_t \mu_{t|t-1}はイノベーションと呼ばれ、観測と予測がより一致するにつれて減少し、μtt\mu_{t|t}μtt1\mu_{t|t-1}に近づけます。 また、KtK_tはカルマンゲインで、測定ノイズRtR_tがある場合とない場合の共分散を比較し、ノイズが減少するにつれて00からCtC_tの範囲で変化します。 ノイズが大きい場合やΣtt1\Sigma_{t|t-1}が小さい場合、KtK_t00に近づき、μtt\mu_{t|t}Σtt\Sigma_{t|t}は、おそらく高いノイズを持つztz_tの代わりに、 予測ステップからの信頼できる結果(μtt1\mu_{t|t-1}Σtt1\Sigma_{t|t-1})により依存するようになります。 一方、ノイズが小さい場合やΣtt1\Sigma_{t|t-1}が大きい場合、KtK_tCt1C_t^{-1}に近づき、μtt\mu_{t|t}は逆変換された観測(Ct1μttC_t^{-1}\mu_{t|t})により依存し、 より信頼できる観測の使用によりΣtt\Sigma_{t|t}は零に近づきます。ここで、観測を組み込むことで更新ステップ後に共分散が常に減少し、 これらのステップを再帰的に実行する際に、予測ステップで共分散を増加させ、更新ステップで減少させることを交互に行うことがわかります。

拡張カルマンフィルター(EKF) & 粒子フィルター

線形ガウシアンシステムの仮定は強力ですが、多くの実世界のシナリオではこれらの仮定が破られます。 そこで非線形プロセス(状態遷移と測定)を持つシステムに対しては、代わりに拡張カルマンフィルタ(EKF)を使用できます。 EKFはμ\mu周りで一次テイラー近似を実行し、xt1x_{t-1}について非線形関数を線形化することで、 予測事後分布がガウシアンのままであることを保証します。具体的には、状態遷移モデルがg(ut,xt1)+wtg(u_t, x_{t-1}) + w_tで、 測定モデルがh(xt)+vth(x_t) + v_tの場合、gghhが非線形であるとき、以下の線形近似を実行します。

Gt=g(ut,μt1t1)μt1t1Ht=dh(μtt1)dμtt1g(ut,xt1)=g(ut,μt1t1)+Gt(xt1μt1t1)h(xt)=h(μtt1)+Ht(xtμtt1) G_t = \frac{\partial g(u_t, \mu_{t-1|t-1})}{\partial \mu_{t-1|t-1}} \\ H_t = \frac{d h(\mu_{t|t-1})}{d \mu_{t|t-1}} \\ g(u_t, x_{t-1}) = g(u_t, \mu_{t-1 | t-1}) + G_t(x_{t-1} - \mu_{t-1|t-1}) \\ h(x_{t}) = h(\mu_{t | t-1}) + H_t(x_{t} - \mu_{t|t-1})

ここで、GtG_tHtH_tはそれぞれの勾配を含むヤコビアン行列です。 これを使用して、予測ステップと更新ステップにおける平均推定の線形部分(At1xt1A_{t-1}x_{t-1}Ctμtt1C_t \mu_{t|t-1})を非線形関数(g(ut,μt1t1)g(u_t, \mu_{t-1|t-1})h(μtt1)h(\mu_{t|t-1}))で置き換え、 両ステップ(およびそれらに関連する共分散とカルマンゲイン推定)においてAt1A_{t-1}CtC_tGt1G_{t-1}HtH_tで置き換えることができます。 対して確率変数が非ガウシアンの場合、分布のパラメータを追跡するカルマンフィルターのパラメトリックアプローチとは異なり、 サンプリングに依存する粒子フィルターのノンパラメトリックアプローチを使用できます。 具体的には、粒子フィルターは状態遷移モデルから粒子をサンプリングし (前回の反復からの粒子をモデルを通じて伝播させる)、測定モデルを使用して粒子の重要度重みを計算し、 重要度重みに基づいて粒子を再サンプリングします(粒子フィルターの詳細については記事の最後に引用されているリソースを参照してください)。

微分可能フィルター

カルマンフィルターやその他のベイズフィルターは多くの文脈で高い性能を発揮しますが(Zhang, Y. et al. (2021)のByteTrackは、 高信頼度と低信頼度の両方のボックスにシンプルなカルマンフィルタを使用することで、当時の特徴追跡において最先端の性能を達成しました)、 特徴追跡を含む全ての分野において、これらすべてのフィルターはノイズパラメータと状態遷移および測定モデルが容易にアクセス可能であるという仮定を共有しています (At,Bt,Ct,Qt,RtA_t, B_t, C_t, Q_t, R_t)。しかし、これは実世界のシナリオでは多くの場合当てはまりません。 そのため、研究者たちは訓練データセットからこれらのパラメータを学習することを目的とした深層学習アプローチを開発しています。 そのようなアプローチの一つがBackprop KF(BKF)で、これは再帰ユニット内にカルマンフィルターの構造を埋め込んでいます。

BKF

上記に示すように、BKFは生の観測を中間観測ztz_tと行列LtL_tに処理するエンコーダを持っています。 LtL_tは測定ノイズの共分散行列RtR_tを計算するために使用されます。 次に、BKFの別の再帰部分が、前のユニットからのμt1t1\mu_{t-1|t-1}と学習可能な埋め込みAAを使用して予測ステップを実行し、 ztz_tΣt1t1\Sigma_{t-1|t-1}、他の学習可能な埋め込みなどを使用して更新ステップを実行します。 モデルは逆変換された状態ラベルCμttC \mu_{t|t}とラベルyty_tの間のL2損失を使用して訓練されます。 BKFは他の再帰ユニットよりも優れた性能を達成し、確率的深層学習アプローチの有効性を実証しました (拡散モデルや強化学習でも実証されているように)。 粒子フィルターに対する深層学習アプローチもあり、その詳細は記事の最後に引用されている原論文で確認できます。

結論

この記事では、見かけの2Dおよび3D運動変位に対するオプティカルフローとシーンフロー、 および特徴追跡に効果的なベイズフィルターと微分可能フィルターについて議論しました。 またオプティカルフローとベイズフィルターの両方について、どの様に深層学習を用いて予測を改善できるかついても議論しました。 この記事で扱った各トピックの詳細については、以下に引用されているリソースを確認することをお勧めします。

リソース