简介

你是如何知道物体离你有多远的?如果你闭上一只眼并完全静止不动,世界就会变平。深度感知变成了一场基于阴影和熟悉物体大小的猜谜游戏。但当你移动头部的那一刻,世界又变回了 3D。附近的物体飞快地掠过你的视野,而远处的群山几乎纹丝不动。这种现象被称为运动视差 (motion parallax) , 是生物系统感知几何结构的一种基本方式。

在计算机视觉领域,从单一视频源 (单目视频) 中提取 3D 深度一直是一个长期的障碍。传统方法通常将视频视为一堆独立的图像,逐帧预测深度。结果就是“闪烁 (Flickering) ”。随着视频的播放,墙壁或汽车的深度估计会因为模型无法理解这在时间上是同一个物体而无法控制地抖动。

Seurat 来了,这是来自 KAIST AI 和 Adobe Research 的一篇新颖的研究论文。作者提出了一种方法,避开了对复杂立体设置或海量标注数据集的需求。相反,他们将视频剥离至其最纯粹的几何本质: 点的运动

图 1. Seurat 通过仅观察 2D 点轨迹来预测动态物体随时间的精确且平滑的深度变化,这些轨迹在其运动模式中编码了深度线索。

如图 1 所示,Seurat 采用 2D 点轨迹——即像素在屏幕上移动的简单线条——并将它们提升到 3D 空间中。通过分析这些点随时间如何汇聚、发散和旋转,Seurat 推断出的深度具有惊人的稳定性。

在这篇文章中,我们将解构 Seurat。我们将探讨为什么点轨迹是 3D 信息的秘密载体,作者如何构建基于 Transformer 的架构来解码这些信息,以及为什么这种方法尽管完全在合成数据上训练,却能出人意料地很好地泛化到真实世界的影片中。

背景: 运动的几何学

要理解 Seurat,我们首先需要了解当前技术的局限性以及驱动这种新方法的直觉。

单目深度的问题

单目深度估计 (Monocular Depth Estimation, MDE) 是利用单张图像预测每个像素距离相机的任务。深度学习在这方面已经做得非常好了。像 MiDaS 或 ZoeDepth 这样的模型可以看一张房间的照片,然后告诉你椅子比窗户更近。

然而,这些模型在时间一致性方面很吃力。当你在视频上运行单图模型时,它会独立处理第 1 帧和第 2 帧。光照或噪声的微小变化都会导致深度预测发生剧烈跳变。此外,单视图几何存在尺度模糊性——远处的大车看起来和近处的小玩具车一模一样。

直觉: 来自运动的结构光

Seurat 的作者将此与结构光 3D 扫描 (Structured Light 3D Scanning) 进行了一个有趣的类比。在结构光设置中 (如 iPhone 上的 FaceID 传感器) ,一个已知的点阵图案被投射到物体上。相机会观察该图案如何变形。如果点看起来比预期的更密集,说明表面向远处倾斜;如果它们弯曲,说明表面是弯曲的。图案的变形揭示了 3D 形状。

Seurat 假设我们不需要投射人造光。世界的自然纹理就充当了我们的图案。

图 2. 本工作的动机。(a) 通过观察跟踪的点,我们可以感知运动。(b) 随着球体移远,投影点汇聚,提供深度线索。

考虑上面的图 2。

  • (a) 即使没有看到汽车本身,如果你只看到点的移动,你也能分辨出物体正在向远处退去。
  • (b) 想象一个球体正在远离相机。在第一帧 (左) ,球体上的红点是分散的。随着球体移得更远 (右) ,透视使得这些点在图像中心附近聚拢。

这就是核心洞察: 2D 轨迹密度的变化编码了 3D 深度的变化。 如果我们能跟踪点与点之间如何相对移动,我们就可以从数学上推导出它们的深度是如何变化的。

核心方法

Seurat 框架旨在摄入 2D 轨迹并输出 3D 深度比率。它不依赖视频的像素颜色 (RGB) ,只依赖运动的几何结构。

1. 理论分析

在深入神经网络之前,让我们看看证明其可行性的数学原理。作者推导了 2D 图像平面上点的密度与其在 3D 空间中的深度之间的关系。

假设我们正在观察一个小表面块。它在图像传感器上显示的面积 (\(A^{image}\)) 取决于焦距 (\(f\)) 、真实的表面积 (\(A^{surface}\)) 、视角 (\(\theta\)) ,最重要的是深度 (\(d\)) 。

公式 1

这个公式告诉我们,投影面积与深度 (\(d^2\)) 的平方成反比。因此,点的密度 (\(\rho\)) ,即面积的倒数,与深度的平方成正比:

公式 2

如果我们比较起始时间 (\(t_0\)) 与稍后时间 (\(t\)) 的点密度,我们会得到一个比率。这允许我们消去未知的焦距和真实表面积 (假设物体在局部是刚性的) :

公式 3

最后,通过重新排列各项,我们可以解出深度比率 (Depth Ratio) (\(r_t\)) ,它代表深度相对于开始时变化了多少 (\(d_t / d_{t_0}\)) :

公式 4

这个推导证明,如果我们能够测量点密度 (\(\rho\)) 的变化并考虑旋转 (\(\cos\theta\)) ,我们就可以计算深度变化。

为什么要用神经网络? 你可能会问: “既然有了公式,为什么要训练模型?”问题在于,公式假设我们完美地知道表面旋转 (\(\theta\)) ,并且物体是完美的刚体。在现实世界中,测量局部密度充满噪声,且估计旋转很困难。作者发现手工制作的数学求解器太脆弱了。然而,神经网络可以学习稳健地逼近这种关系,隐式地处理噪声和非刚性变形。

2. 架构概览

Seurat 架构将深度估计视为一个序列到序列的转换问题。输入的 2D 坐标序列被转换为深度值序列。

图 3. 整体架构。

如图 3 所示,该过程主要有三个阶段:

  1. 输入处理: 系统使用现成的跟踪器 (如 CoTracker 或 LocoTrack) 生成轨迹。
  2. 双分支 Transformer: 模型使用两个独立的分支处理这些轨迹。
  3. 深度预测: 模型输出深度比率,然后进行细化。

双分支设计

这里的一个关键创新是分离了支撑轨迹 (Supporting Trajectories)查询轨迹 (Query Trajectories)

如果你只跟踪你想要预测深度的点 (查询点) ,你可能会丢失上下文。例如,如果你只跟踪移动汽车上的点,模型可能无法意识到相机本身是静止的。为了解决这个问题,Seurat 在整个图像上放置了一个密集的点网格——支撑网格 (Supporting Grid)

  • 支撑分支: 处理密集网格以捕获全局场景运动和相机运动。
  • 查询分支: 处理感兴趣的特定点。

至关重要的是,信息通过交叉注意力 (Cross-Attention) 从支撑分支流向查询分支,但反之则不然。这防止了查询点的特定分布对场景的全局理解产生偏差。

Transformer 块

两个分支都使用了时间 (Temporal)空间 (Spatial) 注意力机制的混合。

支撑编码器: 支撑轨迹 (\(\mathcal{T}_s\)) 及其可见性标志 (\(\mathcal{V}_s\)) 被嵌入并通过 \(L\) 层。

公式 5

这里的 TransformerLayer 在观察不同时间点的同一点 (时间注意力) 和观察同一帧中的不同点 (空间注意力) 之间交替。这使得模型能够同时理解运动路径和场景的几何结构。

查询解码器: 查询分支类似,但包含一个额外的步骤。在每一层中,它使用交叉注意力来“查看”支撑特征 (\(\mathbf{h}_s\)) 。

公式 6

这种全局上下文的注入使得 Seurat 能够通过理解某一点相对于场景其余部分的运动方式,来准确预测该点的深度。

3. 滑动窗口与对数比率损失

一次性处理长视频计算量大且困难,因为点经常会移出视野。Seurat 使用了滑动窗口 (Sliding Window) 方法。它将视频分解为重叠的块 (例如,8 帧的窗口) 。

在每个窗口内,模型预测对数深度比率 (Log Depth Ratio) 。 为什么要用对数?深度变化是乘性的 (物体从 10 米移动到 20 米,深度翻倍) 。在对数空间中,这变成了加性的,这对网络来说更容易学习。

公式 7

训练损失最小化了预测的对数比率与真值对数比率之间的差异:

公式 8

在推理 (测试) 期间,这些窗口化的预测被拼接在一起。模型随时间累积变化以构建完整的轨迹历史:

公式 9

4. 从相对深度到度量深度

Seurat 非常擅长告诉你深度如何变化 (例如,“这个点现在远了 2 倍”) 。但是,它不知道该点是从 1 米还是 100 米开始的。这就是相对深度度量深度 (Metric Depth) 之间的区别。

为了解决这个问题,作者将 Seurat 与单图单目深度估计器 (MDE) (如 ZoeDepth 或 DepthPro) 结合起来。

他们使用了一种称为分段尺度匹配 (Piecewise Scale Matching) 的技术。对于一个特定的点,MDE 为每一帧提供一个有噪声但大致绝对值正确的深度。Seurat 提供一条平滑、准确的相对变化曲线。

系统计算一个比例因子 (\(s_{i,t}\)) ,使 Seurat 的平滑曲线与 MDE 绝对预测的中值对齐:

公式 10

然后将此比例因子应用于 Seurat 的预测:

公式 11

结果结合了二者的优点: 来自基于图像的模型的绝对尺度,以及来自基于轨迹的模型的时间平滑性和几何一致性。

实验与结果

作者在 TAPVid-3D 基准上评估了 Seurat,其中包括 Aria (以自我为中心/VR) 、DriveTrack (自动驾驶) 和 Panoptic Studio (室内运动) 等多样化的数据集。

定量性能

结果表明,Seurat 显著优于仅依赖逐帧深度估计的基线。

在下表 (论文中的表 2) 中,我们看到了使用全局尺度将预测与真值对齐时的比较。

表 2. TAPVid-3D 上的仿射不变深度定量结果。

数据的主要结论:

  1. 高精度: 当与 DepthPro 结合使用时,Seurat 实现了最高的 3D-AJ (平均 Jaccard) 和 APD (平均位置差异) 分数。
  2. 时间一致性 (TC) : 查看 TC 列 (越低越好) 。Seurat 的分数始终比基线好一个数量级 (例如 0.012 vs 0.172) 。这在数学上证实了 Seurat 消除了视频深度估计中常见的“抖动”或闪烁。
  3. 泛化能力: 请记住,Seurat 在合成数据 (Kubric) 上进行了训练。然而,它在真实世界数据集 (Aria, DriveTrack) 上占据主导地位。这表明它学到的几何线索是通用的。

定性比较

数字固然好,但视觉结果更能说明稳定性。图 4 可视化了不同方法生成的 3D 轨迹。

图 4. 与基线的定性比较。

在可视化中:

  • CoTracker + ZoeDepth (左) : 轨迹呈波浪状且参差不齐。深度估计在帧与帧之间波动,导致出现不代表真实物理运动的“弯弯曲曲”的线条。
  • Seurat (中) : 轨迹平滑且笔直,与真值 (右) 紧密匹配。房间 (上行) 和街道 (中行) 的空间结构得以保留。

消融研究: 什么最重要?

作者进行了严格的测试,以查看其设计的哪些部分是必不可少的。

表 3. 消融研究。

  • 双分支设计: 合并支撑分支和查询分支 (第 II 行) 显着损害了性能 (3D-AJ 从 18.0 降至 13.7) 。这证实了将全局场景上下文与特定查询点分离至关重要。
  • 滑动窗口: 移除滑动窗口 (第 III 行) 并尝试一次性处理整个视频导致性能大幅下降 (3D-AJ 8.8) 。长期运动太复杂,无法一次性预测;将其分解简化了问题。

意外发现: 纹理是有害的

最有趣的实验之一涉及将实际的 RGB 图像像素 (纹理) 与点坐标一起输入模型。

表 5. 纹理补丁消融。

如表 5 所示,添加纹理信息实际上降低了性能。为什么?作者怀疑,当模型看到 RGB 数据时,它开始过度拟合合成训练数据的特定外观。通过将输入限制为坐标轨迹,模型被迫学习纯几何结构,这可以完美地从合成卡通迁移到照片般逼真的视频。

它仅仅是平滑处理吗?

怀疑论者可能会问: “Seurat 仅仅是对 ZoeDepth 应用了一个花哨的高斯平滑滤波器吗?”

表 6. 与简单高斯平滑的比较。

表 6 回答了这个问题。简单地对标准深度估计器的输出应用高斯平滑只能略微改善结果,与 Seurat 相比显得苍白无力。Seurat 不仅仅是在平均数字;它是利用透视汇聚的物理原理来计算正确的深度。

结论

Seurat 代表了计算机视觉中一种令人耳目一新的“回归基础”的方法。在基于数十亿图像训练的大型基础模型占主导地位的时代,Seurat 证明了理解视觉的基本几何结构仍然具有巨大的力量。

通过将移动点视为动态信号,作者解锁了一种稳健的深度估计方法,该方法:

  1. 零样本泛化: 尽管是合成训练,但在真实视频上有效。
  2. 确保一致性: 消除了困扰逐帧方法的闪烁。
  3. 保持高效: 在坐标数据上使用轻量级 Transformer,而不是繁重的视频处理。

虽然 Seurat 依赖外部模型来获得绝对尺度,但它将 2D 混沌编织成连贯 3D 结构的能力是向前迈出的重要一步。它提醒我们,在视频中,运动不仅仅是时间的副产品——它是 3D 世界的蓝图。