相关滤波跟踪·MOSSE算法的梳理

article/2025/9/29 20:53:27

相关滤波跟踪是当前目标检测与跟踪领域的一个研究热点,ICCV2010的这篇MOSSE算法可以说是入门必看,镇圈神作了。

一、目的:跟踪

一开始分不清跟踪和目标检测有什么不同,所以查了一些资料,以下只是我自己的理解:

区别于目标检测,跟踪最大的特点是处理的图像序列具有时效性(temporal data)。
跟踪的过程一般是在首帧进行目标识别(indentify)定位(locate),在后序的帧进行目标匹配(找到最相似的目标),再定位;目标检测方法是这个过程中的一种选择。此外,跟踪还有处理一些旋转、尺度变化等问题的功能,并具有一定的预判能力(比如:扫地机器人溜进桌子下面不见了,跟踪也能定位出一个大致的位置)。

不负责任地来说,检测是跟踪的基础,跟踪是高于检测的。

二、原理:相关滤波

接触相关滤波的时候我最容易搞混的地方就是各种空域 频域的转换,所以整理的时候我会特别把在空域还是频域特别标注出来。

2.1 滤波

滤波是一个图像处理,尤其图像增强时常用的方法(比如低通滤波器:把低频部分的信息保留,高频部分的信息滤掉)。很明显,滤 是一个频域里的概念,但考虑到MOSSE的相关性从空域的角度比较好理解,因此需要暂时把频域滤波转换到空域滤波

通过卷积模板,可以实现从频域到空域的转换,所以在空域中,滤波基本上通过一个矩阵模板(窗)来实现。简单讲,就是把滤波看做领域操作算子,利用 给定图像像素 周围像素的值 决定 此像素 最终的输出值。也就是说,输入图像与输出结果在像素上是一一对应的关系,滤波器只是一个操作算子。

2.2 相关

相关一开始是信号处理领域的一个概念,用来描述两个信号的相似程度。
空域里的相关公式:

g = f ⨂ h g=f\bigotimes h g=fh

g ( i , j ) = ∑ f ( i + k , j + l ) ⋅ h ( k , l ) g(i,j)=\sum f(i+k,j+l)\cdot h(k,l) g(i,j)=f(i+k,j+l)h(k,l)
(其中 f f f是输入信号, h h h是相关核/滤波器, g g g是空域里的响应图。)

直接用了师兄的图

步骤:

  (1)滑动核,使其中心位于输入图像的$f(i,j)$像素上(2)利用上式求和,得到输出图像的$g(i,j)$像素值(3)充分上面操纵,直到求出输出图像的所有像素值

这里参考了(https://blog.csdn.net/qq_17783559/article/details/82254996)的解释。

很明显,输入信号响应之间在像素值上是一一对应的,输入信号的信息与核越相似,响应值就越
因此,只要在下一帧里利用 h h h找到响应值最高的位置就可以定位实现跟踪了,但问题在于:这样的方法计算太慢了。

考虑将空域的相关转化到频域提高运算速度。

三、算法:Minimum Output Sum of Squared Error (MOSSE) 滤波器

3.1 引入卷积算子

为了使空域的相关滤波转换到频域滤波以提高运算速度,引入卷积算子(注意:这里的卷积算子并没有什么实际的物理意义,可以看做一个把空域相关滤波转到频域的桥梁)。

卷积公式:

g = f ∗ h g=f\ast h g=fh

g ( i , j ) = ∑ f ( i − k , j − l ) ⋅ h ( k , l ) g(i,j)=\sum f(i-k,j-l)\cdot h(k,l) g(i,j)=f(ik,jl)h(k,l)

在这里插入图片描述

很明显,相关运算是把 h h h旋转了180°的卷积运算,所以 g = f ⨂ h = f ∗ h ∗ g=f\bigotimes h=f\ast h^* g=fh=fh

通过卷积定理:函数卷积的傅立叶变换是函数傅立叶变换的乘积,上式可以变换为 F F T ( g ) = F F T ( f ) ⋅ F F T ( h ∗ ) FFT(g)=FFT(f)\cdot FFT(h^*) FFT(g)=FFT(f)FFT(h)

表示为 G = F ⋅ H ∗ G=F\cdot H^* G=FH

但实际中很难通过 H ∗ = G F H^*=\frac{G} {F} H=FG得到滤波器 H H H

3.2 引入最小二乘法

最小二乘法是曲线拟合时的一种方法,通过最小化误差的平方来寻找数据的最佳函数配比。
在MOSSE中通过最小化实际输出的卷积和期望输出卷积之间的方差来得到合适的滤波器(minimizes the sum of squared error between the actual output of the convolution and the desired output of the convolution),即求解

min ⁡ H ∗ ∑ i ∣ F i ⋅ H ∗ − G i ∣ 2 \min_{H^*}\sum_{i}\left | F_{i}\cdot H^*-G_{i} \right |^{2} HminiFiHGi2
(其中 i i i 表示第 i i i个训练样本)

为了优化运算(element-wise),将上式转化为

min ⁡ H ∗ ∑ i ∣ F i ω ν ⋅ H ω ν ∗ − G i ω ν ∣ 2 \min_{H^*}\sum_{i}\left | F_{i\omega\nu}\cdot H_{\omega\nu}^*-G_{i\omega\nu} \right |^{2} minHiFiωνHωνGiων2

(其中下标 表示第 i i i 个样本的 ω \omega ω ν \nu ν列)

min ⁡ H ∗ ∑ i ∣ F i ω ν ⋅ H ω ν ∗ − G i ω ν ∣ 2 \min_{H^*}\sum_{i}\left | F_{i\omega\nu}\cdot H_{\omega\nu}^*-G_{i\omega\nu} \right |^{2} minHiFiωνHωνGiων2

= min ⁡ H ∗ ∑ i [ ( F i ω ν ⋅ H ω ν ∗ − G i ω ν ) ⋅ ( F i ω ν ⋅ H ω ν ∗ − G i ω ν ) ∗ ] =\min_{H^*}\sum_{i}\left [ \left(F_{i\omega\nu}\cdot H_{\omega\nu}^*-G_{i\omega\nu} \right )\cdot \left(F_{i\omega\nu}\cdot H_{\omega\nu}^*-G_{i\omega\nu} \right )^*\right ] =minHi[(FiωνHωνGiων)(FiωνHωνGiων)]

= min ⁡ H ∗ ∑ i [ ( F i ω ν H ω ν ∗ ) ( F i ω ν H ω ν ∗ ) ∗ − G i ω ν F i ω ν ∗ H ω ν − F i ω ν H ω ν ∗ G i ω ν ∗ + G i ω ν G i ω ν ∗ ] =\min_{H^*}\sum_{i}\left [ \left(F_{i\omega\nu} H_{\omega\nu}^*\right ) \left(F_{i\omega\nu}H_{\omega\nu}^*\right )^*-G_{i\omega\nu} F_{i\omega\nu}^*H_{\omega\nu}-F_{i\omega\nu}H_{\omega\nu}^*G_{i\omega\nu}^*+G_{i\omega\nu} G_{i\omega\nu} ^*\right ] =minHi[(FiωνHων)(FiωνHων)GiωνFiωνHωνFiωνHωνGiων+GiωνGiων]

= min ⁡ H ∗ ∑ i [ F i ω ν F i ω ν ∗ ( H ω ν ∗ ) 2 − G i ω ν F i ω ν ∗ H ω ν − F i ω ν H ω ν ∗ G i ω ν ∗ + G i ω ν G i ω ν ∗ ] =\min_{H^*}\sum_{i}\left [ F_{i\omega\nu}F_{i\omega\nu}^*\left( H_{\omega\nu}^*\right )^{2} -G_{i\omega\nu} F_{i\omega\nu}^*H_{\omega\nu}-F_{i\omega\nu}H_{\omega\nu}^*G_{i\omega\nu}^*+G_{i\omega\nu} G_{i\omega\nu} ^*\right ] =minHi[FiωνFiων(Hων)2GiωνFiωνHωνFiωνHωνGiων+GiωνGiων]

求和号内是一个关于 H ∗ H^* H的开口向上的一元二次函数,其一阶导数等于0的解即 H ∗ H^* H的最小值。

∂ ∂ H ∗ min ⁡ H ∗ ∑ i [ F i ω ν F i ω ν ∗ ( H ω ν ∗ ) 2 − G i ω ν F i ω ν ∗ H ω ν − F i ω ν H ω ν ∗ G i ω ν ∗ + G i ω ν G i ω ν ∗ ] = 0 \frac{\partial }{\partial H^*}\min_{H^*}\sum_{i}\left [ F_{i\omega\nu}F_{i\omega\nu}^*\left( H_{\omega\nu}^*\right )^{2} -G_{i\omega\nu} F_{i\omega\nu}^*H_{\omega\nu}-F_{i\omega\nu}H_{\omega\nu}^*G_{i\omega\nu}^*+G_{i\omega\nu} G_{i\omega\nu} ^*\right ]=0 HHmini[FiωνFiων(Hων)2GiωνFiωνHωνFiωνHωνGiων+GiωνGiων]=0

∑ i [ F i ω ν F i ω ν ∗ H ω ν − F i ω ν G i ω ν ∗ ] = 0 \sum_{i}\left [ F_{i\omega\nu}F_{i\omega\nu}^*H_{\omega\nu} -F_{i\omega\nu}G_{i\omega\nu}^*\right ]=0 i[FiωνFiωνHωνFiωνGiων]=0

F i ω ν F i ω ν ∗ H ω ν − F i ω ν G i ω ν ∗ = 0 F_{i\omega\nu}F_{i\omega\nu}^*H_{\omega\nu} -F_{i\omega\nu}G_{i\omega\nu}^*=0 FiωνFiωνHωνFiωνGiων=0

得到封闭解

H ω ν = ∑ F i ω ν G i ω ν ∗ ∑ F i ω ν F i ω ν ∗ H_{\omega\nu}=\frac {\sum F_{i\omega\nu}G_{i\omega\nu}^*}{ \sum F_{i\omega\nu}F_{i\omega\nu}^*} Hων=FiωνFiωνFiωνGiων

H = ∑ F i ⊙ G i ∗ ∑ F i ⊙ F i ∗ H=\frac {\sum F_{i}\odot G_{i}^*}{ \sum F_{i}\odot F_{i}^*} H=FiFiFiGi

3.3 引入学习效率 η \eta η

考虑到防止滤波器过拟合,使滤波器能够较快的适应旋转、遮挡、尺度变化等问题,引入一个学习效率(learning rate)的参量 η \eta η表示不同时序的帧的权重,所以滤波器公式表示为:

H i = A i B i H_{i}=\frac{A_{i}}{B_{i}} Hi=BiAi

A i = η G i ⊙ F i ∗ + ( 1 − η ) A i − 1 A_{i}=\eta G_{i}\odot F_{i}^*+(1-\eta )A_{i-1} Ai=ηGiFi+(1η)Ai1

B i = η F i ⊙ F i ∗ + ( 1 − η ) B i − 1 B_{i}=\eta F_{i}\odot F_{i}^*+(1-\eta )B_{i-1} Bi=ηFiFi+(1η)Bi1

学习效率参量使得时序离当前帧越近的帧所占权重越大之前的帧的学习结果随时间呈指数递减

四、流程:滤波器的初始化和在线更新

4.1 预处理

通常都会对特征提取的图像信息进行一些预处理:
(1)用log函数对像素值进行处理,降低对比度(contrasting lighting situation)。
(2)进行平均值为0,范数为1的归一化。
(3)用余弦窗口进行滤波,降低边缘的像素值。

4.2 流程图

在这里插入图片描述
上半部分是滤波器初始化的过程,第一帧的特征提取 f 1 f_{1} f1和高斯分布的理想置信图(相应) g i + 1 g_{i+1} gi+1已知,自然地,可以得到初始化的滤波器模板 h 0 h_{0} h0,为了避免过拟合,对滤波器的初始化模板进行了一些处理。

下半部分是滤波器更新的过程,mosse算法的优越之处就在于滤波器模板能够利用定制的置信图 g i g_{i} gi进行训练并在线更新,减少了目标丢失的可能性。

一次训练包含两次采样,第一次采样是在当前帧( i + 1 i+1 i+1)中定位上一帧( i i i)目标位置进行采样,通过滤波器得到响应,为了便于理解,我暂时把这个响应称为过渡响应,它的傅里叶变换即回归模型中的 G i G_{i} Gi

利用过渡响应得到当前帧中响应最大的像素定位,对当前帧进行第二次采样,此时,目标位于采样框中心。采样结果的傅里叶变换即模型中的 F i F_{i} Fi

由此,模型中的输入值全部确定, min ⁡ H ∗ ∑ i ∣ F i ⋅ H ∗ − G i ∣ 2 \min_{H^*}\sum_{i}\left | F_{i}\cdot H^*-G_{i} \right |^{2} minHiFiHGi2

利用以上模型进行训练,得到新的滤波器 h i + 1 h_{i+1} hi+1,对滤波器模板进行更新,进入下一帧。

以上,就是MOSSE算法的大致过程,欢迎讨论。(●’◡’●)

[分割线181105]
%修改了几个理解错误


http://chatgpt.dhexx.cn/article/YQ11ot9T.shtml

相关文章

《MOSSE》简述

引言 近些年来,目标追踪备受关注。一系列较鲁棒的追踪策略被提出,来适应目标外观的变化。最近的算法有增量目标追踪 IVT,鲁棒的基于目标分块的跟踪 Frag Track,甄别学习 GBDL 以及多实例学习。这些技术是有效的,但是技…

MOSSE算法推导

引言 MOSSE是在Visual Object Tracking using Adaptive Correlation Filters这篇文章中提出来的,MOSSE的全称是Minimum Output Sum of Squared Error,令平方误差和最小来计算得到滤波器。 算法流程 相关滤波很容易理解,一帧图像经过相关运算…

相关滤波目标追踪一:鼻祖Mosse算法的matlab解析

一些自己的见解,如有不同观点,可以一起讨论。 github地址:https://github.com/Ronales/Mosse_Tracking_matlab 补充:说一下mosse的更新策略: 1. "论文目标就是找到一个滤波器h,使其在输入图像上&am…

CV应用领域-目标跟踪-MOSSE

MOSSE(Minimum Output Sum of Squared Error) MOSSE是在Visual Object Tracking using Adaptive Correlation Filters这篇文章中提出来的,MOSSE的全称是Minimum Output Sum of Squared Error,令平方误差和最小来计算得到滤波器。…

mosse

MOSSE MOSSE(Minimum Output Sum of Squared Error) 是2010年 的CVPR,它的全名叫做Visual Object Tracking using Adaptive Correlation Filters。 MOSSE 是第一篇将correlation filter(CF) 引入object tracking 的论文,它也是CSK和KCF/DCF等算法的基础。…

【目标跟踪】|MOSSE原理及对应代码解释 matlab C

1原理 https://www.bilibili.com/video/av74302620/?spm_id_from333.788.videocard.0 https://blog.csdn.net/fzp95/article/details/78385795?utm_mediumdistribute.pc_relevant.none-task-blog-baidujs_title-4&spm1001.2101.3001.4242 相关和卷积操作》 https://bl…

单目标跟踪MOSSE详细算法步骤+理论说明

单目标跟踪MOSSE详细算法步骤理论推导 算法概述详细步骤候选框处理初始滤波器生成滤波器更新 理论说明对数变换(log函数)窗函数的理解 更新中 为了理解傅里叶变换,花了一周时间,可惜还是没有搞很清楚原理,暂且将其看作是数学家从浩瀚的知识海…

MOSSE相关滤波目标跟踪论文

论文全名:Visual Object Tracking using Adaptive Correlation Filters 论文摘自CVPR 2010,由David S. Bolme、J.Ross Beveridge、Bruce A. Draper与Yui Man Lui撰写,简称MOSSE。 摘要 虽然不常用,但相关滤波器可以通过旋转&…

上海2022年平均工资为12184,涨幅只有6.9%

大家好!我是韩老师。 到了每年的7月份,就是上海调整社保和公积金基数的时候了。 今天,上海人社局发布了有关民生保障待遇及社会救助待遇调整,其中最重要的信息透露了上海市2022年度职工月平均工资,即上海市2023年度社保…

上海市人才引进落户条件有哪些

在沪工作稳定,专业(业绩)与岗位相符,一般应能在本单位工作五年以上,且符合下列条件之一: 1、具有博士研究生学历并取得相应学位或者具有高级专业技术职务任职资格并受聘相应职务的专业技术人员和管理人员。 2、获得省部级及以上政府奖励的人员。 3、国家重大科技专项项…

全国平均工资水平排序 北京上海西藏居前三名

全国工资排序 你的工资涨了吗?省统计局昨日发布的数据显示,今年三季度末,江苏省城镇单位在岗职工平均工资达到21999元,比上年同期增加3211元,增长17.1%。这意味着1-9月份平均每月同比增收356元左右。 金融业平均工资排…

你的工资是怎样被平均的?终于有人把平均数、中位数和众数讲明白了

导读:我们在数据处理时,要小心各种陷阱!人们习惯使用统计数据来简化事物描述,但错误的统计方法不仅不能反映事实,还会让数据变得毫无意义。 作者:徐晟 来源:大数据DT(ID:…

计算机软件集成项目工程师上海,上海系统集成项目管理工程师积分政策,可以加多少分?...

系统集成项目管理工程师是计算机技术与软件专业技术资格(水平)考试中级资格里的一项考试,获得系统集成项目管理工程师证书在上海市办理居住证时可以获得100分的积分,具体依据如下: 系统集成项目管理工程师是计算机软件资格(水平)考试里中级的…

23省份2011年平均工资排行 北京最高甘肃垫底

2019独角兽企业重金招聘Python工程师标准>>> 23省份2011年平均工资排行 统计发现,目前全国已有北京等23个省区公布了2011年城镇单位在岗职工平均工资。数据显示,在这23省区中,北京职工月平均工资最高,为4672元/月&…

再见,工资!2020年6月程序员工资统计,平均14404元,网友:又跌了!

Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨有数可据 来源丨 https://blog.csdn.net/juwikuang/article/details/106503404 见了鬼! 工资竟然又跌了 #平均工资 2…

上海落户说明

 当前位置:合肥家园网—楼市资讯—家园看房 上海最新户口政策 新闻来源:合肥家园网 2012-02-24 width"100" height"24" src"http://news.hfhome.cn/hits.aspx?NewsID77154" frameborder"0…

2020年6月程序员工资统计,平均14404元,网友:又跌了!

见了鬼! 工资竟然又跌了 #平均工资 2020年6月全国招收程序员313739人。2020年6月全国程序员平均工资14404元,工资中位数12500元,其中95%的人的工资介于5250元到35000元。 虽然收入又下降了,但是岗位比上个月多了起来,随…

上海市职称计算机证明补办,职称证书丢了还能补办吗?上海落户政策详解。

很多朋友们在准备积分申请的时候,由于时间过去太久,等找材料的时候发现,职称证书不见了,这可怎么办呢?别急,职称证书是可以补发的!只需要个人提供以下材料: 1、原《专业技术职务任职…

python一个月工资多少钱_python工资收入

13.9K / 月平均工资 数据统计来自近一年 13903 份样本,截至 2020-11-21 全国python一个月多少钱?平均工资 ¥13.9K/月 其中拿10K-15K工资的人占比最多,达 30.5% 其次拿15K-20K工资的占 20.3%,20K-30K占 19.3% 对比…

2021年全国平均工资出炉,你达标了吗?

我国人的收入是个谜,如果你去各大论坛,就会发现各个都是富人。比如“刚下飞机,人在漂亮国,年入刚过百万”。人均法拉利、劳斯莱斯,以至于中国的法拉利、劳斯莱斯、兰博基尼等豪车的拥有量已经超过了其全球销量。 那么大…