想象一下试图从普通的 2D 视频中重建 3D 世界。对于人类来说,这很直观;我们明白随着汽车向前移动,它会变近,或者路过的树木与背景中的山脉是截然不同的。然而,对于计算机来说,这项任务——即单目视频深度估计——却极其困难。
虽然人工智能在从单张图像估计深度方面已经取得了巨大进步 (这要归功于像 Depth Anything 这样的模型) ,但将这些逐帧方法应用于视频时,往往会导致令人不适的“闪烁”效应。深度值会剧烈跳动,因为模型并不理解第 1 帧和第 2 帧属于同一个连续的现实。现有的解决方案通常依赖于复杂的相机位姿估计或光流,但在相机运动不可预测或动态物体 (如奔跑的动物) 占据主导地位的“开放世界”视频中,这些方法经常失效。
DepthCrafter 应运而生。
在最近的一篇论文中,来自腾讯 AI Lab 和香港科技大学的研究人员介绍了一种新颖的方法,该方法重新利用强大的视频扩散模型来解决这一一致性问题。结果如何?无需任何相机跟踪数据,即可为长视频生成平滑、高度详细且时间一致的深度图。

在这篇文章中,我们将拆解 DepthCrafter 的架构,探索它如何利用稳定视频扩散 (Stable Video Diffusion, SVD) 的生成能力、其独特的三阶段训练过程,以及一种巧妙的推理策略,使其能够处理几乎任意长度的视频。
1. 开放世界的挑战
要理解 DepthCrafter 的重要性,我们首先需要定义问题。
单目深度估计是指预测图像中每个像素相对于相机的距离的任务。当将其扩展到视频时,会出现两个主要挑战:
- 时间一致性: 如果你在视频上运行单图像深度估计器,估计的深度比例通常会在帧与帧之间随机偏移。一辆车在一帧中可能看起来距离 10 米,而在下一帧中距离 15 米,这纯粹是由于计算噪声造成的。这就导致了“闪烁”。
- 开放世界的多样性: 传统的视频深度方法通常通过计算相机的运动 (位姿) 来解决闪烁问题。然而,在“开放世界”场景中——比如手持拍摄宠物的视频——由于抖动、移动物体和复杂的光照,计算准确的相机位姿极其困难。
研究人员假设,已经学会创建逼真动态场景的生成式视频模型,隐含地理解 3D 几何结构和时间连续性。DepthCrafter 旨在提取这种理解能力。
2. 背景: 扩散模型与潜在空间
DepthCrafter 建立在 稳定视频扩散 (Stable Video Diffusion, SVD) 之上。为了理解它是如何工作的,我们需要简要了解一些基本概念。
扩散过程
扩散模型是一种生成模型,通过逆转加噪过程来学习创建数据。在训练期间,高斯噪声被逐渐添加到图像或视频中,直到其无法辨认为止。模型的工作是学习如何去除这些噪声 (去噪) 以恢复原始信号。
在数学上,前向过程在时间步 \(t\) 向数据 \(\mathbf{x}_0\) 添加噪声 \(\epsilon\) 以创建噪声版本 \(\mathbf{x}_t\):

模型训练一个去噪器 \(D_\theta\) 来从噪声输入中预测干净数据。训练目标是最小化模型预测与实际干净数据之间的差异,并由噪声水平 \(\sigma_t\) 加权:

潜在扩散与 VAE
直接处理高分辨率视频像素的计算成本非常高。因此,DepthCrafter 作为一个 潜在扩散模型 (Latent Diffusion Model, LDM) 运行。这意味着它使用 变分自编码器 (VAE) 将视频压缩到一个低维度的“潜在空间”中。

在这里,\(\mathcal{E}\) 是编码器,将视频 \(\mathbf{v}\) (或深度 \(\mathbf{d}\)) 转换为潜在表示 \(\mathbf{z}\)。扩散过程在这个压缩的 \(\mathbf{z}\) 空间中进行,解码器 \(\mathcal{D}\) 将结果扩展回像素。这使得在现代 GPU 上生成长序列的高分辨率深度序列成为可能。
3. 核心方法: 从视频生成到深度估计
DepthCrafter 的核心思想是将深度估计视为一个条件生成问题: \(p(\mathbf{d} | \mathbf{v})\)。简单来说,模型以输入彩色视频 \(\mathbf{v}\) 为条件,生成深度的“视频” \(\mathbf{d}\)。
架构概览
该架构保留了 Stable Video Diffusion 的 U-Net 结构,但修改了它接收信息的方式。

如图 2 所示,该过程涉及两个主要路径:
- 视觉嵌入: 输入视频 \(\mathbf{v}\) 被编码为潜在表示 \(\mathbf{z}^{(v)}\)。
- 噪声输入: 过程始于高斯噪声 (或训练期间的噪声深度图) \(\mathbf{z}^{(d)}_t\)。
至关重要的是,研究人员调整了条件机制。在原始 SVD 中,模型通常以单张图像为条件来生成视频。对于 DepthCrafter,模型必须以整个输入视频帧序列为条件,以生成相应的深度帧序列。这是通过以下方式实现的:
- 拼接 (Concatenation): 输入视频的潜在表示与噪声深度潜在表示逐帧拼接。
- 交叉注意力 (Cross-Attention): 视频帧的 CLIP 嵌入通过交叉注意力层注入 U-Net,提供高级语义理解 (例如,“这是一只狗”,“这是一堵墙”) 。
去噪函数使用预处理 (缩放输入和输出) 来稳定训练,公式如下:

三阶段训练策略
该论文最重要的贡献之一是其训练配方。在长序列上训练视频模型极其消耗内存。为了解决这个问题,作者设计了一种渐进式的三阶段策略,平衡了内容多样性、时间长度和细粒度细节。
阶段 1: 对齐 (真实数据,短片段)
- 目标: 使预训练的图像到视频模型适应深度估计任务。
- 数据: 大规模真实数据集 (约 20 万对视频-深度序列) 。
- 配置: 模型在短片段 (随机采样 1 到 25 帧) 上进行训练。
- 原因: 此阶段教会模型 RGB 像素与深度值之间的基本相关性,而不会因长序列而耗尽内存。
阶段 2: 时间一致性 (真实数据,长片段)
- 目标: 使模型能够处理长期依赖关系并修复闪烁。
- 数据: 同样的真实数据集。
- 配置: 序列长度显著增加 (最多 110 帧) 。
- 优化: 关键在于,他们仅微调时间层 (U-Net 中混合时间信息的部分) 。空间层被冻结。
- 原因: 由于空间层在阶段 1 已经学会了“物体看起来像什么”,阶段 2 完全专注于“物体如何移动并保持一致”。冻结空间层节省了大量内存,允许进行更长序列的训练。
阶段 3: 细粒度细节 (合成数据,中等片段)
- 目标: 锐化边缘并改善精确的深度细节。
- 数据: 合成数据集 (如 DynamicReplica 和 MatrixCity) 。
- 配置: 固定长度 45 帧。
- 优化: 他们微调空间层 。
- 原因: 真实数据集的深度边缘通常由立体匹配算法生成,因此往往带有噪声或比较“粗”。合成数据拥有像素级完美的真实值 (Ground Truth)。通过在此数据上微调空间层,DepthCrafter 学会了生成锐利、高保真的边缘,同时保留了阶段 2 中学到的时间一致性。
极长视频的推理
即使经过阶段 2 的训练,受限于 GPU 内存,模型一次也只能生成约 110 帧。现实世界的视频可能有数千帧长。简单地将视频切成块并单独处理会重新引入边界处的闪烁 (“尺度偏移”问题) 。
为了解决这个问题,作者提出了带拼接的分段推理 (Segment-wise Inference with Stitching) 策略。

过程如下:
- 重叠分段: 视频被分成重叠的片段 (例如,第 1-110 帧,然后是第 90-200 帧) 。
- 噪声初始化: 对于第二个片段,潜在噪声不是纯随机的。研究人员使用前一个片段的去噪结果来初始化重叠部分的噪声。这起到了锚点的作用,强制新片段采用与前一个片段相同的深度尺度和偏移。
- 潜在拼接: 在重叠区域 (本例中的第 90-110 帧) ,模型产生两个预测: 片段 1 的尾部和片段 2 的头部。这些在潜在空间中使用线性加权 (\(w_i\)) 进行融合。
- 第 90 帧主要依赖于片段 1。
- 第 110 帧主要依赖于片段 2。
- 中间的帧进行平滑插值。
这种“榫卯式”方法确保了处理块之间的过渡是无缝的,允许 DepthCrafter 处理无限长度的视频。
4. 实验与结果
研究人员将 DepthCrafter 与最先进的竞争对手进行了评估,包括 Depth Anything V2 (一个强大的单图像模型) 和 NVDS (一种视频稳定方法) 。
定量性能
评估是在“零样本”设置下进行的,这意味着模型是在训练期间从未见过的数据集 (Sintel, ScanNet, KITTI, Bonn) 上进行测试的。

上表显示了两个关键指标:
- AbsRel (绝对相对误差): 越低越好。它衡量预测深度与真实值的偏差程度。
- \(\delta_1\) (准确率): 越高越好。它衡量正确估计在特定阈值内的像素百分比。
关键结论: DepthCrafter 在几乎所有指标上都取得了最佳性能。值得注意的是,在 KITTI 数据集 (户外驾驶) 上,它以巨大的优势超过了 Depth-Anything-V2 (AbsRel 0.104 对比 0.140) ,证明了其时间理解能力的价值。
定性分析: 时间剖面图
数字固然重要,但在视频中,视觉一致性才是王道。为了形象化这一点,作者使用了“时间剖面图 (temporal profiles)”。通过沿时间轴切片视频 (从每一帧中取一条垂直像素线并将它们堆叠起来) ,你可以看到稳定性。
- 锯齿状/Z字形线条: 表示闪烁 (静态物体的深度在帧与帧之间发生变化) 。
- 平滑/直线线条: 表示时间一致性。

在图 4 中,请看绿色框。竞争对手 (Depth-Anything-V2 和 NVDS) 在时间切片中显示出垂直抖动。DepthCrafter 的剖面图平滑且连续,有效地重建了物体的运动,而不仅仅是独立的帧。
为什么推理策略很重要
作者还进行了消融实验,以证明其拼接策略的必要性。

- Baseline (基线): 独立分段。结果: 深度出现明显的接缝和跳变。
- + Initialization (+ 初始化): 一致性更好,但在边界处仍有一些伪影。
- + Stitching (Full Method) (+ 拼接 - 完整方法): 在静态 (黄色箭头) 和动态 (蓝色箭头) 区域均实现了平滑过渡。
额外优势: 单图像性能
有趣的是,由于 DepthCrafter 被训练为处理可变长度 (从 1 帧开始) ,它也可以作为单图像深度估计器使用。

尽管是一个视频模型,它在复杂场景 (如顶行中的桁架桥) 中产生的细节比 Depth-Anything-V2 更锐利,这可能归功于阶段 3 中的高分辨率合成数据训练。
5. 应用与影响
精确、一致的视频深度为高级视觉效果打开了大门,这些效果以前只能通过昂贵的硬件或人工转描来实现。

- 大气效果: 你可以插入尊重物体实际距离的逼真雾气 (远处的雾更浓) 。
- 重光照: 改变一天中的时间需要了解场景的 3D 几何结构才能正确投射阴影。
- 条件视频生成: 使用深度图作为结构指南,使用 ControlNet 等工具生成新视频 (例如,将骑马者变成科幻角色) 。
6. 结论
DepthCrafter 代表了计算机视觉领域的一次重大飞跃。通过将深度估计不仅仅视为回归任务,而是视为生成任务,它利用了像 Stable Video Diffusion 这样的基础模型中锁定的海量先验知识。
它的成功依赖于三大支柱:
- 生成先验: 使用 SVD 理解开放世界内容。
- 智能训练: 平衡真实感、一致性和细节的三阶段课程。
- 灵活推理: 一种将视频长度与内存限制解耦的拼接机制。
对于学生和研究人员来说,DepthCrafter 是一个极好的案例研究,展示了如何将生成式 AI 重新用于判别性任务 (如深度估计) ,以及如何设计训练流程以克服硬件限制。
注: 本博文解释了 Hu 等人发表的论文 “DepthCrafter: Generating Consistent Long Depth Sequences for Open-world Videos” 中的研究。所有图片均来自原论文。
](https://deep-paper.org/en/paper/2409.02095/images/cover.png)