目标跟踪 MOSSE(Visual Object Tracking using Adaptive Correlation Filters)

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

文章标题:《Visual Object Tracking using Adaptive Correlation Filters》
文章地址:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.294.4992&rep=rep1&type=pdf
文章代码:(python)https://github.com/opencv/opencv/blob/master/samples/python/mosse.py
     (C++)https://github.com/opencv/opencv_contrib/blob/master/modules/tracking/samples/tutorial_customizing_cn_tracker.cpp

2010年CVPR的一篇的文章


Abstract

相关滤波器(correlation filters)虽然用得不多,但是在物体被旋转、遮挡或者有其它干扰的复杂情况下实施跟踪,速度要比当前的先进技术快 20 20 20 倍。最古老、最简单的相关滤波器使用了简单的模板,实际跟踪时不太好用。ASEF 和 UMACE 等现代一点的方法性能好一点,但是它们的训练需求不太适应用于跟踪。视觉跟踪任务要求从单帧图像训练出鲁棒的滤波器,并且在跟踪过程中,根据目标外观的变化进行动态调整。

本文提出了一种新型相关滤波器:MOSSE(Minimum Output Sum of Squared Error),我们在初始化的时候,从一帧图像中产生稳定的相关滤波器。基于MOSSE滤波器的跟踪器以每秒 669 669 669 帧的速度运行,对光照、比例、姿态和非刚性变形的变化具有鲁棒性。跟踪的时候根据峰值与旁瓣比(peak-to-sidelobe ratio,PSR)判断是否发生遮挡,以此决定是否暂停跟踪,等物体重新出现时恢复跟踪。


具体做法

获取选区:

首先把输入图像转为灰度图,选取跟踪区域。修改选区框的尺寸,使得该尺寸是做离散傅里叶变换的最佳尺寸。
然后根据选区创建汉宁窗(HanningWindow),它用于突出图像中心区域,减弱图像边缘区域。(这个后面用到)
把它裁剪出来,得到输入数据 f f f


在这里插入图片描述



预处理:

常规操作。把输入图像 f f f 的数据取对数,使数据无偏,符合正态分布。对数效果示意图:
在这里插入图片描述
然后减均值,除以方差,把数据标准化(Normaization)。

最后乘以汉宁窗。



建立求解目标:

设置我们对该选区的期望输出响应 g g g。它是一个中间值很大,四周值很小的矩形图片,尺寸和选区尺寸一样大。
可视化如下:

在这里插入图片描述

(图1)

(具体做法可以看代码)

我们希望训练得到一个相关过滤器 h \color{red}h h,使 f ☆ h = g f ☆ h = g fh=g


在这里插入图片描述

其中符号 ☆ ☆ 表示做 “相关” 运算。

“相关” 运算和 “卷积” 运算很像,二维情况下,对卷积核关于 2 2 2 个轴先后旋转 18 0 ∘ 180^{\circ} 180,再做卷积,就是 “相关”。
所以主要是 “核” 不同。 具体去网上查资料或者看冈萨雷斯的《数字图像处理》(第四版) p101。

如果训练良好,这个相关过滤器 h h h 大概长这样:


在这里插入图片描述



怎样找到 h h h 呢?

我们知道在傅里叶域做乘法相当于在空间域做卷积,于是先通过快速傅里叶变换 ( F F T FFT FFT) 把数据从图像空间域转到傅里叶域,然后在傅里叶域进行操作,这样可以减少计算量。我们用对应的大写字母表示傅里叶域的数据:

     输入图像: F = F ( f ) F = \mathcal{F}(f) F=F(f) , 相关过滤器: H = F ( h ) H= \mathcal{F}(h) H=F(h) ,输出响应: G = F ( g ) G= \mathcal{F}(g) G=F(g)

于是相关运算在傅里叶域表示为: F ⊙ H ∗ = G (1) F \; \odot \; H^* = G \tag{1} FH=G(1)

其中符号 ⊙ \odot 表示逐个元素的相乘,符号 ∗ * 表示复共轭,也就是虚部取相反的符号。

这个运算的速度主要取决于傅里叶变换和傅里叶逆变换,时间复杂度上限是 O ( P l o g P ) O(PlogP) O(PlogP) P P P 是选区的像素数量。




求解:

在初始化的时候,我们有 i i i 组数据,对于输入图像数据 F i F_i Fi,我们期望输出的响应为 G i G_i Gi
通过求解以下最小化问题,“训练” 出我们期望的相关核 H H H min ⁡ H ∗ ∑ i ∣ F i ⊙ H ∗ − G i ∣ 2 (3) \min_{H^*} \sum^{}_{i} | F_i \odot H^* - G_i |^2 \tag{3} HminiFiHGi2(3)

这叫做最小化平方误差和(Sum of Squared Error,SSE),文章的标题和跟踪器的名字由此而来。

作者在文章的附录中给出了求解公式。作者表示这是一个凸的,使偏导为 0 0 0 得到求解公式: H ∗ = ∑ i G i ⊙ F i ∗ ∑ i F i ⊙ F i ∗ (4) H^* = \frac{\sum_i G_i \odot F_i^*} {\sum_i F_i \odot F_i^*} \tag{4} H=iFiFiiGiFi(4)

i i i 组数据怎么来? 代码中 i = 128 i=128 i=128,在初始化的时候,对输入图像 f f f 128 128 128 次随机仿射变换(旋转、拉伸等)得到一系列图:

在这里插入图片描述

每张图片输出响应 G i G_i Gi 不变,依旧是用(图1)那个 g g g 的傅里叶逆变换 G i G_i Gi。将 F i F_i Fi G i G_i Gi 代入式 (4) 求得 H H H


不做仿射变换,只用一张原图也可以,但是这样得到的滤波器太精确,会过拟合这幅图像,当应用到新图像 (下一帧) 的时候容易跟踪失败。
这种对数据增强然后求平均的方法,可以产生一个更具泛化能力的滤波器。
(对弱分类器的输出进行平均,从而产生一个强得多的分类器)。

另外,我们还对图片加入了白噪声 ϵ \epsilon ϵ ,具有正则化的效果。可以得到具有更好的噪声容忍能力的滤波器。
在两个地方加,一个是图片预处理的时候加,一个是在式 (4) 中加: F i ⊙ F i ∗ + ϵ F_i \odot F_i^* +\epsilon FiFi+ϵ

初始化完毕后,就得到了滤波器模板 H H H




在线更新:(选区框)

在跟踪问题中,目标不总是居中的。

例如当下一帧数据来到的时候,我们的选区(目标框)还处于原来的位置,但是里面的目标已经移动了。

f f f 中峰值会随着目标的移动而移动。用目前的滤波器 H H H 做相关时,得到的响应也会发生变化:

在这里插入图片描述

通过计算响应峰值点的相对位移,来更新跟踪框的坐标,使目标仍处于跟踪框中心。

值得注意的是,目标框的大小没有得到更新,这也是 MOSSE 算法的不足之一。




在线更新:(滤波器)

在跟踪的过程中,目标通常会发生旋转、缩放、姿态、光照的变化,甚至外观发生非刚性形变,所以滤波器需要随之适应和更新。

H 1 = ∑ i G i ⊙ F i ∗ H_1 = \sum_i G_i \odot F_i^* H1=iGiFi H 2 = ∑ i F i ⊙ F i ∗ H_2 = \sum_i F_i \odot F_i^* H2=iFiFi
则式 (4) 简写为: H ∗ = H 1 H 2 H^* = \frac{H_1}{H_2} H=H2H1

下一帧数据 F n F_{n} Fn 来到的时候,通过以下式子更新 H H H H 1 n e w = ( 1 − η ) H 1 + η G ⊙ F n ∗ H 2 n e w = ( 1 − η ) H 2 + η F n ⊙ F n ∗ H_1^{new} = \textcolor{red}{(1-\eta)}\;H_1 + \textcolor{red}{ \eta }\; G \odot F_{n}^* \\[1em] H_2^{new} = \textcolor{red}{(1-\eta)}\;H_2 + \textcolor{red}{ \eta }\; F_{n} \odot F_{n}^* H1new=(1η)H1+ηGFnH2new=(1η)H2+ηFnFn
即:
H ∗ = ( 1 − η ) H 1 + η G ⊙ F n ∗ ( 1 − η ) H 2 + η F n ⊙ F n ∗ H^* = \frac{ \textcolor{red}{(1-\eta)}\;H_1 + \textcolor{red}{ \eta }\; G \odot F_{n}^*} {\textcolor{red}{(1-\eta)}\;H_2 + \textcolor{red}{ \eta }\; F_{n} \odot F_{n}^*} H=(1η)H2+ηFnFn(1η)H1+ηGFn

η \eta η 称为学习率,实际中取 η = 0.125 \eta = 0.125 η=0.125 效果较好。


得到新的过滤器和新的选区,就可以进行下一帧的跟踪了。不断迭代这个过程。




失败判定与PSR:

我们用 PSR(Peak to Sidelobe Ratio)度量响应尖峰的强度。
对于相关输出 g g g,我们找出峰值点 g max g_{\text{max}} gmax,以峰值点为中心建立 11 × 11 11\times 11 11×11 的矩形框。
计算这个矩形区域的均值 μ s1 \mu_{\text{s1}} μs1 和标准差 σ s1 \sigma_{\text{s1}} σs1,则 PSR = g max − μ s1 σ s1 \text{PSR} = \frac{g_{\text{max}} - \mu_{\text{s1}}}{\sigma_{\text{s1}}} PSR=σs1gmaxμs1

实验发现,对于正常跟踪的情况下,PSR 值大致处于 20.0 20.0 20.0 60.0 60.0 60.0 之间。
当 PSR 降到大概 7.0 7.0 7.0 左右时,表示目标被遮挡或者跟踪失败了。
在应用实现中,PSR 处于 3.0 3.0 3.0 10.0 10.0 10.0 时对于更新目标框是没什么用的。


python代码

链接:https://pan.baidu.com/s/1eAE9fJJBkh50oMaRfCI8AA
提取码:1234


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

相关文章

MOSSE相关滤波跟踪算法

参考博客: MOSSE算法的理解 MOSSE MOSSE代码 0 基础知识: 接上一篇 单目标跟踪综述,本文主要从MOSSE算法开始追溯相关滤波算法的起源(ps.这里让我想到了刺客信条里的起源)。 1. 先理解 相关操作和卷积操作&#x…

MOSSE 目标跟踪 解析

MOSS (Minimum Output Sum of Squared Error filter)(2010) 这篇文章是最早将相关的思想用到目标跟踪领域的。 相关滤波的思想:越是相关的两个目标相关值越大,也就是视频帧中与初始化目标越相似&#xff…

MOSSE相关滤波跟踪算法(二)

参考博客: 图像卷积与滤波 0 基础知识 接上一篇MOSSE相关滤波跟踪算法 线性滤波与卷积的基本概念 线性滤波过程:使用一个二维的滤波器矩阵(卷积核)在一副二维图像上滑动,对图像上每一个像素点,计算它的领…

Moss~

今年 2 月份,机器之心报道了复旦大学推出中国版 ChatGPT 的消息(参见《复旦发布中国版 ChatGPT:MOSS 开启测试冲上热搜,服务器挤爆》),引起了广泛关注。当时,邱锡鹏教授就曾表示将于四月份开源 …

目标跟踪经典论文阅读(1)MOSSE

摘要 虽然不常用,但相关滤波器可以通过旋转、遮挡和其他干扰来跟踪复杂的物体,其速度是目前最先进技术的20倍以上。最古老和最简单的相关滤波器使用简单的模板,通常在应用于跟踪时失败。更现代的方法,如ASEF和UMACE表现更好&…

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

文章和代码下载地址: MOSSE: David S. Bolme, J. Ross Beveridge, Bruce A. Draper, Yui Man Lui. "Visual Object Tracking using Adaptive Correlation Filters." GitHub - xingqing45678/Mosse_CF(代码和文章都在里面) 看了…

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

相关滤波跟踪是当前目标检测与跟踪领域的一个研究热点,ICCV2010的这篇MOSSE算法可以说是入门必看,镇圈神作了。 一、目的:跟踪 一开始分不清跟踪和目标检测有什么不同,所以查了一些资料,以下只是我自己的理解&#x…

《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:…