热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CVPR2010跟踪算法MOSSE原理及代码解析

文章和代码下载地址:MOSSE:DavidS.Bolme,J.RossBeveridge,BruceA.Draper,YuiManLui.VisualObject

文章和代码下载地址:

MOSSE: David S. Bolme, J. Ross Beveridge, Bruce A. Draper, Yui Man Lui. "Visual Object Tracking using Adaptive Correlation Filters." 

GitHub - xingqing45678/Mosse_CF(代码和文章都在里面)

看了网上很多文章,大都是说“两个信号越相似,其相关值越高。在跟踪,就是找到与跟踪目标响应最大的项。”然后将相关的公式摆出来,看得我一头雾水,可能是我自己的基础不太好吧,最后查了很多资料,总算感觉自己有点明白了,所以将其记录下来,如果有不对的地方请指正。


一、对2D相关的理解

首先,相关是相关,卷积是卷积,不要混为一谈!!!!

互相关是用来度量两个信号在某个时刻的相似程度,对于机器视觉领域来说就是指两个图像patch的互相匹配的程度。


1、相关操作

图像的相关公式:\small g=f\otimes h,其中h称为相关核(Kernel),具体到每一个像素表示为:

g(i,j)=\sum_{k,l}f(i+k,j+l)h(k,l)

注:此图为网上转载 ,如图所示,Input Image为输入的图像。Kernel为相关核 ,也可以称作我们提前训练好的滤波器模板。Output image即为输出响应图像。

步骤:

      (1)滑动核,使其中心位于输入图像的\small f(i,j)像素上

      (2)利用上式求和,得到输出图像的\small g(i,j)像素值

     (3) 充分上面操纵,直到求出输出图像的所有像素值

例:计算输出图像g(3,3)像素值为

\small g(3,3)=(-1)\times 7+(-2)\times 3+(-1)\times2+0\times3+0\times5+0\times1+1\times4+2\times3+1\times7=2


2、卷积操作

图像的卷积公式:g=f\star h,其中h称为卷积核(Kernel),具体到每一个像素表示为:

g(i,j)=\sum_{k,l}f(i-k,j-l)h(k,l)=\sum_{k,l}f(k,l)h(i-k,j-l)

注:此图为网上转载(然后我p了一下) ,如图所示,Input Image为输入的图像。Kernel为相关核 ,也可以称作我们提前训练好的滤波器模板。Output image即为输出响应图像。 

步骤:

      (1)将卷积核围绕中心旋转180度

      (2)滑动核,使其中心位于输入图像的\small f(i,j)像素上

      (3)利用上式求和,得到输出图像的\small g(i,j)像素值

      (4)充分上面操纵,直到求出输出图像的所有像素值

例:计算输出图像g(3,3)像素值为

\small g(3,3)=1\times 7+2\times 3+1\times2+0\times3+0\times5+0\times1+(-1)\times4+(-2)\times3+(-1)\times7=-2


3、差异:

(1)引用专业术语就是:Two-dimensional correlation is equivalent to two-dimensional convolution with the filter matrix rotated 180 degrees.

白话:卷积将核旋转了180度。

(2)物理意义:相关可以反应两个信号相似程度,卷积不可以。

(3)卷积满足交换律,\small f\star h=h\star f,相关不可以。

(4)卷积可以直接通过卷积定理(时域上的卷积等于频域上的乘积)来加速运算,相关不可以。


二、对相关滤波跟踪器的理解

相关滤波跟踪器就是通过互相关(cross-correlation)来定位目标当前帧所在位置的。响应图\small g最大值对应的位置即为当前时刻预测的目标位置,具体流程如下:

如果我们在时域内求解响应图,运算量巨大,那么如何利用卷积定理将其转换到频域???

用卷积来表示相关就是:

\small f (n)\otimes h(n)=f(n)\star h(-n)

利用卷积定理转换到频域为:

\small \mathbb{F}(g)=\mathbb{F}(f\otimes g)=\mathbb{F}(f)\odot \mathbb{F}(h)^{\ast }

简写为:

\small G=F\odot H^{\ast }

其中,\small \mathbb{F}(h(-n))=H^{\ast }\small \odot表示点乘。所以将我们的输入图像和滤波器通过算法变换到频域后,直接将他们相乘,然后再变换回时域(也就是图像的空域)就可以得到响应图。

几点重要的解释:

(1)输入的图像是指目标检测区域(MOSSE的检测区域就是目标所在区域),可能是像素值也可能是提取的特征(eg.Hog,CN,DeepFeatures等)。

(2)滤波器(或者叫目标模板)的大小和检测区域的大小一样。因为相同大小的矩阵在频率域才可以点乘计算。

(3)当滤波器稍微偏移就会超出输入图像的范围,则需要填充数据(这就是卷积的边界效应)。然而在实际的相关滤波跟踪算法中,因为代码中直接就写频域的计算公式,所以我们不知道是如何填充边界的。常用的有三种填充方法,补零、补边界像素、循环图像,matlab中fft默认的是第三种。


三、对MOSSE的理解

经过上面的解释,应该都能明白相关滤波的检测原理,响应图峰值的位置即为当前帧目标的预测位置。为了得到响应图,那么我们求出滤波器模板频域的表示值即可:

\small H^{\ast }=\frac{G}{F}


1、预处理(不重要,一般都会进行这些操作)

(1)FFT卷积算法需要将图像和滤波器映射到拓扑结构上,边界采用循环图像的方式填充,即将图像的左边缘连接到右侧边缘,将顶部连接到底部。这就是上面所说的第三种填充方法。

(2)周期卷积会对输入数据进行周期填补,引入一些artifacts。作者通过如下如下论文中的方法减弱对输出响应的影响D. S. Bolme, B. A. Draper, and J. R. Beveridge. Average of synthetic exact filters. In CVPR, 2009. 2, 3。(具体细节可以不用深究)

(3)采用点乘余弦窗处理,使图像边缘慢慢变成零。


2、MOSSE滤波

提高算法的鲁棒性,作者对视频第一帧的跟踪窗口施加随机的仿射扰动,产生多组图像对滤波器进行初始化:

\small \small H_{i}^{*}=\frac{G_{i}}{F_{i}}

注意上式是元素点除,作者通过最小二乘法来求解:

\small \min_{H^{\ast }} \sum_{i}|F_{i}\odot H^{*}-G_{i}|^{2}

求解过程我就不赘述了。经过一系列的推导,找到了Mosse滤波器的一个封闭解:

\small H^{*}=\frac{\sum_{i}G_{i}\odot F_{i}^{*}}{\sum_{i}F_{i}\odot F_{i}^{*}}

最后更新MOSSE滤波器如下:

\small H_{i}^{*}=\frac{A_{i}}{B_{i}}

\small A_{i}=\eta G_{i}\odot F_{i}^{*}+(1-\eta)A_{i-1}

\small B_{i}=\eta F_{i}\odot F_{i}^{*}+B_{i-1}

原理解释还可以参考博客:相关滤波跟踪(MOSSE)_autocyz-CSDN博客_相关滤波

代码解释介绍参考博客:MOSSE 目标跟踪 解析_Fying2016的博客-CSDN博客_mosse目标跟踪


推荐阅读
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • Explain如何助力SQL语句的优化及其分析方法
    本文介绍了Explain如何助力SQL语句的优化以及分析方法。Explain是一个数据库SQL语句的模拟器,通过对SQL语句的模拟返回一个性能分析表,从而帮助工程师了解程序运行缓慢的原因。文章还介绍了Explain运行方法以及如何分析Explain表格中各个字段的含义。MySQL 5.5开始支持Explain功能,但仅限于select语句,而MySQL 5.7逐渐支持对update、delete和insert语句的模拟和分析。 ... [详细]
author-avatar
手机用户2502925983
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有