相关滤波追踪算法1

来源:互联网 发布:木工设计软件 编辑:程序博客网 时间:2024/06/02 02:23

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的定义,假设有fg两个函数(信号),其cross-correlationfg定义为

(fg)(τ)=deff(t)g(t+τ)dt(1)(fg)(n)=deff[m]g(m+n)

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


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

 

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

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

                         g=h f(2)                                                         

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

                            Fh f=(Fh)Ff(3)                                     

  其中FF表示傅里叶变换,表示点乘。那么假设ff所含的像素个数为nn,而已知FFT的时间开销为O(nlogn),因此式(3)的计算开销也为O(nlogn)!远比其他跟踪算法要快!明白这一点后,本篇论文的精华你已经掌握了。剩下的就是如何计算h了,为了表达的方便起见,我们设Ff=F,(Ff)*= H* ,Fg = G,那么我们就有



                                   H=GF (4)                                                          

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

                            minHi=1m|HFiGi|2(5)

  求解式(5)并不困难,而且根据卷积定理,在频率域的操作都是元素级别的,因此我们可以分别求解HH∗中的每一个元素Hw,vHw,v∗,那么(5)就可以变为:

                           minHw,vi=1m|Hw,vFw,v,iGw,v,i|2(6)

   然后对(6)式求导并使其为0即可求解,但要注意的是,论文中特别指出在复数域的求导与在实数域的有一点区别:

Hw,vi=1m(Hw,vFw,v,iGw,v,i)(Hw,v  Fw,v,iGw,v,i)=0Hw,vi=1mHw,vFw,v,iHw,vFw,v,iHw,vFw,v,iGw,v,iHw,vFw,v,iGw,v,i+Gw,v,iGw,v,i=0i=1mFw,v,iHw,vFw,v,iFw,v,iGw,v,i=0Hw,v=i=1mFw,v,iGw,v,ii=1mFw,v,iFw,v,i(7)

  按以上方式处理所有H中的所有元素,得到:

                               H=i=1mFiG*ii=1mFiF*i(8)                                                                            

                             

                    

上式就是滤波器的模型公式。

但是在跟踪中该怎么得到滤波器H呢?FiGi又该怎么获取? 
在作者的文章中,其对跟踪框(groundtruth)进行随机仿射变换,获取一系列的训练样本fi,而gi则是由高斯函数产生,并且其峰值位置是在fi的中心位置。获得了一系列的训练样本和结果之后,就可以计算滤波器h的值。注意:这里的f,g,h的size大小都相同。 
作者为了让滤波器对与形变、光照等外界影响具有更好的鲁棒性,采取了如下的模板更新策略: 

Ht=AtBt

At=ηFtGt+(1η)At1

Bt=ηFtFt+(1η)Bt1

作者将滤波器的模型公式分为分子和分母两个部分,每个部分都分别的进行更新,更的参数为η。其中AtAt1分别表示的是当前帧和上一帧的分子。




0 0
原创粉丝点击