这是群友的一篇工作,之前也没仔细看,正好今天放假,打算读一下论文陶冶情操。
这篇文章的公式比较多,我做一篇笔记解释一下,希望对大家有帮助~
论文地址: https://ojs.aaai.org/index.php/AAAI/article/view/28493
代码: https://github.com/corfyi/UCMCTrack
0. Abstract
在多目标跟踪中,相机不规则运动一直是一个难题,这是因为相机的快速运动会导致目标在画面中的位置发生突变,这样就很难再和过去的轨迹关联起来。一种办法是采用相机运动补偿(Camera Motion Compensation)方法,但是现有的利用CMC的方法速度都是比较慢的。为了解决这个问题,作者提出了一种新的Kalman Filter的方式,即将目标的运动状态与地面联系起来(地面就是画面中真实的地面,我认为这才是这篇论文核心的contribution。就是说,我们用边界框的坐标作为目标的运动特征,其实是有缺陷的,因为这只是目标在相机平面的投影。而目标在world coordinate中的真实位置,往往是更稳定的
),并采用映射的Mahalanobis Distance作为IoU的一种替代方案,来度量目标与轨迹的相似性。
阅读这篇文章需要对Kalman Filter在MOT中的形式有基本了解,可以参见OCSORT
Mahalanobis Distance是原始Deep SORT论文中度量相似度的方式,其核心思想是按照Kalman状态向量的相似度衡量。具体参见我的B站讲解DeepSORT解读
可以看到,该方法的效果还是非常好的
1. Introduction
在引言部分,作者主要说明了用IoU metric为什么不行,这是因为相机运动的时候边界框变化会很大,如下图所示:
所以说,依靠相机平面(image plane)进行association是不可靠的,那么就要寻找一种可靠的表示,答案就是ground——把目标投影到真实的ground
上,从而更加robust。
此外,过去的CMC方法(比如BoT-SORT)需要在每一帧,都估计前一帧到这一帧的相机运动,或者说计算两帧像素之间的仿射矩阵,这是很耗时的(我的实测,BoT-SORT在用orb算法做仿射矩阵的话,帧率好像只有5~10
)。为了配合这一点,类似于ground-aware
的Kalman Filter被提出了。该工作在一个序列中只使用一套参数,这样就避免了频繁计算仿射矩阵。
总结起来,核心创新点有两个:
- 引入了一种创新的非loU距离测量, 也就是映射的Mahalanobis Distance
- 为了应对相机运动的挑战,提出了一种不同于传统相机运动补偿技术的方法,不是逐帧计算视频序列的相机补偿参数,而是在整个序列上均匀地应用相同的补偿参数,大大减少了与相机运动偏差典型相关的计算负担。
2. Methodology
2.1 将坐标投射到3D世界坐标的地面上!
为了更本质地表征目标的运动,作者期望把目标的运动状态投影到地面上。一般来讲边界框的底边是地面,因此将边界框底边对应在地面上的坐标及其变化率作为状态向量:
x = [ x , y , x ˙ , y ˙ ] \mathbf{x} =[x,y,\dot{x},\dot{y}] x=[x,y,x˙,y˙]
根据线性相机模型,地面坐标 [ x , y ] [x, y] [x,y]和图像平面中的坐标 [ u , v ] [u,v] [u,v]存在如下关系:
[ u v 1 ] = A 1 γ [ x y 1 ] \left[\begin{array}{l}u \\ v \\ 1\end{array}\right]=\mathbf{A} \frac{1}{\gamma}\left[\begin{array}{l}x \\ y \\ 1\end{array}\right] uv1 =Aγ1 xy1
其中 γ \gamma γ是缩放因子, A \mathbf{A} A是投影矩阵。
在Kalman滤波中,我们还应定义状态向量噪声的协方差矩阵和观测(检测)噪声的协方差矩阵。我们假定检测噪声的协方差矩阵与边界框高宽有关,即:
R k u v = [ ( σ m w k ) 2 0 0 ( σ m h k ) 2 ] \mathbf{R}_k^{u v}=\left[\begin{array}{cc}\left(\sigma_m w_k\right)^2 & 0 \\ 0 & \left(\sigma_m h_k\right)^2\end{array}\right] Rkuv=[(σmwk)200(σmhk)2]
其是一个 2 × 2 2 \times 2 2×2的矩阵, σ m \sigma_m σm是一个超参数,表示缩放因子, k k k表示第 k k k个检测,相应地, w k , h k w_k,h_k wk,hk就是边界框的宽和高。
但是 R k u v \mathbf{R}_k^{u v} Rkuv是图像平面上的观测噪声的协方差矩阵,我们现在要把坐标投影到地面,那么地面坐标噪声的协方差矩阵 R \mathbf{R} R怎么办呢?
对于线性相机模型,如果已知相机的内参(由焦距、中心点等组成) K i \mathbf{K}_i Ki和外参(描述相机位姿变化的旋转矩阵与平移矩阵组成) K o \mathbf{K}_o Ko, 那么,从图像平面到3D世界坐标的转换方程为:
γ 0 [ u v 1 ] = K i K o [ x y z 1 ] \gamma_0\left[\begin{array}{l}u \\ v \\ 1\end{array}\right]=\mathbf{K}_i \mathbf{K}_o\left[\begin{array}{l}x \\ y \\ z \\ 1\end{array}\right] γ0 uv1 =KiKo xyz1
我们令 K i K o = [ θ i , j ] 3 × 4 \mathbf{K}_i \mathbf{K}_o=[\theta_{i,j}]_{3\times 4} KiKo=[θi,j]3×4, 并且假设地面为 X Y XY XY平面,也即坐标 z = z 0 z=z_0 z=z0为恒定值,则方程可以改写为
γ 0 [ u v 1 ] = [ θ 11 θ 12 θ 13 θ 14 θ 21 θ 22 θ 23 θ 24 θ 31 θ 32 θ 33 θ 34 ] [ x y z 0 1 ] \gamma_0\left[\begin{array}{l}u \\ v \\ 1\end{array}\right]=\left[\begin{array}{llll}\theta_{11} & \theta_{12} & \theta_{13} & \theta_{14} \\ \theta_{21} & \theta_{22} & \theta_{23} & \theta_{24} \\ \theta_{31} & \theta_{32} & \theta_{33} & \theta_{34}\end{array}\right]\left[\begin{array}{l}x \\ y \\ z_0 \\ 1\end{array}\right] γ0 uv1 = θ11θ21θ31θ12θ22θ32θ13θ23θ33θ14θ24θ34 xyz01
= [ θ 11 θ 12 θ 13 z 0 + θ 14 θ 21 θ 22 θ 23 z 0 + θ 24 θ 31 θ 32 θ 33 z 0 + θ 34 ] 1 γ [ x y 1 ] =\left[\begin{array}{ccc}\theta_{11} & \theta_{12} & \theta_{13} z_0+\theta_{14} \\ \theta_{21} & \theta_{22} & \theta_{23} z_0+\theta_{24} \\ \theta_{31} & \theta_{32} & \theta_{33} z_0+\theta_{34}\end{array}\right] \frac{1}{\gamma}\left[\begin{array}{l}x \\ y \\ 1\end{array}\right] = θ11θ21θ31θ12θ22θ32θ13z0+θ14θ23z0+θ24θ33z0+θ34 γ1 xy1
经过这种变形之后, γ ≠ γ 0 \gamma \ne \gamma_0 γ=γ0,但总之是个常数,所以我们就先这么表示。
比较上式和 [ u v 1 ] = A 1 γ [ x y 1 ] \left[\begin{array}{l}u \\ v \\ 1\end{array}\right]=\mathbf{A} \frac{1}{\gamma}\left[\begin{array}{l}x \\ y \\ 1\end{array}\right] uv1 =Aγ1 xy1
我们得到
A = = [ θ 11 θ 12 θ 13 z 0 + θ 14 θ 21 θ 22 θ 23 z 0 + θ 24 θ 31 θ 32 θ 33 z 0 + θ 34 ] \mathbf{A}==\left[\begin{array}{ccc}\theta_{11} & \theta_{12} & \theta_{13} z_0+\theta_{14} \\ \theta_{21} & \theta_{22} & \theta_{23} z_0+\theta_{24} \\ \theta_{31} & \theta_{32} & \theta_{33} z_0+\theta_{34}\end{array}\right] A== θ11θ21θ31θ12θ22θ32θ13z0+θ14θ23z0+θ24θ33z0+θ34
现在我们知道 [ u , v ] [u,v] [u,v]的协方差矩阵,要求 [ x , y ] [x,y] [x,y]的,那么要找出 [ x , y ] [x,y] [x,y]和 [ u , v ] [u,v] [u,v]的关系。有:
[ x y 1 ] = γ A − 1 [ u v 1 ] \left[\begin{array}{l}x \\ y \\ 1\end{array}\right]=\gamma \mathbf{A}^{-1} \left[\begin{array}{l}u \\ v \\ 1\end{array}\right] xy1 =γA−1 uv1
我们记
A − 1 = [ a 11 a 12 a 13 a 21 a 22 a 33 a 31 a 32 a 33 ] \mathbf{A}^{-1}=\left[\begin{array}{lll}a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{33} \\ a_{31} & a_{32} & a_{33}\end{array}\right] A−1= a11a21a31a12a22a32a13a33a33
则
x = γ ( a 11 u + a 12 v + a 13 ) y = γ ( a 21 u + a 22 v + a 23 ) 1 = γ ( a 31 u + a 32 v + a 33 ) x = \gamma (a_{11}u + a_{12}v + a_{13}) \\ y = \gamma (a_{21}u + a_{22}v + a_{23}) \\ 1 = \gamma (a_{31}u + a_{32}v + a_{33}) x=γ(a11u+a12v+a13)y=γ(a21u+a22v+a23)1=γ(a31u+a32v+a33)
我们接下来简化这个方程组,因为我们发现最后一个方程不含变量 x , y x,y x,y,因此这个方程组其实不是满秩的。
为表示方便,令
b 1 = ( a 11 u + a 12 v + a 13 ) b 2 = ( a 21 u + a 22 v + a 23 ) b 3 = ( a 31 u + a 32 v + a 33 ) b_1 = (a_{11}u + a_{12}v + a_{13}) \\ b_2 = (a_{21}u + a_{22}v + a_{23}) \\ b_3 = (a_{31}u + a_{32}v + a_{33}) b1=(a11u+a12v+a13)b2=(a21u+a22v+a23)b3=(a31u+a32v+a33)
这其实就是论文里的(19)式
b = A − 1 [ u v 1 ] = [ b 1 b 2 b 3 ] b=\mathbf{A}^{-1}\left[\begin{array}{l}u \\ v \\ 1\end{array}\right]=\left[\begin{array}{l}b_1 \\ b_2 \\ b_3\end{array}\right] b=A−1 uv1 = b1b2b3
接下来,我们把上式两边对时间t求导,得到
d x = a 11 ( d γ u + d u γ ) + a 12 ( d γ v + d v γ ) + a 13 d γ d y = a 21 ( d γ u + d u γ ) + a 22 ( d γ v + d v γ ) + a 23 d γ 0 = a 31 ( d γ u + d u γ ) + a 32 ( d γ v + d v γ ) + a 33 d γ dx = a_{11}(d\gamma u+du\gamma) + a_{12}(d\gamma v+dv\gamma)+a_{13}d\gamma \\ dy = a_{21}(d\gamma u+du\gamma) + a_{22}(d\gamma v+dv\gamma)+a_{23}d\gamma \\ 0=a_{31}(d\gamma u+du\gamma) + a_{32}(d\gamma v+dv\gamma)+a_{33}d\gamma dx=a11(dγu+duγ)+a12(dγv+dvγ)+a13dγdy=a21(dγu+duγ)+a22(dγv+dvγ)+a23dγ0=a31(dγu+duγ)+a32(dγv+dvγ)+a33dγ
整理后,有
{ d x = γ ( a 11 d u + a 12 d v ) + b 1 d γ d y = γ ( a 21 d u + a 22 d v ) + b 2 d γ d γ = − ( 1 b 3 ) 2 ( a 31 d u + a 32 d v ) \left\{\begin{array}{l}d x=\gamma\left(a_{11} d u+a_{12} d v\right)+b_1 d \gamma \\ d y=\gamma\left(a_{21} d u+a_{22} d v\right)+b_2 d \gamma \\ d \gamma=-\left(\frac{1}{b_3}\right)^2\left(a_{31} d u+a_{32} d v\right)\end{array}\right. ⎩ ⎨ ⎧dx=γ(a11du+a12dv)+b1dγdy=γ(a21du+a22dv)+b2dγdγ=−(b31)2(a31du+a32dv)
对于第一个式子,容易发现 b 1 = b 3 x b_1=b_3 x b1=b3x, 并将 d γ d\gamma dγ带入,则
b 1 d γ = b 3 x d γ = − ( 1 b 3 ) x ( a 31 d u + a 32 d ) b_1 d \gamma=b_3x d\gamma =-(\frac{1}{b_3})x(a_{31} d u+a_{32} d ) b1dγ=b3xdγ=−(b31)x(a31du+a32d)
所以
d x = d u ( γ a 11 − a 31 1 b 3 x ) + d v ( γ a 12 − a 32 1 b 3 x ) dx = du(\gamma a_{11}-a_{31}\frac{1}{b_3}x)+dv(\gamma a_{12} -a_{32}\frac{1}{b_3}x ) dx=du(γa11−a31b31x)+dv(γa12−a32b31x)
同理,我们也可以得到
d y = d u ( γ a 21 − a 31 1 b 3 x ) + d v ( γ a 22 − a 32 1 b 3 x ) dy = du(\gamma a_{21}-a_{31}\frac{1}{b_3}x)+dv(\gamma a_{22} -a_{32}\frac{1}{b_3}x ) dy=du(γa21−a31b31x)+dv(γa22−a32b31x)
当然, γ = 1 / b 3 \gamma = 1/b_3 γ=1/b3, 因此将上面两式子表示成矩阵:
[ d x d y ] = [ γ a 11 − a 31 γ x γ a 12 − a 32 γ x γ a 21 − a 31 γ y γ a 22 − a 32 γ y ] [ d u d v ] \left[\begin{array}{l}d x \\ d y\end{array}\right]=\left[\begin{array}{cc}\gamma a_{11}-a_{31} \gamma x & \gamma a_{12}-a_{32} \gamma x \\ \gamma a_{21}-a_{31} \gamma y & \gamma a_{22}-a_{32} \gamma y\end{array}\right]\left[\begin{array}{l}d u \\ d v\end{array}\right] [dxdy]=[γa11−a31γxγa21−a31γyγa12−a32γxγa22−a32γy][dudv]
如果向量 x x x的协方差矩阵为 R R R, y = F x y=Fx y=Fx, 则 y y y的协方差矩阵为 F R F T FRF^T FRFT
根据上面的定理,这里
F = [ γ a 11 − a 31 γ x γ a 12 − a 32 γ x γ a 21 − a 31 γ y γ a 22 − a 32 γ y ] F = \left[\begin{array}{cc}\gamma a_{11}-a_{31} \gamma x & \gamma a_{12}-a_{32} \gamma x \\ \gamma a_{21}-a_{31} \gamma y & \gamma a_{22}-a_{32} \gamma y\end{array}\right] F=[γa11−a31γxγa21−a31γyγa12−a32γxγa22−a32γy]
所以地面投影观测的协方差矩阵为
R = F R k u v F T \mathbf{R} = F\mathbf{R}_k^{u v} F^T R=FRkuvFT
这样第一个创新点就讲完了,也就是在将图像平面坐标映射到世界坐标后,协方差矩阵是怎么做的,这样Kalman的形式就能够精确确定了。
2.2 投影到地面后的马氏距离计算
DeepSORT采用马氏距离对状态向量的相似度进行计算,这里采用了相似的方式。
首先计算观测值与预测值的差:
ϵ = z − H x ^ \epsilon=\mathbf{z}-\mathbf{H} \hat{\mathbf{x}} ϵ=z−Hx^
注意上面的量都是投射到地面之后的
随后计算残差的协方差矩阵:
S = H P H T + R k \mathbf{S}= \mathbf{H}\mathbf{P}\mathbf{H}^T+\mathbf{R}_k S=HPHT+Rk
其中 P \mathbf{P} P为状态向量的协方差矩阵
距离为:
D = ϵ S ϵ − 1 + ln det S D = \epsilon \mathbf{S} \epsilon^{-1}+\ln \mathbf{\det S} D=ϵSϵ−1+lndetS
比DeepSORT多了一个 ln det S \ln \mathbf{\det S} lndetS项. 我们知道行列式意义是矩阵张成形状的体积,我猜测在这里应该起到一个罚项的作用
用图解释就是下面这样, 意思就是在IoU=0的情况下, 普通的马氏距离是不行的, 因为线性模型本身就失效了, 而map到地面之后就可以:
2.3 处理噪声补偿
这部分的意思是, 当相机运动的时候, 恒定速度假设失效, 因此不妨搞一个非线性模型, 来对状态向量的噪声的协方差矩阵进行修正.
作者假设, 非线性运动的时候, 速度和时间成正比, 因此距离和时间二次方成正比:
Δ x = 1 / 2 σ Δ t 2 Δ v = σ Δ t \Delta x = 1/2 \sigma \Delta t^2 \\ \Delta v = \sigma \Delta t Δx=1/2σΔt2Δv=σΔt
其中 σ \sigma σ表示强度
那么, 噪声 [ σ x , σ y ] [\sigma_x, \sigma_y] [σx,σy]的更新矩阵:
G = [ 1 / 2 Δ t 2 0 Δ t 0 0 1 / 2 Δ t 2 0 Δ t ] G = \left[\begin{array}{cc}1/2 \Delta t^2 & 0 \\ \Delta t & 0 \\ 0 & 1/2 \Delta t^2 \\ 0 & \Delta t \end{array}\right] G= 1/2Δt2Δt00001/2Δt2Δt
[ σ x , σ y ] = G [ σ x , σ y ] [\sigma_x, \sigma_y]=G[\sigma_x, \sigma_y] [σx,σy]=G[σx,σy]
因此, 原本的状态向量噪声的协方差矩阵为 d i a g ( σ x , σ y ) diag (\sigma_x, \sigma_y) diag(σx,σy), 修正后为
Q k = G d i a g ( σ x , σ y ) G T Q_k=Gdiag (\sigma_x, \sigma_y)G^T Qk=Gdiag(σx,σy)GT