Point tracking
SpatialTrackerV2: 3D Point Tracking Made Easy
tag: ICCV'25, 3D, multi-view
详细读一下SpatialTrackerv2的论文。
-
估计查询点的3D轨迹\(\mathcal{T}\)时,将其分解成了相机运动\(\mathcal{T}_{ego}\)和物体运动\(\mathcal{T}_{object}\)两部分。
-
\(\mathcal{T}_{ego}\)
初始的深度估计和相机运动:基于VGGT。
-
联合位姿优化
提出SyncFormer,迭代地同时优化:UV空间的轨迹\(\mathcal{T}^{2d}\);相机坐标系的轨迹\(\mathcal{T}^{3d}\);可见度权重\(p^{vis}\);动态权重\(p^{dyn}\)。相机的位姿\(\mathcal{P}\)用BA得到。
2D embeddings和Cotracker3一样,3D embeddings包含3d相关性特征等。其中,3d相关性特征是在归一化point map中当前的点与邻居点的相对位移进行harmonic positional encoding得到的,并且在多分辨率上都进行了特征编码。
SyncFormer调整完一轮\(\mathcal{T}_{k+1}^{2d}, \mathcal{T}_{k+1}^{3d}, p_{k+1}^{dyn}, p_{k+1}^{vis}\)后,通过Procrustes analysis对齐3d轨迹到世界坐标系,构建BA优化得到相机位姿\(\mathcal{P}_{k+1}\)。
-
训练
在17个数据集上训练。分为三大类:带track gt, pose gt的RGB-D数据;带pose gt的RGB-D数据;仅有pose gt或无标注的。
训练分三个阶段。一阶段,训练前端的网络(VGGT改的估计视频深度和初始相机位姿),64张H20。二阶段,训练SyncFormer,8张H20训3天。三阶段,固定前端网络中的交替注意力层,训整个框架。
-
-
实验结果
主要结果是在TAPVid-3D上对比3d tracking的精度。在3d point tracking上是sota。
深度估计,在室内(tum dyn, bonn, sintel)和室外(kitti, sintel)含动态物体的数据集,比VGGT和MegaSam好(各有优劣)。
相机位姿估计,在室内外(tum dyn, lightspeed, sintel),和MegaSam差不多。
2D tracking也是SOTA。
Related works about point tracking
整理一下tracking any point最近的related works
2D point tracking
-
CoTracker: It is Better to Track Together
ECCV'24,2d,阶段性代表作
23年7月cotracker挂arxiv上。24年10月这一版应该是cotracker2。一般都叫cotracker了。meta+牛津故事核心是,同时跟踪多个点比只关注一个点要好,因为可以通过交换信息理解场景/物体的整体运动。
- 用Transformer进行联合跟踪,并对track进行迭代更新。中间用了每个点周围的correlation features进行更新。
- 处理长视频用的是sliding window。
- 使用了Proxy tokens作为attention的信息中转,提高了计算效率(如果点的个数很多那attention会开销很大)。
- 用了Support points,为被追踪点提供信息。
实验,在TAPVid-Kubric上训练,在tapvid-davis, tapvid-rgb-stacking和pointodyssey上测试。另外也在dynamic replica上测试。主要结果是2d point tracking。
-
CoTracker3: Simpler and Better Point Tracking by Pseudo-Labelling Real Videos
2d,阶段性代表作
24年10月挂arxiv上。meta+牛津有offline和online两个版本:
- offline版本是把整个video一起处理,支持正向+反向两个方向估计track,并且能更好处理遮挡问题和估计长时间的track。但是受计算资源限制。
- online版本以sliding window对video处理,只能对点进行正向track的估计。
方法上提出了更精简高效的框架:
- 借鉴了LocoTrack的4d correlation概念,在此基础上进行了简化,只用一个MLP来处理相关性特征。
- 特征提取,迭代更新,proxy token等与cotracker没啥差别。
提出生成伪标签的方式增大训练数据量:
- 之前很多是用的合成数据Kubric,需要给真实数据生成gt。
- 用了多个teacher models,包括Cotracker3(online+offline), Cotracker, TAPIR。学生模型就是一个在合成数据集上进行了预训练的CoTracker3。
- 在真实数据上,先用sift等选出“更容易track”的点,然后随机选一个教师模型生成伪标签。
实验:
- baseline是2d point tracking。
- 在tapvid,RoboTAP(一个真实序列,涉及机器人操作),DynamicReplica(合成数据集)上测试。
-
两种测试模式,first query和strided query。
- first模式,以物体上的点第一次出现的时间为query,后面一直追踪。
- strided模式,追踪点每隔5帧被查询一次。
- 所以一般first的结果要比strided要稍差。
局限
- offline模型受计算资源限制,online模型又无法从更全局的视角更好处理遮挡和长时间track
- 选什么点进行track会稍微影响精度(tab6),并且对于“更好track的点”的结果更好(因为半监督时选的sift)
- 精度上限受teacher models的bound。
- 用于微调的真实数据集主要包含人类和动物,对于其它场景的表现还有待观察。
-
Local All-Pair Correspondence for Point Tracking (LocoTrack)
ECCV'24,2d,阶段性代表作方法上:
- 提出4d correlation,即把查询点周围小区域与目标帧的周围小区域计算匹配关系。
- 针对4d correlation设计了一个轻量的编码器。
- 代码用JAX实现。
实验上:
- 主要测的是2d point tracking。
- 4天8张3090训练。在Kubric上训。在kinetics, davis, rgb-stacking上测。
- 速度比cotracker快。1w个点花一两秒,10w个点花十几二十秒。
-
Tracking Everything Everywhere All at Once
ICCV'23 Best student paper,2d,阶段性代表作方法上:
- 引入了quasi-3d canontical volume。
- 有点迷没看懂,回头仔细看看。
- PointOdyssey: A Large-Scale Synthetic Dataset for Long-Term Point Tracking
ICCV'23,2d,dataset,PIPs++
提出了个更长序列的2d合成数据集。
提出了个方法叫PIPs++,用1d卷积代替了mlp-mixer,能处理任意长序列的特征。
3D point tracking
-
SpatialTracker: Tracking Any 2D Pixels in 3D Space
CVPR'24 highlight,3d,阶段性代表作方法上:
- 将2d的图像特征,通过predicted depth (ZoeDepth)给lift到3d,并将它们投影到triplane进行高效表示。
- 是在相机坐标系下进行的表示,没有考虑相机位姿,也没有把所有帧都warp到统一的世界坐标系。(在spatialtrackerv2的分类属于type II。)
- 用了ARAP(as-rigid-as-possible)约束,约束各个运动部分尽可能保持刚性。具体来说,给每个轨迹估计了一个rigidity embedding,然后两个embedding之间来算刚性相似度,进而进行带权的约束。
实验上:
- 2d tracking结果和3d tracking结果。
- 2d tracking中,用gt depth比ZoeDepth要好一点。
- 是3d tracking的baseline。不过也可以把2d的方法lift。
- Multi-View 3D Point Tracking
ICCV'25,3D,multi-view
将多视角的2d特征给lift到3d进行融合,再根据查询点的kNN的特征对track进行迭代更新。
特征提取的模块和CoTracker系列+SpatialTrackerv1一样的,就是一个CNN提取金字塔特征。
迭代更新的模块是follow CoTracker2。
在multiview-kubric上进行训练。3d tracking实验结果似乎比spatialtrackerv2要好(PStudio这个序列)。但是其用了多个视角进行融合,设定更偏向MVS,所以感觉合理。
但是2d tracking的结果没CoTracker3好。
- TAPIP3D: Tracking Any Point in Persistent 3D Geometry
3D,阶段性代表作
用MegaSAM对RGB序列给出depth和camera pose,将2d feature map给lift到3d,并且变换到统一的世界坐标系下(一般是第一帧),再在3d中以kNN作为query point的邻域,与其他帧的邻域进行融合。
在spatialtrackerv2的分类属于type III。
其他领域的相关工作
vggt
- FastVGGT: Training-Free Acceleration of Visual Geometry Transformer
在vggt中选择token,只在这些token中做attention,加快速度,节省开销,并且不用重新训练。有可能可以抑制误差累积。
数据集
Point tracking 类
3d
-
TAPVid-3d
github, paper
3dtracking的。有adt, panoptic studio(pstudio), drivetrack三个子集。时长从几秒到十秒不等,4569个clip,25-300帧/clipdrivetrack数据集,应该是waymo数据集转换后的名字,waymo数据集的motion数据集至少要4.3T或更多。
mdwc了下载这个数据集预处理怎么要这么大空间。
https://huggingface.co/datasets/ZhengGuangze/TAPVid-3D/tree/main,这个好像是预处理后的,一共480G。
但是根据issue,tapvid3d作者说它的电脑上只占了138GB。
2d
-
合成数据集,是长序列,但是是2d。30fps,平均2k+帧一个序列。
数据集在这下载。
下好了。
-
2d point tracking主要的benchmark。测试集和训练集不一样。
本地已经有可供cotracker3的测试集。已在cotracker3上成功evaluate.
-
2d point tracking的benchmark。
-
EgoPoints是验证集,K-epic是训练集。
2d point tracking的新benchmark,WACV'25。
egocentric的视频,存在剧烈晃动,物体/点频繁进出画面/遮挡。有大量追踪点消失后又重现。
- 序列长度不一,从24帧到2361帧,普遍在几百帧。共有517个序列。
- gt npz:
- trajs_2d: (221, 7, 2) #T, N, 2
- valids: (221, 7)
- visibs: (221, 7)
- vis_valids: (221, 7)
- out_of_view: (221, 7)
- occluded: (221, 7)
- dynamic_obj_tracks: (7,)
提出了K-EPIC数据集做训练,semi-real,结合静态场景(epic-fields)和合成的动态3d物体(kubric)。
- 序列长度32帧,共有11500个序列
- gt npz:
- trajs_2d: (24, 2628, 2) #T, N, 2
- visibs: (24, 2628)
- valids: (24, 2628)
- is_synthetic: (24, 2628)
Video depth类
- [KITTI]
- [TUM-dynamic]
- [Sintel]
Camera pose
- [TUM-dynamic]
- [Lightspeed]
- [Sintel]
评价指标
-
OA, Occlusion Accuracy.
预测的遮挡与否的标签的准确率,\(OA=\#_{correct_label}/\#_{points}\)
-
APD, APD3d.
对所有可见点的轨迹,计算在设定的距离误差阈值(1, 2, 5, 10cm...)内的点的比例。对所有距离阈值下的APD取平均。
-
AJ, Average Jaccard.
设置距离阈值\(\delta\),统计以下三类点的数量: 1. True Positive: 点的gt是可见,模型预测是可见,并且误差小于等于\(\delta\)。 2. False Positive: 点的gt是遮挡,模型预测可见;或者,点的gt是可见,模型预测可见,但误差大于\(\delta\)。 3. False Negative: 点的gt是可见,模型预测被遮挡。
计算\(AJ=TP/(TP+FP+FN)\),并对所有设定阈值下的AJ取平均。