Video Depth Anything: Consistent Depth Estimation for Super-Long Videos
论文地址:https://arxiv.org/abs/2501.12375
代码地址:https://github.com/DepthAnything/Video-Depth-Anything
解决了什么问题?
Depth Anything 在单目深度估计任务上取得了显著的成效,有着很强的泛化能力。但它在处理视频时,存在深度估计结果在时间上不一致(前后帧深度图不连贯、闪烁抖动)的问题,这限制了它的实际应用。目前有一些方法试图通过视频生成模型、光流、相机姿态等信息来解决这个问题。但它们普遍有两个缺陷:
- 只能处理短视频,短于10秒的。
- 需要在质量和计算效率之间做平衡,效果好就慢,速度快就效果差。
本文提出 "Video Depth Anything" 模型,旨在为超长视频(几分钟以上)实现高质量、高一致性的深度估计,且不牺牲效率,它以 Depth Anything V2 作为主干网络,通过高效时空头替换原模型的头部结构,加入了处理时空信息的能力。作者设计了一个新颖的损失函数,通过约束时间维度上的深度梯度来保证连贯性,无需依赖额外的光流或相机位姿等几何先验信息。作者在视频深度数据和大量无标签图像数据上联合训练,与 Depth Anything V2 类似。此外,作者提出了一个基于关键帧的新策略,专门用于处理任意长度的视频。
其成果和优势:
- 能力:可以处理任意长度的视频,且不损失质量、一致性和泛化能力。
- 性能:在多个视频基准测试中达到了新的零样本(zero-shot)视频深度估计的最先进水平。
- 效率:提供了不同规模的模型(大、中、小)以适应不同场景。其中,最小的模型能达到30 FPS的实时处理速度。
最近,单目深度估计(MDE)领域,特别是深度基础模型(如Depth Anything V2)取得了巨大进步。它们能从单张图片预测出细节丰富、泛化能力强的深度图,且计算高效。但这些为静态图片设计的模型,在处理视频时会产生严重的闪烁和运动模糊问题,导致深度在时间上不一致。这种不一致性严重限制了其在机器人、增强现实、高级视频编辑等对时序一致性有严格要求的领域中的应用。于是,人们做出了多种尝试来解决这个问题。
作者将现有解决视频深度一致性的方法分为两大类,并分别指出了它们的不足:
- 第一类:基于前馈模型的"即插即用"模块,设计一个附加模块,对单目深度模型的预测结果进行时序平滑处理。
- 缺点:
- 依赖性强:训练这个模块严重依赖光流或相机位姿数据来构建一致性约束。
- 误差传播:模块的性能会受到光流或相机位姿估计误差的直接影响,导致结果不鲁棒。
- 缺点:
- 第二类:基于视频扩散模型的"重定位"方法,将预先训练好的视频生成扩散模型改造为视频到深度的模型。
- 优点:能生成细节极其精细的深度图。
- 缺点:
- 计算效率低下:扩散模型推理速度慢,计算成本高。
- 无法利用现有成果:没有利用像 Depth Anything V2 这样强大的、现成的深度基础模型的知识和能力。
- 视频长度受限:由于模型设计和计算资源的限制,通常只能处理很短的视频片段。
那么问题就来了,是否有一个模型能完美地继承现有深度基础模型的全部优势,又能为任意长视频实现时序稳定性?本文直接给出了肯定的回答。实现这一目标的途径就是基于 Depth Anything V2 构建 "Video Depth Anything" ,并且无需引入任何额外的几何先验(如光流、相机姿态)或视频生成先验。
具体而言,作者首先设计一个轻量级的空间-时间头(STH),用以替换Depth Anything V2原有的DPT解码器头部。这个新头部包含了四个时序注意力层,这些层沿着时间维度在每个空间位置上进行信息交互。仅在头部引入时序注意力是关键的一项设计。可以避免模型骨干网络(从海量图像数据中学到的强大特征表示)被有限的视频训练数据"带偏"或破坏,从而完美保留基础模型的泛化能力。
然后,作者提出了一个时序梯度匹配损失函数,核心思想是约束模型预测的深度图在时间维度上的梯度变化,要与真实深度图在时间维度上的梯度变化保持一致。这个损失函数能直接有效地提升模型预测的时序一致性,从根源上减少闪烁。该损失与原有的尺度-平移不变性损失和空间梯度匹配损失(用于保证单帧深度图的质量和空间平滑性)一起进行联合优化。
第三,为了保持模型的原始能力,采用和 Depth Anything V2 相同的训练范式进行联合训练。在 73 万帧带有深度标注的视频帧上进行监督学习,然后在 62 万张无标签的图像上进行自监督学习。从而确保新模型不仅学会了视频时序一致性,同时完全继承了基础模型从海量图像中学到的强大泛化能力和细节感知能力。
那么问题就来了,在推理时,如何处理长度可能远超训练时视频片段长度的"超长视频"?作者提出的解决办法就是基于分段和关键帧的滑动窗口处理策略。具体步骤就是:
- 分段和拼接:将长视频分段处理。对于每一个新的片段,会拼接上来自前一个片段的8帧重叠帧和2个关键帧,形成一个总长度为32帧的输入窗口。这样可以利用历史信息保证跨段的一致性。
- 平滑过渡:处理完成后,新旧窗口之间的重叠帧区域会进行渐进式插值,以确保片段衔接处的深度预测结果平滑、无跳变。
最后,作者在 5 个数据集上将本文方法和现有的基线模型进行了零样本视频深度估计的比较。优势如下:
- 空间精度:在四个数据集上取得了最先进的结果,即预测的每帧深度图在静态结构准确性上最优。
- 时间一致性:在所有五个数据集上,在时序一致性指标上都超越了所有基线模型,即深度预测的闪烁最少、最稳定。
作者从三个维度阐述了其模型的全面优势,这正是对前文所提问题的直接回应:
- 质量 vs. 效率:能产生和视频扩散模型的方法视觉效果相当的深度图,同时计算效率显著优于那些计算昂贵的扩散模型方法。
- 长视频能力:首次实现了对长达数分钟的视频进行一次性的深度估计。
- 保留了基础模型的能力:在零样本图像深度估计任务上测试,仅在一个数据集上相比Depth Anything V2有微小的性能下降。这表明模型在获得视频能力的同时,几乎完美地保留了原有基础模型的强大泛化能力和图像处理精度。
如下图右边所示,本文模型在空间精度、时间一致性、计算效率这三个通常难以兼顾的方面,同时达到了最佳性能,实现了"三者得兼"。

相关工作
单目深度估计
早期的单目深度估计工作主要在特定的、有限的数据集上训练和测试,由于训练数据多样性不足,模型泛化能力很差,无法直接应用于新场景(零样本应用)。后来,MiDaS 引入了多数据集混合训练和仿射不变对齐方法,大幅提升了模型的泛化能力,使其能适应更多样的场景。但是,受限于骨干网络性能和深度标注数据的噪声,预测的深度图缺乏精细细节。在此之后,领域分化为两条主要技术路线:
-
相对深度模型:预测仿射不变深度(即深度值只有正确的相对关系和结构,没有绝对的物理尺度)。代表方法有 DPT, Depth Anything 和 Marigold。
- 优势:由于不要求绝对的物理尺度,可以使用海量、多样的数据(包括合成数据、互联网图片等)进行训练,因此泛化能力极强。
-
度量深度模型:预测带有绝对物理尺度的深度(例如,以米为单位),如 ZoeDepth, Metric3D, UniDepth。
- 缺点:训练必须使用包含相机参数的真实度量深度数据。这类数据获取困难、规模有限。虽然能给出绝对尺度,但因训练数据有限,其泛化能力通常弱于相对深度模型。
最近,Depth Anything V2 利用了 DINOv2 预训练模型作为主干,通过细节保真度高的合成数据训练一个大模型。然后,用这个大模型作为"教师",在6200万无标签图像数据集上蒸馏出更小的学生模型。在泛化能力和几何细节丰富度上都达到了最先进水平。然而,Depth Anything V2是完全在静态图像上训练的,因此其预测结果缺乏时间一致性,无法直接用于视频。
一致的视频深度估计
一致的视频深度估计的核心任务就是获取时域上一致且空间上准确的深度图。对现有方法的分类与批评:
-
第一类:测试时训练方法,为每个新视频在推理时进行微调/优化。
- 缺点:效率低,不切实际,无法用于实际应用。
-
第二类:基于光流/位姿的端到端学习模型,代表方法有 MAMo。利用光流在特征层面对齐前后帧,利用相对相机位姿构建成本体积。
- 缺点:其性能严重受制于不准确的光流或位姿估计带来的误差。 即,如果光流/位姿算错了,深度估计会一起错。这导致方法不鲁棒。
-
第三类:为现成的 MDE 模型增加"时域稳定模块",在现成的单目深度模型上增加后处理或旁路模块来增强时序一致性。
- 缺点:模型设计欠佳,几何一致性约束不足,无法取得满意的结果。
-
第四类:基于视频扩散模型的方法,代表方法有 ChronoDepth, DepthCrafter, DepthAnyVideo。它们能生成细节更好、时序一致性也好的深度图。
- 缺点:
- 推理速度慢:扩散模型本质导致计算开支巨大。
- 数据需求大:需要大量的视频深度标注数据进行训练。
- 无法处理长视频:由于模型巨大、训练时使用的视频片段长度有限(受内存限制),在推理时也只能处理类似长度的片段。这导致:窗口间闪烁和长视频一致性差。
- 缺点:
提出了什么方法?
本文的 Video Depth Anything 是一个前馈的视频 transformer 模型,能有效地估计时域一致的视频深度。作者采用了仿射不变的深度,但在整个视频中共享尺度和平移。本文模型基于 Depth Anything V2 架构构建,加入了一个时域模块,并在视频数据集上训练。此外提出了一个新颖的损失函数来保证时域一致性。最后,通过结合了重叠帧和关键帧的策略来有效地实现超长视频的推理。
架构
由于缺乏足够多的视频深度数据,从头训练一个强大的视频深度模型是极其困难的。因此,作者从一个预训练的、成熟的图像深度估计模型(即Depth Anything V2)开始,而不是从零开始。Depth Anything V2 是目前最先进的单目深度估计模型,以其高精度和强大的泛化能力而著称。这正是我们想要继承的核心能力。
Depth Anything V2 Encoder
直接使用 Depth Anything V2 的已训练模型作为编码器。编码器负责从输入图像/视频帧中提取高级特征。为了降低训练成本、保留已学到的特征,训练时冻结了编码器。
单目深度编码器的输入只有图像,而本文方法需要编码器同时处理图像和视频数据。为了用图像编码器从视频帧提取特征,作者将一个视频片段的时间维度放到 batch 维度上。输入数据记作 X ∈ R ( B × N ) × C × H × W \mathbf{X}\in \mathbb{R}^{(B\times N)\times C\times H\times W} X∈R(B×N)×C×H×W,其中 B B B表示 batch size, N N N 是视频片段的帧数,对于图像输入 N = 1 N=1 N=1, C , H , W C,H,W C,H,W 分别是视频帧的通道数、高度和宽度。编码器的输入是 X \mathbf{X} X,输出一系列的中间特征图 F i ∈ R ( B × N ) × ( H p × W p ) × C i \mathbf{F}_i \in \mathbb{R}^{(B\times N)\times (\frac{H}{p}\times \frac{W}{p})\times C_i} Fi∈R(B×N)×(pH×pW)×Ci, p p p 是编码器的 patch size。尽管图像编码器能从单帧中提取很强的视觉表征,它忽略了帧间的时域关系。因此,作者引入了时空头来建模帧间的时域关系。
时空头
STH 基于 DPT 头而构建,唯一的改动就是插入了时域层来捕捉时域信息。时域层包含了一个多头自注意力模型和一个前馈网络(FFN)。下面介绍时序信息处理的核心机制。
- 维度隔离:将时间维度 N N N 单独分离出来进行处理。当给时域层输入一个空间位置的特征 F i \mathbf{F}_i Fi时,它实际上是一个在时间维度上有 N N N 个元素的序列(即 N N N帧在该位置的特征向量)。
- 纯时序注意力:在这个空间位置上,沿着时间维度执行自注意力计算。这意味着,模型会比较同一空间点在不同帧上的特征,从而学习这个点随时间的运动、外观变化规律,并实现跨帧的特征信息融合与平滑。
想象一下视频中的一个像素点(比如一个行人的头顶)。时序层会追踪这个点在连续N帧中的特征,并让这些特征"互相交流"(通过注意力机制),从而判断出这个点的深度应该怎样连贯地变化,而不是每帧独立、跳跃地预测。
自注意力机制本身是"无序"的,它不知道哪个特征来自第一帧,哪个来自第十帧。于是作者使用了绝对位置编码。它为视频序列中的每一帧分配一个独特的位置标识,并将这个标识信息编码到特征中。让模型能够理解帧与帧之间的先后顺序关系,这对于建立正确的时间一致性至关重要。
时空头从 F i \mathbf{F}_i Fi (包含了编码器的最后一个特征,记作 F 4 \mathbf{F}_4 F4)中均匀采样 4 个特征图作为输入,预测一个深度图 D ∈ R H × W \mathbf{D}\in \mathbb{R}^{H\times W} D∈RH×W。如下图所示,STH 处理这些特征图以生成深度图的过程分为三个阶段,前两个阶段继承了 DPT 的设计。
- 重组:将 4 个选中的不同层级的特征图 F i \mathbf{F}_i Fi 输入 Reassemble 层,产生特征金字塔。
- 融合:通过融合层逐渐地将低分辨率的特征融合到高分辨率特征中。Reassemble 层和融合层都是由 DPT 提出的。
- 输出:最终将融合后的高分辨率特征图经过输出层,得到深度图 D \mathbf{D} D。为了降低计算开支,在解码过程中,作者在少数几个特征分辨率较低的位置插入时序层。在低分辨率特征图上进行时序注意力运算,其计算量(与像素数的平方相关)远小于在高分辨率特征图上进行。这能显著降低额外的计算负载。在低分辨率特征图上,信息更为抽象和全局化,时序关系(如物体的运动、场景的变化)通常也更容易被捕捉和建模。在这些关键层级上进行信息交换,足以实现良好的时序一致性效果。

时域梯度匹配损失
作者设计了一个新的损失函数,这个函数需要满足两个条件,
- 不依赖光流,
- 仍能有效保证预测结果在帧间的时序一致性。
OPW Loss
为了约束时域一致性,现有的视频模型(NVDS 论文里提出的以基于光流的翘曲 OPW 损失)一般会假设在相邻两帧中,通过光流找到的对应位置,其深度值应该是相同的(或高度一致的)。首先,计算相邻帧 i i i 和 i + 1 i+1 i+1 之间的光流。光流指明了帧 i + 1 i+1 i+1 中的每个像素来自帧 i i i 中的哪个位置。然后,根据这个光流定义的映射关系,将 i + 1 i+1 i+1 帧的深度预测图 p i + 1 p_{i+1} pi+1 翘曲到第 i i i 帧的视角下,得到一个虚拟的深度图 p ^ i \hat{p}_i p^i。理论上, p ^ i \hat{p}_i p^i 应该和第 i i i 帧的真实深度预测 p i p_i pi 完全一致。最后,OPW 损失就是最小化 p i p_i pi 和 p ^ i \hat{p}_i p^i 之间的差异,如果它们一致,损失就小,从而鼓励模型输出时序一致的深度。
L O P W = 1 N − 1 ∑ i = 2 N ∥ p i − p ^ i ∥ 1 \mathcal{L}{OPW}=\frac{1}{N-1}\sum{i=2}^N \left\| p_i - \hat{p}_i \right\|_1 LOPW=N−11i=2∑N∥pi−p^i∥1
其中, N N N 表示视频窗口的长度, ∥ ⋅ ∥ 1 \left\| \cdot \right\|_1 ∥⋅∥1 是 l 1 \mathcal{l}1 l1 距离。但是,OPW 损失有一个基本问题:相邻帧中对应的点的深度不是不变的。这个假设只有当相邻帧静止时才成立。例如,在驾驶场景,车辆向前行驶,自车前方的静止物体到自车的距离会逐渐减小,这就违反了 L O P W \mathcal{L}{OPW} LOPW 的假设。为了解决这个问题,作者提出了一个新的损失函数来约束时域深度的一致性。
Temporal gradient matching loss
计算损失时,作者没有假定相邻帧的对应点的深度不变。相反,作者认为相邻预测帧之间,对应点的深度变化量应该与真实深度图中对应点的深度变化量保持一致。在真实视频中,由于相机和物体都在运动,一个物体表面点在相邻帧间的深度值完全可能发生变化(例如,一个向你走来的行人)。OPW 损失"深度值不变"的假设在这种情况下是错误的。而本文提出的"深度变化一致"则是一个正确且普适的物理规律:模型预测的深度如何随时间变化,应该和真实世界的变化方式相同。这个新的损失函数可以通过比较预测深度序列的时间梯度和真实深度序列的时间梯度来实现。损失函数会鼓励这两个梯度场尽可能地相似。作者将这个损失记作稳定误差 (SE):
L S E = 1 N − 1 ∑ i = 1 N − 1 ∥ ∣ d ^ i − d i ∣ − ∣ g ^ i − g i ∣ ∥ 1 \mathcal{L}{SE}=\frac{1}{N-1} \sum{i=1}^{N-1} \left\| |\hat{d}_i - d_i| - |\hat{g}_i - g_i| \right\|_1 LSE=N−11i=1∑N−1 ∣d^i−di∣−∣g^i−gi∣ 1
这里, d i , g i d_i, g_i di,gi 是第 i i i帧中模型预测的深度图和真实深度图,它们是经过缩放和平移后的版本,以消除绝对尺度的差异,只关心相对深度关系。 d ^ i , g ^ i \hat{d}_i, \hat{g}_i d^i,g^i 分别代表利用光流,将第 i + 1 i+1 i+1帧的预测深度图和真实深度图翘曲到第 i i i帧坐标下所得到的结果。 ∣ d ^ i − d i ∣ |\hat{d}_i - d_i| ∣d^i−di∣ 表示预测深度在相邻帧间的绝对差异(在光流对齐后的坐标上)。 ∣ g ^ i − g i ∣ |\hat{g}_i - g_i| ∣g^i−gi∣ 表示真实深度在相邻帧间的绝对差异(在光流对齐后的坐标上)。 ∥ ⋅ ∥ \left\| \cdot \right\| ∥⋅∥ 表示二者差异的 L1 范数,即绝对值之和的平均。这里可以看到,稳定误差并不是要求 d i d_i di 和 d ^ i \hat{d}_i d^i 相等(这是传统 OPW 损失的做法),相反它要求预测深度的帧间变化模式应与真实深度的帧间变化模式保持一致。
但是,生成光流会带来额外的开销和复杂度。为了不依赖光流,作者进一步泛化了上述假设:不再需要使用光流来寻找对应点。稳定误差法需要先计算光流,将下一帧的深度 d i + 1 d_{i+1} di+1 翘曲到当前帧坐标得到 d ^ i \hat{d}_i d^i,然后比较 ( d i , d ^ i ) (d_i, \hat{d}i) (di,d^i) 和 ( g i , g ^ i ) (g_i, \hat{g}i) (gi,g^i) 这两对。而 TGM 损失则直接使用相邻两帧在相同图像坐标系上的深度 ( d i , d i + 1 ) (d_i, d{i+1}) (di,di+1) 和 ( g i , g i + 1 ) (g_i, g{i+1}) (gi,gi+1) 来计算。新的假设是,在相邻帧的同一个图像坐标位置上,预测深度的变化量应该与真实深度的变化量一致。这个假设看似简化,其实更加本质。虽然物体在运动,同一点像素的深度会变,但深度场在时间和空间上的变化应该是平滑且符合物理规律的。直接约束"同一坐标位置的变化一致性",本质上是约束了整个深度图在时间维度上演变过程的光滑性和正确性,而无需知道精确的像素级对应关系。这就避免了光流的误差传播,彻底摆脱了对另一个不完美模块(光流估计)的依赖,使训练更稳定、更鲁棒。这个过程类似于计算深度值在时间维度上的梯度,因此作者将其命名为时序梯度匹配损失:
L T G M = 1 N − 1 ∑ i = 1 N − 1 ∥ ∣ d i + 1 − d i ∣ − ∣ g i + 1 − g i ∣ ∥ 1 \mathcal{L}{TGM} = \frac{1}{N-1} \sum{i=1}^{N-1} \left\| |d_{i+1}-d_i| - |g_{i+1}-g_i| \right\|_1 LTGM=N−11i=1∑N−1∥∣di+1−di∣−∣gi+1−gi∣∥1
在实际操作中,只有当真实深度值的变化超过一定阈值( ∣ g i + 1 − g i ∣ < 0.05 |g_{i+1} - g_i|<0.05 ∣gi+1−gi∣<0.05),才会计算 TGM。该阈值能在训练时避免深度图上突然的变化,比如动态物、边缘。
监督视频深度数据的整体损失如下:
L a l l = α L T G M + β L s s i \mathcal{L}{all} = \alpha \mathcal{L}{TGM} + \beta \mathcal{L}_{ssi} Lall=αLTGM+βLssi
其中 L s s i \mathcal{L}_{ssi} Lssi 是一个与缩放、平移无关的损失函数,用于监督单张图像的深度训练,由 MiDaS 提出。 α , β \alpha, \beta α,β 这两项权重用于平衡时空的一致性和单帧的空间结构。
超长视频的推理策略
模型在推理时,由于内存限制,只能一次处理一个固定长度的短片段。如何将这些片段的深度预测结果无缝拼接成一个长的、连贯的视频深度序列,是一个关键挑战。现有的方法主要有下面几种:
- 简单拼接
- 直接拼接不同窗口的输出,导致窗口衔接处不连续、跳跃,产生明显的接缝。
- 重叠区域+仿射对齐
- 做法:让相邻处理窗口有重叠区域。然后,利用重叠区域的预测深度计算一个仿射变换,将一个窗口的预测"对齐"到另一个窗口。
- 缺点:在超长视频中,多次、连续的仿射对齐会积累误差,导致深度预测结果随着时间推移发生缓慢的"漂移",整体深度尺度和偏移可能变得不一致。
为了解决上述问题,特别是针对超长视频和有限推理窗口大小的约束,作者提出了一个组合策略:
-
关键帧参考
- 做法:在处理新的视频窗口时,引入来自前面已处理片段的少量"关键帧"。
- 目的:继承历史的尺度和偏移信息。关键帧作为"锚点",使得新窗口的深度预测在绝对尺度和整体偏移上与之前的预测保持一致,从而有效防止了深度漂移。这确保了整个长视频的深度在全局尺度上是一致的。
-
重叠插值
- 做法:相邻处理窗口之间设有重叠区域。对于重叠部分的深度预测,不进行生硬的替换,而是进行渐进式插值。
- 目的:确保局部窗口间的平滑过渡。通过插值,可以消除窗口边界处的跳变,实现从一个窗口到下一个窗口深度预测结果的视觉上平滑、连续的渐变。
关键帧参考
一个待处理的视频片段(输入到模型的一个批次)由三部分顺序拼接而成: N − T o − T k N-T_o-T_k N−To−Tk 的未来帧、 T o T_o To 的重叠帧(来自上一个已处理片段末尾的 T o T_o To 帧)、 T k T_k Tk 个关键帧(从更早的历史帧中,以固定间隔 Δ k \Delta_k Δk采样得到)。这样做的优势如下:
- 保持输入长度不变:拼接后的片段总长度和模型训练时使用的固定长度 N N N保持一致。这确保了模型总是在它熟悉和优化的上下文长度下工作。
- 以最小计算代价引入历史信息:通过仅添加少量重叠帧和关键帧( T o + T k T_o + T_k To+Tk通常远小于 N N N),就将历史信息融入到当前上下文中,计算开销增加很小。
- 确保第一帧的位置固定:作者特别选择了 T k T_k Tk 和 Δ k \Delta_k Δk 的值,以确保每个片段的第一帧(即"未来新帧"的开始)总是视频的绝对第一帧。这使得每个片段的深度预测都有一个共同、稳定的绝对参考起点。这能极大地增强长视频的深度一致性,特别是显著减少累积的尺度漂移。因为所有预测都以视频开头为基准进行对齐,避免了误差在多次窗口传递中不断累积。
深度片段拼接
本文方法中,相邻两个处理窗口共享 T o T_o To个重叠帧,它的作用主要有两重:
- 特征共享,促进全局一致性:由于这两个窗口共享了这部分重叠帧的特征,模型在生成这两个窗口的深度预测时,所依据的上下文信息是部分重叠和连续的。这会促使模型为这两个窗口输出的深度图,在整体尺度和偏移上更加相似。
- 插值更新,实现局部平滑:
- 机制:重叠区域的每一帧会被计算两次------一次作为前一个窗口的"后半部分",一次作为后一个窗口的"前半部分"。这两个结果不会简单地取其一,而是会进行插值。
- 具体操作:在重叠区域,最终的深度值是通过对来自两个窗口的预测进行插值得到的。通常,在重叠区域的开头,前一个窗口的预测权重高;在末尾,后一个窗口的预测权重高;中间部分平滑过渡。
- 效果:这使得从一个窗口到下一个窗口的深度预测实现平滑的渐变,而不是在窗口边界处发生生硬的跳变。这直接消除了"接缝",保证了视频深度在时间轴上的视觉连续性。
假设上一窗口的第 o i o_i oi 个重叠帧的深度记作 D o i p r e \mathbf{D}{o_i}^{pre} Doipre,而当前窗口的深度记作 D o i c u r \mathbf{D}{o_i}^{cur} Doicur。最终的深度就是 D o i = D o i p r e ⋅ w i + D o i c u r ⋅ ( 1 − w i ) \mathbf{D}{o_i} = \mathbf{D}{o_i}^{pre} \cdot w_i + \mathbf{D}_{o_i}^{cur} \cdot (1 - w_i) Doi=Doipre⋅wi+Doicur⋅(1−wi),其中 w i w_i wi 是从1到0的线性衰减系数,随着 i i i从1增加到 T o T_o To。

实验
评测
数据集
为了定量评估视频深度估计的表现,作者使用了五个包含室内场景、户外场景和野外环境的数据集。每个视频至多使用500帧。除了视频深度估计,作者也在五个图像基准的静态图像上评估了模型的表现。
指标
作者使用了几何准确性和时域稳定性来评估视频深度模型。在计算任何指标之前,先对整段视频的预测深度图进行全局的尺度缩放和平移,使其与真实深度图在数值范围上对齐。因为论文的模型(基于Depth Anything V2)预测的是相对深度(仿射不变深度),其数值没有绝对的物理单位(米)。为了与有绝对尺度的真实深度进行定量比较,必须进行这一步对齐。这确保了比较的是深度结构的准确性,而不是绝对的数值。
对于几何精度指标,它衡量的是单帧深度预测的准确度,即预测的深度图在结构、形状、相对距离上是否与真实值一致。使用了两个指标:
- 绝对相对误差:这是一个非常常用的指标,计算预测深度值与真实深度值之间相对误差的绝对值的平均。值越小越好,代表平均误差百分比越低。
- δ 1 \delta_1 δ1 指标:衡量预测深度值落在真实值的一个特定比例范围内的像素百分比。例如, δ 1 \delta_1 δ1 通常指预测值在真实值的1.25倍以内的像素比例。这个比例越高越好,代表预测越准确。
对于时域稳定性指标,专门衡量深度预测在时间上的连贯性,即是否"闪烁"。使用了下面指标:
- 时序对齐误差:这是用于评估视频深度一致性的核心指标。它衡量了相邻帧深度预测在三维空间中的一致性。如果深度预测是完美时序一致的,那么通过运动将一点投影到下一帧,其深度预测应该完全匹配。TAE 越小越好,表示深度序列越平滑、越不闪烁。
- 重投影思想:给定第 i i i帧的深度预测和已知的相机内参,可以将第 i i i帧的一个3D点投影到第 i + 1 i+1 i+1帧的平面上,得到一个重投影坐标。
- 比较深度:在这个重投影坐标上,比较第 i + 1 i+1 i+1帧的预测深度值和根据第 i i i帧预测及相对运动计算出的预期深度值。
- 计算误差:两者之间的差异就是重投影误差。TAE 就是这个误差在整个视频序列上的平均。
Zero-shot 深度估计
作者将本文模型和四个具有代表性的视频深度估计模型比较:NVDS、ChronoDepth、DepthCrafter、DepthAnyVideo。此外,作者引入了两个鲁棒的基线模型:Depth Anything V2 和 NVDS + DAv2(将 NVDS 的基础模型替换为了 DAv2)。需要注意到,DepthAnyVideo 支持的视频最大帧数是 192 帧,因此作者只报告了此模型在 Sintel 数据集上的表现,其它数据集包含的视频都超过了这个帧数限制。对于静态图像评测,作者将本文模型和 DepthCrafter、DepthAnyVideo 和 Depth Anything V2 做了比较。