Learning to Track with Object Permanence阅读笔记
(一) Tilte
前言: 跟踪问题相比检测问题来说,除了当前帧检测出来的目标之外,跟踪问题如何能够利用上之前的检测来对当前帧不可见的目标(由于遮挡导致无法检测到目标)来进行预测呢?通过引入recurrent memory module的方式。仔细地读了一遍这篇文章,感觉还需要结合代码才能理解这篇文章,实现上相对来说还是比较复杂的.
论文:https://arxiv.org/abs/2103.14258
代码:https://github.com/TRI-ML/permatrack
(二) Summary
研究背景
online multi-object tracking 中dominant方法就是Tracking-by-detection,并且alternates between localization以及association steps(这里不是很理解,关联部分的源码理论上了解还不足)。Tracking-by-detection的方式在很大程度上依赖瞬时观测的质量,当物体不是完全可见时,会出现失效的情况。相比于人类的跟踪,一旦物体被识别,我们就会意识到它的物理存在,即使在完全遮挡下也能大致定位它。目前tracking-by-detection的方式还是无法解决完全遮挡情况的预测问题。
更加详细的说明是:目前tracking-by-detection的做法是利用detector检测目标的location,然后再将location和之前的trajectories(轨迹)链接到一起,一旦detector无法检测到目标,就会造成轨迹的fragment,即使是对目前ByteTrack(写这篇博客的时间MOT17的SOTA)来说,同样也无法解决超过30(可以设定)帧未检测到的目标,30帧之内的目标主要可以通过appearance feature来和轨迹关联起来。从根本原因上来看是遮挡造成了locations出现丢失,即文中提出的localization step is completely independent from the previous history.
本文方法:
本文中引入了联合目标检测和跟踪的端到端可训练方法,在CenterTrack框架上,输入是pairs of frame,同时扩展到任意长度的视频中。
此外增加了一个spatio-temporal, recurrent memory module,能够利用之前历史推理当前帧目标的位置以及identity,是在线方式。
对于如何训练这个模型,首先构建了一个大规模的合成数据集(为不可见目标提供了标注),并提出了在遮挡情况下监督tracking的几种方式。最后在合成和真实数据上联合训练。
本文贡献
- 端到端和joint object detection and tracking that operates on videos of arbitrary length。
- 怎么对不可见的目标的轨迹通过在线的方式进行学习。
- 怎么弥补合成数据和真实数据之间的gap
实验结果:
在KITTI以及MOT17上取得了outperform the state of the art的结果。Tesla V100 GPU速度10FPS
(三) Research Object
本文针对long range 遮挡问题,在CenterTrack的基础上引入spatial-temporal module来对完全遮挡的目标进行预测,保持trajectory的连贯性,从而提升模型的检测性能。
(四) Problem Statement
就本文提到的tracking-by-detection工作中。博主大概归纳成两个思路:
- 一种是基于detection之后,改进data association的工作(主要集中在计算关联相似性的特征上(motion,appearance feature,trajectory feature,human pose feature),匹配上应该是使用的匈牙利匹配,除此之外,还有一些data association流程上的改进,比如ByteTrack的二次关联方法。
- 另外一种就是在Siamese架构上(pairs input)上的一些工作,这些主要是考虑到tracking任务本身就是基于视频的一个spatial-temporal任务,如何构建detections在时间上的连续性(这部分的工作了解不多,不知道这些方法在inference以及指标上的效果,主要是不太清楚引入比如说本文的ConvGRU是否能够保证实时的运行效率,或者说针对location预测的问题(序列预测),相比于传统的线性估计器,ConvGRU又能带来多大的提升呢?)
问题:
- 这种两种方式的性能差异(指标+FPS)到底有多大?
博主认为趋势上肯定是要向着序列问题发展,之前实验过FariMOT(标准的第一种方式),在训练过程中实际上不需要考虑frame之间的时序关系,也就相当于最终网络没法学习时序信息,单纯依靠iou+网络学习到的差异化appearance+线性估计器(kalman)来进行关联- 实际上基于我们增加时序信息的目的是当前的detections中考虑先前的detection结果,假定我们的detector无限好,则对于不考虑时序问题的模型会出现trajectory break的问题(就当前的数据关联算法来看是没法解决long range遮挡的问题的)。当前博主的思路主要有两个:修改数据关联的方式,第二个可能就是从下图中也可以看出来的对于long range遮挡处理较好的本文中的方法
这种检测情况都能检测出来,属实离谱(话说每次看论文都觉得离谱,爽啊,哈哈哈),博主觉得这种考虑时序的问题,主要是解决fragmented trajectory的问题,也就是轨迹线的变化问题,然而实际上我们并不需要检测出完全遮挡住的目标,我们只需要保证long range完全遮挡前后能够保持相同的id即可,也就能够指标上的目的。实际在online的tracking中,通过给出完全遮挡的边界框来维持kalman估计器有效,能够减少丢失轨迹 T l o s t \mathcal{T_{lost}} Tlost的数量。
(五) Method
5.1 CenterTrack框架
输入:a pairs of frames { I t − 1 , I t } \{I^{t-1},I^t\} { It−1,It}以及 t − 1 t-1 t−1时刻的locations编码 H t − 1 H^{t-1} Ht−1,locations编码是上一个时刻detected objects对应的heatmap。通过concatenate方式连接在一起。
骨干网络: f f f,输入经过骨干网络后得到特征图 F t = f ( H t − 1 , I t − 1 , I t ) F^{t}=f\left(H^{t-1}, I^{t-1}, I^{t}\right) Ft=f(Ht−1,It−1,It)
预测head:
- 当前帧的目标中心 { p ^ 0 t , p ^ 1 t , … } \left\{\hat{\mathbf{p}}_{0}^{t}, \hat{\mathbf{p}}_{1}^{t}, \ldots\right\} { p^0t,p^1t,…}
- 边界框的size: { s ^ 0 t , s ^ 1 t , … } \left\{\hat{s}_{0}^{t}, \hat{s}_{1}^{t}, \ldots\right\} { s^0t,s^1t,…}
- 相对于上一帧的偏移: { d ^ 0 t , d ^ 1 t , … } \left\{\hat{\mathbf{d}}_{0}^{t}, \hat{\mathbf{d}}_{1}^{t}, \ldots\right\} { d^0t,d^1t,…}
预测阶段,首先根据当前的预测以及相对于上一帧的偏移确定上一帧的位置得到上一帧的中心点位置 p ^ i t − d ^ i t \hat{\mathbf{p}}_{i}^{t}-\hat{\mathbf{d}}_{i}^{t} p^it−d^it,基于这个位置找到 t − 1 t-1 t−1时刻最接近的那个中心点 p ^ ∗ t − 1 \hat{\mathbf{p}}_{*}^{t-1} p^∗t−1,也就相当于将中心点关联上了。
本文中进一步指出当前CenterTrack中存在的问题是:仅考虑一对frame简化了模型的体系结构,但限制了模型的表现能力。
5.2 将pairs frame扩展到video-level model
-
输入frames为 { I 1 , I 2 , … , I n } \left\{I^{1}, I^{2}, \ldots, I^{n}\right\} { I1,I2,…