论文名:CoTracker: It is Better to Track Together
论文作者:Nikita Karaev et.al.
发表时间:2023-12
论文地址:https://arxiv.org/abs/2307.07635
源码:https://github.com/facebookresearch/co-tracker
摘要
CoTracker的提出:论文提出了CoTracker,这是一种基于transformer的模型,能够在视频序列中联合跟踪密集点。与现有方法不同,CoTracker考虑了点之间的相关性,从而显著提高了跟踪的准确性和鲁棒性。
技术革新:CoTracker引入了几个技术创新,包括虚拟轨迹的概念,这使得CoTracker能够在单个GPU上联合跟踪多达70k点。此外,CoTracker在短窗口上进行因果操作(适用于在线任务),但通过在更长的视频序列上展开窗口进行训练,从而实现并显著提高了长期跟踪性能。
跟踪性能:论文展示了CoTracker在定性和定量上的跟踪结果。在定性结果中,即使在点被遮挡或离开视野的情况下,CoTracker也能长时间跟踪点。在定量结果中,CoTracker在标准基准测试中超越了所有最近的跟踪器,通常有相当大的优势。
代码和模型权重的可用性:论文提供了代码和模型权重的链接,以便其他研究人员和开发人员可以访问和使用CoTracker。
1.引言
点对应建立的重要性:在计算机视觉中,建立视频中点的对应关系是一个基础问题,对于许多下游任务都是必要的。这涉及到在包含动态对象和移动摄像机的视频序列中,确定同一物理点在所有其他帧中的位置。
现有方法的局限性:现有的最先进方法通常独立地跟踪点,忽略了它们之间的相关性。这些方法通常专注于跟踪稀疏的点集,并且将它们视为统计独立的。
2.相关工作
光流估计(Optical flow):介绍了光流估计的发展历程,从早期基于颜色恒常性方程的方法到现代使用深度学习的方法。特别提到了FlowNet和DCFlow等深度学习模型,以及它们在后续工作中的使用。
多帧光流(Multi-frame optical flow):讨论了将光流估计扩展到多帧的方法,包括传统方法如卡尔曼滤波,以及现代方法如RAFT的多帧应用和VideoFlow。
联合跟踪(Joint Tracking):提到了早期手工设计的联合跟踪器,以及现代深度学习架构在多对象跟踪方面的应用,尽管这些工作主要集中在对象跟踪而非点跟踪。
跟踪任意点(Tracking any point):讨论了TAP-Vid和PIPs等方法,它们能够处理遮挡并重新启动跟踪,但存在一些限制,例如无法跟踪长时间被遮挡的点。
合成数据集的使用:讨论了合成数据集在训练跟踪器和光流估计器中的作用,因为它们提供了准确的注释,并且已经证明了能够泛化到真实世界数据。
3.CoTracker
算法解析
目前主流的运动跟踪方法主要有两类:一个是光流法,即直接估计视频帧中所有点的瞬时速度,但是很难估计长期运动(尤其是遇到遮挡和相机帧率低的时候)。另一个是跟踪法,即选择有限点直接在连续时间上进行跟踪,但是没有利用同一物体上不同点的相互作用关系。而CoTracker就同时利用了两种方法的思想:使用Transformer来建模同一物体上点的相关性,并且使用滑动窗口来跟踪超长视频序列!CoTracker的输入是视频和可变数量的轨迹起始位置,输出是整条轨迹。注意,网络的输入可以是视频序列中的任意位置和任意时间!整篇论文其实没有特别多的数学推导,但是文章是思想很巧妙。CoTracker的具体原理如下。首先假设点是静止的来初始化点坐标P,然后使用CNN来提取图像特征Q,为了节省显存,图像特征为原图的1/32大小,同时还会加上一个标记v表示目标是否被遮挡。之后,输入token(P,v,Q)就被馈送到Transformer中进行相关性建模,得到输出token(P’,Q’)表示更新后的位置和图像特征。
-
输入帧(input frames It):
- 输入是一系列视频帧,从It到It+n。
- 视频帧中有多个目标需要跟踪。
-
起始位置(starting locations P):
- 这些是需要跟踪的目标的初始位置。
- P的维度是(N,2),其中N是目标的数量,2代表每个目标的位置坐标(x, y)。
-
卷积神经网络(CNN):
- 每一帧通过CNN提取特征,生成特征图(image features ϕ(It))。
- 这些特征图表示为彩色的热图,每个像素包含特征信息。
-
特征广播:
- 起始位置P在特征图中进行双线性插值,得到起始位置在特征图上的表示。
- 这些位置被广播成与特征图相同的维度,用于后续的处理。
-
跟踪特征(track features Q):
- 初始化跟踪特征Q,维度是(N,d),其中d是特征维度。
- Q通过特征图中的起始位置P提取。
-
滑动窗口处理(sliding window processing):
- 使用滑动窗口对特征图进行处理,每个窗口包含连续的多个帧。
- 在每个滑动窗口中,跟踪特征Q随着时间进行更新,以捕捉目标的运动。
-
估计的轨迹(estimated tracks P^):
- 最终输出是估计的轨迹P^,维度是(T′,N,2),其中T′是时间步数,N是目标数量,2代表每个目标的位置坐标。
- 这些轨迹表示目标在视频中的运动路径。
总的来说,CoTracker架构通过卷积神经网络提取视频帧的特征,并使用滑动窗口机制跟踪目标的运动。起始位置和跟踪特征被用于估计目标在视频中的轨迹。这种方法可以高效地跟踪多个目标,并生成精确的运动路径。
CoTracker的亮点在于设计了滑动窗口和循环迭代来进行长视频的跟踪。对于长度超过Transformer所支持的最大长度T的视频序列,会使用滑动窗口进行建模。滑动窗口的长度为J=⌈2T′/T-1⌉,并且对于每个滑动窗口,会进行M次迭代。也就是说总共有JM次迭代运算。对于每一次迭代,都会对点的位置P和图像特征Q进行更新。需要注意的是,这里的标记v并不是通过Transformer来更新的,而是在M次迭代结束以后根据计算结果更新的。还有一个unrolled learning是啥意思呢?这里主要说的是针对半重叠窗口的学习方式。由于这种学习方式不会导致计算成本的大幅增加,因此理论上CoTracker可以处理任意长度的视频序列。此外unrolled learning可以跟踪后出现在视频中的点。
算法实现过程
初始化跟踪轨迹(Initialized Tracks):
- 输入视频序列的初始帧(或多帧)用于初始化跟踪轨迹。这些轨迹包括目标的位置和特征。
迭代更新(Iterative Updates):
- 在每个迭代步骤中,更新轨迹的位置和特征。总共有M次迭代更新。
特征提取(Feature Extraction):
- 从视频帧中提取相关特征。通过一个卷积神经网络(CNN)来提取特征映射φ(I_t),用于后续的匹配和关联。
相关性特征计算(Correlation Features Calculation):
- 计算多个尺度上的相关性特征C^(m)。这些特征用于捕捉对象之间的关系和匹配度。
位置预测与特征更新(Position Prediction and Feature Update):
- 根据初始预测位置P̂^(0)和特征Q^(0)进行后续帧的预测和更新。更新后的轨迹位置和特征用于下一次迭代。
跨轨迹/时间注意力机制(Cross-track/Time Attention Mechanism):
- 使用Transformer网络的跨轨迹/时间注意力机制来整合不同轨迹和时间帧的信息,提高预测的准确性和一致性。
- Transformer模块进行6次迭代更新,整合来自不同时间和轨迹的特征。
输出结果(Output Results):
- 最终输出估计的轨迹和更新后的特征。这些结果包括每个目标在不同帧中的位置和特征。
符号含义
- I_t:当前帧的图像数据。
- φ(I_t):通过卷积神经网络提取的帧特征。
- P̂^(m):第m次迭代更新后的预测点位置。
- Q^(m):第m次迭代更新后的轨迹特征。
- C^(m):第m次迭代中计算的相关性特征,在S个尺度上计算。
- ΔP̂:每次迭代更新后的预测位置增量。
- ΔQ:每次迭代更新后的特征增量。
- v̂:预测的目标可见性,在最后一次迭代后计算。
详细步骤
-
输入处理:
- 输入视频序列的初始帧被处理以初始化跟踪轨迹,初始轨迹包括目标的位置和特征。
-
特征提取:
- 对每帧图像I_t,通过卷积神经网络提取特征映射φ(I_t)。
-
相关性特征计算:
- 使用多尺度相关性计算特征C^(m),这些特征帮助捕捉目标之间的关系。
-
迭代更新:
- 初始的轨迹位置P̂^(0)和特征Q^(0)被输入,每次迭代更新后计算新的轨迹位置P̂^(m)和特征Q^(m)。
- 在每次迭代中,利用相关性特征C^(m)和轨迹特征Q^(m)进行位置预测和特征更新。
-
跨轨迹/时间注意力机制:
- 使用Transformer网络进行跨轨迹和时间的注意力机制,整合不同时间帧和轨迹的信息,提高预测的准确性。
- Transformer网络进行6次迭代,每次迭代都在跨时间和轨迹的信息上进行整合和更新。
-
输出结果:
- 最终输出估计的轨迹和更新后的特征,包括目标在每个帧中的位置和特征信息。