【目标跟踪】|OSTrack

ECCV 2022 paper
Joint Feature Learning and Relation Modeling for Tracking: A One-Stream Framework

在这里插入图片描述

之前的跟踪框架都是将特征提取和特征融合分为两步来做的,先分别提取Template和Search的特征,然后在两者之间进行相关,得到的特征用于计算最终的跟踪结果(Two Stream, Two Stage)。这样做存在以下两个缺点:1.特征提取阶段template和search间没有交互,提取到的特征是目标无关的,判别性不足,取决于离线训练的效果(对未见过的类别不鲁棒);2.双流双阶段的框架难以在速度和精度之间达到较好的平衡(performance-speed dilemma)。

作者提出了一种one stream, one stage的跟踪框架,在template和search图像对之间建立了双向的信息流,从而统一了特征提取和特种融合的过程。同时提出了一种基于相似度的early candidate elimination模块,推理过程中逐渐丢弃search中的背景区域,进一步提高了算法的推理速度。

值得注意的是本文中的方法在处理每一个search时,template的图像都会一起输入到model中得到动态的template特征,这里与MixFormer是不同的(MixFormer中为了节省计算量不使用template对search做cross attention,这样每帧就不用重新计算template的特征)。与STARK、TransT等也使用了transformer的tracking方法相比,该框架还有一个好处就是可以使用预训练的transformer权重来初始化网络,从而提高网络的收敛速度。

在这里插入图片描述

Template在这里插入图片描述
和Search在这里插入图片描述
会首先被分别分割为多个P*P大小的patch并展成向量
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
,这些向量会通过一个全连接层 E被映射到D维
之后可学习的位置编码 Pz Px会被添加到这些patch embedding上,得到token embedding, 最后两者会被拼接到一起得到 作为Transformer的输入。

在这里插入图片描述

经过Transformer的处理后,直接将其输出特征中与search对应的部分取出来输入到head中即可得到最终的跟踪结果。

值得注意的是本文中的方法在处理每一个search时,template的图像都会一起输入到model中得到动态的template特征,这里与MixFormer是不同的(MixFormer中为了节省计算量不使用template对search做cross attention,这样每帧就不用重新计算template的特征)。

与STARK、TransT等也使用了transformer的tracking方法相比,该框架还有一个好处就是可以使用预训练的transformer权重来初始化网络,从而提高网络的收敛速度。

候选消除

在Transformer的多层Self-attention操作中,attention map会首先关注于search图像中的前景区域并随着深度的增加逐渐聚焦到目标。基于这一现象,作者提出了early candidate elimination模块鉴别并消除search图像中的背景区域。

具体来说,search图像中的每个patch都可以被看作是一个目标候选区域。在每个候选消除模块中,每个候选区域会被计算一个与template图像的相似度作为其得分,得分最高的k个候选区域会被保留下来,其他的候选区域则会被丢弃。为了避免template中背景区域的影响,在本文中作者并没有使用候选区域与每个template patch计算相似度并取均值,而是直接计算其与template最中心位置的patch之间的相似度作为其得分。可以这样做的原因在于经过self-attention操作之后,中心的template patch已经聚集了足够的目标信息。由于这些背景区域不会对分类和回归操作造成影响,因此在Transformer输出之前,这些中途被丢弃的区域直接做zero-padding即可将特征恢复成原尺寸。

作者也给出了一些候选消除模块的可视化案例,图中灰色区域即为被丢弃的背景区域。

Head和Loss

Head部分的结构也比较简单,包括三个分支,分别预测分类得分 、为了补偿下采样量化误差而预测的偏移值 以及归一化的bounding box尺寸

。每个分支由L个卷积层堆叠而成。取预测得分最高的点作为目标位置,在O S 中取出对应位置的值计算最终的目标包围框。

损失函数方面:对于分类分支,采用了与CornerNet中相同的weighted focal loss,与GT中心距离越远的位置权重越低;对于回归分支,则使用了常用的IoU loss以及L1 loss的组合。

实验结果

作者基于ViT-Base设置了两组不同的输入大小,得到了两组模型,速度都挺快的:

OSTrack-256 --> Template: 128128; Search: 256256; 105.4FPS
OSTrack-384 --> Template: 192192; Search: 384384; 58.1FPS

针对预训练:使用MAE自监督预训练的Module初始化会得到更好的结果,尤其是在测试集中完全为未见类别的GOT-10K上。

Aligned Comparison: 作者还将STARK和Swin-Track的backbone、head、loss都换成了与本文一致的方法,以在Two stream和One stream方法之间进行公平的比较。

在这里插入图片描述
我们重新实现的双流跟踪器显示出相当或更强的性能,但仍然落后于OSTrack,这证明了我们的单流结构的有效性。虽然Transformer特征融合模块[29,47]也支持关系建模阶段的特征交互,但特征提取过程中的判别信息损失是不可修复的。我们还观察到,OSTrack在单次基准GOT-10k上显著优于前两个流跟踪器,这进一步证明了我们的单流框架在具有挑战性的场景中的优势。实际上,由于测试集中的对象类与训练集中的对象类完全不同,因此双流框架提取的特征的判别能力是有限的。然而,通过模板特征和搜索区域之间的迭代交互,OSTrack可以通过相互引导来提取更多不相似的特征。与双流SOTA跟踪器不同,OSTrack忽略了超重型关系建模模块,同时保持了关节特征提取和关系建模模块的高度并行性。因此,当采用相同的主干网络时,提出的单流框架比STARK(快40.2 FPS)和SwinTrack(快25.6 FPS)快得多。此外,OSTrack需要更少的训练图像对来收敛。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载体验!下载完使用问题请私信沟通。 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于TensorRT的C++高性能推理库源码+使用说明(支持RT-DETR,Yolov5、v7、v8、yoloX、OSTrack、LightTrack等) Highlights - 支持全景驾驶感知 YOLOPv2,目标检测 RT-DETR,Yolo 5/X/7/8 ,多目标跟踪 Bytetrack,单目标跟踪 OSTrack、LightTrack; - 预处理和后处理实现CUDA核函数,在 jetson 边缘端也能高性能推理; - 封装Tensor、Infer,实现内存复用、CPU/GPU 内存自动拷贝、引擎上下文管理、输入输出绑定等; - 推理过程实现生产者消费者模型,实现预处理和推理的并行化,进一步提升性能; - 采用 RAII 思想+接口模式封装应用,使用安全、便捷。 Easy Using 本项目代码结构如下:`apps` 文件夹中存放着各个算法的实现代码,其中 `app_xxx.cpp` 是对应 `xxx` 算法的调用demo函数,每个算法彼此之间没有依赖,假如只需要使用yolopv2,可以将此文件夹下的其他算法全部删除,没有影响;`trt_common` 文件夹中包括了常用的cuda_tools,对TensorRT进行Tensor、Infer的封装,生产者消费者模型的封装;`quant-tools` 文件夹中是量化脚本,主要是yolov5/7;`workspace` 文件夹中存放编译好的可执行文件、engine等。 使用哪个算法就在 `main.cpp` 中调用哪个算法的demo函数。 ```bash . ├── apps │   ├── yolo │   └── yolop │   ├── app_yolo.cpp │   ├── app_yolop.cpp │   ├── ... ├── trt_common │   ├── cuda_tools.hpp │   ├── trt_infer.hpp │   ├── trt_tensor.hpp │   └── ... ├── quant-tools │   └── ... ├── workspace │ └── ... ├── CMakeLists.txt └── main.cpp ``` 如果要进行您自己的算法部署,只需要在 `apps` 文件夹中新建您的算法文件夹,模仿其他算法中对 `trt_infer/trt_tensor` 等的使用即可。后续时间空闲较多的情况下会更新较为详细的用法。 更多详见项目说明
1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载体验!下载完使用问题请私信沟通。 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于TensorRT的高性能单目标跟踪推理c++源码(支持OSTrack、LightTrack)+使用说明.zip 基于 TensorRT 的 C++ 高性能 单目标跟踪 推理,支持单目标跟踪算法 OSTrack、LightTrack。 其中 OSTrack 为ViT模型,适用于服务端计算设备,LightTrack 为NAS搜索出来的轻量CNN架构,适用于边缘端计算设备。请按需使用。 1. 下载onnx模型 [google driver](https://drive.google.com/drive/folders/16ZqDaxlWm1aDXQsjsxLS7yFL0YqzHbxT?usp=sharing) 或者 跟踪教程自己导出 2. ```bash cd Track-trt/workspace bash compile_engine.sh ``` 3. build ```bash # 修改CMakeLists.txt中 cuda/tensorrt/opencv 为自己的路径 cd Track-trt mkdir build && cd build cmake .. && make -j4 ``` 4. run 视频文件输入: ```bash cd Track-trt/workspace ./pro 0 "bag.avi" ``` 摄像头输入: ```bash cd Track-trt/workspace ./pro 1 0 ``` 图片序列输入: ```bash cd Track-trt/workspace ./pro 2 "Woman/img/%04d.jpg" ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值