Deep Meta Learning for Real-Time Target-Aware Visual Tracking 论文阅读

2023-05-16

这篇文章是韩国的一个组做的,一直没中, 直到19年中了ICCV,据说是第一篇将元学习引入目标跟踪的文章,用的架构是siamese网络的架构,但是在模型在线更新的时候使用了meta-learning的思想。


Motivation

  • the number of positive samples are highly limited.
  • overfitting

在跟踪过程中,当目标外观发生变化时,需要对模型进行更新。而更新操作需要采用stochastic gradient descent (SGD)随机梯度下降,Lagrange multipliers , ridge regressio等方法,效率很低,通常低于20FPS,无法满足实时性需求。此外,更新通常是利用跟踪过程中等少量目标外观模型(a handful of target appearance templates obtained in the course of tracking)来进行的,由于正样本不足,所以模型很容易陷入过拟合(overfitting)而失去泛化能力。


Introduction

本文基于以上背景和动机,提出了一种 end to end visual tracking network structure,主要包括了两个部分

  • Siamese matching network for target search
  • meta-learning network for adaptive feature space.

在跟踪算法SiameseFc基础上,这里简称matching network,添加了meta-learner network,在运行时动态产生部分matching network的参数。利用meta-learner network,能够使matching network适应目标外形变化,而且对matching network动态新增的参数,也只需要计算forward-pass就可以,因此,实时效果好,达到了48fps,整体流程如下图如所示:
Yd75xP.png
训练后的元学习网络为matching network(本文中就是SiameseFC网络)提供了额外的卷积核和channel attention information,从而让特征空间(feature space)可以根据追踪过程中获得的新的外观模版(new appearance templates obtained in the course of tracking)进行自适应修改,而不会产生过拟合情况。


Meta-learning

简单来说就是像人一样在学习了很多个task之后,但面对新的task时能够借助以往的学习知识以及少量的新样本快速地适应到新的任务上,就像我们玩lol玩的很好,那么上手王者荣耀是一个道理。
其实meta-learning这个概念很早就提出,只是目前将其应用于深度学习和强化学习领域做出了一些效果,或提高性能,或提高训练效率。目前对meta-learning的理解,可以简单理解为learning to learn,换句话解释就是要去学习超参,那对超参的定义可以理解为设计算法时不是由data-driven的部分,可以是模型结构,可以是训练参数,也可以是根据情况动态修改模型结构等。总之,meta-learning就是要学习并替代设计算法时人的工作。
本文中的meta-learning其实应用主要是应用了meta-learning的思想,使用meta-learning来更新最后一层卷积层(conv5)的weight。使之产生一个可以根据现有追踪模版自适应更新的权值,然后把原始的权重和meta-learning网络生成的权值合并,生成最后的W adapt。

这里分享一下我看的李宏毅老师的机器学习讲meta-learning相关的一些小知识,就是在meta-learning网络训练的时候,并不追求单一任务上的最优,而是去寻找可以让所有task都能下降到分别的全局最优。就像下面这两张图。
YdxhGD.jpg
YdxfPO.jpg


SiameseFc

SiameseFc跟踪算法,没有采用更新model或者维护template,而是使用两个全卷积cnn组成Simaese network,提取卷积层特征做相关,产生heatmap来预测目标位置,如下图所示。两个网络中,一个输入是起始帧的目标模板,另一个输入是目标附近更大范围的区域(一般可以设为4倍,相当于搜索区域)。
Ydx6q1.png
上图中可以看出其核心计算公式:

Ydz9Ln.png
网络的损失函数如下式所示,y[u]表示真实标签,其定位目标框内为1,框外为-1:
YdxRIK.jpg

好了 让我们开始正文吧!

Algorithm

文章的网络结构如下:
YwMVfg.png
蓝色的就是SiamFC的结构, 文章是提特征, 然后用conv5的特征算一个loss, 然后把梯度给Meta-learner这个网络, 去算一个权重出来, 还算了一个attention, 再把权重concate到原始conv5的weight上面, 然后用这个新的weight来计算最终的features, 在这两个feature上做互相关.


Components

首先我们来看蓝色的部分,实际上就是一个SiameseFc网络,使用具有5个卷积层的CNN,并在前两个卷积层之后应用2个内核大小为3和步幅为2的池化层。在每个卷积层之后插入批处理归一化层(Batch normalization layer)。
CNN的每层的内核大小和输入/输出尺寸为w1:11×11×3×128,w2:5×5×128×256,w3:3×3 ×256×384,w4:3×3×384×256,w5:1×1×256×192。对于输入,为x使用大小为127×127×3的RGB图像,为z使用大小为255×255×3的RGB图像,匹配网络生成大小为17×17的响应图。
实际上就是先做卷积,然后再求互相关:
YwQ3DI.png
式中 x为模版,z为搜索区域,w = {w1,w2, …,wN}表示每一层的一组权重,ϕw(⋅)表示整个网络权重为 w 时的使用Nlayer 特征提取器提取出的特征。

meta-learner network根据matching network在之前追踪过程中产生的M个context patches z = {z1, …, zM}以及target x,来计算能够使追踪模版自适应更新的新增参数。

首先使用matching network最后一层conv5来计算平均负梯度:
YwQ1KA.png
其中 yi表示根据ground-truth来计算出针对zi的二值标签图,也就是响应图(response map。meta-leaner设计的依据是目标发生变化,那么δ也发生变化(the characteristic of δ is empirically different according to a target)

然后,以δ作为输入,meta-learner 网络 g(·)可以生成与输入对应的目标特定权重(target-specific weights),如下:
YwQuCD.png
然后将两个权重拼接起来就来更新matching network原始的权重

这里插一嘴,上面所说的拼接是真的拼接,就是简单相加,这一点可以在后文中介绍meta-learner网络中得到印证
[w5,wtarget] of size 1×1×256×(192+32).

YwQQvd.png

论文还说这里同时生成了一个channel-wise sig- moid attention weights这样的权重,文中也没有讲具体实现,同时我在后文中也没有看到如何使用


Tracking algorithm

对于跟踪过程,首先保存K个context images as zmem = {z1 , …, zK },以及对应的响应图 yˆ = {yˆ ,…,yˆK}.保存的原则是, 当在每一帧找出target之后, 会判断当前这个target的响应是否大于一个阈值 τ , 若是大于 τ , 便把这个patch加入到template的池中:
YwQMgH.png
式子中的p对应于响应图中所有可能位置P的集合中的位置,而ρ(·)是归一化函数。
而在接下来计算要输入meta-learner网络的δ时,从template池中选择熵最小的,其实就是找响应比较大, 比较靠谱那M个template用来更新网络。

文章中提到,这里提出了一个新的响应图yˆ ⊗ h,加入了一个余弦窗函数,这个h就是余弦窗函数,用来惩罚大位移,保证目标大小平滑变化。

整个跟踪流程如下:
YwYL79.png


Implementation and Training

YwQYUf.png
meta-learner网络使用(2)中的损失梯度δ作为输入,该信息是从matching network中获得的,它解释了其在当前特征空间中的状态。然后,meta-learner 网络中的g(·)学习从该损失梯度到自适应权重Wtarget的映射,该权重描述目标特定的特征空间,也就是所谓的目标特定权重(target-specific weights)。可以通过损失函数来训练元学习器网络,该函数可以衡量自适应权重Wtarget在正确拟合新示例{z1,…,zM’}时的准确度。

Matching Network

Network

5 convolutional layers
2 pooling layers of kernel size 3 and stride 2 are applied after the first two convolutional layers.
w1 : 11×11×3×128,
w2 : 5×5×128×256,
w3 : 3×3×256×384,
w4 : 3×3×384×256,
w5 : 1×1×256×192.
Inputs,
27×127×3 for x
255×255×3 for z
response map
17 × 17

Train

在训练时,对(x,z)从选定的视频序列中的目标轨迹中随机采样。然后,生成ground-truth响应映射y∈{−1,+1}17×17,其中值在目标位置为+1,否则为- 1。对于损失函数l(fw(x, z), y),文章使用logistic损失函数定义为:
YwQJVP.png
式中,p表示响应图中每个可能位置P的集合中的一个位置,而ζ(y [p])是减轻标签不平衡的加权函数。
损失函数使用Adam优化器进行了优化,使用批处理大小为8的学习率为10−4,并运行95000次迭代。

Meta-learner Network

Network

3 fully-connected layers
Each intermediate layer is followed by a dropout layer with the keep probability of 0.7 when training.
For input, gradient δ of size
1×1×256×192
output Wtarget of size
1×1×256×32
合并之后的权重 [w5,wtarget]
1×1×256×(192+32)

Train

训练的时候从一个训练序列中随机抽取M′个(M′≥M)context patch,也就是Zreg ={z1,…,zM′}然后从中取M个来计算梯度δ。接着利用公式2,来计算响应二值图。注意,这里的计算二值图,是在假定目标位于中心来进行计算的(assuming the target is located at the center i
of zi)。这样做的目的就是在于我前面提到的,训练meta-learner network并不追求单一任务上的最优,而是去寻找可以让所有task都能下降到分别的全局最优,所以这里假设目标在context patch的中心,这样不管目标去哪里,我们的x都能很快的响应。
meta-learner network的损失函数,针对meta-learne network进行最优化,matching network固定不变,如下式所示,
YwQ8bt.png


Experimental Results

Y0t0dH.png
OTB[51]和LaSOT[12]数据集的定量结果。MLT为提出的算法。该算法在OTB数据集上表现出了较好的性能,在大规模LaSOT数据集上表现优于其他算法,并利用元学习器提供的额外特征空间获得了性能提升。

Y0tBod.png

MLT-mt 只加入了meta-learner
MLT-mt-ft 加入了Adam优化器进行finetuning

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

Deep Meta Learning for Real-Time Target-Aware Visual Tracking 论文阅读 的相关文章

  • navicat for mysql自增_mysql,navicat怎么设置主键自增

    Navicat是应用比较多的mysql的视图管理工具 下面记录下Navicat如何设置主键自增的操作 1 找到需要操作的表右键找到设计表 2 找到对应的字段 改为int型 在下面会出现自动递增的勾选 xff0c 勾上即可 注意 xff0c
  • TypeError: unsupported operand type(s) for +: 'float' and 'decimal.Decimal'

    TypeError unsupported operand type s for 43 39 float 39 and 39 decimal Decimal 39 浮点型和双精度类型 相加报错 from decimal import Dec
  • C++调试报错 no match for operator...operand types

    在调试C 43 43 代码遇到一个小错误 xff0c 但是也比较常见 xff0c 报错如下 xff1a error span class token operator span no match span class token keywo
  • QT 报 QMetaObject::connectSlotsByName: No matching signal for on_btn_clicked()

    在QT中 xff0c 自己编写命名信号和槽的时候 xff0c 在用connect的时候报出以下错误 xff1a QMetaObject span class token double colon punctuation span conne
  • ChkBugReport工具for Android

    关于这个工具 xff0c 找到的资料都比较旧了 xff0c 貌似是索尼移动的开发人员开发的 xff0c 2014年左右的文章比较多 xff0c 应该是那个时候索尼移动还是比较鼎盛的时期吧 现在已经很少看到关于这个工具的文章了 xff0c G
  • [AR论文阅读] Tracking Requirements for Augmented Reality

    论文作者 xff1a RONALD AZUMA年份 xff1a 1993论文主题 xff1a 阐述AR系统对6DoF跟踪性能的技术要求 要点 xff1a 三个核心要求 xff1a 高精度 xff0c 低延迟 xff0c 大范围 跟踪精度指标
  • VS Code For Web 深入浅出 -- 进程间通信篇

    在上一篇中 xff0c 我们一起分析了 VS Code 整体的代码架构 xff0c 了解了 VS Code 是由前后端分离的方式开发的 且无论前端是基于 electron 还是 web xff0c 后端是本地还是云端 xff0c 其调用方式
  • MPLAB构建项目报错“recipe for target ‘.build-conf‘ failed”

    recipe for target build conf failed 刚入门单片机 xff0c 在写程序时 xff0c 当时写完 xff0c build成功 xff0c 但是第二天过来 xff0c 改写了部分代码 xff0c 然后去bui
  • 学习ROS-Academy-for-Beginners-noetic,修改记录

    一 编译安装ROS Academy for Beginners noetic 可以参考我之前的博客ROS Academy for Beginers noetic安装教程 之后可以看到里面提供了很多例程 xff0c 包括 软件包 内容 rob
  • 移动端常见meta设置

    1 设置viewport 这句话设置viewport的宽为设备的宽 禁止用户进行缩放 此外 常见参数设置 a width 宽度 数值 device width 默认为980 b height 高度 数值 device height c in
  • Python:使用循环语句for 做一个九九乘法表

    学会了循环语句后 就能做很多小程序了 在这里演示几种九九乘法表的编程方法 首先使用for循环来进行编程 for hang in range 1 10 定义行为hang 行数为9 for lie in range 1 hang 1 定义列为l
  • 教妹学Java(十五):for循环详解

    你好呀 我是沉默王二 一枚颜值与才华俱在的程序员 本篇教程通过我和三妹对话的形式来谈一谈 for while do while 循环之间的差别 以及重点介绍一下 for 循环 while do while 会在接下来的教程中单独介绍 教妹学
  • java 最大公约数和最小公倍数

    题目 题目 输入两个正整数m和n 求其最大公约数和最小公倍数 比如 12和20的最大公约数是4 最小公倍数是60 说明 break关键字的使用 代码一 package l2 for 题目 输入两个正整数m和n 求其最大公约数和最小公倍数 比
  • Safari:无法识别的内容安全策略指令“frame-ancestors”

    我有一个应用程序 siteA com 它加载到 siteB com 内的 iframe 中 没有警告直接加载 siteA com 但得到无法识别的内容安全策略指令 frame ancestors 何时位于 siteB com 的 ifram
  • 为什么要分块写入 Stream?

    我想知道为什么这么多例子将字节数组读入卡盘中的流中 而不是一次全部读入 我知道这是一个软问题 但我很感兴趣 我对硬件有一些了解 并且填充缓冲区可能非常依赖于大小 并且您不想再次写入缓冲区 直到它被刷新到需要去的任何地方等 但是使用 Net平
  • Angular 5 - 元描述不起作用

    我遇到了 Angular 的 Meta 函数的问题 从 angular platform b rowser 导入 Meta 我已将其添加到我的页面 contact component ts 上 但我在网页上没有看到任何内容 没有元描述或其他
  • 将 google 字体 (fonts.googleapis.com) 添加到 CSP 标头

    我在 gitHub 页面上托管一个个人项目 并使用 cloudflare 强制执行 https 现在我想实施 CSP 政策 我尝试将元标记添加到页面的头部 但我收到以下错误 拒绝加载样式表 https fonts googleapis co
  • Angular 5 中的页眉和页脚

    我正在用 Angular 5 创建我的网站 我的网站中有主页 商店和类别页面 最初 我决定在整个网站上保持页眉和页脚全局 我的意思是创建页眉和页脚组件并将它们用作指令
  • 使用 R 在荟萃分析中结合森林图和交通灯图

    Revman 软件在荟萃分析中生成森林图和交通灯图的组合 参见 doi http dx doi org 10 1136 bmjopen 2018 024444 http dx doi org 10 1136 bmjopen 2018 024
  • 如何让更大的布局适合小设备屏幕?

    我有一个小问题meta viewport元素 问题是我的布局min width比我想要使用的许多屏幕分辨率都要大 所以将其设置为 没有帮助 结果我得到的页面必须缩小以适应设备宽度 如果我什至添加像 它也不起作用 发现了一个黑客来自CSS 技

随机推荐

  • 字符数组进行复制需要加结束符‘\0’

    如想将str1数组内容复制到str2中 xff08 不用strcpy xff0c 如果按照以下格式复制 xff09 xff0c 需要加字符结束符 0 xff1b span class token macro property span cl
  • 学习Kafka

    1 Kafka是什么 xff1f 学习Kafka的目的 xff0c 为了解决高吞吐量项目的需求 xff0c Kafka号称大数据的杀手锏 xff0c 这款为大数据而生的消息中间件 xff0c 以其百亿级tps的吞吐量名声大噪 xff0c 迅
  • cmake命令之option使用案例

    option的命令形式如下 option lt variable gt 34 lt help text gt 34 value option简介 cmake中option起到编译开关的作用 xff0c CMakeLists txt中opti
  • docker学习

    现代软件开发的一大目的就是隔离 xff0c 应用程序在运行时相互独立互不干扰 xff0c 这种隔离实现起来是很不容易的 xff0c 其中一种解决方案就是上面提到的虚拟机技术 xff0c 通过将应用程序部署在不同的虚拟机中从而实现隔离 但是虚
  • 3.编写CMakeLists文件

    本章将介绍为您的软件编写有效的 CMakeLists 文件的基础知识 它将涵盖处理大多数项目所需的基本命令和问题 虽然 CMake 可以处理极其复杂的项目 xff0c 但对于大多数项目 xff0c 你会发现本章的内容会告诉你所有你需要知道的
  • boost库简介

    欢迎来到boost org Boost 提供免费的经过同行评审的可移植 C 43 43 源库 我们强调与 C 43 43 标准库配合良好的库 Boost 库旨在广泛使用 xff0c 并可用于广泛的应用程序 Boost 许可证鼓励所有用户以最
  • 解决mavros源码安装过程中wstool update -t src -j4报错(网络限制)问题

    继上一篇解决了mavlink安装的网络问题后 xff0c 没想到这个指令更新也需要链接到github 而直接执行时 xff0c 报错 xff1a span class token punctuation span mavlink span
  • QT事件详解

    一 简介 在Qt中 xff0c 事件作为一个对象 xff0c 继承自 QEvent 类 xff0c 常见的有键盘事件 QKeyEvent 鼠标事件 QMouseEvent 和定时器事件 QTimerEvent 等 xff0c 与 QEven
  • QT事件系统之二:鼠标事件和滚轮事件

    一 QMouseEvent的详细描述 QMouseEvent 类用来表示一个鼠标事件 xff0c 当在窗口部件中按下鼠标 释放鼠标和移动鼠标指针时 xff0c 都会产生鼠标事件 QMouseEvent 利用 QMouseEvent 类可以获
  • Qt事件系统之三:键盘事件

    QKeyEvent类用来描述一个键盘事件 当键盘按键被按下或者被释放时 xff0c 键盘事件便会被发送给拥有键盘输人焦点的部件 QKeyEvent的key 函数可以获取具体的按键 xff0c 对于Qt中给定的所有按键 xff0c 可以在帮助
  • 第一个自己写的程序

    22年8月份花了三周时间快速过了一遍某站一位大佬的视频 xff0c 前几天刷朋友圈时偶然看见一位道友写了个矩阵乘积的计算器 xff0c 瞬间给了我灵感 xff0c 直接开始操作 理想很丰满 xff0c 现实很扯淡 xff0c 刚开始写了个4
  • CEF学习质料

    目录 一 编译CEF3里的lib xff1a 1 下载CEF3 http opensource spotify com cefbuilds index html 2 下载CMake xff0c 运行CMake GUI exe 3 CMake
  • 【无标题】

    5 1 内存模型基础 这里从两方面来讲内存模型 xff1a 一方面是基本结构 xff0c 这与事务在内存中是怎样布局的有关 xff1b 另一方面就是并发 对于并发基本结构很重要 xff0c 特别是在低层原子操作 所以我将会从基本结构讲起 C
  • C++`中的原子操作和原子类型

    5 2 C 43 43 中的原子操作和原子类型 原子操作 是个不可分割的操作 在系统的所有线程中 xff0c 你是不可能观察到原子操作完成了一半这种情况的 xff1b 它要么就是做了 xff0c 要么就是没做 xff0c 只有这两种可能 如
  • 编写一个使用锁的线程安全查询表

    6 3 基于锁设计更加复杂的数据结构 栈和队列都很简单 xff1a 接口相对固定 xff0c 并且它们应用于比较特殊的情况 并不是所有数据结构都像它们一样简单 xff1b 大多数数据结构支持更加多样化的操作 原则上 xff0c 这将增大并行
  • __declspec(dllexport)和__declspec(dllimport)以及QT中public: static struct QMetaObject const xxx:staticMe

    假设你的头文件如下 xff1a span class token macro property span class token directive hash span span class token directive keyword
  • /MD 与 /MT、/MTD与/MDD的区别

    VS在 属性页的 C C 43 43 gt Code Generation gt Runtime Library 一项中总共有四个选项 MD 与 MT MTD与 MDD xff0c 它们分别有什么区别 xff1f 1 MD 与 MT 用于R
  • C++多线程案列

    C 43 43 多线程案列 话不多说 xff0c 直接上代码 xff1a span class token comment CMakeList txt ThreadDemo1 的 CMake 项目 xff0c 在此处包括源代码并定义 spa
  • 右值引用、移动语义、完美转发

    右值引用 移动语义 完美转发 左值 右值 xff1a 在c 43 43 中 xff0c 所有的值不是左值 xff0c 就是右值 有名字的对象都是左值 xff0c 右值没有名字 还有一个可以区分左值和右值的方法 xff1a 看能不能对表达式取
  • Deep Meta Learning for Real-Time Target-Aware Visual Tracking 论文阅读

    这篇文章是韩国的一个组做的 一直没中 直到19年中了ICCV xff0c 据说是第一篇将元学习引入目标跟踪的文章 xff0c 用的架构是siamese网络的架构 xff0c 但是在模型在线更新的时候使用了meta learning的思想 M