摘要
从一张图像中估计准确的深度是一个挑战,因为它本身就具有模糊性和不适定性。虽然最近的工作设计了越来越复杂和强大的网络来直接回归深度图,但我们选择了CRF优化的路径。由于计算量大,CRF通常在邻域之间执行,而不是在整个图中执行。为了充分利用全连接CRF的潜力,我们将输入拆分为窗口,并在每个窗口内执行全连接CRF优化,这降低了计算复杂度,使全连接CRF可行。为了更好地捕捉图中节点之间的关系,我们利用多头注意力机制来计算多头势函数,该函数被传送到网络以输出优化的深度图。然后我们构建了一个bottom-up-top-down的结构,其中Neural Window FC CRF模块作为解码器,vision transformer作为编码器。实验表明,与以前的方法相比,我们的方法在KITTI和NYUv2数据集的所有指标上都显著提高了性能。此外,该方法可以直接应用于全景图像(panorama images),并且在MatterPort3D数据集上的性能优于以前的所有全景图像方法。
1.引言
深度预测是计算机视觉中的一项经典任务,对于三维重建、自动驾驶和机器人航行等众多应用至关重要。这样的视觉任务旨在从单一图像估计深度图,这是一个不适定且固有的模糊问题,因为无限多个3D场景可以投影到同一个2D场景。因此,这项任务对传统方法是一个挑战,这些方法通常局限于低维和稀疏距离,或已知和固定的对象。
近年来,许多工作已经使用深度网络直接回归深度图,并取得了良好的性能。然而,由于没有利用几何约束,大多数工作的重点是设计更强大、更复杂的网络。这使得在没有其他指导的情况下,这项任务成为一个困难的拟合问题。
- 图1:Neural Window FC CRF以图像特征
F
F
F和上层预测
X
X
X为输入,计算每个窗口中的全连接能量
E
E
E,然后将其反馈给网络,输出优化的深度图。
在传统的单目深度估计中,一些方法从马尔可夫随机场(MRF)或条件随机场(CRF)构建能量函数。他们利用观察线索,例如纹理和位置信息,以及最后的预测来构建能量函数,然后优化该能量以获得深度预测。这种方法被证明在指导深度估计方面是有效的。然而,由于计算量大,它们都局限于相邻的CRF,而不是全连接CRF(FC CRF),而全连接CRF捕获了图中任何节点之间的关系,并且更强大。
为了应对上述挑战,我们将输入分割到多个窗口,并在每个窗口内构建全连接的CRF能量,这样可以大大降低计算复杂度,使全连接的CRF变得可行。为了捕捉图中节点之间的更多关系,我们利用多头注意机制来计算CRF的pair-wise的势能,并构建一个新的神经CRF模块,如图1所示。通过采用这种Neural Window FC-CRF作为解码器,以及vision transformer作为编码器,我们建立了一个简单的bottom-up-top-down的网络来估计深度。为了弥补每个窗口的封闭信息(isolation),执行了窗口移位操作,并通过聚合global average pooling中的全局特征来解决这些窗口FC CRF中缺乏全局信息的问题。
在实验中,我们的方法在室外数据集KITTI和室内数据集NYUv2上都比以前的方法有显著的优势。虽然KITTI和NYUv2的最新性能已经饱和了一段时间,但我们的方法进一步大大减少了这两个数据集上的error。具体而言,KITTI的Abs-Rel error和RMS error分别降低了10.3%和9.8%,NYUv2的Abs-Rel error和RMS error分别降低了7.8%和8.2%。我们的方法在KITTI的在线benchmark上的所有提交中排名第一。此外,我们在全景图像上评估了我们的方法。众所周知,为perspective images设计的网络通常在全景数据集上表现不佳。值得注意的是,我们的方法还在全景数据集MatterPort3D上达到了新的最先进性能。这表明我们的方法可以处理单目深度预测任务中的常见场景。
2.Related Work
2.1.Traditional Monocular Depth Estimation
在深度学习出现之前,单目深度估计是一项具有挑战性的任务。许多已发表的工作要么局限于估计障碍物的一维距离,要么局限于估计几个已知和固定的物体。然后,Saxena等人声称,仅局部特征不足以预测像素的深度,需要考虑整个图像的全局背景来推断深度。因此,他们使用有区别训练的马尔可夫随机场(MRF)结合多尺度局部和全局图像特征,并对单个像素的深度以及不同像素深度之间的关系进行建模。通过这种方式,他们可以从单目线索(如颜色、像素位置、遮挡、已知对象大小、雾度、散焦等)中推断出良好的深度图。从那时起,传统方法中,MRF和CRF已被广泛用于单目深度估计。然而,传统方法仍然难以精确估计高分辨率密集深度图。
2.2.Neural Networks Based Monocular Depth
如今,在单目深度估计中,基于神经网络的方法占据了大多数benchmark。从图像到深度图的映射学习主要有两种方法。
- 第一种方法直接将连续值的深度图从图像中的信息聚合中回归。在这种方法中,coarse and fine networks首先引入,然后通过多级局部平面引导层(multi-stage local planar guidance layer)进行改进。基于双向注意力模块,利用前馈特征映射,结合全局上下文过滤模糊性。最近,更多的方法开始使用vision transformer来聚合图像信息。
- 第二种方法尝试将depth space离散化,并将深度预测转化为分类或顺序回归问题。有的论文中使用了增加间距的量化策略,以更合理地离散深度空间。然后,通过神经网络计算自适应容器划分,以实现更好的深度量化。此外,其他方法引入辅助信息来帮助深度网络的训练,例如稀疏深度(sparse depth)或语义分割信息。所有这些方法都试图从图像特征中直接回归深度图,这是一个困难的拟合问题。他们的网络结构变得越来越复杂。
与这些工作相反,我们使用全连接的CRF构建能量,然后优化该能量以获得高质量的深度图。
2.3.Neural CRFs for Monocular Depth
由于像MRF和CRF这样的图模型在传统深度估计中是有效的,一些方法试图将它们嵌入神经网络。这些方法将像素块视为节点,并进行图优化(graph optimization)。其中一种方法首先使用网络对粗略深度图进行回归,然后利用CRF对其进行细化,CRF的后处理功能被证明是有效的。然而,CRF与神经网络是分离的。为了更好地结合CRF和网络,其他方法将CRF集成到神经网络的层中,并端到端地训练整个框架。但由于计算复杂度高,它们都局限于CRF,而不是全连接的CRF。
在我们的工作中,我们将整个graph划分成多个sub-windows,使得FC-CRF可行。此外,受vision transformer最近工作的启发,我们使用多头注意机制捕捉FC CRF中的pair-wise关系,并提出了一个Neural Window FC-CRF模块。该模块嵌入到网络中起到解码器的作用,使得整个框架可以端到端地进行训练。
3.Neural Window FC-CRF
3.1.全连接条件随机场
在传统方法中,马尔可夫随机场(MRF)或条件随机场(CRF)被用来处理密集的预测任务,如单目深度估计和语义分割。结果表明,基于当前节点和相邻节点的信息,它们在纠正错误预测方面是有效的。具体来说,在图模型中,这些方法有利于将相似的标签指定给空间和颜色接近的节点。
因此,在这项工作中,我们使用CRF来帮助深度预测。由于当前像素的深度预测由一幅图像中的远程像素(long-range pixels)决定,为了增加感受野,我们使用全连接的CRF来构建能量。在图模型中,全连通CRF的能量函数通常定义为:
E
(
X
)
=
∑
i
?
u
(
x
i
)
+
∑
i
j
?
p
(
x
i
,
x
j
)
E(X)=\sum_{i}\phi_{u}(x_{i})+\sum_{ij}\phi_{p}(x_{i},x_{j})
E(X)=i∑??u?(xi?)+ij∑??p?(xi?,xj?)其中,
x
i
x_{i}
xi?是节点
i
i
i的预测值,
j
j
j代表图中的其他所有节点。预测器predictor根据图像特征计算每个节点的一元势函数(unary potential function)
?
u
\phi_{u}
?u?。
二元势函数(pair-wise potential function)
?
p
\phi_{p}
?p?连接节点对:
?
p
=
μ
(
x
i
,
x
j
)
f
(
x
i
,
x
j
)
g
(
I
i
,
I
j
)
h
(
p
i
,
p
j
)
\phi_{p}=\mu(x_{i},x_{j})f(x_{i},x_{j})g(I_{i},I_{j})h(p_{i},p_{j})
?p?=μ(xi?,xj?)f(xi?,xj?)g(Ii?,Ij?)h(pi?,pj?)其中,当
i
=
j
i=j
i=j时
μ
(
x
i
,
x
j
)
\mu(x_{i},x_{j})
μ(xi?,xj?)为1,否则为0。
I
i
I_{i}
Ii?是节点
i
i
i的颜色,
p
i
p_{i}
pi?是节点
i
i
i的位置。二元势通常会考虑颜色和位置信息来执行一些启发式惩罚,这使得预测值
x
i
,
x
j
x_{i},x_{j}
xi?,xj?更合理和合乎逻辑。
在常规CRF中,二元势只计算当前节点和相邻节点之间的边连接。然而,在完全连接的CRF中,需要计算图中当前节点和任何其他节点之间的连接,如图2a所示。
- 图2:全连接CRF和窗口全连接CRF的图模型。在全连接CRF graph中,以橙色节点为例,它连接到图中的所有其他节点。然而,在窗口全连接的CRF中,橙色节点仅连接到一个窗口内的所有其他节点。
3.2.Window FC-CRF
虽然全连接CRF可以带来全局范围的连接,但其缺点也很明显。一方面,连接图像中所有像素的边的数量很多,这使得这种二元势的计算相当耗费资源。另一方面,像素的深度通常不是由long-range的像素决定的。只需要考虑一定距离内的像素。
因此,在这项工作中,我们提出了基于窗口的全连接CRF。我们将图像分割成多个patch-based的窗口。每个窗口包含
N
×
N
N\times N
N×N个图像块,每个图像块由
n
×
n
n\times n
n×n个像素组成。在我们的图模型中,每个patch被视为一个节点而不是每个像素。一个窗口内的所有patch都用边完全连接,而不同窗口的patch不连接,如图2b所示。在这种情况下,二元势的计算只考虑一个窗口内的patch,因此计算复杂度显著降低。
选择一张具有
h
×
w
h\times w
h×w patches 的图像,FC-CRF和Window FC-CRF的计算复杂度为:
Ω
(
F
C
?
C
R
F
s
)
=
h
w
×
Ω
(
?
u
)
+
h
w
(
h
w
?
1
)
×
Ω
(
?
p
)
\Omega(FC-CRFs)=hw\times\Omega(\phi_{u})+hw(hw-1)\times\Omega(\phi_{p})
Ω(FC?CRFs)=hw×Ω(?u?)+hw(hw?1)×Ω(?p?)
Ω
(
W
i
n
d
o
w
F
C
?
C
R
F
s
)
=
h
w
×
Ω
(
?
u
)
+
h
w
(
N
2
?
1
)
×
Ω
(
?
p
)
\Omega(WindowFC-CRFs)=hw\times\Omega(\phi_{u})+hw(N^{2}-1)\times\Omega(\phi_{p})
Ω(WindowFC?CRFs)=hw×Ω(?u?)+hw(N2?1)×Ω(?p?)其中,
N
N
N是窗口的大小。
在窗口全连接CRF中,所有窗口都不重叠,这意味着任何窗口之间都没有信息连接。然而,相邻的窗口是有联系的。为了解决这种窗口之间的isolation,我们在图像中通过
(
N
/
2
,
N
/
2
)
(N/2,N/2)
(N/2,N/2)的patches移动窗口,并且计算移动窗口后的能量。这样,孤立的相邻像素在移位窗口中连接起来。因此,每次计算能量函数时,我们都会依次计算两个能量函数,一个用于原始窗口,另一个用于移位窗口。
3.3.Neural Window FC-CRF
在传统的CRF中,一元势函数通常由预测值的分布决定,比如
?
u
(
x
i
)
=
?
l
o
g
P
(
x
i
∣
I
)
\phi_{u}(x_{i})=-logP(x_{i}|I)
?u?(xi?)=?logP(xi?∣I)其中
I
I
I是输入的彩色图像,
P
P
P是值预测的概率分布。二元势函数根据像素对的颜色和位置计算:
?
p
(
x
i
,
x
j
)
=
μ
(
x
i
,
x
j
)
∣
∣
x
i
?
x
j
∣
∣
e
?
∣
∣
I
i
?
I
j
∣
∣
2
σ
2
e
?
∣
∣
p
i
?
p
j
∣
∣
2
σ
2
\phi_{p}(x_{i},x_{j})=\mu(x_{i},x_{j})||x_{i}-x_{j}||e^{-\frac{||I_{i}-I_{j}||}{2\sigma^{2}}}e^{-\frac{||p_{i}-p_{j}||}{2\sigma^{2}}}
?p?(xi?,xj?)=μ(xi?,xj?)∣∣xi??xj?∣∣e?2σ2∣∣Ii??Ij?∣∣?e?2σ2∣∣pi??pj?∣∣?这种势函数鼓励不同颜色和远处的像素进行不同的值预测,同时惩罚相似颜色和相邻像素中的值差异。
这些势函数是手工设计的,不能太复杂。因此,它们很难表示高维信息和描述复杂的连接。因此,在这项工作中,我们建议使用神经网络来执行势函数的功能。
对于一元势,它是根据图像特征计算出来的,因此可以通过网络直接获得:
?
u
(
x
i
)
=
θ
u
(
I
,
x
i
)
\phi_{u}(x_{i})=\theta_{u}(I,x_{i})
?u?(xi?)=θu?(I,xi?)其中,
θ
\theta
θ是一元势网络的参数。
对于二元势,我们意识到它由当前节点和其他节点的值以及基于节点对的颜色和位置信息计算的权重组成。所以我们将其重新表述为:
?
p
(
x
i
,
x
j
)
=
w
(
F
i
,
F
j
,
p
i
,
p
j
)
∣
∣
x
i
?
x
j
∣
∣
\phi_{p}(x_{i},x_{j})=w(F_{i},F_{j},p_{i},p_{j})||x_{i}-x_{j}||
?p?(xi?,xj?)=w(Fi?,Fj?,pi?,pj?)∣∣xi??xj?∣∣其中,
F
F
F是特征图,
w
w
w是加权函数,我们逐个节点计算节点对的势能。对每个节点
i
i
i,我们对与它相关的节点对的势能相加得到:
?
p
i
=
α
(
F
i
,
F
j
,
p
i
,
p
j
)
x
i
+
∑
j
≠
i
β
(
F
i
,
F
j
,
p
i
,
p
j
)
x
j
\phi_{p_{i}}=\alpha(F_{i},F_{j},p_{i},p_{j})x_{i}+\sum_{j\neq i}\beta(F_{i},F_{j},p_{i},p_{j})x_{j}
?pi??=α(Fi?,Fj?,pi?,pj?)xi?+j?=i∑?β(Fi?,Fj?,pi?,pj?)xj?其中
α
,
β
\alpha,\beta
α,β是加权函数,将由网络计算。
受transformer最近工作的启发,我们从窗口中每个patch的特征图中计算query向量
q
q
q和key向量
k
k
k,并将所有patch的向量组合为矩阵
Q
Q
Q和
K
K
K。然后我们计算矩阵
Q
Q
Q和
K
K
K的点积,以获得任意pair之间的势权重,然后将预测值
X
X
X乘以权重,得到最终的pair-wise势。为了引入位置信息,我们还添加了相对位置embedding
P
P
P。因此,上一个公式可计算为:
?
p
i
=
s
o
f
t
m
a
x
(
q
?
K
T
+
P
)
?
X
\phi_{p_{i}}=softmax(q\cdot K^{T}+P)\cdot X
?pi??=softmax(q?KT+P)?X
∑
i
?
p
i
=
s
o
f
t
m
a
x
(
Q
?
K
T
+
P
)
?
X
\sum_{i}\phi_{p_{i}}=softmax(Q\cdot K^{T}+P)\cdot X
i∑??pi??=softmax(Q?KT+P)?X其中,
?
\cdot
?代表点乘积。因此,softmax的输出可以得到权重
α
,
β
\alpha,\beta
α,β。
3.4.Network Structure
Overview 为了将完全连接的神经窗口CRF嵌入深度预测网络,我们构建了一个bottom-up-top-down的结构,其中执行了四个级别的CRF优化,如图3所示。我们将该神经窗口FC-CRF模块嵌入到网络中作为解码器,根据粗深度和图像特征预测下一层深度。对于编码器,我们使用swin transformer来提取图像特征。
- 图3:提出的框架。编码器首先从四个级别提取特征。PPM Head聚合全局和局部信息,并根据顶部图像特征
F
F
F进行初始预测
X
X
X。然后在每个级别,神经窗口全连接CRF模块根据
X
X
X和
F
F
F构建多头能量,并将其优化为更好的预测
X
′
X'
X′。考虑到清晰度和网络权重,在每个级别之间执行重新排列upscale。
对于大小为
H
×
W
H\times W
H×W的图像,特征提取编码器和CRF优化解码器有四个级别的图像patches,从4×4像素到32×32像素。在每个级别上,
N
×
N
N\times N
N×N个patches构成一个窗口。窗口大小
N
N
N在所有级别上都是固定的,因此底部级别将有
H
4
N
×
W
4
N
\frac{H}{4N}\times\frac{W}{4N}
4NH?×4NW?个窗口,顶部级别将有
H
32
N
×
W
32
N
\frac{H}{32N}\times\frac{W}{32N}
32NH?×32NW?个窗口。
Global Information Aggregation 在顶层,为了弥补窗口FC-CRF全局信息的不足,我们使用金字塔池化模块(PPM)来聚合整个图像的信息。与PPM类似,我们使用尺度1、2、3、6的平均池来提取全局信息,然后将其与输入特征连接(concat),通过卷积层映射到顶层预测
X
X
X。
Neural Window FC-CRF 在每个神经窗口FC-CRF中,有两个连续的CRF优化,一个用于常规窗口,另一个用于移位窗口。为了配合transformer编码器,窗口大小
N
N
N设置为7,这意味着每个窗口包含
7
×
7
7×7
7×7个patches。一元势由卷积网络计算,二元势由上面提到的softmax公式计算。在每个CRF优化中,计算多头
Q
Q
Q和
K
K
K以获得多头势,这可以增强能量函数的关系捕获能力。从顶层到底层,采用32、16、8、4个头的结构。然后将能量函数输入由两个全连接的层组成的优化网络,输出优化的深度图
X
′
X'
X′。
Upscale Module 在前三级的神经窗口FC-CRF解码器之后,执行shuffle操作来重新排列像素,从而将图像从
h
2
×
w
w
×
d
\frac{h}{2}\times\frac{w}{w}\times d
2h?×ww?×d放大到
h
×
w
×
d
4
h\times w\times \frac{d}{4}
h×w×4d?。一方面,该操作以更大的比例将flow增加到下一个级别,而不会失去像上采样这样的形状度。另一方面,这降低了特征维数,以减轻后续网络的负担。
Training Loss 在之前的工作之后,我们使用尺度不变对数(SILog)损失来监督训练。给定GT深度图,我们首先计算预测深度图和实际深度之间的对数差:
Δ
d
i
=
l
o
g
d
^
i
?
l
o
g
d
i
?
\Delta d_{i}=log\widehat{d}_{i}-logd_{i}^{*}
Δdi?=logd
i??logdi??其中,
d
i
?
d_{i}^{*}
di??是像素
i
i
i的GT深度值,
d
^
i
\widehat{d}_{i}
d
i?是预测深度值。
然后,对于图像中具有有效深度值的
K
K
K个像素,尺度不变损失计算为:
L
=
α
1
K
∑
i
Δ
d
i
2
?
λ
K
2
(
∑
i
Δ
d
i
)
2
L=\alpha\sqrt{\frac{1}{K}\sum_{i}\Delta d_{i}^{2}-\frac{\lambda}{K^{2}}(\sum_{i}\Delta d_{i})^{2}}
L=αK1?i∑?Δdi2??K2λ?(i∑?Δdi?)2
?其中
λ
λ
λ是方差最小化因子,
α
α
α是标量常数。在我们的实验中,
λ
λ
λ被设置为0.85,
α
α
α被设置为10。
4.Experiments
数据集 KITTI数据集是最常用的基准,用于从移动车辆中捕捉户外场景。有两种主要用于单目深度估计的split。一种是由Eigen等人提出的训练/测试分割,包含23488个训练图像对和697个测试图像。另一个是盖革等人提出的官方分割,包括42949对训练图像、1000张验证图像和500张测试图像。对于官方分割,在线评估基准保留了测试图像的GT深度图。
NYUv2是一个室内数据集,包含从464个室内场景中捕获的120K RGB-D视频。我们按照官方的训练/测试划分来评估我们的方法,其中249个场景用于培训,215个场景中的654个图像用于测试。
为了验证我们的方法在更多域的有效性,我们还在全景图像上评估了我们的方法。MatterPort3D是全景深度估计中所有广泛使用的数据集中最大的真实数据集。在正式split之后,我们使用来自61所房屋的7829张图像来训练我们的网络,然后在957张验证图像和2014张测试图像的合并集上评估模型。在训练和评估中,所有图像的大小都调整为1024×512。
结果
- 图4:KITTI在线基准测试的定性结果,由在线服务器生成。
|