前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >目标检测框架在目标跟踪中的应用

目标检测框架在目标跟踪中的应用

作者头像
AiCharm
发布于 2023-05-15 07:52:13
发布于 2023-05-15 07:52:13
9800
举报
文章被收录于专栏:AiCharmAiCharm
1.摘要

从SiamRPN将跟踪问题定义为one-shot detection任务之后,出现了大量将检测组件由于跟踪的研究。不过Siamese系列一个很大的问题在于其本质仍然是一个模板匹配问题,网络关注的是寻找与target相似的东西,而忽视了区分target和distractor的判别能力,这正是目标检测任务所擅长的。目标检测和目标跟踪的关键差异在于检测是一个class-level的任务,而跟踪是一个instance-level的任务(即检测只关注类间差异而不重视类内差异,跟踪需要关注每一个实例,同时跟踪的类别是不可知的)。

本篇笔记关注如何将目标检测框架应用在跟踪中,主要介绍其思想,细节部分不做过多描述,记录论文包含:

  • Bridging the Gap Between Detection and Tracking: A Unified Approach
  • GlobalTrack: A Simple and Strong Baseline for Long-term Tracking
  • Learning to Track Any Object
  • Siam R-CNN: Visual Tracking by Re-Detection
  • Tracking by Instance Detection: A Meta-Learning Approach

2.Bridging the Gap Between

Detection and Tracking: A Unified Approach

从结构图可以很直观的看出这就是Faster RCNN的框架,作者将目标跟踪任务看成是one-shot object detection 和 few-shot instance classification 的组合。前者是一个class-level的子任务用来寻找和目标相似的候选框,后者是instance-level的任务用来区分目标和干扰物。主要有两个模块:Target-guidence module(TGM) 和 few-shot instance classifier。

TGM对目标和搜索区域的特征以及它们在主干中的相互作用进行编码,相当于让网络更关注于与目标相关的instance,后面几篇文章也用了不同的方法来实现这个目的。

TGM虽然使检测器聚焦于与目标相关的物体,但忽略了周围的背景干扰。为了弥补这一点,提出了few-shot instance classifier。然而,直接从头开始训练耗时且容易导过拟合。因此作者通过Model-Agnostic Meta Learning (MAML)进行few-shot finetune,增强判别性进一步消除distractors。

MAML的目的是训练一组初始化参数,通过在初始参数的基础上进行一或多步的梯度调整,来达到仅用少量数据就能快速适应新task的目的,示意图如下:

域自适应的检测器整体训练流程如下图:

输入是三元组,包括examplar, support, query,训练分为inner and outer optimization loops。对于Inner optimization loop中,在support image上计算的loss用来微调meta-layers即detector heads的参数,然后用微调后的参数计算meta-loss其梯度用于更新outer optimization loop。具体公式可以参考原文。在线跟踪中将之前帧的检测结果作为训练样本在线更新detector head的参数。

作者称这是第一篇将目标检测框架应用到跟踪上的通用框架,检测模型可以用Faster RCNN,SSD等,速度上SSD模型为10FPS Faster RCNN模型为3FPS。

GlobalTrack: A Simple and Strong Baseline for

Long-term Tracking

这篇文章构建了一个global instance search tracker,主要思想是利用target来引导网络搜索特定instance,与上一篇的TGM模块思想类似,不过这里对在RPN阶段和分类回归阶段都加入了target信息进行引导。对应的就是Query-guided RPN 和 Query-guided RCNN。

Query-guided RPN

z\in\left[k,k,c\right]

是query的ROI特征,

x\in\left[h,w,c\right]

是搜索图像的特征。

f\_z

k×k

0-padding的卷积将

z

转换为

1×1

的核作用于搜索区域,

f\_x

使用

3×3

1-padding的卷积。

f\_{out}

1×1×c

的卷积将通道数变回为c,这个过程不使用正则化和激活函数。

Query-guided RCNN

z

定义同上,

x\in\left[h,w,c\right]

是提取的proposal的特征。

h\_z

h\_x

均为

3×3

1-padding的卷积,

h\_{out}

1×1×c

卷积。

GlobalTrack 对视频每一帧的跟踪完全不依赖相邻帧,没有累计误差使得它在长期跟踪问题中准确率保持稳定。速度为6FPS。

车牌在长期跟踪过程中消失了一段时间,当车牌再次出现的时候,其他跟踪算法就再也无法恢复跟踪了,而没有累计误差的 GlobalTrack不受前面的影响立刻跟踪到了目标。

3.Learning to Track Any Object

图1 (a)从基于图像的数据集学习一个通用对象先验,(b)通过计算一个封闭形式的目标和背景之间的线性判别器使其适应于一个感兴趣的特定对象(例如左上角的总线)。这允许跟踪物体通过显著的变形,而不捕获干扰物

本文重点在于将category-specific object detector 变成 category-agnostic, object-specific detector来做跟踪。想达到这个目的,需要处理如下两个关键的问题,如图1所示:

  1. 如何将 category specific prior 改为 generic objectness prior?
  2. 如何进一步的将这种 generic prior 改为 particular instance of interst?

针对问题1,作者构建了 a joint model for category-specific object detection and category-agnostic tracking。和之前类似,也是添加了目标特征的检测框架(基于 Mask R-CNN)如下图2所示 。其将目标模板作为输入,计算 feature embedding。然后该模板特征与测试图像计算相似性得到attention mask。attention mask又被用于重新加权空间特征,以检测感兴趣的物体。另外这个框架可以同时用于检测、跟踪和分割。

针对问题 2,本文计算一个线性分类器来区分第一帧的感兴趣目标和其他目标,通过最小二乘方法得到闭式解从而可以学习到一个更关注感兴趣instance的鲁棒特征。下图3通过一个例子说明,左下是直接用feature embedding计算的attention map,右下是用线性分类器计算的attention map,显然右下效果更好。

最后运行速度为7FPS。

4.Siam R-CNN: Visual Tracking by Re-Detection

这个就是用重检测的思想做跟踪,也是基于RCNN框架的,同时使用Tracklet Dynamic Programming Algorithm去跟踪所有潜在的目标。

5.Tracking by Instance Detection:

A Meta-Learning Approach

同样是域自适应方法将检测器转化成跟踪器,此篇更像是第一篇Bridging the Gap Between Detection and Tracking: A Unified Approach的进阶,不同的是本文没有额外添加模板引导分支,而是直接用标准的检测器通过元学习的方式做域自适应。避免了冗余结构使得速度大幅提升,达到40FPS。另外就是训练的时候加入了很多来自MAML++喝MetaSGD的技巧,效果更好。

6.总结

这几篇文章的一个共同思路都是融合了Siamese架构和目标检测框架,将目标实例信息以各种形式加入待检测图像中,从而将class-level的通用检测转变成instance-level的实例检测(跟踪)。借助目标检测对尺度,形变等复杂条件的优越性来解决跟踪中的问题,同时将跟踪转变成one-shot的检测任务也避免了更新带来的漂移(第一篇里面使用了MAML进行更新,主要原因猜测是单纯往RPN中融合目标信息还不够work,像globaltracker在head上也添加了instance,而第三篇则是构建一个分类器增强鲁棒性)。当然引入检测框架带来的计算开销也是很大的,最后一种方法避免了额外的模板分支相当于跳出了Siamese框架,给实时带来了可能。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AiCharm 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Lombok学习
Lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发。通过添加注解的方式,不需要为类编写getter或eques等常规方法,同时可以自动化日志变量。官网链接 简而言之:Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。
神秘的寇先森
2019/10/22
6330
聊聊使用lombok @Builder踩到的坑
Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。
lyb-geek
2021/09/14
1.4K0
聊聊使用lombok @Builder踩到的坑
@Builder的一个坑
最近遇到了一个使用@Builder注解导致线上报NPE的问题。原因在给一个用@Builder注解的Java Bean的一个属性赋默认值之后,使用build方式构建出来的对象该属性的值是null。
灬沙师弟
2023/11/07
3240
@Builder的一个坑
加倍提升开发效率,继续深挖Lombok的使用
本篇来接续上一篇文章 这些极简的注解你都清楚吗,主要介绍一下 Lombok 非常用注解。
cxuan
2019/08/09
7740
加倍提升开发效率,继续深挖Lombok的使用
SpringSecurity之记住我功能的实现
登录的时候,请求发送给过滤器UsernamePasswordAuthenticationFilter,当该过滤器认证成功后,会调用RememberMeService,会生成一个token,将token写入到浏览器cookie,同时RememberMeService里边还有个TokenRepository,将token和用户信息写入到数据库中。这样当用户再次访问系统,访问某一个接口时,会经过一个RememberMeAuthenticationFilter的过滤器,他会读取cookie中的token,交给RememberService,RememberService会用TokenRepository根据token从数据库中查是否有记录,如果有记录会把用户名取出来,再调用UserDetailService根据用户名获取用户信息,然后放在SecurityContext里。
Dream城堡
2018/09/10
9510
SpringSecurity之记住我功能的实现
lombok的@Builder注解原理背后干了啥?
@Builder可以放在类,构造器或方法上。虽然“基于类”和“基于构造器”模式是最常见的用例,但使用“方法”用例最容易解释。
JavaEdge
2021/02/23
2.6K0
lombok的@Builder注解原理背后干了啥?
每天一小步:如何给Lombok Builder提供默认值
在这个教程中,我们将研究如何基于Lombok在实现 Builder模式时为属性提供默认值。
烟雨平生
2023/03/07
2.8K0
每天一小步:如何给Lombok Builder提供默认值
使用lombok编写优雅的Bean对象
使用java编写代码,十之八九都是在写java类,从而构建java对象。lombok之前也说了不少,但使用了这么多年,感觉还是有很多技巧可以使用的。
java思维导图
2019/05/08
6250
Java 之 Lombok 必知必会
在目前众多编程语言中,Java 语言的表现还是抢眼,不论是企业级服务端开发,还是 Andorid 客户端开发,都是作为开发语言的首选,甚至在大数据开发领域,Java 语言也能占有一席之地,如 Hadoop,Spark,Flink 大数据等。而作为已经诞生 24 年的 Java 相比其他语言来说,编写起来略显得冗长和复杂,而为了能极大提升 Java 开发的效率和代码简洁性,一个 Java 库 Lombok 就这样诞生了。
闻人的技术博客
2019/09/19
9170
Java 之 Lombok 必知必会
同学你根本不懂 Builder 设计模式!
在日常开发中,发现有些同学喜欢用 lombok 的 @Builder 注解,主要原因是喜欢使用链式编程。 但如果一个方法里面多个对象都使用 builder 模式,每个对象构建都放在一行使用,代码过长;如果每个属性设置都滑换行,占的行数就很多,导致可读性降低。
明明如月学长
2023/03/30
1.5K0
同学你根本不懂 Builder 设计模式!
Java中lombok @Builder注解使用详解
Lombok大家都知道,在使用POJO过程中,它给我们带来了很多便利,省下大量写get、set方法、构造器、equal、toString方法的时间。除此之外,通过@Builder注解,lombok还可以方便的时间建造者模式。
蒋老湿
2019/07/31
17.1K0
SpringSecurity自定义用户登录
根据上一节的配置,默认在服务开启的时候会被要求自动的进行表单登陆。用到的用户名只能是一个固定的用户名user,它的密码是每次启动的时候服务器自动生成的。最常见的场景是我们的用户是从数据库中获取的。
Dream城堡
2018/09/10
2.8K0
SpringSecurity自定义用户登录
千万不要再随便使用 lombok 的 @Builder 了!
现在很多大厂的员工也很喜欢使用 lombok,有了 lombok 加持之后代码更加 “简洁”。
明明如月学长
2023/04/21
1.2K0
盘点 Lombok 的几个骚操作
民工哥
2024/04/02
1700
盘点 Lombok 的几个骚操作
设计模式--Builder模式的思考
在日常开发中总是会遇到多参数的情况,那么对于多参数,尤其是可选参数众多的情况,可能有如下的一些解决方案.
屈定
2018/09/27
7660
lombok系列1:初识lombok
连官网都懒得废话,只给出了一句广告词:给你的java加点料(spice up your java)。
pollyduan
2019/11/04
3830
开发工具Tools·Lombok
使用 @RequiredArgsConstructor(onConstructor = @__(@Autowired)) 注解可以给所有 private final 字段提供自动注入。
数媒派
2022/12/01
8540
超级全面的 Lombok 注解介绍,学一波!
blog.csdn.net/riemann_/article/details/105374987
全栈程序员站长
2021/06/29
5.1K0
lombok在java项目中的使用
@NoArgsConstructor@RequiredArgsConstructor@AllArgsConstructor
jinjunzhu
2020/08/20
6580
​ 🚀 掌握Lombok:Java开发者的瑞士军刀,让代码飞起来! 🚀
Java,这个拥有悠久历史的编程语言,一直在不断地进化。而在这个进化的过程中,有许多工具和库的出现,极大地提高了开发者的效率。今天,我们要聊的就是其中的一个神器——Lombok。如果你还没有听说过Lombok,或者只是浅尝辄止,那么这篇文章将会是你深入理解并掌握Lombok的起点。准备好了吗?让我们一起探索Lombok的高级知识点,让你的代码更加简洁、高效!
疯狂的KK
2024/04/16
3980
​ 🚀 掌握Lombok:Java开发者的瑞士军刀,让代码飞起来! 🚀
相关推荐
Lombok学习
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档