MOOSE相关滤波跟踪算法(个人学习笔记)

news2025/4/20 12:07:23

MOOSE

论文标题 “Visual Object Tracking using Adaptive Correlation Filters”

原文地址

用滤波器对目标外观进行建模,并通过卷积操作来执行跟踪。

参考阅读:

目标跟踪经典算法——MOSSE(Minimum Output Sum Square Error)

目标跟踪整理(1)之MOSSE

相关滤波跟踪原理

基于以初始帧中给定的bounding box来选择目标,并基于示例图像上(基于初始帧得到)训练滤波器来建模目标的外观。在接下来的每一帧中,通过训练好的关联滤波器来跟踪目标,相关输出中最大值对应的位置表示目标的新位置,然后根据该新位置执行在线更新。

  1. 目标初始化:在视频的第一帧中,选择一个以物体为中心的小窗口,基于该区域初始化滤波器。
  2. 跟踪与滤波器训练:在接下来的每一帧中,在搜索窗口内基于训练好的滤波器进行相关操作,以跟踪目标。这个搜索窗口通常比跟踪窗口大,以便于捕捉目标的移动。
  3. 确定新位置:在相关操作的输出中,寻找最大值对应的位置。这个位置表示目标在当前帧中的新位置。
  4. 在线更新:根据目标的这个新位置,更新滤波器,使其能更好地适应目标可能的外观变化。

MOSSE算法的基本思想:首先根据第一帧图像框选的目标构建一个响应,该响应在所绘制的目标框的中心处的响应值最大,向四周缓慢衰减(二维高斯分布)。然后我们希望找到一个滤波器使得图像和这个滤波器进行相关运算之后刚好得到的就是这个响应,那么就可以根据响应值最大处得到目标的位置了。当新的一帧图像进来时,用之前得到的滤波器与新的图像进行相关运算,就可以得到新的目标位置了。

频域转换

f f f:搜索窗口,即全局图像的局部区域

h h h:滤波器

相关操作: g = f ∗ h g=f*h g=fh

为了让跟踪过程更快,应用相关过滤器的过程在频域内,即使用傅里叶变换(FFT)其使卷积运算变成元素乘法运算(切记)

F F F:输入图像的2D傅里叶变换,即 F = F ( f ) F=\mathcal{F}(f) F=F(f)

H H H:滤波器的2D傅里叶变换,即 H = F ( h ) H=\mathcal{F}(h) H=F(h)

则上式可写为:

G = F ⊙ H ∗ G=F \odot H^* G=FH

其中, ⊙ \odot 表示逐元素相乘操作,而 H ∗ H^* H表示 H H H的复共轭。

为什么是复共轭呢?

因为相关和卷积在某些地方(深度学习领域,如图像卷积操作)可能当成相同的运算,但实际上两者是有差别的(数学意义上的卷积,比如信号处理/传统图像处理)。

f f f h h h做相关实际上是 f f f和旋转了180度的 h h h做卷积。关于这点,也有疑问,相关为什么是翻转了180度的卷积操作呢?

GPT4的回答如下:

image-20240111205817378

为什么卷积的定义和深度学习中的卷积不一样呢?这篇回答中提到了,本质原因是:数学中的卷积和卷积神经网络中的卷积严格意义上是两种不同的运算。具体来说:

img

  1. 卷积神经网络图像处理卷积时,没有旋转180度。
  2. 数学上的卷积,比如信号处理/传统图像处理,处理卷积时,才旋转180度。

OK,重新捋一下思路,整个过程可以总结为

  1. 时域中的相关操作:在时域中,相关操作通常表示为 g = f ∗ h g=f*h g=fh,其中 f f f是搜索窗口, h h h 是滤波器(例如模板或掩模),而 g g g是输出结果。相关操作本质上是滤波器 h h h在搜索窗口 f f f上滑动,计算它们之间的局部相似度。
  2. 频域的傅里叶变换:为了加速计算,可以将相关操作转换到频域执行。根据傅里叶变换的性质,时域内的相关操作对应于频域内的逐元素乘积。所以,定义 F = F ( f ) F=\mathcal{F}(f) F=F(f)为输入图像 f f f的2D傅里叶变换, H = F ( h ) H=\mathcal{F}(h) H=F(h)为滤波器 h h h的2D傅里叶变换。
  3. 频域内的卷积和相关操作:在频域内,卷积运算变为 F F F H H H的逐元素相乘。但由于在时域中, f f f h h h原本要进行的是相关操作(不是卷积),这等价于 f f f和旋转180度的 h h h进行卷积。因此,在频域内,这个相关操作表示为 G = F ⊙ H ∗ G=F \odot H^* G=FH,其中 H ∗ H^* H H H H的复共轭。

预处理

预处理操作如下:

  1. 用log函数处理图像,使其具有低对比度照明情况;
  2. 像素值将正则化到零均值、一方差;
  3. 应用余弦窗到图片上,这会让图像边缘元素值趋于零。

MOSSE 滤波器

MOSSE是一种从较少的训练图像中生成滤波器的算法。因此,其需要一组训练图像 f i f_i fi和训练输出 g i g_i gi

参照原文, g i g_i gi是基于ground truth生成的,其为训练图像中以目标中心为中心的紧凑2D高斯形状峰值( σ = 2 \sigma=2 σ=2)。

为了找到将训练输入映射到所需训练输出的滤波器,MOSSE找到了一个滤波器 H H H,该滤波器 H H H可以最小化实际输出与真实输出之间的平方误差之和,即:
min ⁡ H ∗ ∑ i ∣ F i ⊙ H ∗ − G i ∣ 2 \mathop{\min}_{H^*} \sum_{i}{|F_i\odot H^*-G_i|}^2 minHiFiHGi2
所以可以明白为什么叫MOSSE(Minimum Output Sum of Squared Error)了吧?

H ∗ H^* H求导,令其为0,可得到闭式解:
H ∗ = ∑ i G i ⊙ F i ∗ ∑ i F i ⊙ F i ∗ H^*=\frac{\sum_{i}G_i \odot F_i^*}{\sum_{i}F_i \odot F_i^*} H=iFiFiiGiFi

初始化

为了训练滤波器,需要一组训练图像,但是能够得到的只有初始帧图像。因此使用随机仿射变换构建训练图像,以及对应的训练输出 g i g_i gi,其峰值对应于目标中心。

在线更新

在跟踪过程中,通常会面临由旋转、尺度缩放、光照变化,甚至进行非刚性变形等因素引起的外观变化。因此,滤波器需要在线更新才能适应跟踪目标的变化,如下所示:
H i ∗ = A i B i A i = η G i ⊙ F i ∗ + ( 1 − η ) A i − 1 B i = η F i ⊙ F i ∗ + ( 1 − η ) B i − 1 H^*_i=\frac{A_i}{B_i} \\ A_i= \eta G_i \odot F_i^* + (1-\eta)A_{i-1}\\ B_i= \eta F_i \odot F_i^* + (1-\eta)B_{i-1} Hi=BiAiAi=ηGiFi+(1η)Ai1Bi=ηFiFi+(1η)Bi1
其中, η \eta η表示学习率,其值越大,则对当前帧保留的信息越多,对历史信息保留的越少。文中给出 η \eta η的最佳值为0.125。

峰旁比

衡量峰值强度的一个简单方法为peak to sidelobe ratio(PSR),即峰值旁瓣比。

The Peak-to-Sidelobe Ratio (PSR), which measures the strength of a correlation peak, can be used to detect occlusions or tracking failure, to stop the online update, and to reacquire the track if the object reappears with a similar appearance.

这篇大概讲了一下,但还是不是很明白到底什么是Peak-to-Sidelobe Ratio

还是看原文,PSR的定义为:
P S R = g m a x − μ s σ s PSR=\frac{g_{max}-\mu_s}{\sigma_s} PSR=σsgmaxμs
其中,旁瓣是窗口中除了峰值之外的周围11 × 11区域的像素, g m a x g_{max} gmax为滤波结果的峰值, μ s \mu_s μs σ s \sigma_s σs分别为旁瓣区域的平均值和标准差。

对于MOSSE来说,PSR值在20-60时代表峰值较稳定,当其值在7左右时代表跟踪失败或者发生遮挡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1380338.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis命令总结

1、启动Redis服务,登录Redis # 开启redis服务 redis-server redis配置文件路径例子: redis-server redis.windows.conf# 连接redis 【无密码】 redis-cli# 连接redis【有密码】 # 1 先连接再输入密码 redis-cli auth 密码 2、连接时输入 IP址、端口号、…

GC6153步进电机驱动芯片——低噪声、低振动,应用于摄像机,机器人等产品上

GC6153是双通道5V低压步进电机驱动器具有低噪声、低振动的特点,特别适用于相机的变焦和对焦系统,万向节,摇头机和其他精密,低噪声扫描隧道显微镜控制系统。该芯片为每个通道集成了256微步驱动器通过SPI和I2C接口,用户可…

【模型评估 07】过拟合与欠拟合

在模型评估与调整的过程中,我们往往会遇到“过拟合”或“欠拟合”的情况。如何有效地识别“过拟合”和“欠拟合”现象,并有针对性地进行模型调整,是不断改进机器学习模型的关键。特别是在实际项目中,采用多种方法、从多个角度降低…

USB_CH340一键下载电路

目录标题 1、CH340概述2、CH340芯片特点3、CH340系列芯片4、CH340引脚定义5、CH340传统的一键下载电路5.1、Stm32串口下载5.2、ESP32串口下载5.3、注意 6、免外围电路下载 1、CH340概述 CH340是一个USB总线的转接芯片,可实现USB转串口或者USB转打印口。 2、CH340芯…

高级分布式系统-第7讲 分布式系统的时钟同步

顺序的分类 在分布式系统中, 顺序关系主要分为以下三类:时间顺序: 事件在时间轴上发生的先后关系。 无限时刻集组成有向时间轴, 时间顺序是通过时刻的顺序体现的。 因果顺序: 如果事件e1是事件e2发生的原因&#xf…

Android Studio代码联想不区分大小写的方法

Android Studio默认的代码联想是要区分大小写的 例如Bitmap,输入bit后并不会有提示 为了让其不区分大小写,可以在 File --> Setting 中进行设置 依次选择 Editor --> General --> Code Completion ,将 Match case取消勾选即可 这个…

半小时实现GPT纯血鸿蒙版

仅需半小时,即可实现纯血鸿蒙版本的ChatGPT! 废话少说,先看效果图: 如上图所示,这个小Demo实现了AI智能问答。靠右加粗的文本是用户点击底部提交按钮后出现的;后面靠左对齐的普通文本是来自AI的回答内容。当…

Spark原理——Shuffle 过程

Shuffle 过程 Shuffle过程的组件结构 从整体视角上来看, Shuffle 发生在两个 Stage 之间, 一个 Stage 把数据计算好, 整理好, 等待另外一个 Stage 来拉取 放大视角, 会发现, 其实 Shuffle 发生在 Task 之间, 一个 Task 把数据整理好, 等待 Reducer 端的 Task 来拉取 如果更细…

【数据集处理】FFHQ如何进行人脸对齐,Aligned and cropped images at 1024×1024

什么是人脸对齐? 人脸对齐是一种图像处理技术,旨在将图像中的人脸部分对齐到一个标准位置或形状。在许多情况下,这通常涉及将眼睛、鼻子和嘴巴等关键点对齐到特定的位置。通过这种方式,所有的人脸图像可以有一个一致的方向和尺寸…

josef约瑟 中间继电器 HJDZ-E440额定电压:AC220V 卡轨安装

HJDZ-静态中间继电器 系列型号: HJDZ-A200静态中间继电器;HJDZ-A110静态中间继电器; HJDZ-A002静态中间继电器;HJDZ-A004静态中间继电器; HJDZ-E112静态中间继电器;HJDZ-E112L静态中间继电器&#xff1…

opencv(C++)基础用法

文章目录 前言一、opencv (C)图片基本操作1.1 读取图片并显示1.2 颜色转换1.3 图像filtering1.4 形状调整1.5 绘制 二、读取视频文件并显示三、RTSP 视频流四. 人脸检测总结 前言 学习笔记 一、opencv (C)图片基本操作 1.1 读取图片并显示 #include "opencv2/opencv.hp…

操作系统-操作系统的概念和功能

文章目录 大家熟悉的操作系统总览操作系统的概念(定义)操作系统的功能和目标-作为系统资源的管理者操作系统的功能和目标-向上层提供方便易用的服务图形化用户接口联机命令接口脱机命令接口程序接口小结 操作系统的功能和目标-作为最解决硬件的层次小结 …

Go-安装与基础语法

TOC 1. Go 安装与环境变量 1.1 下载 需要从Go语言的官方网站下载适合你操作系统的Go语言安装包。Go语言支持多种操作系统,包括Windows、Linux和Mac OS。 对于Windows用户,下载.msi文件,然后双击该文件,按照提示进行安装即可。…

【电路电子学】7天速通攻略+笔记

7天是 看视频记笔记刷题的总时长,时间紧迫的同学可以看情况进行缩减。个人认为做题,尤其是解析齐全的题最重要! 我校所用教材 《电路与电子学基础》唐胜安 复习总流程 所用材料(都可自行找到免费资源) 视频知识点讲…

如何用Python虚拟环境virtualenv轻松管理多个项目?你想要的都在这里!

目录 Python 虚拟环境安装 Python 虚拟环境能够实现多环境隔离。 虚拟环境的应用场景 例如,在一台电脑上开发涉及多种技术栈的项目时,不同技术底层依赖可能存在冲突。这种情况下,解决了某个项目的问题可能会影响到其他项目的运行&#xff0c…

数据洞察力,驱动企业财务变革

我们不得不面对一个现实,就是数据量的剧增。加上大部分企业并不愿意删除历史数据,以防未来预测分析时需要,这造成数据就像一个雪球,越滚越大。然而,过多的数据和数据不足一样会成为企业发展和理解分析的障碍。从海量数…

动态规划part04 416. 分割等和子集

01背包问题 二维 代码随想录 视频讲解:带你学透0-1背包问题!| 关于背包问题,你不清楚的地方,这里都讲了!| 动态规划经典问题 | 数据结构与算法_哔哩哔哩_bilibili 01背包问题 一维 代码随想录 视频讲解:带…

08、Kafka ------ 消息存储相关的配置-->消息过期时间设置、查看主题下的消息存活时间等配置

目录 消息存储相关的配置★ 消息的存储介绍★ 消息过期时间及处理方式演示:log.cleanup.policy 属性配置 ★ 修改指定主题的消息保存时间演示:将 test2 主题下的消息的保存时间设为10个小时1、先查看test2主题下的配置2、然后设置消息的保存时间3、然后再…

2024/1/14周报

文章目录 摘要Abstract文献阅读题目问题与创新方法A.CEMDAN方法B.LSTM网络C. CEEMDAN-LSTM模型 实验过程数据集与数据预处理参数设置评价指标和参数 实验结果 深度学习GRUGRU前向传播GRU的训练过程 总结 摘要 本周阅读了一篇基于CEEMDAN-LSTM的金融时间序列预测模型的文章&…

Spark---RDD(Key-Value类型转换算子)

文章目录 1.RDD Key-Value类型1.1 partitionBy1.2 reduceByKey1.3 groupByKeyreduceByKey和groupByKey的区别分区间和分区内 1.4 aggregateByKey获取相同key的value的平均值 1.5 foldByKey1.6 combineByKey1.7 sortByKey1.8 join1.9 leftOuterJoin1.10 cogroup 1.RDD Key-Value…