当前位置: 首页 > news >正文

单目标追踪——【相关滤波】C-COT原理与ECO基于C-COT的改进

目录

  • C-COT:Continuous Convolution Operator Tracker
    • 文章侧重点
    • 连续卷积算子
    • 目标追踪框架
      • 初始化过滤器:
      • 追踪流程
  • ECO
    • 文章侧重点
      • 因式卷积因子
      • 生成采样空间模型
      • 模型更新策略

论文链接:C-COT:Beyond Correlation Filters: Learning Continuous
Convolution Operators for Visual Tracking + ECO: Efficient Convolution Operators for Tracking 提取码:qqzd
代码:python实现的eco——pytracking
参考博客:C-COT – 超越相关滤波:学习连续卷积算子(Continuous Convolution Operators)
https://zhuanlan.zhihu.com/p/67819411

C-COT:Continuous Convolution Operator Tracker

文章侧重点

  1. 因为梯度特征(HOG)、颜色空间的直方图、浅层卷积网络的深度特征是不同分辨率的特征,传统的KCF或者DCF算法无法将不同分辨率的特征通道进行融合。C-COT则基于深度特征+手工特征,提出连续卷积算子,在连续域实现多个分辨率特征的融合。
  2. C-COT的主要贡献在于提出一个理论框架,可以在连续空间域中学习一个具有判别力的卷积算子。文中重点阐述了理论框架与公式推导。
  3. 该框架与传统的相关滤波算法对比的优势在于:可以融合多分辨率(multi-resolution)的特征图【其实就是针对不同分辨率的特征训练不同的卷积滤波器,再在score map层面上加起来】;可以进行准确的像素定位,因为文中还将C-COT方法应用到特征点追踪(feature point tracking)benchmark上。

连续卷积算子

  • 连续卷积算子的实现,实际是针对一维特征域
    • 首先,利用三次插值核函数将离散的特征插值得到连续的特征;
    • 将真值 yyy 映射为以目标估计为中心的高斯分布(为了能在连续域做相关性运算)
    • 在连续域中训练一个连续卷积算子(也可以看作卷积滤波器),将连续域中的目标特征映射为目标置信函数(即对应特征是追踪目标的概率值)。
  • 针对高维的特征
    • 分别训练不同的卷积滤波器
    • 分别与连续域中的目标特征作卷积操作,得到不同分辨率下的score map
    • 将这些score map按照对应的像素点加起来,得到最终的目标特征对应的置信函数,我们通过寻找图片区域中的最大置信分数来定位目标。

目标追踪框架

初始化过滤器:

即,利用待追踪序列的第一帧的信息,确定要追踪的目标,并用已知的追踪目标的特征初始化(训练)卷积滤波器的参数

  • 处理思路是首先提取第一帧中的特征XXX要通过在傅里叶域最小化泛函得到最佳的卷积滤波器的参数:利用公式5计算置信分数函数 sss 的傅里叶系数。
  • 处理步骤:
    • 首先利用离散的傅里叶变换得到一个粗略的估计——即网格搜索方法:在空间的离散点处估计得分函数,找到最大值;
    • 最大值作为傅里叶级数展开的初始值,进行5次标准牛顿迭代,得到粗略的卷积滤波器的参数估计。

追踪流程

  1. 从预训练好的深度网络中提取出多分辨率特征图;
  2. 在每一帧采样一个训练样本xjx_jxj,采样的方法是以目标为中心,裁剪出目标边界框面积525^252倍大的图片区域。越靠近当前帧的采样的训练样本的权重越大。最大的保存400帧历史帧。
  3. 应用多尺度估计,5个尺度,相对尺度因子1.02。最大化网格搜索后,进行 5 次牛顿迭代;
  4. 求解正规方程以训练滤波器,采用共轭梯度法进行迭代,在第一帧中,使用100次迭代找到滤波器系数 的初始估计,随后的帧中,用当前的滤波器初始化CG(共轭梯度),每帧五次迭代就足够。

ECO

文章侧重点

  1. 文章针对当前相关滤波追踪器存在的问题做如下总结:

    • 模型参数量过大使得在线更新容易过拟合。 高维特征,尤其是深度特征使得目标外观模型的参数急剧上升。例如上文的C-COT连续更新的参数多达800,000个,同时在线更新的采样样本缺乏多样本,容易引起模型对目标的某一位置过拟合,尤其是当目标出现尺度变化、变形等问题时,根据历史帧预测目标框裁剪的样本本来就可能不精确。
    • 在线更新的训练样本缺乏丰富的样本。由于当前的在线相关滤波追踪模型都有一个迭代优化算法来实现模型的在线更新以应对不同的挑战。那么数据对于更新的重要性不言而喻。
    • 当前的模型的连续更新策略是逐帧更新,使得模型的鲁棒性降低了。 由于新出现的Siamese网络是不需要在线更新的,但仍保持了较高的追踪精度。但是我认为这不是在线更新造成的,主要还是采样样本的准确度问题,因为历史帧中采样的更新样本是根据历史帧中预测的目标框为中心裁剪出来的。所以当历史帧样本的不准确性使得当前的模型受到了影响,过拟合到目标的局部。设想一个问题,如果历史帧中用于在线更新的样本如groundtruth般准确,那么在线更新会达到较好的效果。
  2. 文章针对上述问题,基于C-COT做如下改进:

    • 提出因式分解卷积算子,对C-COT中的卷积滤波器进行缩减,从而减少模型本身的参数。(对于512维的深度特征+512个卷积滤波器,可以将512个卷积滤波器减到64个,从而剔除了一些不重要的深度特征,降低模型参数。)
    • 一个为在线更新设计的更加简洁的采样分布的生成模型,降低内存和时间复杂度;增加样本多样性。
    • 保守模型更新策略,即降低更新频率,增大更新样本的多样性,继而增强鲁棒性,降低复杂性。

因式卷积因子

  • 出发点: 出于对C-COT中卷积滤波器的观察,每个维度的特征对应一个滤波器;然而一部分训练好的卷积滤波器包含了微乎其微的能量,也就是说对最后目标定位的贡献很小,但它们仍消耗了训练时间和内存。

  • 改进思路: 故采用类似主变量降维的思想,以深度特征为例,一共512维特征对应512个卷积滤波器,而因式卷积的思路就是用64个主要的卷积滤波器,利用一个线性对应矩阵 PPP , 线性组合之后可以还原这512个卷积滤波器的作用。
    在这里插入图片描述

  • 优点: 线性矩阵PPP 可以在第一帧初始化。这样的设计使得内存开销大大降低,并且降低了在线更新的计算复杂度。

生成采样空间模型

  • 出发点: 当前的相关滤波追踪器C-COT、SRDCF等的在线更新策略是在每一帧都添加一个训练样本,然后为这些历史帧赋予一个衰减的权重(离当前帧近的的帧权重大,离当前帧远的帧权重小)。然而这样的采样空间存在大量冗余的样本,因为相邻帧之间的外观大致相同。
  • 改进思路:提出一个样本集合的概率生成模型。基于样本特征映射xxx和相应输出置信度分数yyy

模型更新策略

  • 出发点:在C-COT中,这意味着在每个新样本添加后,通过迭代求解正态方程进行优化。基于迭代优化的DCF方法利用了损失函数在帧之间逐渐变化的特点。因此,过滤器的当前估计提供了迭代搜索的良好初始化。不过,在每一帧中更新过滤器会对计算负载产生严重影响。

  • 改进思路:将训练样本建模为高斯混合模型,避免逐帧更新,只需在每个NsN_sNs帧中启动优化过程来更新过滤器。参数NsN_sNs决定过滤器更新的频率,其中Ns=1N_s= 1Ns=1 对应于在每一帧中优化过滤器,就像在标准DCF方法中一样。在每个NsN_sNs帧中,我们执行固定数量的NCGN_CGNCG共轭梯度迭代来优化模型。因此,每帧CG迭代的平均次数减少到NCG/NsN_CG/N_sNCG/Ns
    在这里插入图片描述

  • 优点:模型更新频率降低到NsN_sNs,当然节约了时间,并且可以避免模型的漂移问题,一定程度上改进效果,但是也不可以把Ns取得太大,否则会使得模型跟不上目标的变化。

相关文章:

单目标追踪——【相关滤波】C-COT原理与ECO基于C-COT的改进

目录C-COT:Continuous Convolution Operator Tracker文章侧重点连续卷积算子目标追踪框架初始化过滤器:追踪流程ECO文章侧重点因式卷积因子生成采样空间模型模型更新策略论文链接:C-COT:Beyond Correlation Filters: Learning Con…...

C++中栈是如何实现,以及常用的栈函数都有哪些

什么是栈? 栈 是一种特殊的数据结构,它是一种按照 Last-In-First-Out (LIFO) 访问模式存储和访问数据的特殊结构。 换句话说,栈中的最后一个元素将成为最先出栈的元素,这也意味着新增加的元素在栈的顶部,而出栈的元素…...

我就不信你还不懂HashSet/HashMap的底层原理

💥注💥 💗阅读本博客需备的前置知识如下💗 🌟数据结构常识🌟👉1️⃣八种数据结构快速扫盲🌟Java集合常识🌟👉2️⃣Java单列集合扫盲 ⭐️本博客知识点收录于…...

Qt中调用gtest进行单元测试及生成覆盖率报告

一.环境配置 googletest地址:https://github.com/google/googletest 我下载的是1.12.1,这是最后一个支持C++11的版本。 首先编译gtest,在windows上的编译方式和编译gRPC一模一样,详见Qt中调用gRPC,编译完了会生成几个静态库,如下图所示 本文主要用到了libgtest.a 下载ms…...

ChatGPT vs Bard 背后的技术对比分析和未来发展趋势

ChatGPT vs Bard 背后的技术对比分析和未来发展趋势 目录 ChatGPT vs Bard 背后的技术对比分析和未来发展趋势...

搜索引擎的设计与实现

技术:Java、JSP等摘要:随着互联网的快速发展,网络上的数据也随着爆炸式地增长。如何最快速筛选出对我们有用的信息成了主要问题。搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后&…...

动态规划之买卖股票问题

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓动态规划之买卖股票问题 ,做好准备了么,那么开始吧。 🌲🌲🐴🐴 动态规划算法本质上就是穷举…...

MySQL学习笔记之子查询

自连接方式 自连接就是表A连接表A,通过where关键字实现,比如查询工资比Abel高的员工信息: SELECTe2.last_name,e2.salary FROMemployees e1,employees e2 WHEREe1.last_name "Abel" AND e2.salary > e1.salary;子查询 亦称为…...

HCIP-5OSPF域内域间外部路由学习笔记

1、OSPF区域 每个区域都维护一个独立的LSDB。 Area 0是骨干区域,其他区域都必须与此区域相连。 划分OSPF区域可以缩小路由器的LSDB规模,减少网络流量。 区域内的详细拓扑信息不向其他区域发送,区域间传递的是抽象的路由信息,而不…...

【编程实践】简单是好软件的关键:Simplicity is key to good software

Simplicity is key to good software 简单是好软件的关键 目录 Simplicity is key to good software简单是好软件的关键 Complexity is tempting. 复杂性很诱人。 The smallest way to create value创造价值的最小方法 Simple 简单的 Complexity is tempting. 复杂性很诱人…...

Python|贪心|数组|二分查找|贪心|数学|树|二叉搜索树|在排序数组中查找元素的第一个和最后一个位置|计数质数 |将有序数组转换为二叉搜索树

1、在排序数组中查找元素的第一个和最后一个位置(数组,二分查找) 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 […...

操作系统——15.FCFS、SJF、HRRN调度算法

这节我们来看一下进程调度的FCFS、SJF、HRRN调度算法 目录 1.概述 2.先来先服务算法(FCFS,First Come First Serve) 3.短作业优先算法(SJF,Shortest Job First) 4.高响应比优先算法(HRRN&…...

如何防止用户打开浏览器开发者工具?

大家好,我是前端西瓜哥。作为一名前端开发,在浏览一些网页时,有时会在意一些交互效果的实现,会打开开发者工具查看源码实现。 但有些网站做了防窥探处理,打开开发者工具后,会无法再正常进行网页的操作。 …...

C语言-基础了解-12-C数组

C数组 一、C数组 C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。 数组的声明并不是声明一个个单独的变量,比如 runoob0、runoob1、…、runoo…...

RocksDB 架构

文章目录1、RocksDB 摘要1.1、RocksDB 特点1.2、基本接口1.3、编译2、LSM - Tree2.1、Memtable2.2、WAL2.3、SST2.4、BlockCache3、读写流程3.1、读取流程3.2、写入流程4、LSM-Tree 放大问题4.1、放大问题4.2、compactionRocksDB 是 Facebook 针对高性能磁盘开发开源的嵌入式持…...

MVVM和MVC的区别

首先,MVVM 和 MVC 都是一种设计模式MVCM(Model): 模型层。 用于处理应用程序数据逻辑的部分,模型对象负责在数据库中存取数据V (View): 视图层。 处理数据显示的部分 ,视…...

c++11 标准模板(STL)(std::unordered_map)(三)

定义于头文件 <unordered_map> template< class Key, class T, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator< std::pair<const Key, T> > > class unordered…...

OpenGL环境配置

方法一&#xff1a;1.下载GLFW点击GLFW跳转2.下载后解压3.下载glad&#xff0c;解压后4.用vs2019新建Cmake项目5.在新建的Cmake项目下建立depend文件夹在depend里放置我们下载解压的glad和glfw-3.3.8.bin.WIN646.项目中可以看到我们加进来的文件7.编写我们项目的CMakeLists.txt…...

SpringCloud之 Eureka注册中心

文章目录Eureka注册中心一、服务注册与发现1.1 依赖导入①父工程 SpringCloud 版本管理②Eureka 服务端依赖③Eureka 客户端依赖1.2 服务注册①创建 Eureka 服务端的主类②设置 Eureka 服务端的配置文件③设置 Eureka 客户端的配置文件④关闭自我保护机制1.3 服务发现①远程调用…...

Linux入门篇-用户管理

简介 linux基本的用户管理。 ⽤户的管理(切换到root) ⽤户的添加&#xff08;useradd&#xff09; ⽤户的删除&#xff08;userdel&#xff09; ⽤户的修改&#xff08;usermod&#xff09; ⽤户的查看&#xff08;查看/etc/passwd&#xff09; id⽤户组的管理(切换到root) …...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...