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

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.mzph.cn/news/618895.shtml

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

相关文章

聊天机器人之接入智能回复(四)

智能回复实现思路 目前市场上有许多大语言模型,他能帮助我们更好的解决问题或者陪伴我们聊天。最先兴起的就是OpenAI的ChatGPT,但是我们国内使用不太方便。所以这里我使用咱们国内的平台做一个简单展示。 首先这里咱们使用的是讯飞星火认知大模型&…

Bean作用域及生命周期

关于Bean对象,在将其存储到spring中以后,在使用或读取该Bean对象时,如果该对象是公有的,难免就会出现被一方修改,从而影响另外一方读取到的对象准确性的情况。因此了解Bean的作用域和生命周期就是十分必要的了。 首先…

Fedora Linux 中安装 nginx

Fedora 35 中安装 nginx 的方法非常简单。 运行下面的命令: sudo dnf install nginx 在提示你需要确认的地方,输入 y 后回车即可。 开机自动启动 如果你希望在你的操作系统重启的时候自动启动 nginx,请输入下面的命令: syst…

【昕宝爸爸小模块】如何让Java的线程池顺序执行任务

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你👍点赞、🗂️收藏、加❤️关注哦。 本文章CSDN首发,欢迎转载,要注明出处哦! 先感谢优秀的你能认真的看完本文&…

文本翻译GUI程序,实现简单的英汉互译

项目地址:mendianyu/txtTranslate: 文本翻译GUI程序,实现简单的英汉互译 (github.com) 文本翻译GUI程序,实现简单的英汉互译 项目结构 三个java文件加一个pom文件 项目运行效果 语言可选择en(英语) zh(汉语) auto(自动识别,仅源语…

序章 熟悉战场篇—了解vue的基本操作

了解vue 的基本目录: dist 是打包后存放的目录(后续可以改)node_modules 是依赖包public 是静态index页面src 是存放文件的目录assets 是存放静态资源的目录components 是存放组件的目录views 是存放页面文件的目录(没有views 自己新建一个)A…

使用FreeBASIC设计8051单片机汇编编译器

在STC论坛上看到有人用C语言实现8051汇编编译器(源码),好奇下,试着用FB写了一下。 基本原理就是通过分析汇编文件然后转换为机器码。以下是51汇编与机器码对应的表格(数据来自网络,如果发现有误请联系QQ149…

【InternLM 大模型实战】第四课

XTuner 大模型单卡低成本微调实战 FINETUNE简介指令跟随微调增量预训练微调LoRA & QLoRA XTuner简介功能亮点适配多种生态适配多种硬件 8GB 显卡玩转LLMFlash AttentionDeepSpeed ZeRO 动手实战环节环境配置微调准备配置文件模型下载数据集下载修改配置文件开始微调将得到的…

HTML标签(一)

目录 HTML语法规范 基本语法概述 标签关系 HTML基本结构标签 第一个HTML网页 开发工具 VSCode的使用: VScode工具生成骨架标签新增代码 文档类型声明标签 lang语言种类 字符集 总结 HTML常用标签 标签语义 标题标签 段落标签 换行标签 文本格式化…

unity urp 视差卡牌

总体效果大概四层,从后往前排序为:卡背、背景、画像、边框 首先卡背比较简单,只要判断如果网格的背面就直接采样卡背图片展示即可 资源准备: 然后是背景,网上找到一张这样的图。 但他还不符合要求,我们的…

Tomcat源码解析(一): Tomcat整体架构

Tomcat源码系列文章 Tomcat源码解析(一): Tomcat整体架构 目录 一、Tomcat整体架构1、Tomcat两个核心组件功能2、Tomcat支持的多种I/O模型和应用层协议 二、Connector连接器1、连接器功能汇总2、ProtocolHandler组件2.1、Endpoint2.2、Processor 3、Adapter组件 三…

好大夫问诊数据爬虫记录

好大夫问诊数据爬虫入库字段记录 获取医生的病程列表 uid Column(Integer, primary_keyTrue, autoincrementTrue) gender Column(String(10)) # 性别 age Column(Integer) # 年龄 # 总交流次数 total_communication_times Column(Integer) # 医生回复次数 doctor_reply_t…

uniapp 编译后文字乱码的解决方案

问题: 新建的页面中编写代码,其中数字和图片都可以正常显示,只有中文编译后展示乱码 页面展示也是乱码 解决方案: 打开HuilderX编辑器的【文件】- 【以指定编码重新打开】- 【选择UTF-8】 然后重新编译就可以啦~ 希望可以帮到你啊~

2023极客大挑战web小记

拿到题目提示post传参还以为是道签到题 刚开始直接把自己极客大挑战的username以及password怼上去,但是不对。看看F12,有提示。 当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在&#xff0c…

部署Tomcat及其负载均衡

Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说,Tomcat虽然和Apache或者Nginx这些Web服务器一样&#xf…

CSS 下载进度条

<template><view class=btn>下载中</view></template><script></script><style>/* 设置整个页面的样式 */body {width: 100vw; /* 页面宽度为视口宽度 */background: #000000; /* 背景颜色为白色 */display: flex; /* 使用 flex…

linux GDB and GDB Sever

概念&#xff1a; GDB&#xff08;GNU Debugger&#xff09;是一个用于调试程序的强大工具。它是GNU项目的一部分&#xff0c;支持多种编程语言&#xff0c;包括C、C等。GDB 提供了一组命令和功能&#xff0c;允许跟踪检查程序的内部状态&#xff0c;跟踪代码的执行过程&#…

MySQL题目示例

文章目录 1.题目示例 1.题目示例 09&#xff09;查询学过「张三」老师授课的同学的信息 SELECT s.*, c.cname, t.tname, sc.score FROM t_mysql_teacher t, t_mysql_course c, t_mysql_student s, t_mysql_score sc WHERE t.tid c.tid AND c.cid sc.cid AND sc.sid s.sid …

一种具有轨迹优化的无人驾驶车实时运动规划器 论文阅读

论文题目&#xff1a;A Real-Time Motion Planner with Trajectory Optimization for Autonomous Vehicles Abstract 本文的实时规划器首先将空间离散化&#xff0c;然后基于一组成本函数搜索出最佳轨迹。迭代优化所得到的轨迹的Path和Speed。post-optimization计算复杂度低&…

TF-IDF(Term Frequency-Inverse Document Frequency)算法详解

目录 概述 术语解释 词频&#xff08;Term Frequency&#xff09; 文档频率&#xff08;Document Frequency&#xff09; 倒排文档频率&#xff08;Inverse Document Frequency&#xff09; 计算&#xff08;Computation&#xff09; 代码语法 代码展示 安装相关包 测…