一段开门视频里,每个像素的三维坐标都算准了,门转了多少度,轨迹答不上来

假设一段视频拍的是开门。有人把每个像素在每一帧里的三维坐标都估计了出来,精度还不错。你大概会以为,这样就把"门怎么动"算清楚了。其实没有。门绕铰链转了多少度,这个量从这一大堆点轨迹里读不出来。

这篇专题就从这个缺口往下走。先弄清轨迹到底缺了什么,再看观测端和表示端分别怎么补上缺的那一块,然后用两组独立实验验真,最后把能力边界划清楚。

1. 每个点都跟住了,为什么还是不知道它怎么动?

回到最朴素的直觉。算法把每个像素在每一帧的三维坐标都算出来之后,把同一个像素在各帧的位置连起来,就得到一条三维曲线。这条曲线记录的是"这个点去了哪儿"。MoSE3 的开篇直接点破了它的短板:这样的点轨迹是一条 3 个自由度(DoF)的平移曲线,它不携带旋转信息,不携带刚体分组,也不区分一个关节物体的不同活动部件MoSE3。

这里有个容易忽略的地方。轨迹的数量远远多于运动的自由度。一个刚体在空间中的运动只有 6 个自由度,三个平移加三个旋转,而我们为它上面的每一个像素都估了一条轨迹。多出来的这些轨迹并不产生新答案,它们的作用是约束。这就像解一个方程数远多于未知数的超定方程组:多余的方程不会给你新的解,却把解钉得唯一,而且每一条多余方程都能反过来检验这个解自不自洽。稠密轨迹就是这样的冗余测量,它的价值在约束,不在数量。

那为什么单看一个点定不出旋转?原因很具体。旋转描述的是一组点相对彼此怎么转。只盯住一个点,你能看到它的位置变了,却分不清这个变化是整体平移造成的,还是绕某个轴转动造成的,也分不清它是自己在动,还是被别的部件带着动。要让旋转变成一个可辨识的量,必须有一组点保持相对距离不变地一起运动,也就是共动(comotion)。有了这样一组共动点,它们之间的相对位姿变化才能唯一地确定出一个旋转。共动关系还顺手定义了"部件":哪些点属于同一个刚体,就看它们是不是共动。一个关节物体的铰链分割,本质上就是一次共动聚类。

顺带说一句,这也不是 2026 年才冒出来的想法。Vogel、Schindler 和 Roth 在 IJCV 2015 里就把动态场景描述成一组做刚体运动的平面段,并联合求解分割与刚体运动,用一次离线迭代优化把"先聚类、再拟合刚体"做出来,当年在 KITTI 上还是同时兼顾双目与光流的最优结果之一Vogel2015。所以要讲清楚的是这条思路本身,不是"谁最先想到"。

还有一件事先埋在这里:所有三维位置都写在一个"世界坐标系"下,而这个坐标系不是天然给定的,它是被选出来的。这一点放到第 5 章展开。

把这条缺口放到整条方法链上看会更清楚。下面是 MoSE3 的方法总览。它最左端就是一堆稠密轨迹,中间和右边多出来的东西,正是后面几章要解释的缺口。

图注:MoSE3 在冻结的 π³ 几何骨干上接了一个可训练的跟踪分支,先输出稠密三维点轨迹与逐像素刚性嵌入;再对世界系下的轨迹做一次加权 Horn 拟合,闭式解出逐像素 SE(3),权重来自刚性嵌入的相似度。因为 Horn 拟合可微,SE(3) 的监督信号能反传回轨迹与刚性嵌入,整条链路端到端训练MoSE3

所以,点轨迹只是"每个点去哪儿了"的位置记录。它把运动压缩成一堆位置,却没有把运动本身讲出来。要让"怎么动"成立,得先找到一组保持相对距离的点共同说话。

2. 怎么把视频、多相机和一摞散图,塞进同一个查询里?

在"把位置压成结构"之前,还有一个更靠前的动作要先做:把输入规范化。因为要算运动,你就得能回答"同一个物理点,在另一个时刻、另一个视角里是哪一个"。这件事怎么问,直接决定了你能不能同时吃下视频、多相机和一堆无序照片。

ARROW 给出的答案是一个查询原语,三样东西:源像素、目标观测时刻、参考坐标系。它沿用了此前 D4RT 式的三件套,但砍掉了一样关键的东西,也就是显式的"时间位置编码"ARROW。

砍掉它是有原因的。视频模型默认"帧是有先后顺序的",于是可以用位置编码告诉网络"这是第几帧"。可一旦输入变成多相机阵列,或者一摞无序拍摄的散图,"第几帧"这个假设就失效了。下面这张概念图把三种关联方式摆在一起对照。

图注:三面板对照。一栏是 order-aware 的全局上下文,靠位置建立关联;一栏是 order-invariant 的全局上下文,没有固定顺序可利用;另一栏改成内容生成的 ID token,让每张观测图的身份与全局上下文共享同一个 embedding 空间,从而建立与顺序无关的关联ARROW

ARROW 的做法是给每张图配一个内容生成的 ID token。要特别说明一点,这些 ID token 既不当作相机位姿使用,也不绑定到后续的位姿恢复上。它只在回答"我现在问的是哪张图"这个问题。这样,一个查询就被拆成三个对得上号的槽位:源像素长什么样、问的是哪张观测图、以哪张图为参照系。因为身份由内容生成而不是由序号指定,同一个查询接口就能同时吞下视频、多相机和无序图像。

下面这张是 ARROW 的端到端结构图,可以看到查询是怎么跟上下文交互的。

图注:ARROW 的完整架构。多视角编码器产出一份共享的图像上下文,并为每张观测图生成一个内容生成的 ID token,全程不含时间位置编码。查询编码器把源像素的 RGB patch、(u,v) 坐标和三个 ID token 组合起来,各查询独立地与全局上下文做 cross-attention,解码出三维预测。一份编码同时服务稀疏跟踪与稠密重建ARROW

这套设计还有个附带的好处:它不靠逐帧链式传播。传统做法里,某一帧的误差会顺着"帧到帧"的接力往下传;而这里的每个查询都直接对着完整编码的序列提问,参考可以选目标相机,也可以选第一台相机。误差不会沿着一条链累积。

顺带交代两个边界。真实的视频长程跟踪标尺离这里很远:TAPVid-3D 把三类来源很不一样的真实视频统一起来,其中 Aria Digital Twin 子集的剪辑最长到 300 帧,属于同一类查询要撑住的量级TAPVid-3D。再看另一个极端,专门的多相机跟踪器 MVTracker 要先把 V 个相机的内外参和多视角深度都拿到手,才能把每帧升到统一的点云里做 kNN 关联MVTracker。ARROW 的价值就在于,它把这类专用代价吸收进了同一个查询接口,而不是为每种输入单独造一套管线。

所以,把"哪一帧"从时刻序号换成内容生成的 ID,是让同一个查询在视频、多相机和散图之间通用的关键一步。规范化首先发生在观测端。

3. 共动关系怎么把一堆位置,压成每个部件的 SE(3)?

观测端规范化解决的是"问谁"。接下来要解决的是"把回答压成什么"。这里回到 MoSE3 的完整链条,它由四步组成,可以顺着读成一条流水线。

第一步,网络为每个像素输出一个刚性嵌入(rigidity embedding),一个经过 L2 归一化的向量。它的作用是给每个点一个可比较的"刚性身份",让属于同一个刚体的点在这个空间里靠得近。第二步,拿嵌入之间的内积、过一个带温度参数的 softmax,得到点与点之间的软共动权重。注意这里是软聚类,不是硬切分。第三步,在每一个共动簇内部,用加权 Horn 拟合把该簇的点对应关系解成一个刚体变换。Horn 拟合和 Procrustes 是同一类东西:给你两组一一对应的点,它用闭式解一次算出最优的旋转加平移,不需要迭代。第四步,因为 Horn 是闭式的、并且可微,SE(3) 的监督可以直接反传回轨迹和刚性嵌入,于是整条链能端到端训练。哪怕 SE(3) 的真值很稀缺,模型照样能学。

有个设计细节值得单独提一句。刚性嵌入这个头,是刻意做成与查询帧无关的。理由很直白:一个物体是不是刚体,是场景自身的属性,跟你现在问哪个时刻无关。所以同一个网络、同一份特征,两个头带的是不同的等变先验。正因为刚性嵌入与查询无关,它算一次就能被所有查询复用。这不是工程上的省事,而是结构上的必然。

这套"先按部件把问题切开,每个子问题各用一个闭式小解算搞定,再合起来"的组织方式,本质上是分治:先把整帧运动拆成互不干扰的若干刚体子问题,每个子问题只需求一个 SE(3),最后并起来就是全帧的运动。分治在这里之所以成立,是因为刚体这个假设天然把点分成互不重叠的组,组与组之间不用协调。

要看清这一步多补了什么,最好的办法是拿一个"只有轨迹"的前馈基线来对照。Track4World 就是这样的基线:它从单目视频出发,一次性估计所有帧、所有像素在世界系下的三维位置,结构上是输入帧、全局场景表示、稀疏到稠密的场景流解码、世界系稠密跟踪这样一条链Track4World。

图注:Track4World 的前馈流水线。输入视频帧先经过图像编码器与三维基础模型,得到全局场景表示(几何特征、点云、相机位姿);再由稀疏到稠密的场景流解码器预测任意时刻之间的二维与三维联合 flow,并靠二维到三维相关模块提升效率、引入二维与三维联合监督;最后把成对 flow 融合成世界系的稠密三维跟踪。整条链里没有显式的刚性聚类,也没有 SE(3) 输出Track4World

把这张图和第 1 章那张 MoSE3 流水线并排看,分界就出来了:同样是几何底座,Track4World 停在"每个像素一条位置轨迹",MoSE3 在轨迹之后多加了一整层显式的刚性嵌入与闭式 Horn 拟合。差的正是这一层。

回到 Vogel 2015 那句对照:这套"先聚类、再拟合刚体"的思想当年就有,MoSE3 只是把离线迭代优化换成了一次前馈、可微的 Horn 拟合。变的是求解方式,没变的是那条先验。

所以,部件级 SE(3) 不是从一个更大的输出头里直接长出来的,而是从点与点之间的共动关系里挤出来的。结构来自约束,不来自容量。这句话下一章要用数字来验。

4. 收益来自"共动结构",还是来自更大的回归头?

上一章最后那句话是个可以被反驳的判断。既然不能只靠嘴说,就干脆用实验来验。这里要先分清本章出现的两组数字各自能证明什么:真正能反驳"容量换结构"这一说的,只有 iTACO 上那组消融;另一组来自 ARROW 的结果只说明统一查询在多类观测上站得住,跟这个判断无关。

先看 MoSE3 在 iTACO 上的数字,这是本章的核心证据。iTACO 是一个关节物体基准,它提供的真值不是普通的位置轨迹,而是每个链接的 SE(3)、关节类型,以及逐像素的可动部件掩码ITACO。正因为真值里带着旋转,这个基准才能直接量旋转误差 RRE,而不是只量位置误差。

图注:iTACO 在合成数据上的关节真值形态。可动部件用橙色标出,静止部件是蓝色;棱柱关节为绿色,旋转关节为红色;右侧渲染出末态,用来检验关节状态预测。这里展示的是 iTACO 方法自身的输出与真值形态,正因为它逐链接地给出这些量,MoSE3 才能把旋转误差单独量出来ITACO

有了这个真值,下面这个对比就有意义了。同一套轨迹,Track4World-Pi3x 在 iTACO 逐像素列上的旋转误差是 28.07 度;把它换成 MoSE3 的刚性嵌入加软共动聚类之后,误差降到 12.30 度,一步就砍掉一半以上。同一个表里还有一个中间态:只把刚性嵌入换成对同一批轨迹做 kNN 聚类,误差是 20.78 度,比所有基线都好,但明显不如完整方法。这一格很关键,它把收益单独归给了刚性嵌入这一层结构。配套的 ADD 也从 24.82 厘米降到 11.37 厘米。

图注:MoSE3 在真实野外视频上的定性结果。每一组是三个时间步,上排是预测的逐像素 SE(3) 运动,用旋转坐标系叠在原图上表示;下排是同一时刻预测出的刚性嵌入。案例涵盖刚体与非刚体,说明这套结构预测并不只在合成域成立MoSE3

如果只看降误差,还可能有人怀疑:是不是干脆换一个更大的输出头去直接回归 SE(3) 也能行?作者做了这个消融。把"轨迹加刚性嵌入加 Horn"整条链,替换成一个直接回归 SE(3) 的输出头,在同样的缩减训练计划下,逐像素旋转误差从完整设计的 17.27 度升到 24.57 度。堆一个直接回归的输出头,反而掉分。这里要提醒一句,上面引用的是逐像素(per-pixel)粒度;在物体或部件级粒度上数字并不相同,两套粒度不能混着比。

另一组数字来自 ARROW,它不是共动结构的证据,只是统一查询这条观测端设计的旁证。ARROW 在 WorldTrack 基准的四个子集上,同时拿到最高 APD 和最低 EPE,四个子集的平均 APD 是 88.14%ARROW。WorldTrack 这个基准是 St4RTrack 立下的:四个子集分别是 Point Odyssey、Dynamic Replica、Aria Digital Twin 和 Panoptic Studio,每个子集 50 段序列、每段 64 帧,用 APD3D 加 EPE 两个指标,走的是世界系下的全局中位尺度对齐WorldTrack。这四个子集的场景差异很大,既有相机大幅平动的动态场景,也有几乎无相机运动的室内棚拍。规范化的统一查询四个子集全部拿第一,连几乎无相机运动的 Panoptic Studio 子集也领先。注意这笔账算的是观测端:它说明"内容生成的 ID token 加统一查询"这套接口能同时吞下形态各异的观测集合,而不是只在某一类输入上凑巧管用。它支撑的是第 2 章"同一个查询在多类观测间通用"那条结论,跟本章要验的"结构优于直接回归头"是两件事。

图注:WorldTrack 四个子集各是什么样。图中四格分别对应 Point Odyssey、Dynamic Replica、Aria Digital Twin 和 Panoptic Studio,每格把预测轨迹与真值轨迹在二维和三维里对齐后展示。这张图只用来交代四个子集的场景差异,数字以基准协议下的表格为准,不要从图里反推任何 APD 数值WorldTrack

轨迹这一侧本身也能做到很强,这个事实要承认。CoTracker3 用 15k 段真实视频的伪标签、25M 参数,在 TAP-Vid 上仍然超过用 15M 视频训练的 BootsTAPIRCoTracker3。这条线的强,恰恰反衬出"结构端"补的是另一件事。

所以这一章的结论要收得准:iTACO 那组消融给出的是直接证据,把轨迹压成结构,也就是共动聚类加 SE(3),才是收益来源;堆一个直接回归的更大输出头会掉分。"结构优于直接回归头"这条结论,只由 iTACO 这一组消融支持。WorldTrack 那组数字不进这个论证,它只说明统一查询在多类观测上有效,请别把它当成共动结构的第二份背书。最后再强调一个很容易踩的坑。WorldTrack 的 APD/EPE 和 iTACO 的 RRE/ADD 是两套协议,前者量世界系下的位置误差,后者量带真值的 SE(3) 旋转误差,TAPVid-3D 的 Jaccard 类又是第三套。它们不能混着比。

基准度量真值形态与粒度本章关键数字
WorldTrackAPD3D / EPE世界系下逐点三维位置,全局中位尺度对齐ARROW 四子集 mean APD 88.14%
iTACORRE / ADDper-link SE(3) 加关节类型加 moving-part mask逐像素 RRE 28.07° 降到 12.30°
TAPVid-3DAJ / APD3D / OAJaccard 类,二维投影与度量三维轨迹并存ARROW 处理最长 300 帧

5. 所谓"世界坐标",是量出来的真值还是我们选定的规范?

前面几章一直在说"世界坐标系下的位置""世界坐标下的 SE(3)"。现在得回头把这个词本身审一遍,因为它比听起来更像一个约定。

所谓世界系,是先做相机估计,再做尺度对齐之后选出来的一套坐标规范(gauge)。它不是天然的度量真值。最干净的证据来自 π³。它干脆把 DUSt3R、VGGT 一类方法一直隐含的"先选一帧当世界系"这一步删掉,改成对输入顺序等变的架构,每张图只预测在相似变换下才定的相机位姿,以及在自身相机系下、只到尺度才定的点图。那个全局的"世界尺度"根本不在模型里,它只在监督阶段被求解器临时拉出来一次π³。

图注:三种处理参考帧的方式对照。Type A 用一个特殊 token 标记参考帧,Type B 用可学习的 embedding 标记参考帧,π³ 则完全取消参考帧,改用相对监督,从而对输入顺序天然鲁棒。这张图说明"选哪一帧、按哪个尺度当世界系"本来就是一次设计选择,而不是数据里自带的事实π³

这个说法可以用一个更熟的场景来体会:在图算法里做遍历,你得先选一个起点。起点换了,每个节点到起点的距离数值都会变,但节点之间谁连着谁、谁离谁近,这层相对结构一点没动。gauge 就是那个"起点选择"。世界系换一个约定,绝对坐标的数值会变,点与点之间的相对关系不变。这正是为什么把"世界系"当成度量真值会出错。

这件事在实际系统里是有代价的。ARROW 的骨干用的是 DA3-Giant,Track4World 和 MoSE3 用的是 π³。这些骨干各自带着 affine 或相似变换层面的不确定性,而这些不确定性并没有消失,它们被吸收进了各自的"世界系"里。换句话说,你在论文表里看到的那个世界坐标,已经包含了一次约定和一次对齐。

第二条边界来自监督数据。MoSE3 的结构监督来自 Art-Kubric 这个合成数据集。它同时提供七类信号,包括按刚体着色的长程轨迹、逐像素 SE(3)、刚体分区和深度MoSE3。

图注:Art-Kubric 的监督信号长什么样。每一行是一个场景,前 3 列是同一段剪辑里采样的三帧 RGB,后 4 列在第三帧上叠加四类监督:按父级刚体着色的长程三维轨迹、用旋转坐标系表示的逐像素 SE(3)、按共享刚体变换划分的逐像素分区,以及深度。这套结构监督来自合成域,因此合成与真实之间的分布偏差会一并进来MoSE3

因为 MoSE3 只用合成运动数据训练,它继承下来的失败面就很清楚:运动快到轨迹跟不上(碰撞、弹跳、被抛接的球),可形变表面找不到可拟合的刚体块(拉伸、折叠),以及薄结构、重复纹理或长时间遮挡让轨迹断掉。这些不是偶发的消融失败,而是分段刚性这条假设本身的边界。它们和 Vogel 2015 里那些老问题几乎一一对应。当年受限的是快速旋转和强非刚性,今天受限的是同一批场景。这条先验的依赖是被完整继承的,不是被绕开的。

所以,世界系是相机估计与尺度对齐选出来的约定,不是天然真值;快速运动、几何先验误差、非刚性形变与合成域偏差会同时污染轨迹、分组和 SE(3) 这三样东西。

6. 收口:轨迹是测量,SE(3) 是压缩后还能逐项检验的结构接口

把两端收回到一起看,ARROW 和 MoSE3 其实不是两个孤立的模型发布,而是同一个机制的两个入口。

ARROW 在观测端暴露的是一个可检验的入口,也就是"内容地址"。同一个查询由内容生成的 ID 指定,所以它能在任何观测集合里被复用,也能被单独验证。前面那张 MoSE3 定性图里逐像素的旋转坐标系和刚性嵌入,则是表示端暴露出来的可检验结构:每个部件拿到的那个刚体变换,都能单独拆出来对。一边是"你问的是哪个点、哪张图、哪个参考系",另一边是"这个部件在空间里怎么转、怎么移",两者都用一套低密度、可以逐项核对的接口,替代了原始那一大堆过完备的测量。

ARROW 这个入口统一之后能吞下多少任务,下面这张样例图给了直观印象。

图注:ARROW 在任意输入图像集合上重建四维场景的三栏样例,三栏分别对应多视角三维重建、三维跟踪与多视角三维跟踪。同一套统一入口同时支撑这三类任务,是"规范化后的查询能被复用"的定性收束,图里不含定量数字ARROW

回到全文那条主线。稠密三维轨迹是一组过完备的位置测量,它既不携带旋转,也不划定部件。想把它变成"运动",得按顺序做两件事:先把"哪一帧、哪个尺度当世界系"这件事当成一次规范选择敲定,也就是定 gauge;再用共动约束把点轨迹压成部件级的 SE(3)。ARROW 和 MoSE3 分别站在观测端和表示端,把这两个动作各做了一半。

这里要诚实地说清楚它不是什么。这套表示还不等于一个已经完成的世界模型。它的每一项结构都依赖前面的约定:世界系依赖相机估计和尺度对齐,分组依赖分段刚性假设,监督依赖合成域数据。它更像一个压缩之后仍然能被逐项检验的结构接口。你能指着某一条轨迹问它对不对,能指着某一个部件问它的旋转是不是这样,能指着某一个查询问它指向的是不是同一个物理点。可检验,才是它当下真正的价值所在。

参考文献

  1. ARROW: Arbitrary Reconstruction and Tracking of 4D Observations in the Wild — arXiv:2610.01314
  2. MoSE3: Learning World-Space SE(3) at Every Pixel — arXiv:2610.03716
  3. St4RTrack: Simultaneous 4D Reconstruction and Tracking in the World — arXiv:2504.13152
  4. TAPVid-3D: A Benchmark for Tracking Any Point in 3D — arXiv:2407.05921
  5. iTACO: Interactable Digital Twins of Articulated Objects from Casually Captured RGBD Videos — arXiv:2506.08334
  6. Track4World: Feedforward World-centric Dense 3D Tracking of All Pixels — arXiv:2603.02573
  7. CoTracker3: Simpler and Better Point Tracking by Pseudo-Labelling Real Videos — arXiv:2410.11831
  8. π³: Permutation-Equivariant Visual Geometry Learning — arXiv:2507.13347
  9. Multi-View 3D Point Tracking — arXiv:2508.21060
  10. 3D Scene Flow Estimation with a Piecewise Rigid Scene Model (Vogel, Schindler, Roth — IJCV 2015) — https://link.springer.com/article/10.1007/s11263-015-0806-0
一段开门视频里,每个像素的三维坐标都算准了,门转了多少度,轨迹答不上来