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$和$g$两个函数(信号),其cross-correlation$f \star g$定义为

\[\begin{array}{l}
(f \star g)(\tau )\mathop = \limits^{def} \int_{ - \infty }^\infty {f*(t)g(t + \tau )dt} \qquad (1)\\
(f \star g)(n)\mathop = \limits^{def} \sum\limits_{ - \infty }^\infty {f*[m]g(m + n)}
\end{array}\]

  其中$f^*$表示$f$的复共轭,correlation的直观解释就是衡量两个函数在某个时刻$\tau $的相似程度,如下图所示。考虑一个最简单的例子,假设$f$和$g$的形状一样,但是相差了若干个时刻,那么$f\bigstar g$取得最大值的时候一定是$f$和$g$对齐的时候(没谁比自己和自己更像了吧…),但因为两者有时间差,所以要取得最大值,就要把其中一个在时间轴上进行平移,所以$g(t+\tau )$就代表把$g$平移$\tau $个时刻。其实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\text{ }\bigstar  f \qquad (2)$

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

        $Fh\text{ }\bigstar  f\text{=}{{(Fh)}^{*}}\odot Ff \qquad (3)$

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

        ${{H}^{*}}=\frac{G}{F}\qquad (4)$

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

        $\underset{{{H}^{*}}}{\mathop{\min }}\,\sum\limits_{i=1}^{m}{|{{H}^{*}}{{F}_{i}}-{{G}_{i}}{{|}^{2}}} \qquad (5)$

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

        $\underset{H_{w,v}^{*}}{\mathop{\min }}\,\sum\limits_{i=1}^{m}{|H_{w,v}^{*}{{F}_{w,v,i}}-{{G}_{w,v,i}}{{|}^{2}}}\qquad (6)$

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

\[\begin{array}{l}
\frac{\partial }{{\partial H_{w,v}^*}}\sum\limits_{i = 1}^m {(H_{w,v}^*{F_{w,v,i}} - {G_{w,v,i}}) \cdot } {(H_{w,v}^*  {F_{w,v,i}} - {G_{w,v,i}})^{\rm{*}}}{\rm{ = }}0\\
\Rightarrow \frac{\partial }{{\partial H_{w,v}^*}}\sum\limits_{i = 1}^m {H_{w,v}^*{F_{w,v,i}} \cdot {H_{w,v}}F_{w,v,i}^{\rm{*}} - H_{w,v}^*{F_{w,v,i}}G_{w,v,i}^{\rm{*}} - {H_{w,v}}F_{w,v,i}^{\rm{*}}G_{w,v,i}^{}{\rm{ + }}{G_{w,v,i}}G_{w,v,i}^{\rm{*}}} {\rm{ = }}0\\
\Rightarrow \sum\limits_{i = 1}^m {{F_{w,v,i}} \cdot {H_{w,v}}F_{w,v,i}^{\rm{*}} - {F_{w,v,i}}G_{w,v,i}^{\rm{*}}} {\rm{ = }}0\\
\Rightarrow {H_{w,v}}{\rm{ = }}\frac{{\sum\limits_{i = 1}^m {{F_{w,v,i}}G_{w,v,i}^{\rm{*}}} }}{{\sum\limits_{i = 1}^m {{F_{w,v,i}}F_{w,v,i}^{\rm{*}}} }} \qquad (7)
\end{array}\]

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

        $H\text{=}\frac{\sum\limits_{i=1}^{m}{{{F}_{i}}\odot G_{i}^{\text{*}}}}{\sum\limits_{i=1}^{m}{{{F}_{i}}\odot F_{i}^{\text{*}}}}\qquad (8)$

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

        ${{H}_{t}}=(1-\eta ){{H}_{t-1}}+\eta H(t)\qquad (9)$

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

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

Correlation Filter in Visual Tracking系列一:Visual Object Tracking using Adaptive Correlation Filters 论文笔记的更多相关文章

  1. correlation filters in object tracking

    http://www.cnblogs.com/hanhuili/p/4266990.html Correlation Filter in Visual Tracking系列一:Visual Objec ...

  2. Correlation Filter in Visual Tracking系列二:Fast Visual Tracking via Dense Spatio-Temporal Context Learning 论文笔记

    原文再续,书接一上回.话说上一次我们讲到了Correlation Filter类 tracker的老祖宗MOSSE,那么接下来就让我们看看如何对其进一步地优化改良.这次要谈的论文是我们国内Zhang ...

  3. 论文笔记:Attentional Correlation Filter Network for Adaptive Visual Tracking

    Attentional Correlation Filter Network for Adaptive Visual Tracking CVPR2017 摘要:本文提出一种新的带有注意机制的跟踪框架, ...

  4. Correlation Filter in Visual Tracking

    涉及两篇论文:Visual Object Tracking using Adaptive Correlation Filters 和Fast Visual Tracking via Dense Spa ...

  5. 论文笔记之: Hierarchical Convolutional Features for Visual Tracking

    Hierarchical Convolutional Features for Visual Tracking  ICCV 2015 摘要:跟卢湖川的那个文章一样,本文也是利用深度学习各个 layer ...

  6. 论文笔记之:Learning Multi-Domain Convolutional Neural Networks for Visual Tracking

    Learning Multi-Domain Convolutional Neural Networks for Visual Tracking CVPR 2016 本文提出了一种新的CNN 框架来处理 ...

  7. Deep Reinforcement Learning for Visual Object Tracking in Videos 论文笔记

    Deep Reinforcement Learning for Visual Object Tracking in Videos 论文笔记 arXiv 摘要:本文提出了一种 DRL 算法进行单目标跟踪 ...

  8. 论文笔记之:Spatially Supervised Recurrent Convolutional Neural Networks for Visual Object Tracking

    Spatially Supervised Recurrent Convolutional Neural Networks for Visual Object Tracking  arXiv Paper ...

  9. 论文笔记之:Visual Tracking with Fully Convolutional Networks

    论文笔记之:Visual Tracking with Fully Convolutional Networks ICCV 2015  CUHK 本文利用 FCN 来做跟踪问题,但开篇就提到并非将其看做 ...

随机推荐

  1. redhat网络基础配置

    添加浮动IP: ifconfig eth0:1 192.168.1.106 IP配置文件: BOOTPROTO: 采用的启动协议,有三种选择: (1) none:不使用启动协议 (2) static: ...

  2. Java 类中各成分加载顺序 和 内存中的存放位置

    参加一个笔试,有一个关于类的静态代码块.构造代码块.构造函数的执行顺序的问题.不太清楚,网上百度了一下.在这里记录一下. 一.什么时候会加载类?使用到类中的内容时加载:有三种情况1.创建对象:new ...

  3. 计算机上没有找到was服务

    控制面板->程序->打开或关闭windows功能,勾选Microsoft .net framework下的两项.

  4. 读javascript高级程序设计10-DOM

    一.节点关系 元素的childNodes属性来表示其所有子节点,它是一个NodeList对象,会随着DOM结构的变化动态变化. hasChildNodes():是否有子节点. var headline ...

  5. Android Studio插件推荐(PreIOC,GsonFormat)

    好的插件能加快项目的开发速度,尤其是一些针对重复性的代码的插件,所以在这里向大家推荐2款不错的插件,如果以后发现新的好的插件,还会继续推荐,同时欢迎大家推荐 GsonFormat GsonFormat ...

  6. linux 实战使用,上传git 解决冲突

    Last login: Fri Dec 18 09:48:55 on ttys000lidongxiaodeiMac:~ lidongxiao$ cd /Users/lidongxiao/Docume ...

  7. 使用 IN 的子查询

    通过 IN(或 NOT IN)引入的子查询结果是一列零值或更多值.子查询返回结果之后,外部查询将利用这些结果. 下列查询会找到所有曾出版过商业书籍的出版商的名称. USE pubs SELECT pu ...

  8. debug实战:Unmanaged High Memory非托管高内存

    最近又监控到一个高内存的问题,周五下班把系统打开,周末2天没关,周一来看已经涨到5.2G,这次与以往不同,不是.net的内存泄漏,而是非托管引起的. 1. 抓dump,确定高内存的类型 //dump有 ...

  9. 【转】解决编译安装NGINX时make报错

    编译参数:--[root@localhostnginx-1.4.6]#./configure--user=nginx--group=nginx--prefix=/usr/local/nginx--wi ...

  10. 基于Twemproxy的Redis集群搭建以及想法

    基于Twemproxy的Redis集群方案(转) redis3.0 已经发布了几个月了,但是我这等菜鸟到网上还是没有找到很好的关于搭建redis3.0集群的文章,而且好像很多公司的redis版本还保持 ...