MOSSE算法推导

article/2025/9/29 20:48:24

引言

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

算法流程

  相关滤波很容易理解,一帧图像经过相关运算(滤波器)之后得到的响应图中,响应最大的位置就是目标所在的位置。这个相关计算的模板也就是滤波器,它滤除了和它不相关的内容。

相关运算和卷积运算

  相关Correlation和卷积Convolution有着紧密的联系。以一维的情况考虑。 f [ n ] f[n] f[n]是原始序列, h [ n ] h[n] h[n]是滤波器,在它们都是实数的情况下,相关运算结果 g [ n ] g[n] g[n]可以表示为:
g [ n ] = ∑ τ = − ∞ ∞ f [ τ ] h [ n + τ ] g[n] = \sum^{\infty}_{\tau=-\infty}f[\tau]h[n+\tau] g[n]=τ=f[τ]h[n+τ]
  两者卷积的结果为:
f [ n ] ∗ h [ n ] = ∑ τ = − ∞ ∞ f [ τ ] h [ τ − n ] f[n]\ast h [n] = \sum^{\infty}_{\tau=-\infty}f[\tau]h[\tau-n] f[n]h[n]=τ=f[τ]h[τn]
  可以观察到,相关和卷积的计算非常相似,我们如果让 f [ n ] f[n] f[n] h [ − n ] h[-n] h[n]卷积,那就能得到相关计算的结果了。有人可能会问了 h [ n ] h[n] h[n]可以理解,但是 h [ − n ] h[-n] h[n]的话索引就小于0了,是什么呀?我们先不管这个,先定性地再理解一下卷积和相关运算的区别。在一维的情况下,相关运算就像是把一条线段在另一条线段上拖动,每次两条线段重合区域的长度就是运算结果;卷积运算则是仅仅多了把一条线段反转的步骤,同样也是拖动然后看重合的长度。这样我们就好理解了,这个 h [ − n ] h[-n] h[n]中的负号只是起到了序列前后反转的作用。
g [ n ] = f [ n ] ∗ h [ − n ] g[n] =f[n]\ast h [-n] g[n]=f[n]h[n]
  那么我们就可以把相关运算表示成上面的卷积运算。很多情况下,如果 h [ n ] h[n] h[n]是一个对称的序列,那么卷积和相关运算得到的结果就是一样的。
  为了简化计算,时域的卷积转化为频域的乘积,我们用DFT可以由 f [ n ] f[n] f[n]计算得到 F [ k ] F[k] F[k],下面是 h [ n ] h[n] h[n]的DFT:
H [ k ] = ∑ n = 0 N − 1 h [ n ] e − j 2 π k n N H[k]=\sum^{N-1}_{n=0}{h[n]e^{-j2\pi\frac{kn}{N}}} H[k]=n=0N1h[n]ej2πNkn
  而 h [ − n ] h[-n] h[n]经过DFT之后得到的是什么呢?因为一个序列就只有0到N-1的索引,这负的索引是什么呢?为此我又回顾了一遍DFT,我看的主要是奥本海姆的《离散时间信号处理》。书里讲的DFT和DFS非常像,确实非常像!我自己的理解是:DFS和传统意义的傅立叶变换更接近,它实现的是离散周期序列与离散周期序列之间的转换(因为存在“周期对离散”,“非周期对连续”这样的对应关系)。而DFT则是截取了DFS的一个周期的序列来表示,可以说只是一种表示方法,在处理的时候要注意它固有的周期性。
在这里插入图片描述
  举个例子, x [ n ] x[n] x[n]是长度为4的序列, x ~ [ n ] \tilde x[n] x~[n]是周期延拓后的序列, x ~ [ − n ] \tilde x[-n] x~[n]是翻转后的序列, x [ − n ] x[-n] x[n]是从翻转后的序列中提取一个周期的序列。
∑ n = 0 N − 1 h [ − n ] e − j 2 π k n N = h [ 0 ] + ∑ n = 1 N − 1 h [ N − n ] e − j 2 π k n N \sum^{N-1}_{n=0}{h[-n]e^{-j2\pi\frac{kn}{N}}}=h[0]+ \sum^{N-1}_{n=1}{h[N-n]e^{-j2\pi\frac{kn}{N}}} n=0N1h[n]ej2πNkn=h[0]+n=1N1h[Nn]ej2πNkn
  令 l = N − n l=N-n l=Nn,则 n = N − l n=N-l n=Nl,代入上式得:
h [ 0 ] + ∑ l = 1 N − 1 h [ l ] e − j 2 π k ( N − l ) N = h [ 0 ] + ∑ l = 1 N − 1 h [ l ] e j 2 π k l N = ∑ l = 0 N − 1 h [ l ] e j 2 π k l N = H ∗ [ k ] h[0]+ \sum^{N-1}_{l=1}{h[l]e^{-j2\pi\frac{k(N-l)}{N}}}=h[0]+ \sum^{N-1}_{l=1}{h[l]e^{j2\pi\frac{kl}{N}}}= \sum^{N-1}_{l=0}{h[l]e^{j2\pi\frac{kl}{N}}}=H^*[k] h[0]+l=1N1h[l]ej2πNk(Nl)=h[0]+l=1N1h[l]ej2πNkl=l=0N1h[l]ej2πNkl=H[k]
  到这里我们就有了 f [ n ] f[n] f[n] h [ − n ] h[-n] h[n]的DFT,它们俩的卷积可以用乘积表示,我们把 g [ n ] g[n] g[n]的DFT结果记为 G [ k ] G[k] G[k],则:
G [ k ] = F [ k ] ⊙ H ∗ [ k ] G[k] = F[k]\odot H^*[k] G[k]=F[k]H[k]

MOSSE算法

  上面的式子再推广到二维的情况也一样是成立的, ⊙ \odot 表示二维矩阵 F F F H ∗ H^* H的对应元素相乘。
G = F ⊙ H ∗ G = F\odot H^* G=FH
  我们的目标是求 H ∗ H^* H F F F是输入的图像, G G G是输出的响应。这个响应需要我们自己设计。目标经过滤波器后,目标所在位置的响应最大,当目标在图像中央时,我们可以把这个响应设定为峰值位置在图像中央的二维高斯函数。
  如果只有一幅训练图片的话,这就已经能算出来了, H ∗ = G F H^*=\frac{G}{F} H=FG(这里的除法指的是对应元素相除),但是一般不只一幅图,所以要求一个最优的 H ∗ H^* H。为此论文中提出的准则是使每幅图计算的结果和高斯模板之间的平方误差之和最小,用公式表示就是:
min ⁡ H ∗ ∑ i ∣ F i ⊙ H ∗ − G i ∣ 2 \mathop {\min }\limits_{{H^*}} \sum\limits_i {{{\left| {{F_i} \odot {H^*} - {G_i}} \right|}^2}} HminiFiHGi2
  接下来就是想办法求这个最优化问题了,可以看到它类似一个一元二次函数,但这里又都是复数运算,所以还是有点不同。求解 H ∗ H^* H可以分解为求解它的每一个元素。对于 w w w行, v v v列的元素,有:
min ⁡ H ∗ ∑ i ∣ F i w v ⊙ H w v ∗ − G i w v ∣ 2 \mathop {\min }\limits_{{H^*}} \sum\limits_i {{{\left| {{F_{iwv}} \odot {H^*_{wv}} - {G_{iwv}}} \right|}^2}} HminiFiwvHwvGiwv2
  这就是标量运算了,我们先看 i = 1 i=1 i=1的情况。
min ⁡ H ∗ ∣ F w v H ∗ w v − G w v ∣ = min ⁡ H ∗ ( F w v H ∗ w v − G w v ) ( F w v H ∗ w v − G w v ) ∗ = min ⁡ H ∗ F w v F w v ∗ H w v H ∗ w v − G w v F w v ∗ H w v − G w v ∗ F w v H ∗ w v − G w v G ∗ w v \begin{array}{l} \mathop {\min }\limits_{{H^*}} \left| {{F_{wv}}{H^*}_{wv} - {G_{wv}}} \right|\\ = \mathop {\min }\limits_{{H^*}} \left( {{F_{wv}}{H^*}_{wv} - {G_{wv}}} \right){\left( {{F_{wv}}{H^*}_{wv} - {G_{wv}}} \right)^*}\\ = \mathop {\min }\limits_{{H^*}} {F_{wv}}{F_{wv}}^*{H_{wv}}{H^*}_{wv} - {G_{wv}}{F_{wv}}^*{H_{wv}} - {G_{wv}}^*{F_{wv}}{H^*}_{wv} - {G_{wv}}{G^*}_{wv} \end{array} HminFwvHwvGwv=Hmin(FwvHwvGwv)(FwvHwvGwv)=HminFwvFwvHwvHwvGwvFwvHwvGwvFwvHwvGwvGwv
  求极值要涉及对复数的变量求导,有人提出了Wirtinger导数,其中 z = x + j y z=x+jy z=x+jy
∂ ∂ z = 1 2 [ ∂ ∂ x − j ∂ ∂ y ] ∂ ∂ z ∗ = 1 2 [ ∂ ∂ x + j ∂ ∂ y ] \frac{\partial }{{\partial z}} = \frac{1}{2}\left[ {\frac{\partial }{{\partial x}} - j\frac{\partial }{{\partial y}}} \right]\\ \frac{\partial }{{\partial {z^*}}} = \frac{1}{2}\left[ {\frac{\partial }{{\partial x}} + j\frac{\partial }{{\partial y}}} \right] z=21[xjy]z=21[x+jy]
  根据上面的式子可以计算得到:
∂ ∂ z z ∗ = ∂ ∂ z ∗ z = 0 \frac{\partial }{{\partial z}}{z^*} = \frac{\partial }{{\partial {z^*}}}z = 0 zz=zz=0
  据此可以知道 H w v H_{wv} Hwv在对 H w v ∗ H_{wv}^* Hwv求导的时候可以看作常数。因此对目标函数求导,并令导数为0可得:
∂ ∂ H w v ∗ ( F w v F w v ∗ H w v H ∗ w v − G w v F w v ∗ H w v − G w v ∗ F w v H ∗ w v − G w v G ∗ w v ) = F w v F w v ∗ H w v − G w v ∗ F w v = 0 \begin{array}{l} \frac{\partial }{{\partial {H^*_{wv}}}}\left( {{F_{wv}}{F_{wv}}^*{H_{wv}}{H^*}_{wv} - {G_{wv}}{F_{wv}}^*{H_{wv}} - {G_{wv}}^*{F_{wv}}{H^*}_{wv} - {G_{wv}}{G^*}_{wv}} \right)\\ = {F_{wv}}{F_{wv}}^*{H_{wv}} - {G_{wv}}^*{F_{wv}} = 0 \end{array} Hwv(FwvFwvHwvHwvGwvFwvHwvGwvFwvHwvGwvGwv)=FwvFwvHwvGwvFwv=0
H w v = G w v ∗ F w v F w v F w v ∗ , H w v ∗ = G w v F w v ∗ F w v F w v ∗ {H_{wv}} = \frac{{{G_{wv}}^*{F_{wv}}}}{{{F_{wv}}{F_{wv}}^*}}, {H_{wv}}^* = \frac{{{G_{wv}}{F_{wv}}^*}}{{{F_{wv}}{F_{wv}}^*}} Hwv=FwvFwvGwvFwv,Hwv=FwvFwvGwvFwv
  再推广到 i > 1 i>1 i>1的情况:
H ∗ = ∑ i G i ⊙ F i ∗ ∑ i F i ⊙ F i ∗ {H^*} = \frac{{\sum\nolimits_i {{G_i} \odot {F_i}^*} }}{{\sum\nolimits_i {{F_i} \odot {F_i}^*} }} H=iFiFiiGiFi
  最后引入了学习率 η \eta η来更新 H ∗ H^* H
H n ∗ = A n B n A n = η G n ⊙ F n ∗ + ( 1 − η ) A n − 1 B n = η F n ⊙ F n ∗ + ( 1 − η ) B n − 1 \begin{array}{l} {H_n}^* = \frac{{{A_n}}}{{{B_n}}}\\ {A_n} = \eta {G_n} \odot {F_n}^* + (1 - \eta ){A_{n - 1}}\\ {B_n} = \eta {F_n} \odot {F_n}^* + (1 - \eta ){B_{n - 1}} \end{array} Hn=BnAnAn=ηGnFn+(1η)An1Bn=ηFnFn+(1η)Bn1
  其中 n = 1 , 2 , 3... n=1,2,3... n=1,2,3...代表测试图片的帧数。 A 0 = ∑ i G i ⊙ F i ∗ A_0=\sum\nolimits_i {{G_i} \odot {F_i}^*} A0=iGiFi, B 0 = ∑ i F i ⊙ F i ∗ B_0=\sum\nolimits_i {{F_i} \odot {F_i}^*} B0=iFiFi,实践中发现, η = 0.125 \eta=0.125 η=0.125效果较好。


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

相关文章

相关滤波目标追踪一:鼻祖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年全国平均工资出炉,你达标了吗?

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

java开发深圳平均工资_深圳2017平均工资100173元!!这次你又又又拖后腿了吗!?...

原标题:深圳2017平均工资100173元!!这次你又又又拖后腿了吗!? 最近深圳的天气 我和烤肉之间真的只差一撮孜然 简直热到原地爆炸 虽然未来的几天即将开启雨雨雨的模式 但是依然湿热 不过大家也不要灰心 毕竟有位名人曾经…

海口java工资水平2017,2019年海口平均工资公布,海口平均工资水平最新数据

海口市平均工资是什么?2017年海口市的平均工资是多少,下面现代语文网小编就关于2017年海口市平均工资相关信息给大家整理下! 平均工资,是一项反映工资总体水平的指标,指企业、事业、机关单位的职工在一定时期内平均每人…