从单个图像估计准确的深度是具有挑战性的,因为它本质上是模棱两可和不适定的。虽然最近的作品设计了越来越复杂和强大的网络来直接回归深度图,但我们走的是 CRF (条件随机场)优化的道路。由于计算成本高,CRF 通常在邻域之间而不是整个图之间执行。为了利用全连接 CRF 的潜力,我们将输入拆分为窗口并在每个窗口内执行 FC-CRF 优化,这降低了计算复杂度并使 FC-CRF 可行。为了更好地捕捉图中节点之间的关系,我们利用多头注意力机制来计算多头势函数,该函数被馈送到网络以输出优化的深度图。然后我们构建一个自下而上自上而下的结构,其中这个神经窗口 FC-CRFs 模块作为解码器,视觉转换器作为编码器。实验表明,与以前的方法相比,我们的方法显着提高了 KITTI 和 NYUv2 数据集上所有指标的性能。此外,所提出的方法可以直接应用于全景图像,并且在 MatterPort3D 数据集上优于所有以前的全景方法。
最近,许多工作使用深度网络直接回归深度图并取得了良好的性能 [1, 2, 6, 7, 15, 16]。 然而,由于没有可利用的几何约束,大多数工作的重点是设计更强大、更复杂的网络。 这使得这个任务在没有其他指导的帮助下成为一个困难的拟合问题。
在传统的单目深度估计中,一些方法从马尔可夫随机场 (MRF) 或条件随机场 (CRF) [28, 29, 35] 构建能量函数。 他们利用观察线索(例如纹理和位置信息)以及最后的预测来构建能量函数,然后优化该能量以获得深度预测。 这种方法被证明在指导深度估计方面是有效的,并且在一些深度方法中也引入了[10,18,27,36]。 然而,由于计算成本高,它们都受限于相邻 CRF 而不是全连接 CRF (FC-CRF),而全连接 CRF 捕获图中任何节点之间的关系并且更强大。
为了解决上述挑战,在这项工作中,我们将输入分割到多个窗口,并在每个窗口内构建完全连接的 CRF 能量,从而大大降低了计算复杂度,并且完全连接的 CRF 变得可行。 为了捕捉图中节点之间的更多关系,我们利用多头注意力机制 [33] 来计算 CRF 的pairwise potential,并构建一个新的神经 CRF 模块,如图 1 所示。
通过使用这个神经窗口 FC-CRFs 模块作为解码器,并使用视觉转换器作为编码器,我们构建了一个简单的自下而上自上而下的网络来估计深度。 为了弥补每个窗口的隔离,执行窗口移位动作 [19],并通过聚合来自全局平均池化层的全局特征 [39] 来解决这些窗口 FC-CRF 中缺少全局信息的问题。
在实验中,我们的方法被证明在室外数据集 KITTI [8] 和室内数据集 NYUv2 [30] 上都明显优于以前的方法。 尽管 KITTI 和 NYUv2 上的最新性能已经饱和了一段时间,但我们的方法进一步大大减少了两个数据集上的错误。 具体来说,KITTI 的 Abs-Rel 误差和 RMS 误差分别降低了 10.3% 和 9.8%,NYUv2 降低了 7.8% 和 8.2%。 我们的方法现在在 KITTI 在线基准的所有提交中排名第一。 此外,我们在全景图像上评估我们的方法。 众所周知,为透视图像设计的网络通常在全景数据集上表现不佳 [12、31、32、34]。 值得注意的是,我们的方法还在全景数据集 MatterPort3D [3] 上设置了最新的性能。 这表明我们的方法可以处理单目深度预测任务中的常见场景。
Contributions:
• 我们将输入图像分割成子窗口并在每个窗口内执行全连接CRFs 优化,这降低了高计算复杂度并使FC-CRFs 可行。
• 我们使用多头注意力来捕捉窗口FC-CRFs 中的成对关系,并将这个神经CRFs 模块嵌入网络中作为解码器。
• 我们为单目深度估计构建了一个新的自下而上自上而下的网络,并在 KITTI、NYUv2 和 MatterPort3D 数据集的所有指标中显示出单目深度的显着改进。
在深度学习出现之前,单目深度估计是一项具有挑战性的任务。许多已发表的作品要么限制自己估计障碍物的一维距离 [20],要么限制在几个已知和固定的对象 [21]。然后 Saxena 等人 [28]声称仅局部特征不足以预测像素的深度,需要考虑整幅图像的全局上下文来推断深度。因此,他们使用经过判别训练的马尔可夫随机场 (MRF) 来合并多尺度局部和全局图像特征,并对单个像素的深度以及不同像素的深度之间的关系进行建模。通过这种方式,他们从颜色、像素位置、遮挡、已知物体大小、雾度、散焦等单目线索推断出良好的深度图。从那时起,MRFs [29] 和 CRFs [35] 在传统的单目深度估计方法中得到了很好的应用。然而,传统方法仍然难以估计准确的高分辨率密集深度图。
在单目深度估计中,基于神经网络的方法已经主导了大多数基准测试。学习从图像到深度图的映射主要有两种方法。第一种方法直接从图像 [1, 6, 11, 15, 16, 24, 26, 37] 中的信息聚合中回归连续深度图。在这种方法中,粗略和精细网络首先在 [6] 中引入,然后在 [15] 中通过多级局部平面引导层进行改进。 [1] 中提出了一个双向注意模块,以利用前馈特征图并结合全局上下文来过滤歧义。最近,更多的方法已经开始使用视觉转换器来聚合图像的信息 [26]。第二种方法尝试离散化深度空间并将深度预测转换为分类或序数回归问题 [2, 7]。在[7]中使用了增加间距的量化策略来更合理地离散深度空间。然后,神经网络计算自适应分箱划分,以实现更好的深度量化。此外,其他方法会引入辅助信息来帮助训练深度网络,例如稀疏深度 [9] 或分割信息 [13,22,25,38]。所有这些方法都试图直接从图像特征中回归深度图,这陷入了一个难以拟合的问题。他们的网络结构变得越来越复杂。与这些作品相比,我们使用全连接 CRF 构建能量,然后优化该能量以获得高质量的深度图。
由于图模型,如 MRF 和 CRF,在传统的深度估计中是有效的,一些方法试图将它们嵌入到神经网络中 [10,17,18,27,36]。 这些方法将像素块视为节点并执行图形优化。 一种这样的方法首先使用网络回归粗略的深度图,然后利用 CRF 对其进行细化 [17],其中 CRF 的后处理功能被证明是有效的。 但是,CRF 与神经网络是分开的。 为了更好地结合 CRF 和网络,其他方法将 CRF 集成到神经网络的层中,并端到端训练整个框架 [10、18、27、36]。 但由于计算复杂度高,它们都仅限于 CRF 而不是全连接 CRF。
在这项工作中,与以前的方法不同,我们将整个图拆分为多个子窗口,使得全连接 CRF 变得可行。 此外,受视觉transformer [5, 19, 33] 最近工作的启发,我们使用多头注意力机制来捕获 FC-CRF 中的成对关系,并提出神经窗口全连接 CRF 模块。 该模块嵌入到网络中,起到解码器的作用,从而可以对整个框架进行端到端的训练。
本节首先介绍窗口全连接 CRF,然后介绍其与神经网络的集成。 然后展示网络结构,其中神经窗口 FC-CRFs 模块嵌入自上而下自下而上的网络中作为解码器。
在传统方法中,马尔可夫随机场 (MRF) 或条件随机场 (CRF) 用于处理密集预测任务,例如单目深度估计 [28] 和语义分割 [4]。 它们被证明可以有效地根据当前和相邻节点的信息来纠正错误的预测。 具体来说,在图模型中,这些方法倾向于将相似的标签分配给在空间和颜色上最接近的节点。 因此,在这项工作中,我们使用 CRF 来帮助进行深度预测。 由于当前像素的深度预测由一张图像中的远距离像素决定,为了增加感受野,我们使用全连接 CRF [14] 来构建能量。 在图模型中,全连接 CRF 的能量函数通常定义为
其中xi是节点i的预测值,j表示图中所有其他节点。预测器根据图像特征为每个节点计算一元势函数ψu。pairwise potential函数 ψp 将节点对连接为:
其中:若i=j, µ(xi , xj ) 等于 1,否则等于0
Ii是节点i的颜色,pi是节点i的位置。pairwise potential通常会考虑颜色和位置信息来执行一些启发式惩罚,这使得预测值 xi、xj 更加合理和合乎逻辑。
在常规 CRF 中,pairwise potential仅计算当前节点和相邻节点之间的边连接。 然而,在全连接 CRF 中,需要计算当前节点与图中任何其他节点之间的连接,如图 2 (a) 所示。
虽然全连接 CRF 可以带来全局范围的连接,但它的缺点也很明显。 一方面,连接图像中所有像素的边数很大,这使得这种pairwise potential的计算非常耗费资源。 另一方面,像素的深度通常不是由远处的像素决定的。 只需要考虑一定距离内的像素。
因此,在这项工作中,我们提出了基于窗口的全连接 CRF。 我们将图像分割成多个基于patch的窗口。 每个窗口包括 N × N 个图像块,其中每个块由 n × n 个像素组成。 在我们的图模型中,每个patch而不是每个像素都被视为一个节点。 一个窗口内的所有patch都与边缘完全连接,而不同窗口的patch不连接,如图2(b)所示。 在这种情况下,pairwise potential的计算只考虑一个窗口内的patch,计算复杂度显着降低。
以大小为hxw的patch为例,FC-CRFs 和窗口 FCCRFs 的计算复杂度为:
其中,N是窗口大小,
分别是一个一元势(one unary potential)和一个成对势(pairwise potential)的计算复杂度。
在窗口全连接 CRF 中,所有窗口都是不重叠的,这意味着任何窗口之间都没有信息联系。 然而,相邻的窗口是物理连接的。 为了解决窗口的隔离问题,我们通过图像中的 (N/2,N/2) 个补丁(patches)来移动窗口,并在计算原始窗口的能量函数(energy function)后计算移位窗口的能量函数,类似于 swin-transformer [19]。 这样,孤立的相邻像素在移位的窗口中连接起来。 因此,每次计算能量函数时,我们都会依次计算两个能量函数,一个用于原始窗口,另一个用于移位窗口。
在传统的 CRF 中,一元势通常受预测值上的分布作用,例如,
其中 I 是输入的彩色图像,P 是值预测的概率分布。 pairwise potential 通常根据像素对的颜色和位置来计算,例如,
这种势鼓励不同颜色和较远的像素具有各种值预测,同时惩罚相似颜色和相邻像素中的值差异。
这些势函数都是手工设计的,不能太复杂。 因此它们很难表示高维信息和描述复杂的连接。 因此,在这项工作中,我们建议使用神经网络来执行势函数。
对于一元势 (unary potential),它是从图像特征中计算出来的,这样就可以通过网络直接得到:
其中 θ 是一元网络的参数。
对于成对势(pairwise potential),我们意识到它由当前节点和其他节点的值组成,以及根据节点对的颜色和位置信息计算的权重。 所以我们把它改写为
其中 F 是特征图,w 是weghting function。 我们逐个节点计算成对势。 对于每个节点 i,我们将其所有成对势相加并获得
其中 α, β 是weighting functions,将由网络计算。
受最近Transformer [5, 33] 中工作的启发,我们从窗口中每个补丁的特征图计算查询向量 q 和关键向量 k,并将所有补丁的向量组合到矩阵 Q 和 K。
然后我们计算矩阵 Q 和 K 的点积,得到任意对之间的potential weight,然后将预测值 X 乘以权重,得到最终的成对势。 为了引入位置信息,我们还添加了一个相对位置嵌入 P。因此,等式 8 可以计算为
其中·表示点乘。 因此,softmax 的输出得到方程(8) 的权重 α 和 β。
Overview
为了将神经窗口全连接 CRF 嵌入深度预测网络,我们构建了一个自下而上的自顶向下结构,其中执行了四个级别的 CRF 优化,如图 3 所示。 我们将这个神经窗口 FC-CRFs 模块嵌入到网络中作为解码器,它根据粗略深度和图像特征预测下一级深度。 对于编码器,我们使用 swin-transformer [19] 来提取图像特征。
对于 H × W 大小的图像,特征提取编码器和 CRFs 优化解码器有四个级别的图像块,从 4 × 4 像素到 32 × 32 像素。 在每一层,N × N 个补丁组成一个窗口。 各级窗口大小N是固定的,所以底层会有H/4N×W/4N个窗口,顶层会有H/32N×W/32N个窗口。
Global Information Aggregation
在顶层,为了弥补窗口 FC-CRF 全局信息的不足,我们使用金字塔池化模块 (PPM) [39] 来聚合整个图像的信息。 与 [39] 类似,我们使用尺度 1、2、3、6 的全局平均池化来提取全局信息,然后将其与输入特征连接起来,通过卷积层映射到顶层预测 X
Neural Window FC-CRFs Module
在每个神经窗口 FC-CRFs 块中,有两个连续的 CRFs 优化,一个用于常规窗口,另一个用于移位窗口。为了配合 Transformer 编码器,窗口大小 N 设置为 7,这意味着每个窗口包含 7×7 个补丁。一元势(unary potential)通过卷积网络计算,成对势(pairwise potential)根据方程9计算。在每次 CRFs 优化中,计算多头 Q 和 K 以获得多头势(multi-head potentials),可以增强能量函数的关系捕获能力。从顶层到底层,采用32、16、8、4头的结构。 然后将能量函数输入到由两个全连接层组成的优化网络中,输出优化后的深度图 Xt。
Upscale Module
在前三个级别的神经窗口 FC-CRFs 解码器之后,执行 shuffle 操作以重新排列像素,从而将图像从 h/2×w/2×d 放大到 h×w×d/4。 一方面,这种操作在不损失像上采样一样的锐度(sharpness)的情况下,以更大的尺度将流量(flow)提升到下一个层次。 另一方面,这减少了特征维度以减轻后续网络的负担。
Training Loss
像之前的工作一样 [2, 15, 16] ,我们使用 [6] 提出的尺度不变对数 (SILog) 损失来监督训练。 给定ground-truth深度图,我们首先计算预测深度图与真实深度之间的对数差:
其中
是ground-truth深度值,是像素i处的预测深度值
然后对于图像中具有有效深度值的 K 个像素,尺度不变损失计算为:
其中 λ 是方差最小化因子,α 是尺度常数。 在我们的实验中,根据之前的工作 [15],λ 设置为 0.85,α 设置为 10。
网络使用 Adam 优化器进行端到端优化(β1 = 0.9,β1 =0.999)。 训练运行 20 个 epoch,学习率为 1 × 10−4,batch size 为 8。我们网络的输出深度图是原始图像的 1/4 ×1/4 大小,然后将其大小调整为全分辨率。
CVPR_2022.pdf