Accurate Scale Estimation for Robust Visual Tracking 学习笔记:

2023-11-18

Accurate Scale Estimation for Robust Visual Tracking DSST学习笔记:

尺度变化是跟踪中比较基础和常见的问题,目标变小,跟踪器就会吸收大量没有用的背景信息,目标过大,跟踪器就会丢失很多特征。

Accurate Scale Estimation for Robust Visual Tracking

DSST (Discriminative Scale Space Tracker)是VOT2014年的冠军。

作者的主页是:http://www.cvl.isy.liu.se/en/research/objrec/visualtracking/

DSST算法是基于MOSSE
correlation filter做的改进和拓展,实现了快速且准确的目标尺度评估,原程序有详细的注释。

首先是算法的理解:

基于mosse tracker的改进,原理:相关滤波原理在: https://mp.csdn.net/mdeditor/88087940#

本文的改进:

l是维数,位置滤波器用的28,尺寸滤波器用的是33,h是改进的相关滤波器,是训练或者是前一帧的图片,是通过滤波器输出的图片,也就是后一帧的图片。λ是调整参数需要大于一,用以控制影响正则化的影响。作者建立了一个改进的模型:(我类似mosse模型进行改写,便于自己理解)
在这里插入图片描述
FFT之后求偏导,与MOSSE类似,化简得到:
在这里插入图片描述
G是傅里叶变换后的,F是傅里叶变换后的,再求解的过程中,分别计算分子和分母:
在这里插入图片描述
F是逆傅里叶变换,A分子,B分母,z是计算出来的特征图,通过改变z的值从而改变y的值,当y最大时,就是相关滤波器最适配的时候。
在这里插入图片描述
η是学习速率,t表示第几帧。加上划线表示共轭。我的理解,从第一帧时,分子和分母都没有前一项,很好得到初始分子分母。

算法流程:

输入:当前的图片;
上一帧的位置和尺度;
当前的位置模型和尺度模型;

位置更新:参照上一帧的位置,在当前帧提取2倍大小的样本,利用公式@,寻找令y最大的位置;

尺度更新:选择33种不同尺度的样本,利用位置滤波器得到的中心位置,结合公式@,对比寻找出最接近的尺度;

@
在这里插入图片描述

输出:目标的估计位置和尺度
更新位置模型和尺度模型;

程序中的关键点:

1、运行环境:matlab2017a,同时也需要高版本的opencv,对图片进行放大裁剪等处理;

2、数据集:OTB100,将图片集放置于sequences目录下,在run_tracker.m中调整第八行的输入位置,同时在load_video.m中正确匹配图片格式。在函数choose_video.m中,已经将图片地址整合完毕,ground_truth是人工标注的坐标和尺寸,frames文件里是图片的总数。

3、参数及其代表的意义:

位置滤波器输出差设定为1/16内;尺寸滤波器输出标准误差1/2内;调整参数(λ)0.01

跟踪器学习速率(η)为0.025;论文中的比例数(S)为33,和比例因子(a)为1.0;最大像素512。

4、初始化阶段:在dsst.m函数中:

初始化的作用目前的理解就是提取了第一帧的信息,建立输入和输出的滤波器模型。

已知初始目标框的为

再建立模型,一维和二维的高斯公式的形式,分别对应的是位置滤波器和尺寸滤波器

作者首先获取不同大小的分块,获取过程如下:

[rs, cs] = ndgrid((1:sz(1)) - floor(sz(1)/2), (1:sz(2)) - floor(sz(2)/2));

y = exp(-0.5 *(((rs.^2 + cs.^2) / output_sigma^2)));

ss = (1:nScales) - ceil(nScales/2);

ys = exp(-0.5 *(ss.^2) / scale_sigma^2);

5、提取特征的函数:

get_translation_simple.m中获得用于计算最佳位置时,所需的图片的HOG特征,以及get_scale_sample.m中可以获得求解最佳比例时的图片的特征,分成33个部分的HOG特征。两个函数提取的HOG特征是不一样的。

6、求解最佳位置,更新位置滤波器;

%得到的是样本的HOG特征图,并且用hann窗口减少图像边缘频率对FFT变换的影响,之后用快速傅里叶变换。

xt = get_translation_sample(im, pos, sz,currentScaleFactor, cos_window);

xtf = fft2(xt);

%这里是找到新到位置response就是公式里的y,用find函数找坐标里能使y最大的值。

response = real(ifft2(sum(hf_num .* xtf, 3)./ (hf_den + lambda)));

[row, col] = find(response == max(response( : )),1);

% 更新位置可以得到坐标和尺寸,更新位置

pos = pos + round((-sz/2 + [row, col]) *currentScaleFactor);

positions(frame,:) = [pos target_sz];

在提取位置特征的时候,先将输入图片Im的尺寸整合成固定值,然后选取一个二倍于跟踪框的图片,一共提取了32个sz(1)*sz(2)大小的hog特征,在用先前生成的cos_window与这32个特征图分别进行点乘操作,这样做的目的是为了减少图像边缘对FFT变换的影响。xt就是经过加窗处理后的hog特征图。其一共有28个hog特征。

7、求解最佳尺度,更新尺度滤波器的参数;

%提取样本的HOG特征

xs=get_scale_sample(im, pos,
base_target_sz, currentScaleFactor * scaleFactors, scale_window,scale_model_sz);

% 傅里叶变换

xsf = fft(xs,[ ],2);

scale_response = real(ifft(sum(sf_num .*xsf, 1) ./ (sf_den + lambda)));

% 同理,用find函数寻找可以使,滤波器最佳的比例值

recovered_scale = find(scale_response == max(scale_response( : )), 1);

%更新比例因子

currentScaleFactor = currentScaleFactor *scaleFactors(recovered_scale);

if currentScaleFactor < min_scale_factor

currentScaleFactor = min_scale_factor;

elseif currentScaleFactor > max_scale_factor

currentScaleFactor = max_scale_factor;

end

每个样本都要重新调整尺寸,分别提取31维fhog特征,每个样本的所有fhog再

串联成一个特征向量构成33层金字塔特征,乘以一维hann窗后作为输入F

用于尺寸相关滤波器。

8、更新模型:

% 位置滤波器
xl=get_translation_sample(im, pos, sz,
currentScaleFactor, cos_window);
xlf = fft2(xl);
new_hf_num = bsxfun(@times, yf, conj(xlf));
new_hf_den = sum(xlf .* conj(xlf), 3);

%尺度滤波器

xs=get_scale_sample(im,pos,base_target_sz,currentScaleFactor*scaleFactors,
scale_window, scale_model_sz);

xsf = fft(xs,[ ],2);

new_sf_num = bsxfun(@times, ysf, conj(xsf));
new_sf_den = sum(xsf .* conj(xsf), 1);

if frame == 1
hf_den = new_hf_den;
hf_num= new_hf_num;
sf_den = new_sf_den;
sf_num= new_sf_num;
else
hf_den= (1 - learning_rate) * hf_den + learning_rate * new_hf_den;
hf_num= (1 - learning_rate) * hf_num + learning_rate * new_hf_num;
sf_den= (1 - learning_rate) * sf_den + learning_rate * new_sf_den;
sf_num= (1 - learning_rate) * sf_num + learning_rate * new_sf_num;
end

对应公式里的就是,hf_den就是位置滤波器中的分子A,hf_num就是位置滤波器中的分母B,sf_den就是尺寸滤波器中的分子A,sf_num就是尺寸滤波器中的分母B。考虑到第一帧的图片没有公式里的前一项,所以分子hf_den = new_hf_den,但是求的是第一帧之后的,则需要先计算公式里后一项的那一长串的结果,存储在new_hf_den中,对应其他分子分母,这就是对应公式的理解。

9、关于使用HOG特征

本文只使用了这一种特征,借鉴了另一篇大佬的代码选择效果更好的分区域求HOG特征。来自:fhog.m函数,是由Felzenszwalb论文《Discriminatively trained deformable part models》里提取HOG的代码整合,主要函数是:GradientMag()和GradientHist(),由C++编写。计算出的HOG特征为3*nOrients+5维。文章选取得是2+2+4+1个通道,nOrients=9因此每个单元上是32维特征向量。这种取HOG特征的方法,即为fhog,已被证明实现了优于原始性能。输入图片得色彩灰度数组和切割框的参数,得到的是33个计算后的HOG特征。

HOG是一个局部特征,如果对一大幅图片直接提取特征,是得不到好的效果,所以把图像分割成很多区块,然后对每个区块计算HOG特征,这也包含了几何(位置)特性。

2)提取当前尺寸和位置的特征图谱;

10、使用hann窗是在FFT中为了降低图像边缘的影响,而引入的。

cos_window = single(hann(sz(1)) * hann(sz(2))’);

这里需要使用的是一个2维的窗函数;hann(x)表示窗分为多少个精度。

11、绘制跟踪框,之后用已经经过人工标注的每一帧数据作比较,再计算跟踪时的fps重叠率和误差率。(当年人工标记测试序列的时候还真是个体力活,不过有了测试序列之后,做算法的比较确实是一大进步)

Dsst.m函数内 %visualization
之后的部分。

自己的总结:DSST尺度滤波器的应用对于解决目标跟踪中的尺度变化很有帮助。同时期有个更早的相关滤波算法SAMF,在之后几年的比赛中互有胜负,都是对于尺度变换有良好解决的算法,结合资料,SAMF只有7个尺度比较粗犷,而DSST有33个尺度比较精细准确,并且DSST先检测平移再检测尺度,是分步最优,而SAMF是平移尺度一起检测,是平移和尺度同时最优,另外就是使用滤波器的数量不同,计算次数也差的很多,所以是一起效果好还是分开效果好再叠加好,我想再去了解一下。。其实算法理解了还是容易的,还有就是模型怎么建立的就让我觉得很神奇了。

补充的想法:

1、遇到目标脱离边界的情况,有没有比较好的表现?

2、除了HOG特征,使用别的数据作为跟踪的特征有没有更好的表现?

3、现在学习的跟踪用的视频清晰度都太低了,个人认为实用价值有限,毕竟如果要做会议室或者无人驾驶,还是要解析高清晰度的,不过低清晰度的视频有个好处就是,计算速度会比较快,实际使用时,会不会是两种清晰度的相互结合使用呢。

4、在机器学习应用到跟踪领域之前,目标跟踪的问题,就像是一个数学矩阵找另外一个数学矩阵中重叠部分最多的数学题,接下来这个阶段应该会再多看看不同的算法总结一些比较有价值的。

本文学习于
https://blog.csdn.net/autocyz/article/details/48651013
https://blog.csdn.net/weixin_38128100/article/details/80557460
https://blog.csdn.net/autocyz/article/details/48651013

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Accurate Scale Estimation for Robust Visual Tracking 学习笔记: 的相关文章

  • 广州华锐互动:利用VR复原文化遗址,沉浸式体验历史文物古迹的魅力

    在过去的几十年里 科技发展飞速 为我们打开了无数新的视角和可能性 其中 虚拟现实 Virtual Reality 简称VR 技术的崭新应用 为我们提供了一种全新的 近乎身临其境的体验历史的方式 本文将重点探讨VR技术在复原历史古迹方面的应用
  • How to use tar command to complete file compression and decompression in Ubuntu

    TAR 1 GNU TAR Manual TAR 1 NAME tar an archiving utility SYNOPSIS Traditional usage tar A
  • beam search的例子

    看了一下网上对beam search的讲解 感觉都说的太杂了 我试图用一个最简单的例子来帮助读者理解 见下图 假设我有一个模型 能够根据当前词输出下一个词的概率分布 最后依次这样就能生成一大串文本 以上面的图为例 The 的下一个词的最大概
  • Spring StateMachine使用笔记

    Spring StateMachine使用笔记 配置状态机 状态 分层状态 withStates 配置状态 states状态列表 可以使用多个withStates进行parent分层 配置区域 当相同的分层状态机具有多组状态时 每个都具有初
  • 系统移植开发阶段部署

    开发阶段部署阶段 uboot镜像 ubootpak bin flash SD linux内核镜像 uImage tftp下载 根文件系统 rootfs nfs挂载 本文操作需要用到uboot命令进行镜像搬移和根文件系统挂载 uboot中常用
  • EPS学习笔记3----------常用地物采集方法(房屋,斜坡,台阶)

    1 三维模型中房屋绘制方法 面状地物 五点房 不会自动弹出房屋属性录入窗口 任意绘制法 绘制结束弹出房屋属性录入窗口 多点法 1 首先在房屋某一面用鼠标左键选择一点 2 鼠标移到房屋屋檐处 利用shift A将前一节点高程移到屋檐高程 3
  • 前端开发常见面试题第三篇(Vue和React)

    文章目录 1 Vue中直接获取组件内的DOM元素或子组件实例 2 生命周期 3 双向绑定原理 4 v if和v show的区别 5 Vue导航钩子 6 路由跳转的方式 7 vuex常用的是什么 怎么使用 8 父子组件之间通信 9 跨域处理
  • Java排序算法:选择排序

    Java排序算法 选择排序 选择排序它的主要思想是 在未排序的数组中选择最小的元素 然后将其放置在数组的起始位置 再在剩余的未排序数组中选择最小元素 并将其放置在已排序部分的末尾 重复此过程 直到整个数组排序完成 选择排序的步骤如下 1 从
  • 15款业界公认的最佳视频处理软件

    因为需要购买昂贵的视频处理软件和高性能图形计算机 所以视频处理是一项比较耗费金钱的技术活 正是由于这样 一部分人选择使用性能较好的免费在线编辑软件 无需太多视频处理知识便可在浏览器中剪切和编辑视频 然而 当我们无法连接网络或网络很慢的时候
  • IC卡片使用基础

    一 卡片基本概念 集成电路卡 即日常生活中常使用的卡片 可以根据读写特性分为两类 ID卡和IC卡 ID卡 全称身份识别卡 是一种不可写入的感应卡 含固定编号 卡内除了卡号外 无任何保密功能 其 卡号 是公开 裸漏的 IC卡 带有存储器 又称
  • redis缓存击穿、缓存穿透、缓存雪崩、缓存一致性解决方案的代码实现

    1 0 缓存击穿 概念 一些redis的key过期 同时大量数据请求过期的key或者redis不存在的key 导致大量请求打到数据库 导致数据库瘫痪 解决方案 1 设置热点数据永不过期 2 对热点数据加锁 分布式锁 代码实现 初始化项目 商
  • 【笔记】有点麻烦的MatConvNet的dagnn的debug过程

    尝试用MatConvNet训练 然而遇到了以下bug 一脸懵逼折腾了四天 No public property dilate exists for class dagnn Conv Error in dagnn Layer load lin
  • javaweb课程设计之商品后台管理系统

    主要技术 layui框架 html5 jsp oracle数据库 servlet session filter 功能说明 基于java开发的商品管理系统 管理员在后台进行添加商品 修改商品 删除商品 批量删除商品 设置商品上下架功能等 完美
  • webSocket的使用

    在Spring Boot项目中使用Java WebSocket 添加依赖 在项目的构建文件 如pom xml 中添加Java WebSocket的依赖项 可以使用Java EE的WebSocket API或者其他第三方库 例如 Tyrus
  • MATLAB绘制局部放大图

    在数据处理时 当曲线出现跳变的时间极短 出于观察跳变时间段波形的需要 需要对曲线跳变处进行局部放大处理 本文给出了此种情况下MATLAB绘制局部放大图的流程 同时 当曲线的峰值数据与平均值相差一个数量级时 如峰值12 平均值范围落在是 1间
  • awk内置函数

    http blog csdn net nuoline article details 8610679
  • 【爬虫进阶】猿人学任务七之字体反爬(难度2.0)

    目录 前言 特此说明 分析 代码过程 成果 完整源码 前言 往期有讲解过某团字体反爬 感觉效果不太好 所以本章重新找了个例子 希望能帮助大家理解透彻 再遇到直接手撕 特此说明 如果涉及到版权问题 请立刻联系博主删除 分析 首先 我们看题目
  • C++实现栈(链表模拟)【每一步详细深入讲解,代码清晰、简单、易懂】

    文章目录 一 利用链表实现栈 1 链表实现的思路 2 设计栈的结构 3 入栈操作 4 出栈操作 5 判断栈空 6 构造析构 7 完整代码 一 利用链表实现栈 1 链表实现的思路 由于栈是一种较为简单的数据结构 用链表实现栈 逻辑上和数组差不
  • 多输入通道和多输出通道

    目录 多输入通道和多输出通道 目录 1 什么是多输入通道和多输出通道 2 多输入通道和多输出通道的实现 2 1 多输入通道和多输出通道的卷积操作 2 2 多输入通道和多输出通道的全连接操作 3 多输入通道和多输出通道的实例 3 1 导入必要

随机推荐

  • 若依SpringBoot+Vue分离版打包部署(前端)

    遇到的问题为vue项目webpack dev server配置后本地连接服务器地址正常请求 但是打包之后请求服务器接口一直是404 Vue前端打包 1 npm run build prod 打包 2 npm run preview 打包正式
  • 【Vue2从入门到精通】深入浅出,带你彻底搞懂Vue2组件通信的9种方式

    文章目录 人工智能福利文章 Vue组件间通信分类 1 props emit 1 1 父组件向子组件传值 1 2 子组件向父组件传值 2 parent children 3 ref refs 3 1 ref作用于组件 3 2 ref作用于Ht
  • FLASH位宽为8、16、32时,CPU与外设之间地址线的连接方法

    原文地址 http www eefocus com E5 8D 83 E9 87 8C E7 9F A5 E9 B9 B0 blog 10 03 186914 04945 html FLASH连接CPU时 根据不同的数据宽度 比如16位的N
  • java BigDecimal保留两位小数

    对于一些精准的数字 如涉及到金额时我们一般会使用BigDecimal类型来保存和处理 在处理保留小数位数时 如果通过DecimalFormat表达式需要注意下 1 通过DecimalFormat保留两位小数 通过上图可以看到 在补位时 如果
  • 文件上传之IIS6.0解析漏洞

    文章目录 1 判断iis版本 2 使用目录解析漏洞 2 1 写asp一句话木马 2 2 bp抓包 2 3 修改上传路径 2 4 实用工具连接 2 5 get shell 3 使用文件解析漏洞 3 1 写一句话马 3 2 上传 3 3 抓包改
  • mmyolo框架实现在VOC数据集上复现Yolov6教程(详细)

    写在开头 最近学习mmyolo的框架 想着它能将所有配置都写在一个config文件里 只需要改配置文件就可以改动模型 感觉挺方便的 就想着Yolov6用mmyolo框架来实现 但mmyolo并没有提供v6的voc实现配置 v5是有的 看下图
  • RocketMQ的消息优先级

    有些场景 需要应用程序处理几种类型的消息 不同消息的优先级不同 RocketMQ是个先入先出的队列 不支持消息级别或者Topic级别的优先级 业务中简单的优先级需求 可以通过间接的方式解决 下面列举三种优先级相关需求的具体处理方法 第一种
  • Linux环境下的jdk安装(大数据环境)

    jdk安装 创建软件存放目录 上传文件 我使用的MobaXterm 创建解压目录 解压jdk压缩包 修改软件名 使他简洁易操作 配置环境变量 让配置文件生效 查看jdk版本信息 将HP01 的usr文件夹整体拷贝到HP02 HP03目录下
  • 如何使用 FreeRTOS中的xQueueCreate,xQueueSend,xQueueReceive

    信号量Semaphore和互斥量mutex 只能用于进程间的同步 并不能传递更多的数据 在freertos 提供了messageQ 用来在实现进程同步的同时 传递数据 进程间通信 或者ISR和TASK之间通信 如果没有messageQ 则只
  • Object&Objects

    Object 概念 Object 是类层次结构的根 每个类都可以将 Object 作为超类 所有类都直接或者间接的继承自该类 换句话说 该类所具备的方法 所有类都会有一份 toString 作用 以良好的格式 更方便的展示对象中的属性值 重
  • c++ Json库读取和写入json文件

    include json include writer h include json include reader h include
  • Fabric中的“账户”体系

    本文的联盟链是以Fabric为例 本文中transaction翻译成事务 而非交易 联盟链相对于公链 最大的不同在于 联盟链上的数据不是对所有人都公开的 只有联盟内的成员才可以访问 写入链上数据 第二个重要的区别 联盟链不发币 所以联盟链里
  • WSL安装与使用(Ubuntu22.04)

    文章目录 概要 WSL介绍 WSL安装 安装环境 安装方式一 命令行安装 不推荐 可能出现奇怪的问题 安装方式二 通过控制面板安装 WSL 安装Ubuntu22 04 通过Microsoft Store Ubuntu更换镜像源 进入Ubun
  • I2C接口与SPI和UART接口的区别

    一 SPI I2C UART通信速率比较 SPI gt I2C gt UART 1 同步通信 gt 异步通信 2 同步通信时必须有一根时钟线连接传输的两端 3 都是串行通信方式 并行通信用于内部存储间的通信 如flash 4 适合传输的距离
  • python爬虫(爬取唯品会)

    import json import requests from bs4 import BeautifulSoup from selenium import webdriver from time import sleep class Vi
  • 磁盘设备类型获取函数

    将该部分内容保存到 cpp文件中可直接编译运行 用于辨别驱动器的类型 define MEDIA INFO SIZE sizeof GET MEDIA TYPES 15 sizeof DEVICE MEDIA INFO define IOCT
  • JAVA获取上一年的日期_java获取日期,前一年,前一月,前一周

    SimpleDateFormat format new SimpleDateFormat yyyy MM dd HH mm ss Calendar calendar Calendar getInstance 现在日期 String now
  • vue区分单双击事件

    基本思路 利用setTimeout gt 200 使单击事件在200s后再执行 如果200s内触发了双击事件 则使用clearTimeout this timeOut 清除该计时器 取消单击事件的执行 执行双击事件 代码如下 定义变量 da
  • 每日一练——Python基础(七)

    请设计一个好友管理系统 每个功能都对应一个序号 用户可根据提示 请输入您的选项 选择序号执行相应的操作 包括 1 添加好友 用户根据提示 请输入要添加的好友 输入要添加好友的姓名 添加后会提示 好友添加成功 2 删除好友 用户根据提示 请输
  • Accurate Scale Estimation for Robust Visual Tracking 学习笔记:

    Accurate Scale Estimation for Robust Visual Tracking DSST学习笔记 尺度变化是跟踪中比较基础和常见的问题 目标变小 跟踪器就会吸收大量没有用的背景信息 目标过大 跟踪器就会丢失很多特征