Paper : Visual Object Tracking using Adaptive Correlation Filters
Code :
摘要
视觉跟踪任务需要在一帧的画面上训练鲁棒的滤波器,并随着目标对象的形变动态适应。作者提出了提供了一种新型的相关滤波器——平方误差最小输出和滤波器(MOSSE),其可以在初始帧上产生稳定的相关滤波器,并随着光照、尺度、非刚性形变等变化进行动态适应,同时能够达到每秒669帧的速度。是否产生遮挡是根据PSR指数进行判断,跟踪器在对象消失时暂停检测并停止相关滤波器的参数变化,并在对象再次出现重新开始检测和动态调整。
相关操作和基于滤波器的目标追踪
互相关(Cross-correlation) 对于一维连续信号来说定义如下
( f ∗ g ) ( τ ) = ∫ − ∞ + ∞ f ∗ ( t ) g ( t + τ ) d t (f*g)(\tau) = \int _{-\infty}^{+\infty} f^*(t)g(t+\tau) dt (f∗g)(τ)=∫−∞+∞f∗(t)g(t+τ)dt
其中, f ∗ f^* f∗ 表示共轭,对于一维离散信号定义如下
( f ∗ g ) [ n ] = ∑ − ∞ + ∞ f ∗ [ m ] g [ m + n ] (f*g)[n] = \sum _{-\infty}^{+\infty} f^*[m]g[m+n] (f∗g)[n]=−∞∑+∞f∗[m]g[m+n]
二维互相关运算具有相近的结构,下图是对于二维离散的矩阵进行互相关的运算
对比以下是卷积运算
可以看出,卷积运算是将卷积核旋转180°后进行互相关运算(滑动窗口运算),其中互相关运算具有明确物理意义,它可以反应两个信号之间的相似程度,而卷积运算不行。
基于滤波器的目标追踪则是将目标的信息存储到滤波器中,将每一帧的图片输入到滤波器,滤波器输出一个分数图表示不同位置的窗口图像与目标的相关性,峰值对应的窗口位置就是该帧目标的定位框。
一种简单的方法就是直接将目标的灰度图进行裁剪,当作滤波器的核,也就是上例中的Naive filter,这种方法的缺点在于得到的分数图中,受背景的干扰太大。如果每帧的filter 都是前一帧得到的定位框的裁剪,那么追踪过程中错误会发生累积,而且也没有用到之前的结果。
基于相关滤波器的物体追踪
为了加速使用相关滤波器的速度,需要在频域上进行操作来加速计算。相关操作不支持时域卷积频域相乘的特性,需要先将相关运算转化为卷积运算,假设使用 ⊗ \otimes ⊗ 表示相关运算, ∗ * ∗ 表示卷积运算,那么有
f ( n ) ⊗ h ( n ) = f ( n ) ∗ h ( − n ) f(n)\otimes h(n) = f(n) * h(-n) f(n)⊗h(n)=f(n)∗h(−n)
对两边进行FFT变换,使用 F \mathfrak{F} F 表示FFT,使用 g g g 表示相关滤波器的输出
F ( g ) = F ( f ( n ) ⊗ h ( n ) ) = F ( f ( n ) ∗ h ( − n ) ) = F ( f ) ⊙ F ∗ ( h ) \mathfrak{F}(g) = \mathfrak{F}(f(n)\otimes h(n)) = \mathfrak{F}(f(n) * h(-n)) = \mathfrak{F}(f)\odot \mathfrak{F}^*(h) F(g)=F(f(n)⊗h(n))=F(f(n)∗h(−n))=F(f)⊙F∗(h)
其中 F ∗ ( h ) \mathfrak{F}^*(h) F∗(h) 表示对 F ( h ) \mathfrak{F}(h) F(h) 求共轭。使用 FFT 和 invFFT 可以将计算相关滤波器的时间加速到 O ( P log P ) O(P\log P) O(PlogP)
在使用 FFT 进行计算时,我们对图片使用循环图像法进行边界填充,对于滑动窗口类型的运算,都会有较强的边界效应,因此对图像进行如下预处理
- 使用 log 操作来应对低对比度场景
- 对 log 后的像素值进行均值为0,方差为1的归一化
- 原图像乘上 cosine 窗口来降低边缘的像素值到0
那么,在若干帧上寻找最优的滤波器
h
h
h 可以表示为如下的形式,
f
f
f 表示当前帧,
g
g
g 表示滤波器的输出
min
H
∗
∑
i
∣
F
i
⊙
H
∗
−
G
i
∣
2
\min_{H^*} \sum_i|F_i \odot H^* - G_i|^2
H∗mini∑∣Fi⊙H∗−Gi∣2
MOSSE的解为
H ∗ = ∑ i G i ⊙ F i ∗ ∑ i F i ⊙ F i ∗ H^* = \frac{\sum_i G_i\odot F_i^*}{\sum_i F_i\odot F_i^*} H∗=∑iFi⊙Fi∗∑iGi⊙Fi∗
相关滤波器 h h h 的值初始化方法如下
- 对原始目标进行随机仿射变换
- 在随机仿射的 f i f_i fi 上解方程得到 h h h
随着目标追踪过程的进行,我们需要根据物体的新的形态更新 g g g
H i ∗ = A i B i A i = η G i ⊙ F i ∗ + ( 1 − η ) A i − 1 B i = η F i ⊙ F i ∗ + ( 1 − η ) B i − 1 \\ H_i^* = \frac{A_i}{B_i} \\ A_i = \eta G_i\odot F_i^* + (1-\eta) A_{i-1} \\ B_i = \eta F_i\odot F_i^* + (1-\eta) B_{i-1} Hi∗=BiAiAi=ηGi⊙Fi∗+(1−η)Ai−1Bi=ηFi⊙Fi∗+(1−η)Bi−1
当目标被遮挡时,我们应当暂停追踪,我们使用
g
g
g 的PSR值评估是否发生遮挡。设
g
max
g_{\max}
gmax 表示输出的最大值,
μ
sidelobe
,
σ
sidelobe
\mu_{\text{sidelobe}},\sigma_{\text{sidelobe}}
μsidelobe,σsidelobe 表示除了峰值点之外的点的平均值,标准差。
P
S
R
=
g
max
−
μ
sidelobe
σ
sidelobe
PSR = \frac{g_{\max}-\mu_{\textrm{sidelobe}}}{\sigma_{\textrm{sidelobe}}}
PSR=σsidelobegmax−μsidelobe
总结
这篇文章的主要贡献是将相关滤波器引入到追踪中,不仅具有较好的追踪表现而且运算速度较快,并通过将目标信息保存到滤波器中每次进行更新进行自适应的调整,初步展示了相关滤波器的威力。之后的若干篇追踪都用到了相关滤波器。