MOSSE目标跟踪算法的理解

来源:互联网 发布:老婆的生日礼物 知乎 编辑:程序博客网 时间:2024/06/03 18:11

Minimum Output Sum of SquaredError(MOSSE)

是第一篇将correlation filter(CF)引入object tracking的论文,是CSK和DAT等算法的基础。

在信号处理中,有这么一个概念——相关性(correlation),用来描述两个因素之间的联系。而相关性又分为cross-correlation(互相关,两个信号之间的联系)和auto-correlation(自相关,本身在不同频域的相关性)。

首先我们来看一下CF的概念,

假设有两个信号f和g,则两个信号的相关性(correlation)为:

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

其中f表示f的复共轭。correlation的直观解释就是衡量两个函数在某个时刻相似程度


相关滤波的思想:越是相关的两个目标相关值越大,也就是视频帧中与初始化目标越相似,得到的相应也就越大。

卷积定理:时域的卷积相当于频域相乘,频域卷积相当于时域相乘。


作者提出的滤波器叫做Minimum Output Sum of Squared Error filter(MOSSE)(误差最小平方和滤波器)。按照前面的思路,就是找到一个滤波器h,使其在目标上的响应最大。则如下公式:

 g=fh

其中g表示响应输出,f表示输入图像,h表示滤波模板。 
显然,我们要是想获得比较获得响应输出,只需确定滤波器模板h即可。上式的计算是进行卷积计算,这在计算机中的计算消耗时很大的,因此作者对上式进行快速傅里叶变换(FFT),这样卷积操作经过FFT后就变成了点乘操作,极大的减少了计算量。上式变成如下形式: 

F(g)=F(fg)=F(f)F(h)

为了方便描述,将上式写成如下形式:

G=FH
有了上面的式子,那么后面跟踪的任务就是找到H了: 
H=GF

但是在实际跟踪的过程中我们要考虑到目标的外观变换等因素的影响,所以需要同时考虑目标的m个图像作为参考,从而提高滤波器模板的鲁棒性,所以作者就提出了MOSSE这个模型,其模型公式入下:

minH=i=1m|HFiGi|2


因为上式的操作都是元素级别的,因此要想找到,只要使其中的每个元素(w和v是H中每个元素的索引)的MOSSE都最小即可。因此上式可转换为如下形式:


minHwvi=1m|HwvFwviGwvi|2

H8

要想得到最小的H**wv,只需要对上式求偏导,并使偏导为0即可。即:

0=Hwvi|FiwvHwvGiwv|2
复数域求导和实数域求导时不一样的,其求导过程如下: 

上面得到是H中每个元素的值,最后得到H为: 

H=iFiGiiFiFi

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

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

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


部分代码

%产生高斯形状的理想响应

F_response=templateGauss(target_sz,im);

%目标框区域和滤波器卷积得到响应值

newPoint=real(ifft2(F_Template.*fft2(target_box)));

%其中响应值最大值对应的坐标即为新目标的位置

[row, col,~] = find(newPoint ==max(newPoint(:)), 1);

%以新目标为中心选择目标框

F_im=fft2(getsubbox(pos,target_sz,im));

%求解滤波器模板

F_Template=conj(F_im.*conj(F_response)./(F_im.*conj(F_im)+eps));


参考:
http://blog.csdn.net/autocyz/article/details/48136473
https://zuciwang.com/q/320/xabndexae.html
http://blog.csdn.net/fengying2016/article/details/72598720
原创粉丝点击