天天看点

Correlation Filter in Visual Tracking系列一:Visual Object Tracking using Adaptive Correlation Filters

Visual Object Tracking using Adaptive Correlation Filters 一文发表于2010的CVPR上,是笔者所知的第一篇将correlation filter引入tracking领域内的文章,文中所提的Minimum Output Sum of Squared Error(MOSSE),可以说是后来CSK、STC、Color Attributes等tracker的鼻祖。Correlation Filter(以下简称CF)源于信号处理领域,后被运用于图像分类等方面。Correlation包含Cross-correlation和Auto-correlation,在这里我们一般指的就是Cross-correlation。首先看看维基百科上Cross-correlation的定义,假设有 f f f 和 g g g 两个函数(信号),

其cross-correlation ( f ⋆ g ) (f \star g) (f⋆g)定义为

( f ⋆ g ) ( τ ) = ∫ − ∞ ∞ f ( t ) ‾ g ( t + τ ) d t ( f ⋆ g ) ( n ) = ∑ − ∞ ∞ f ( m ) ‾ g ( m + n )   (f \star g)(τ) = \int_{-∞}^{∞}\overline{f (t)} g (t+τ) dt\\ (f \star g)(n) = \sum_{-∞}^{∞}\overline{f (m)} g (m+n) \, (f⋆g)(τ)=∫−∞∞​f(t)​g(t+τ)dt(f⋆g)(n)=−∞∑∞​f(m)​g(m+n)

其中 f ‾ \overline{f} f​表示f的复共轭,correlation的直观解释就是衡量两个函数在某个时刻 τ τ τ的相似程度,如下图所示。考虑一个最简单的例子,假设 f f f 和 g g g 的形状一样,但是相差了若干个时刻,那么 f ⋆ g f\star g f⋆g取得最大值的时候一定是 f f f 和 g g g 对齐的时候(没谁比自己和自己更像了吧…),但因为两者有时间差,所以要取得最大值,就要把其中一个在时间轴上进行平移,所以 g ( t + τ ) g(t+τ) g(t+τ)就代表把 g g g平移 τ τ τ个时刻。其实Convolution和Cross-correlation在图像处理的书里一般都会提到,这里就不多叙述了。

  可以参考:卷积、互相关、自相关可视化比较

  

Correlation Filter in Visual Tracking系列一:Visual Object Tracking using Adaptive Correlation Filters

而Correlation Filter应用于tracking方面最朴素的想法就是:相关是衡量两个信号相似值的度量,如果两个信号越相似,那么其相关值就越高,而在tracking的应用里,就是需要设计一个滤波模板,使得当它作用在跟踪目标上时,得到的响应最大,如下图所示:

Correlation Filter in Visual Tracking系列一:Visual Object Tracking using Adaptive Correlation Filters

CF方法最大的优势在于其速度之快,是任何其他跟踪方法都无法比拟的,如本篇所写的MOSSE,其速度可以到669帧每秒,把跟踪算法从real time 级别提升到了high speed级别;而且其跟踪准确率高,在wuyi他们的online benchmark上,带核函数的CSK方法可以得到73%左右的准确率。有着如此明显的优点,相信此类方法将会成为跟踪领域内继sparse方法的又一重要分支。

好,言归正传,我们先来介绍CF中的元老,MOSSE。按照我们刚刚的思路,我们需要寻找一个滤波模板,使得它在目标上的响应最大,那么写成公式就是如下所示

   (1) g = f ⋆ h g=f \star h \tag{1} g=f⋆h(1)

其中g表示响应输出,f表示输入图像,h表示我们的滤波模板。 g可以为任意形状的响应输出,在上图的示意图里我们就假设它为gaussian形状。那么显然,我们只要求出h就可以了。这样做看起来很简单,但为何CF类方法的速度如此之快呢?就是因为在求解等一系列操作中,都利用了快速傅里叶变换FFT。由卷积定理的correlation版本可知,函数互相关的傅里叶变换等于函数傅里叶变换的乘积,如下:

(2) F ( f ⋆ h ) = F ( f ) ⊙ F ( h ) ‾ F(f \star h)=F(f)\odot \overline {F(h)}\tag{2} F(f⋆h)=F(f)⊙F(h)​(2)

其中 F F F表示傅里叶变换, ⊙ \odot ⊙表示点乘。那么假设f所含的像素个数为 n n n,而已知FFT的时间开销为 O ( n l o g n ) O(nlogn) O(nlogn),因此式(3)的计算开销也为 O ( n l o g n ) O(nlogn) O(nlogn)!远比其他跟踪算法要快!明白这一点后,本篇论文的精华你已经掌握了。剩下的就是如何计算 h h h了,为了表达的方便起见,我们设 F ( f ) = F F(f)=F F(f)=F, ( F ( h ) ) ‾ = H ‾ \overline {(F(h))}=\overline H (F(h))​=H, F ( g ) = G F(g)=G F(g)=G,那么我们就有 (3) G = F ⊙ H ‾ H ‾ = G F \begin{aligned}G &={F}\odot \overline {H} \\ \overline {H} &= \frac {G} {F}\tag{3}\end{aligned} GH​=F⊙H=FG​​(3)

但是在实际应用中,因为目标的外观变换等因素影响,我们需要同时考虑目标的m个图像作为参考,以提高模型的鲁棒性,那么就有如下的目标函数了:

(4) H = min ⁡ H ∑ i ∣ F i ⊙ H ‾ − G i ∣ 2 H=\min_{ H} \sum_{i}|F_i \odot\overline H−G_i|^2\tag{4} H=Hmin​i∑​∣Fi​⊙H−Gi​∣2(4)

这里我们包括MOSSE过程的更详细的推导。 本文涵盖了主要步骤和最终结果。 这里的解释显示了大多数中间步骤。 找到MOSSE滤波器的第一步是设置将被优化的最小化问题。

其中 F i F_i Fi​ 和 G i G_i Gi​ 是其中的对象,并且在傅里叶域和对等的输出中输出相应的输出,其中找到了最小化输出误差平方和的滤波器H. 因为傅里叶域中的相关是元素乘法,所以滤波器H的每个元素可以独立地优化。 因此,优化问题可以从多变量优化问题转换为独立地优化 H H H 的每个元素的问题。

  求解式(4)并不困难,而且根据卷积定理,在频率域的操作都是元素级别的,因此我们可以分别求解 H ‾ \overline H H 中的每一个元素 H ω ν H_{\omega\nu} Hων​ ,那么就可以变为:

(5) H ω ν = min ⁡ H ω ν ∑ i ∣ F i ω ν H ‾ ω ν − G i ω ν ∣ 2 H_{\omega\nu}=\min_{ H_{\omega\nu}}\sum_{i}|F_{i\omega\nu}\overline H_{\omega\nu}−G_{i\omega\nu}|^2\tag{5} Hων​=Hων​min​i∑​∣Fiων​Hων​−Giων​∣2(5)

然后对(5)式求导并使其为0即可求解,

     (6) 0 = H ω ν = ∂ ∂ H ‾ ω ν ∑ i ∣ F i ω ν H ‾ ω ν − G i ω ν ∣ 2 0= H_{\omega\nu}=\frac{\partial }{\partial \overline H_{\omega\nu}}\sum_{i}|F_{i\omega\nu}\overline H_{\omega\nu}−G_{i\omega\nu}|^2\tag{6} 0=Hων​=∂Hων​∂​i∑​∣Fiων​Hων​−Giων​∣2(6)

可以证明,满足该等式的任何 H ω ν H_{\omega\nu} Hων​ 都是稳定点。可以在Stationary points of areal-valued function of a complex variable 中找到关于这种技术的简短教程。 论文中特别指出在复数域的求导与在实数域的有一点区别:

(7) 0 = ∂ ∂ H ‾ ω ν ∑ i ( F i ω ν H ‾ ω ν − G i ω ν ) ( F i ω ν H ‾ ω ν − G i ω ν ) ‾ 0 = ∂ ∂ H ‾ ω ν ∑ i F i ω ν H ‾ ω ν ( F i ω ν H ‾ ω ν ) ‾ − F i ω ν H ‾ ω ν G ‾ i ω ν − G i ω ν ( F i ω ν H ‾ ω ν ) ‾ + G i ω ν G ‾ i ω ν 0 = ∂ ∂ H ‾ ω ν ∑ i F i ω ν H ‾ ω ν H ω ν F ‾ i ω ν − F i ω ν H ‾ ω ν G ‾ i ω ν − G i ω ν H ω ν F ‾ i ω ν + G i ω ν G ‾ i ω ν \begin{aligned} 0&=\frac{\partial }{\partial \overline H_{\omega\nu}}\sum_{i}(F_{i\omega\nu}\overline H_{\omega\nu}−G_{i\omega\nu})\overline{(F_{i\omega\nu}\overline H_{\omega\nu}−G_{i\omega\nu})} \tag{7} \\ 0&=\frac{\partial }{\partial \overline H_{\omega\nu}}\sum_{i} F_{i\omega\nu}\overline H_{\omega\nu}\overline{(F_{i\omega\nu}\overline H_{\omega\nu})}-F_{i\omega\nu}\overline H_{\omega\nu}\overline G_{i\omega\nu}-G_{i\omega\nu}\overline{(F_{i\omega\nu}\overline H_{\omega\nu})}+G_{i\omega\nu}\overline G_{i\omega\nu}\\ 0&=\frac{\partial }{\partial \overline H_{\omega\nu}}\sum_{i}F_{i\omega\nu}\overline H_{\omega\nu}H_{\omega\nu}\overline F_{i\omega\nu}-F_{i\omega\nu}\overline H_{\omega\nu}\overline G_{i\omega\nu}-G_{i\omega\nu}H_{\omega\nu}\overline F_{i\omega\nu}+G_{i\omega\nu}\overline G_{i\omega\nu} \end{aligned} 000​=∂Hων​∂​i∑​(Fiων​Hων​−Giων​)(Fiων​Hων​−Giων​)​=∂Hων​∂​i∑​Fiων​Hων​(Fiων​Hων​)​−Fiων​Hων​Giων​−Giων​(Fiων​Hων​)​+Giων​Giων​=∂Hων​∂​i∑​Fiων​Hων​Hων​Fiων​−Fiων​Hων​Giων​−Giων​Hων​Fiων​+Giων​Giων​​(7)

论文中最后一步直接写的是如下公式,主要区别

(8) 0 = ∂ ∂ H ‾ ω ν ∑ i F i ω ν F ‾ i ω ν H ω ν H ‾ ω ν − F i ω ν G ‾ i ω ν H ‾ ω ν − F ‾ i ω ν G i ω ν H ω ν + G i ω ν G ‾ i ω ν 0=\frac{\partial }{\partial \overline H_{\omega\nu}}\sum_{i}F_{i\omega\nu}\overline F_{i\omega\nu}H_{\omega\nu}\overline H_{\omega\nu}-F_{i\omega\nu}\overline G_{i\omega\nu}\overline H_{\omega\nu}-\overline F_{i\omega\nu}G_{i\omega\nu}H_{\omega\nu}+G_{i\omega\nu}\overline G_{i\omega\nu}\tag{8} 0=∂Hων​∂​i∑​Fiων​Fiων​Hων​Hων​−Fiων​Giων​Hων​−Fiων​Giων​Hων​+Giων​Giων​(8)

计算复矩阵偏导数导致取决于:

(9) 0 = ∂ ∂ H ‾ ω ν ∑ i F i ω ν F ‾ i ω ν H ω ν H ‾ ω ν − F i ω ν G ‾ i ω ν H ‾ ω ν 0 = ∂ ∂ H ‾ ω ν ∑ i ( F i ω ν F ‾ i ω ν H ω ν − F i ω ν G ‾ i ω ν ) H ‾ ω ν 0 = ∂ ∂ H ‾ ω ν ∑ i [ F i ω ν F ‾ i ω ν H ω ν − F i ω ν G ‾ i ω ν ] \begin{aligned}0&=\frac{\partial }{\partial \overline H_{\omega\nu}}\sum_{i}F_{i\omega\nu}\overline F_{i\omega\nu}H_{\omega\nu}\overline H_{\omega\nu}-F_{i\omega\nu}\overline G_{i\omega\nu}\overline H_{\omega\nu}\\ 0&=\frac{\partial }{\partial \overline H_{\omega\nu}}\sum_{i}(F_{i\omega\nu}\overline F_{i\omega\nu}H_{\omega\nu}-F_{i\omega\nu}\overline G_{i\omega\nu})\overline H_{\omega\nu}\\ 0&=\frac{\partial }{\partial \overline H_{\omega\nu}}\sum_{i}[F_{i\omega\nu}\overline F_{i\omega\nu}H_{\omega\nu}-F_{i\omega\nu}\overline G_{i\omega\nu}]\tag{9} \end{aligned} 000​=∂Hων​∂​i∑​Fiων​Fiων​Hων​Hων​−Fiων​Giων​Hων​=∂Hων​∂​i∑​(Fiων​Fiων​Hων​−Fiων​Giων​)Hων​=∂Hων​∂​i∑​[Fiων​Fiων​Hων​−Fiων​Giων​]​(9)

  按以上方式处理所有 H ω ν H_{\omega\nu} Hων​ 中的所有元素,得到:

(10) H ω ν = ∑ i F i ω ν G ‾ i ω ν ∑ i F i ω ν F ‾ i ω ν H_{\omega\nu}=\frac{\sum_{i}F_{i\omega\nu}\overline G_{i\omega\nu}}{\sum_{i}F_{i\omega\nu}\overline F_{i\omega\nu}}\tag{10} Hων​=∑i​Fiων​Fiων​∑i​Fiων​Giων​​(10)

重写: (11) H = ∑ i F i ⊙ G ‾ i ∑ i F i ⊙ F ‾ i H=\frac{\sum_{i}F_{i}\odot\overline G_{i}}{\sum_{i}F_{i}\odot\overline F_{i}}\tag{11} H=∑i​Fi​⊙Fi​∑i​Fi​⊙Gi​​(11)

  就可以开始跟踪了。在跟踪的过程中,我们只需要把以上模板与当前帧的图像作相关操作,将得到的响应结果中最大的那点对应坐标作为目标在当前帧位置就可以了(相当于在2维上平移我们的模板)。然后,模板的更新方式可以按照如下的方式进行,

  在跟踪期间,目标通常可以通过改变其旋转,比例,姿势来改变外观不同的照明条件,甚至是通过非刚性变形。 因此,为了追随物体,过滤器必须快速地进行。 运行平均值用于此目的。 例如,从第 i i i帧学习的ASEF滤波器计算如下::

H ‾ ( t ) = η ∑ i G i ⊙ F ‾ i ∑ i F i ⊙ F ‾ i + ( 1 − η ) H ( t − 1 ) ‾ \overline H(t)=η\frac{\sum_{i}G_{i}\odot\overline F_{i}}{\sum_{i}F_{i}\odot\overline F_{i}}+(1−η)\overline{H(t−1)} H(t)=η∑i​Fi​⊙Fi​∑i​Gi​⊙Fi​​+(1−η)H(t−1)​

简化为:

H ‾ ( t ) = η H ( t − 1 ) ‾ + ( 1 − η ) H ( t − 1 ) ‾ H ( t ) = η H ( t − 1 ) + ( 1 − η ) H ( t − 1 ) \begin{aligned} \overline H(t)&=η\overline {H(t−1)}+(1−η)\overline{H(t−1)}\\ H(t)&=η {H(t−1)}+(1−η){H(t−1)} \end{aligned} H(t)H(t)​=ηH(t−1)​+(1−η)H(t−1)​=ηH(t−1)+(1−η)H(t−1)​

H ( t ) H(t) H(t)表示在第t帧求得的滤波模板, η η η为一经验常数。

  同理,MOSSE滤波器公式为:

   H ‾ ω ν = A i B i     A i = η G i ⊙ F ‾ i + ( 1 − η ) A i − 1     B i = η F i ⊙ F ‾ i + ( 1 − η ) B i − 1 \begin{aligned}\overline H_{\omega\nu}&=\frac{A_i}{B_i}\\   A_i &=ηG_{i}\odot\overline F_{i}+(1−η){A_{i-1}}\\   B_i &=ηF_{i}\odot\overline F_{i}+(1−η){B_{i-1}}\end{aligned} Hων​  Ai​  Bi​​=Bi​Ai​​=ηGi​⊙Fi​+(1−η)Ai−1​=ηFi​⊙Fi​+(1−η)Bi−1​​

  本文的内容大体就这样了,剩下的就是在 ( 11 ) (11) (11)上面进行一些修改,比如在分母里引进一个 ε ε ε 作为正则化的参数,或者分别求 H i H_i Hi​ 然后作平均等,都是一些小的技巧。总得来说,MOSSE方法开创了CF在tracking方面的先河,而在后面的一系列文章里,我们将介绍一系列用概率论、岭回归等理论对其作进一步提升的文章。

 

参考:

https://en.wikipedia.org/wiki/Cross-correlation

https://www.zybuluo.com/fyywy520/note/82980

https://www.cnblogs.com/hanhuili/p/4266990.html

继续阅读