A Survey on Deep Learning Techniques for Stereo-based Depth Estimation论文阅读

第一次校正,改正了一些错误和生硬的翻译(像机器翻译一样)。一定会有一些笔误、翻译不准确甚至错误的地方。还望批评指正。

1. 摘要

估计RGB图片的深度一直以来都是棘手的问题,计算机视觉、图形学、机器学习社区在此耕耘了数十年。立体匹配是最广泛见诸文献的技术之一,因为它与人眼的双目系统很像。传统上,使用多张图片的人工特征匹配来处理立体深度估计。尽管研究工作众多,传统方法仍然受困于高纹理区域、无纹理区域和遮挡。由于在解决各种2D和3D视觉问题方面取得了巨大的成功,基于立体的深度估计领域越来越青睐深度学习,在2014到2019年间已经发表了150余篇文章。深度学习方法已经证明了它在性能上的飞跃,它可以应用于自动驾驶和增强现实。本文对该领域进行了综合性研究,总体了最常用的流水线,讨论了其优势和局限性,还预测了未来可能的发展方向。

2. 引言

在机器人、自动驾驶、目标识别、场景理解、4D建模和动画、增加现实、工业控制、医疗诊断等领域的应用中,用一张或多张RGB图片估计深度一直以来都是棘手的问题。该问题已经被研究了几十年了。在见诸文献的技术中,立体匹配是传统上研究最多的领域之一,因为它与人眼双目系统有强关联性。

第一代立体深度估计方法用精确标定的相机和多张图片的像素匹配。尽管效果不错,但也在很多方面受限。例如不适合处理遮挡、无特征区域、高度重复纹理区域。有趣的是,人可以用先验知识很好地解决这些棘手问题。例如人很容易估计目标的尺寸、相对位置、目标到人眼的距离。这是因为人类从以前看到的物体和场景获取一些先验知识,继而的头脑中建立了描述三维世界的模型。第二代方法用先验知识把问题转化为一个学习任务。深度学习技术的到来伴随着数据量的持续增长,让第三代方法能够恢复丢失的维度。这些方法已经在与计算机视觉和图形学相关任务中取得了振奋人心的成果。

本文对用深度学习技术实现立体深度估计这一领域在最近的进展进行了综合的、结构性的回顾。这些方法的输入是分开放置的RGB相机拍摄的若干张图片。我们收集了2014年1月到2019年12月发表于计算机视觉、计算机图形学和机器学习领域顶级会议和期刊的150余篇论文。目的是给读者一个引导。该领域在过去几年发展动力十足。

本文的主要贡献是:

  • 据我们所知,这是用深度学习方法实现立体深度估计的第一篇综述文章。我们对过去六年里发表于顶级会议和期刊的150余篇论文进行了全面的回顾。
  • 我们对先进方法进行了全面的分类。首先描述了通用流水线并讨论了每种流水线的相似性和差异。
  • 全面深刻地分析问题的各个方面,包括训练数据、网络结构、在重建性能上的效果、训练策略、泛化能力。
  • 综合性地总结了一些关键方法在公开数据集和室内图片上的性质和性能。对于室内图片还测试了它在完全新的环境上表现。

3. 范围和分类

I = \{I_k, k = 1, \cdots, n \}是同一场景的n \geq 1张RGB图片的集合,相机的内外参已知或未知。目标是估计若干张深度图,可以用相同视点的图片,也可以用不同视点的图片。本文聚焦于用深度学习方法实现立体深度估计,当n = 2时是立体匹配,当n > 2时是Multi-View Stereo (MVS). 单目和基于视频的深度估计方法不在本文的研究范围。

基于学习的深度重建可能被表述为学习一个预测器f(\theta),输入是图片集I,输出是深度图\hat{D}\hat{D}

尽可能地接近于真实的(也是未知的)深度图D。换句话说,我们试图找到一个函数f(\theta),使\mathcal{L} = d\left ( f_{\theta}(I), D \right ) 最小。其中\theta是一组参数,d\left ( \cdot , \cdot \right )是真实的深度图D与重建的深度图f(\theta)之间的距离度量。目标函数\mathcal{L}是已知的损失函数。

所有的方法主要区别为两类。第一类方法模仿传统的立体匹配技术,显式地学习匹配或像素关联。该关联可以被转化为光流或视差图,继而可以被转换为参考图片中每个像素的深度。预测器f(\theta)由三个模块组成:特征提取模块、特征匹配和损失值聚合模块,视差或深度估计模块。每个模块都是独立训练的。

第二类方法是端到端的训练。主要有两类方法。早期的方法把深度估计看作一个回归问题。不用显式的多视角的特征匹配直接把输入图片回归为深度图。该方法简单又快速,甚至可以实时运行,缺点是需要海量的训练数据,这是很难得到的。第二类方法模仿传统的立体匹配,但把问题划分成若干块,每块都是可微的,因而可以端到端训练。

在这些方法中,都可以用精炼模块或后处理模块继续优化深度图。在每次有新的图片时该模块就开始工作。

最后,基于深度学习的立体方法的性能不仅依赖于网络结构,也依赖于训练数据,还依赖训练过程(优化参数)。训练过程包括损失函数的选择和监督模式,监督模块包括依赖人工标注的完全有监督、弱监督和自监督。本文接下来会讨论这些方面。

4. 数据集

下表总结了部分数据集。

5. 立体匹配获取深度

立体深度重建方法用两张RGB图片生成视差图D,其过程是最小化能量函数:

其中x和y是图像像素,N_x是x的邻域内像素的数量。第一项是匹配损失。如果使用经过双目校正的双目相机,C(x, d_x)是左目x = (i, j)与右目y = (i, j - d_x)的匹配损失。此时d_x = D(x) \in [d_{min}, d_{max}]是像素x的视差。可以通过三角化来计算深度。如果把视差离散化为n_d个离散值,C就变成三维损失体,其尺寸为W \times H \times n_d。在更常见的多视角立体实例,即n ≥ 2时,损失值C(x, d_x)是参考图片中x的逆似然, d_x是其深度。 方程(1)的第二项正则项,用来约束平滑性和左右一致性。

传统上,解决这个问题分四块,分别是特征提取,特征匹配,视差计算,视差精修与后处理。前两块构建损失体C。第三块调整损失体并最小化方程(1)以获取视差图的初始估计。最后一部分精修并后处理初始视差图。

本节聚焦于已经由深度学习方法实现的各个部分,下表列出了最优秀的方法。

5.1. 学习特征提取与匹配

早期的深度学习技术用学习的特征取代人工特征来做立体匹配。这些方法取两个像素块,一个在左目以x = \left ( i, j \right )为中心,另一个在右目以y = \left ( i, j -d \right )为中心。用CNN计算它们的关联特征矢量,然后匹配,生成相似度得分C\left ( x, d \right ),使用标准的相似度度规,比如L_1L_2,相关度规,或者用上层网络学习的度规。这两部分可以分开训练也可以共同训练。

5.1.1. 基础网络架构

基础网络架构,如图2-a所示,包含两个CNN编码分支,它们作为描述子计算模块。第一个分支取左目图片中像素x = \left ( i, j \right )周围的一个像素块,输出一个特征矢量。第二个分支取右目图片中像素y = \left ( i, j -d \right )周围的一个像素块,这里d \in [d_{min}, d_{max}],是候选视差。编码器由四个卷积层组成,除了最后一层外每一层都配一个ReLU单元。[37], [38]在此基础上增加了下述工作:

  • 除最后一层外,每一层之后增加最大池化与下采样,如图2-a所示。这样网络可以处理更大的尺寸像素块和更大的视角变化[39], [42]。
  • 在特征提取分支尾部加入空间金字塔池化 (SPP) ,这样网络可以处理随机尺寸的像素块并产生固定尺寸的特征,如图2-c所示。作用是通过空间池化来聚合最后一个卷积层的特征到固定尺寸的特征网格中。池化区的尺寸伴随着输入的尺寸变化以确保输出特征格子有独立于输入尺寸的固定尺寸。因此,网络有能力处理任意尺寸的像素块和图片,也有能力在不改变结构也不需要再训练的情况下计算相同维度的特征矢量。

学习的特征被放到顶层模块,该模块返回相似度得分。它可以是相似度度规,例如L_2距离,余弦距离,(归一化)相关距离(或内积)。由L_2距离得到的相关性的主要优势是它可以用一维或二维卷积操作来实现,称作相关层。相关层并不需要训练,因为实际上滤波器是由网络的第二个分支计算的特征。相关层已经被[22], [39], [41], [42], [44]使用起来。

最近的一些工作使用由全连接层组成的决策网络取代人工设计的相似性度量,全连接层可以由1×1卷积,全卷积层或卷积层加全连接层来实现[37], [38], [42], [46], [49]。决策网络和两张图片的像素块的相似性的特征提取模块联合训练。[38]使用三个全连接层加softmax组成的头部网络。[37]使用两个线性全连接层(每个包含512个隐藏单元),它们中间有一个ReLU激活层。在这些文章中,特征编码模块的两个分支计算的特征先被串联起来然后送到头部网络中。[47]在把来自多个像素块的特征聚集在一起做平均池化再送入决策网络。该工作的主要优势是可以处理任意数量的像素块而无需改变网络或重新训练。同样地,它适合计算多个像素块的相似性。使用决策网络取代人工设计的相似性度量让学习的方法变成了可能。使用相关层精度会更高,但也会更慢。

5.1.2. 网络架构变种

基线结构被如下几种方式扩展:(1)使用残差网络(ResNet) 改善训练;(2)在不损失分辨率和计算效果的前提下增大网络的感受野;(3)处理多尺度特征;(4)减少正向传播的数量;(5)学习相似性,但不显式地学习特征。

  • ConvNet vs. ResNet

[39][42][38]在特征提取块中使用标准的卷积层。[46]增加了带多级加权残差残差块,这样更容易训练更深的网络。它的特别之处是网络可以自己学习如何调节加入的跳级连接的贡献。[39]证明了这一架构优于基础网络。

  • 增大网络的接收域

学习的特征的尺度由下列各项决定:(1)输入像素块的尺寸;(2)网络接收域;(3)每层中卷积滤波器和池化操作的核尺寸。增加核尺寸可以在图像像素之间得到更多的全局交互,但也导致了较高的计算开销。在[39], [42]中使用的卷积池化,降低了分辨率并导致了细节上的损失,并不适合稠密的关联估计。

通过某些技术可以在增大接收域的同时不损失分辨率也不增加计算时间。例如[52]使用扩张卷积,也就是大的卷积滤波器,但该滤波器带一些孔。因此并不增加开销。其它的技术,如[48], [49]使用空间金字塔池化 (SPP) 模块放在网络的不同位置,如图 2-(c-e)所示。例如[48]在立体匹配中引入了FW-CNN,再在决定网络的末端加上SPP模块,如图2-(d)所示。作为一个结果,感受野可以被扩大。但是对于参考图片的每个像素,全连接层和层化操作需要计算n_d次,这里n_d是视差的层数。 为了避免这一问题,[49]在每个特征计算分支的末端放一个SPP模块,如图2-(c)和(e)所示。用这种方式,每一个像素块仅计算一次。[49]使用不同窗口尺寸的多个one-stride池化到不同的层,然后把它们级联起来产生特征地图。如图2-(e)所示。

  • 学习多尺度特征

[37], [40]使用的方法是:用多流网络在多尺度中学习特征,一个块尺寸对应一个流网络。如图3所示。[37]使用双流网络,其质是由两个连体的网络在头部结合在一起,如图3-a所示。第一个网络叫中心高分辨率流,它的输入是两个以某像素为中心的32×32像素块,第二个网络叫环绕低分辨率流,它的输入是两个64×64的像素块,但下采样到32×32。两个流的输出被结合在一起然后送到决策网络,该网络返回匹配得分。[40]使用类似的方法,区别在于它是在每个流上附加一个头部网络来计算匹配得分。然后两个得分投票,如图3-b所示。

多流结构的主要优势是它可以在单次前向传播中在多个尺度上计算特征。但是,它要求每个尺度一个流,如果超过两个尺度则并不实用。

  • 减少传播次数

使用前述方法从一对立体图片推断原始损失体,这一过程需要用到一个移动的窗口,这就需要多次传播,每个像素n_d次传播,n_d是视差等级的数量。但是,因为关联是高度并行的,前向传播的数量也可以大大减少。例如,[44]使用连体网络把前向传播的数量减少到每个像素一次,该网络的第一个分支在每个像素周围取一个像素块,第二个分支取一个大的像素块,该像素块扩展到所有可能的视差。左分支的输出是64维,右分支出输出是n_d \times 64维。接下来有一个相关层计算长度为n_d的矢量,该矢量的第d个元素是左目图片中像素x与校正过的右目图片中像素x - d的匹配损失。

[37]指出,两个特征提取子网络的输出中,每个像素只需要计算一次,并不需要重新计算每个视差。其方法是在整张图片单次传播时,不传播小的像素块,而是传播全像素图片。在精确架构(例如MC-CNN-Accr)中由全连接层组成的头部网络的输出可以由单次传输计算,而非带1×1卷积核卷积层的全连接层。但是,每个像差也要求一次传播。

  • 不用特征来学习相似度 

特征提取和相似性计算网络的联合训练统一了特征学习和尺度学习。[37]提出了另一个架构,并没有直接的特征的概念,见图2-(f)。在该架构中,左目和右目的像素块打包一起喂给一个双通道网络,该网络由卷积层、ReLU层和全连接层组成。该网络不计算特征,而是直接输出输入像素块对的相似性。[37]指出,该架构容易训练。但是,由整个网络需要对每个像素运行n_d次,所以实时运行时开销是比较大的。

5.1.3. 训练过程

本节描述的网络由特征抽取块和特征匹配块组成。因为目标是学习如何匹配像素块,这两个模块以监督方法或弱监督方法联合训练。

  • 监督学习

一般监督学习的训练集由正样和负样组成。每个正样(负样)由参考像素块和另一张图片的匹配像素块(非匹配像素块)组成。训练时一次取一个正样本或一个负样本,适应它们的相似性。或者一个正样本和一个负样本,最大化它们的相似性差异。也就是说:让两个正样比两个负样更加相似。后者称为三元对比学习。

[39], [42]在KITTI2012[15]或Middlebury[20]数据集上使用真值差异性。针对每一个差异值,该方法提取一对负样和一对正样作为训练样例。该方法可以得到从KITTI2012 [15]中提取2500万训练样例,从Middlebury数据集得到3800万训练样例。该方法已经在[37], [38], [40]中得以应用。还可以使用数据扩增技术对训练集进行扩增。例如翻转像素块或者沿不同的轴旋转像素块。

尽管监督学习性能优良,但神经网络模型要求巨量的标注训练集,这是很困难的,或者成本也很高(例如,火星表面三维重建)。可以用深度传感器产生很多真值,但是它也包含噪声,这缩减了监督学习的有效性。使用随机噪声扩增数据或者合成数据都可以缓解这一问题。但是合成过程是人工设计的,这并不能说明规律,尤其是双目系统和目标场景。

损失函数:有监督的双目匹配网络训练的目的是最小化匹配损失,该损失是每个训练样例的真值和预测匹配分数之间的差异。可以定义为L1距离,铰合损失或交叉熵损失。

  • 弱监督学习

弱监督技术一个或多个双目约束来减少人工标注的数量。[50]认为多实例学习(MIL),结合双目约束和真值不可用时用场景的粗信息去训练匹配网络。监督学习要求匹配块与非匹配块成对出现。而弱监督学习的训练集由N个三元组组成。每个三元组分成三个部:(1)在参考图片的水平线上提取W参考像素块;(2)在右目图片的水平线上提取W正样块;(3)同理提取负样块,即从右目图片的另一个水平线上提取不匹配的像素块。这样,训练集可以在没有人工标注的情况下自动构建。该方法在训练的时候使用五个约束:对极约束,像差范围约束,单值约束,平滑约束,顺序约束。定义三个损失项,分别应用这些约束的不同子集。

  • 多实例学习(MIL) 损失。包含对集约束和色差范围约束。从这两个约束可以得知:每个非遮挡的参考块在索引区间有一个匹配的正样,但没有匹配负样。因此,对每个参考块,最好的正样匹配的相似度远大于最好的负样匹配。
  • 对比损失。在MIL基础上增加单值约束。也就是说正样匹配是单值的(唯一的)。因此,对每一个像素块,最优匹配的相似性要远大于次优匹配的相似性。
  • 对比DP。包含所有约束,但利用动态规划来搜索最优匹配。

该方法已经用于训练深度连体神经网络,该网络用两个像素块作为输入并预测相似度度量。基于标准数据的基准化已经证明该方法的性能与MC-CNN-fst [39]相当,两者网络结构相同,但后者使用完全标注的数据。

5.2. 正则化与视差估计

一旦估计出了原始的损失体,如果不使用方程(1)中的正则项,或者图1中的C模块,便可以通过最小化损失值来估计视差。但是从图像特征计算而来的原始损失体可能会被噪声污染。例如,非朗伯表面、目标遮挡、重复纹理。因此估计出来的深度值含噪声。[39], [40], [44]使用传统的基于马尔可夫随机场(MRF)来规避这一问题。还可以把初始的损失体C送到全局匹配[11]或半全局匹配[55]以计算视差图。半全局匹配在精度和开销上做了较好的权衡。其平滑项定义为:

其中d_{xy} = d_x - d_y\alpha_1\alpha_2是正权重,满足\alpha_2 > \alpha_1\delta是Kronecker delta函数,当括号中的条件满足时值为1,否则值为0. 为了求解该优化问题,把SGM势能项拆分成多个势能项E_s,每都沿路径s定义。分别最小化这些势能项然后求和。接下来计算x点的视差,方法是总损失项在所有方向上对比,赢家通吃。

该方法要求在方程(2)中设置两个参数\alpha_1\alpha_2,[56]训练SGM-Net神经网络来在每个像素上设置该参数。[39]人工调参得到了更好的惩罚项。

SGM方法使用多个一维扫描线求和组成损失项。该方法有两个主要缺点:(1)扫描线优化方法增加了人工痕迹,会导致结果不精确;(2)该方法内存占用很高,所以要么要求输入的图像分辨率低,要么要求较好的计算设备。[57]把融合模块解决为在图像的每个像素的所有扫描线优化项中选择最优的。使用每个像素的随机数分类器来求解该任务。

[58]学习一个加权和,其中每个一维扫描线的权限定义为使用传统技术或深度神经网络计算而来的置信度地图。

6. 立体端到端深度估计

最近有一些工作用端到端流水线解决双目匹配问题。 这些方法主要分为两类。早期的方法,例如FlowNetSimple [51]和DispNetS [22]使用简单的编码解码器,把左目和右目叠加到一起,形成6D空间,然后用回归方法得到视差图。这些方法并不要求显示的特征匹配模块,因此计算得很快,以至于可以实时运行。但是,这些方法要求海量的训练数据,获取这些数据是比较困难的。第二类方法模仿传统双目匹配流水线,把问题分成了几步,每步都包含微分模块,因此允许端到端训练。下面将详细介绍这些技术。下图把最优秀的方法进行分类。图4给这些方法做了分类,表3对比了28个关键方法。

6.1. 特征学习

特征学习网络如图2和图3所示。但是并不处理单个像素块,而是在单次前向传播时处理整张图片,产出与输入图片相同尺寸、相同分辨率的特征图。特征匹配遵循如下两个策略之一:

6.1.1. 多分支网络的分支数与输入图片的数量相等

每个分支产生一个特征图,它们分别描述对应的输入图片。前提是图片已经做了双目较正,即左图和右图的特征关联在同一条水平线上。

6.1.2. 多分支网络的分支数与视差等级数相同

第d个分支(1 \leqslant d \leqslant n_d),处理一组(两张)图片,如图2-(f)所示,第一张图片是参考图片,第二张图片是右目图片但重投影到第d张深度平面。每个分支生成一个相似性特征图,该特征图表征参考图和右目重投影图的相似度。这些技术并不较正图片,假设相机的内参和外参是已知的。视差等级的数量不能在不更新网络结构和重新训练的情况下发生变化。

在这两种方法中,特征提取模块使用全卷积网络,如VGG,或参考网络,如ResNets。它们也可以用膨胀卷积或多惊讶方法来获得并包含更多的一元特征上下文信息。例如,PSM-Net[64]加上空间金字塔池化(SPP)模块以提取并合并多尺度特征。[65]扩展了PSMNet,使用的是多等级上下文汇总模型,取名为多等级上下文超和(MLCUA),它简单地把所有的卷积特征组合成更加有区别性的表示。使用浅跳连接把最浅最小的尺度的特征与最深最大尺度的特征组合在一起。该方法的性能已经得到了证明。与PSM-Net相比,它没有明显地增加网络参数。

6.2. 损失体构建

一旦计算出来特征,下一步就是计算匹配得分,该得分会被以损失体的形式送入头部网络,用于正则化和视差估计。损失体可以是三维的、四维的或者混合的。三维损失体的第三维是视差等级。四维损失体的第三维是特征维,第四维是视差等级。混合损失体兼具三维和四维损失体的优点。一般来说,以较低的分辨率来构建损失体,例如是输入分辨率的八分之一[72], [73]。接下来要么升级并精化,要么用于估计低分辨率的视差图,然后再升级并精化。

6.2.1. 三维损失体

  • 构建

用左目图片和在预定义视差范围内的右目图片的特征之间的L_1L_2或相关距离就可以构建简单的三维损失体。基于相关的非相似性的优点是它可以用卷积层来实现,它并不需要训练,它的滤波器是用网络的第二个分支计算而来的特征。如估计网络,如FlowNetCorr [51],使用二维相关。视差估计网络,如[22], [68], iResNet [63], DispNet3 [75], EdgeStereo [76], HD3 [80]和 [83], [84],使用一维相关。

  • 三维损失体的正则化

得到损失体之后,有很多方法可能计算初始视差图。例如argmin,softargmin,在损失体的深度这一维做亚像素的最大后验近似。如图5-(a)所示。这等价于在方程(1)中删除正则项。但是,一般来说,原始的损失体是被噪声污染的(例如,存在非朗伯反射面,遮挡,重复纹理)。正则化模块的目标是在估计视差图初值之前利用空间和视差的上下文关系去精化损失体。

(1)使用传统方法正则化

早期的方法使用传统技术正则化损失体,显示地引入空间约束,如深度图的平滑。例如马尔可夫随机场(MRF),条件随机场(CRF),半全局匹配(SGM)。最近的文章显示,深度学习网络可以用于精调这些方法的参数,例如[71]提出了混合CNN-CRF。CNN计算了方程(1)的匹配项,使其变成CRF模块的一元项。用另一个CNN计算边权重,该权重参数化CRF的二元项。端到端训练的CNN-CRF有远少于早期方法的参数,且很好地使用了训练数据,因为其性能是颇具竞争性的。

[89]提取一种方式在分割任务中把CRF模仿为RNN,所以它的整个流水线可以被端到端地训练。与分割问题不同,在深度估计问题中,深度样例的数量(深度样例对应语义分割任务中的语义标签)在不同场景中应该是变化的。[90]重新设计了RNN形式的CRF模块,其模型参数独立于深度样例的数量。[91]MRF中的推荐公式化为一个可微函数,因此使用反射传播(BP)来端到端训练。[89]和[91]专注于MVS。但是这些方法比较通用,且可以用于正则化双目产体网络的三维损失体。

(2)使用二维卷积正则化,见图5-b(b), (c)

另一个方法是使用一系列二维卷积层产生另一个三维损失体。二维卷积计算开销较少。但是该方法只获取并集合空间维的上下文,忽略视差维的上下文,如图5-(b)所示。[92]沿着深度方向,通过门循环单元(GRU)正则化二维损失地图,如图5-(c)所示。这急剧减少了内存占用。例如[93]把内存由15:4GB减少到约5GB。同时获取空间和视差维的上下文,使高分辨率重建变得可行。

(3)使用三维卷积正则化(3DConvNet),见图5-(d)

[72]使用L2距离来计算初始的三维损失体,使用三维卷积来在空间和视差维进行正则化,见图5-(d)。由于内存要求,该方法首先估计了低分辨率视差图,然后用残差学习不断地改进该视差图。[73]提出的方法与此类似,区别在于精化部分,首先让卷积层分别运行在非采样视差和输入图片上,然后合并特征并产生残差。[81]发现,损失体正则化这一步是最费计算资源步骤之一,因此提出一个正则化模块,该模块使用三维膨胀卷积,在宽度、高度和视差维度上膨胀以减少计算资源。

6.2.2. 四维损失体

  • 构建

四维损失体存领教特征的维度。四维损失体的理论依据是头部网络学习合适的相似性,用它来对比特征而非使用人工方法。

有两种方法构建四维损失体,一种方法是用预定义的视差范围的特征差异,该方法构建的损失体的维数是H \times W \times 2n_d \times c;另一种方法是把网络的不同分支的计算得的特征组合在一起。[61]用该方法构建了一个尺寸为H \times W \times (n_d + 1) \times c(c是特征的维度)的四维空间。[70]使用的方法类似,但以交错的方式把特征连结在一起。设f_L是左目图像的特征地图,f_R是右目图像的特征地图,最终的特征空间以这样的方式集成起来。在色差d = i时第2i个切片是左侧的特征地图,第(2i + 1)个切片是右侧的特征地图。该四维损失体二倍于[61]中的损失体。为了在损失体中得到多尺度上下文信息,[64]为每张输入图片生成一个特征金字塔,把它们上采样到一个相同的维度,然后构建一个简单的四维损失体。[79]用多尺度特征构建多尺度四维损失体。

相比于三维损失体,四维损失体含有更加丰富的信息。但是,由关系得到的空间并不包含特征相似度信息,在学习相似性函数的时候需要更多的信息。

  • 四维损失体正则化

四维损失体用三维卷积正则化,使用高度、宽度和视差维度上的相关来产生三维损失体。 [61]使用带有卷积和跳跃连接的U-net编码解码器。[70]使用了类似的方法,只是增加到正则网络扩展部分的残差连接。考虑到大的上下文信息并没有大的附加计算负担,[61]分等级地正则化损失体,分为四个亚采样等级,且允许显式地利用宽视域上下文。使用一个三维损失集成模型把多尺度的四维损失体集成进一个简单三维损失体,该模块始于最小的损失体,并且成对运行。每个编码解码器处理一个空间,上采样到下一个分辨率金字塔,然后用三维特征融合模块进行融合。

半全局匹配(SGM)也用于正则化四维损失体,可以使用卷积网络正则化四维损失体。特别地,[77]先用由三维卷积组成的编码解码器处理初始的四维损失体,然后上卷积,处理另一个三维损失体。接下来的步骤是集成,使用一个端到端双流网络来实现。第一个流产生三个损失集成项C_i,分别三个维度,即高度、宽度和视差。第二个流是用于选择最佳项的引导流。使用二维卷积产生三个引导图W_i。最后一个三维损失体是三个损失项的加权生,也就是max_i(C_i * W_i)

三维卷积较为消耗内存和计算开销。因此,接下来的工作聚焦于(1)减少三维卷积层的数量;(2)逐渐地精化损失体和视差图;(3)压缩四维损失体。下面分别讨论:

(1)减少三维卷积层的数量

[85]引入了GANet,取代了正则项中的大量三维卷积层,这些正则项中包含(1)两个三维卷积层;(2)准全局集成层(SGA);(3)局部引导层(LGA)。SGA是准全局匹配(SGM)的可微近似。不像SGM,在SGA中用户定义的参数是可学习的,而且把它们添加为匹配损失项的惩罚系数。因此,它们是可适应的且在不同情境下的不同位置是更灵活的。另一方面,把LGA层添加到末尾,目的是精化薄结构和目标边。SGA层和LGA层取代三维卷积层,用于获取局域的和整张图片的损失依赖。这些方法大大提升了具有挑战的场景中的视差精度,如遮挡,大块无纹理区域,反射区域,薄结构。

(2)改进方法

有一些方法避免用开销较大的三维卷积直接正则化高分辨率四维损失体。取而代之的是一个改进方法。例如[64]使用了PSM-Net,首先估计低分辨率四维损失体,然后使用堆叠的沙漏三维编码解码块来进行正则化。每个块输出一个三维损失体,然后上采样并使用额外的三维卷积层加softmax操作以回归得到高分辨率视差图。因此,堆叠的沙漏块可以被看作精化模块。

[88]使用三阶段视差估计网络AnyNet,用从粗到精的方式构建损失体。第一步视作输入低分辨率特征图,构建低分辨率四维损失体,然后使用三维卷积搜索一个小的视差范围以估计一个低分辨率视差图。上采样上一个等级的预测结构然后在高尺度上变换输入特征,用相同的视差估计网络估计视差残差。优点有两方面:第一,在高分辨率情况下,网络只学习预测残差,用以减少计算开销;第二,该方法是渐进的,且可以选择返回中间视差,以权衡精度和速度。

(3)四维损失体压缩

[78]把特征压缩为比较紧致的匹配特征,在没有牺牲精度的情况下减少了内存占用。更重的是,允许网络处理任意数量的多视图图片,且在可以在运行时变换输入图片的数量,而无需重新训练网络。

6.2.3. 三维四维混合损失体

相关层比较有效地度量特征相似性,但它损失了很多信息,因为针对每一个视差等级,它只产生一个单通道的视差图。另一方面,由特征连结得到的四维损失体携带更多的信息,但它的计算开销比较大厦。在后面的集成网络中要求更多的参数来学习相似性函数。综合两种方法,[86]提出了混合方法,构建两个损失体,一个用特征连结来构建,但用两个卷积将其压缩到12个通道;第二个的构建方式是把高维特征图沿特征通道划分到N_g个组中,在所有的视差等级上计算每个组的相关性,最后集成相关图形成另一个四维空间。然后把这两个空间组合到一起并送到三维正则化模块,该模块由四个卷积层加三个叠在一起的三维沙漏网络。相比于仅仅由特征集成建立在四维损失体上的四维损失体,该方法大大缩减了参数。

6.3. 视差图构建

最简单的从正则化损失体C估计视差图的方式是使用使用像素argmin,也就是d_x = arg min_d C(x; d)(如果C使用了似然,则使用argmax)。但是argmin和argmax操作并不能产生亚像素的精度,且不能使用反向传播(BP)算法训练,因为不可微。另一个方法是在视差图上计算可微的soft argmin/max:

soft argmin操作在分布是单峰对称的情况下可以近似得到亚像素最大后验解。如果该假设未满足,soft argmin混合多种模式,可能会产生远离所有模式的解,并产生过平滑。[87]发现一种特殊情况,即处于边界的像素,其视差符合多模型分布。为了解决这一难题,[87]并未在整个视差范围上使用满带加权平均,而是在以模型为中心的最大概率窗口上使用加权平均操作。

[78]引入了亚像素最大后验估计在视差附近以最大后验概率计算一个加权平均:

其中δ是元参数,在[78]中设置为4,σ(C(x; d))有视差d的像素x的概率,\hat{d} = argmax_{d} C(x, d),亚像素最大后验估计用于推断。[78]还指出,不像soft argmin/max,该方法可以实时改变视差范围而无需重新训练。

6.4. 变种

之前介绍的流水线生成的深度图可能是低分辨率(在宽度维度、高度维度和视差维度上)的、不完善、有噪声、丢失细节的,还可能是过度平滑的,尤其在物体边缘。因此,人们提出了一些变种方法(1)提高分辨率;(2)减少运行时间,甚至实时运行;(3)分辨率完成与去噪。

6.4.1. 学习推理高分辨率视差图

如果直接回归包含精细细节的高分辨率深度图,如用上卷积层提升损失体的尺度,参数会很多,开销较大,难于训练。因此,最优秀的方法力争处理高分辨率图像,因为内存约束或速度限制。目前有自底向上和自顶向下技术。

  • 自底向上技术

自底向上技术类似于滑窗。取一些小有像素块,估计整个像素块或像素化中心的精化视差。[94]使用分-合方法。把输入图片划分成多个区域,然后估计每个区域的深度。然后用融合网络合并这些深度估计。该网络运行于傅立叶域,所以可以运行不同裁剪比例的深度图。滑窗方法和分-合方法都减少了内存占用,但这两种方法都有多次前向传播,所以不适合实时使用。此外,这两种方法不能得到全局上下文信息,这也限制了它们的性能。

  • 自顶向下技术

自项向下技术是一种层级方法。首先估计低分辨率视差图,然后上采样(例如双线性上采样)到期望的分辨率。然后用残差学习恢复小细节和薄结构。可以级联多个精化块来逐渐实现这一过程,每个精化块精化上一级精化块的估计结果。与上采样损失体不同,精化视差开销并不大,因为是二维卷积。现存方法主要区别在于增加的信息类型,这些信息附加到上采样视差图。例如:

  • [72]连续了上采样视差图和原始的参考图片;
  • [63]在初始的视差图上附加了损失体和重建误差,重建误差定义为左目图片与右目图片利用视差图转换到左目后的结果的差;
  • [81]取左目图片和重建误差为一个输入,另取左目视差和几何误差图作为一个输入,几何误差图定义为左侧视差和右侧视差投影到左侧的结果的差。分别使用一层卷积和批量归一化对二者进行过滤。把这两组结果连续在一起然后使用一系列卷积层生成精化的视差图。

这些方法改善了空间分辨率但未改善视差分辨率。为了精化空间和深度分辨率,同时处理高分辨率图片,[32]提出由粗到精增量地搜索关联关系。该方法构建了一个四维损失体金字塔,每个金字塔都带有增量的空间和深度分辨率。每个损失体都用六个三维卷积块进行滤波,然后经体金字塔池化块,一个到特征体空间金字塔池化扩展模块处理,产生带有足够上下文信息的特征作为高分辨率输入。输出有两种可能:(1)由另一个三维卷积块处理以产生三维损失体,该损失体可以被直接回归。这样即时地由当前的尺度计算出视差;(2)三线性上采样到高的空间和视差分辨率,以使其可以和下一个四维损失体融合在金字塔中。为了减少内存,该方法在金字塔的倒数第一、第二个损失体中使用了沿视差维的跨步。该网络使用多尺度损失,端到端训练。这种层级结构设计可以即时地得到视差图,取中间的精糙结果,在短时间内精确地预测邻近结构。

该方法与[61]有相同的相似性方式是,[61]构建层级四维特征体,然后使用三维卷积从粗到精处理之。[61]使用了宽视域上下文信息。[32]使用针对高分辨率输入使用从粗到精的原则和及时处理。

6.4.2. 学习完善与去噪

原始的视差可能含噪声且不完善,尤其在物体边缘处,物体间的深度污染是一项挑战。已有一些去噪和完善化技术,其中有一些是专门针对这一问题的。也就是说,后处理噪声和不完善的初始估计以产生清洁且完善的深度图。还有方法针对缺乏训练数据这一情况。还有文章提取了全新的深度表征,这种表征方式更适合这类任务,尤其针对物体间的深度污染。有一些专门用于处理初始视差的方法。[51]和[95]提出变分法,[27], [96]提出全连接CRFs (稠密CRF),[2]提出层级CRF,[40]提出由置信度地图引导的扩散处理。这些方法让空间上邻近且颜色相似的像素有更接近的视差预测。[5]也做了类似的工作,与[2]不同的是,[5]使用CNN来最小化CRF能量。卷积空间传播网络(CSPN)实现了一个各向异性的扩展,它尤其适合完善化深度,因为使用深度CNN预测扩散张量。该方法用于精化初始视差图。

基于深度学习的完善与去噪的主要挑战是缺少标注数据。亦即,有噪声的,不完善的深度图,要有准确的深度图作为真值。为了处理这一情况,[29]提出成对深度图数据生成方法,该方法使用稠密三维曲面重建,并用滤波器去除低质量的数据。[29]还使用基于神经网络的多尺度拉普拉斯金字塔和保存结构的损失函数,用于从粗尺度到精尺度逐步地减少噪声和孔洞。该方法首先在最粗的尺度上预测完善的深度图,其分辨率是原始分辨率的四分之一。这个预测的深度图通过金字塔上采样,逐步预测原始分辨率一半和相同尺度的深度图。在粗尺度上,该方法得到全局上下文信息。而在精尺度上,该方法得到局部信息。此外,在下采样时提取的特征送到带跳跃连接的金字塔上以避免在上采样期间深度图原始信息的损失。

[100]不在网络结构、损失函数、训练数据上下功夫,而是提取一种新的深度表征,叫作深度系数(DC),用以处理物体间的深度污染。该表征使卷积变得更容易,且避免了物体间的深度混合。该表征使用与目标深度图相同尺寸的多通道图,其每个通道表征一个固定深度。在尺寸b(该方法有80个bin)的偶数步深度值增加,bin的数量选择是内存和精度的权衡。在一个给定的像素上,用包含这些值的矢量定义深度系数。对每个像素,这个系数是非负的且和为1. 这个深度表征为CNN提供了更加简单的方式去避免深度混合。首先,CNN可以学习以避免在不同的通道中深度混合。第二,由于卷积同时计算所有通道,深度依赖,像遮挡效应可以被神经网络模拟和学习。但是,其主要限制是,深度范围需要被预先设置,且不能在不重新训练网络的情况下实时改变。[100]指出标准平均平方误差(MSE) 损失函数会助长深度混合,因此提出用交叉熵损失去估计深度系数。

6.4.3. 学习实时处理

目标是设计有效的立体算法,不仅能产生可靠且精确的估计,还能实时运行。例如,PSMNet [64],其损失体构建和聚合耗时250ms (nNvidia Titan-Xp GPU)。这是不能实时运行的。为了加速处理,[72]首先估计低分辨率视差图,然后层级精化。[80]布署了固定的,由粗到精的过程来迭代地寻找匹配。[81]过滤损失体时,在宽度、高度和视差通道上使用三维膨胀卷积。[83]组合深度学习和PatchMatch,适应性地梳理出潜在的大搜索空间并大大加速了推断过程。基于PatchMatch的裁剪模型可以预测每个像素的置信度范围,且构建稀疏损失体,该过程开销很小。同时允许模型仅关注于高似然区域,以节省开销和内存。为了端到端训练。[83]把PatchMatch展开成RNN,其中每个展开步骤等价于算法的迭代。该方法性能十分优异,在KITTI2015数据集上把每张图片的计算时间从600ms缩减到60ms。

6.5. 学习置信图

检测并修复失效情况是一项非常重要的应用,例如在自动驾驶和医学影像领域。因此,一些研究工作致力于估计置信度或不确定性地图,剔除潜在误差,用可靠的邻近像素取代之。视差图也可以被入视差精化流水线,以引导精化过程。例如,[102]把置信度地图合并到半全局匹配(SGM) 模块,用于估计稠密视差。[103]使用置信度地图检测不正确的估计,代之以邻近区域,然后用精化网络精化视差。另一方面,[74]估计两个置信度地图,每个对应一个输入图片,把它们与关联的损失体连续在一起,然后作为三维卷积LSTM的输入,有选择地聚焦到下一步中左右失配区域。卷积置信度估计方法更多地基于假设和匹配损失体分析的启发,[59]介绍并评估了早期的方法。[104], [105], [106], [107], [108], [109]都是基于监督学习的。它们用专门方法或集成的融合方法直接从视差空间估计置信度地图,所以可以和视差(深度)估计一起端到端训练。 [110]提供了量化估计,下面讨论这些技术。

6.5.1. 左右一致性检查置信度

左右一致性是视差估计领域置信度测量最为常见的评测标准。其思路是估计两个视差图,分别是左目(Dleft)和右目(Dright)。然后用左目和右目视差图的像素级差异来计算误差图,把结果投影到左目并转换为概率形式。这种方式适合遮挡检测,例如某区域在一个视角可见,但在另一个视角不可见。

左右一致性可以用包含全卷积层的深度或浅度网络来学习。[102]提出基于像素块的置信度预测 (PBCP) 网络,需要两个视差图,分别对应左目和右目。PBCP使用双通道网络,第一个通道强行认为左目和右目是一致的,第二个通道强行让局部是一致的。该网络以分类器方法进行训练。它输出标签标志每个像素的视差估计得是否正确。与把左右一致性检查作为一个孤立的后处理步骤不同,[74]用左右对比循环(LRCR)模型实现与视差的同步估计。该模型包含两个并行的卷积LSTM网络,分别产生一个误差图,一个对应左目,一个对应右目。把它们与关联的损失体连续在一起,然后作为三维卷积LSTM的输入,有选择地聚焦到下一步中左右失配区域。

6.5.2. 简单原始视差图置信度

左右一致性检查估计两个视差图,开销比较大,难以实时运行。[46]使用二进制交叉熵损失训练一个由两个全连接层组成的网络,用以预测参考图片视差。[107]把置信度估计看作回归问题,使用小块上训练的CNN来解决这一问题。对每一个像素,该方法抽取一个它周围的一个方块,然后送入CNN,这个CNN可以区分关联到正确和错误视差分配的模式,是一个单通道网络,把图片划分成9 × 9个像素块。[73]使用类似的置信度地图估计网络,称作失效网络。其关键点是训练网络以使用每个像素左目和右目视差之间的差去预测置信度。在实时运行时,该网络只输入左目视差。 [112]指出,之前在置信度估计中强制局部一致性的算法可以改善置信度地图。

6.5.3. 匹配密度置信度

传统深度网络把激活和输出看作差别点估计。[113]用概率输出层取代差别输出,继而用分布取代所有的中间激活。因此该网络可以估计匹配概率密度,在下文中适用于可以实时转化为不确定度的匹配密度。估计匹配密度的主要挑战是计算时间。[113]假设了参数分布。[80]放松了假设并提出一种金字塔结构,使用计算开销比较合适且允许实时的置信度估计。

6.5.4. 局部和全局推断

某些技术,例如[102]在局部推理时强制局部一致性。[114]引入LGCNet以超超局部推断。输入参考图片及其视差图被送入局部网络,例如C-CNN和全局网络,例如带有较大感受野的编码解码结构。两个网络的输出和初始视差与参考图片连结,然后送入到三个独立的卷积塔中,其输出再连结在一起并经三个1 × 1卷积层处理,最终得出置信度地图。

6.5.5. 组合多个估计器

一些文章多个算法的估计结果得到更加精确的结果。[104]喂给随机树一个23个置信度地图组成的池,这些置信度地图由卷积技术估计得到。相比于池中的任何一个置信度地图,其输出结果更加精确。[109]的思路相近,但组合了四个基本立体匹配器的优化而弱化了其缺点,生成一个鲁棒的匹配体用于优化和正则化。[58]训练一组回归树分类器。这些方法独立于视差估计模型,依赖于损失体。

7. 学习的MVS

MVS关注来自立体的深度。早期的工作聚焦于计算多像素块之间的相似性。[47] (Fig. 6-(a)) 用平均池化层取代用于立体匹配的双目对相关层,目的把n ≥ 2个输入块的特征集成起来,然后喂入头部网络,该网络返回匹配得分。用这一方法计算参考图片上每个像素的最优匹配需要n_d^{d-1}次传播(n_d是深度等级的数量,n是图片数量)。该方法计算开销很大,尤其是处理高分辨率图像。

在单次传播中计算深度图的技术与源自多视角的信息被喂入网络并集成是不同的。把这些方法分成体空间和而扫描体(PSV)。后者并不依赖三维几何的中间体表征。唯一的例外是[115],实现了输入图片的隐表征的临时融合。但是,该方法要求即时有序的图片。表4提供了一个分类 并对比了13个最优秀的MVS技术。

7.1. 空间表征

MVS重建的主要问题是以有效的方式匹配多张图片的特征。双目体方法较正了图片,所以可以在水平极线上搜索关联关系。对于大视角差的图片,这是不可能的。[60], [116]使用场景几何的体表征来解决这一问题。用期望的视差的投影来生成深度图。对给定的输入图片,如果相机参数已知,从视点的一条射线会穿过图像像素。把该像素的颜色或特征分配给与该射线相交的体素。目前的方法不同与融合多视角信息方法:

7.1.1. 融合特征格子

[60] (Fig. 6-(c))使用一个循环神经网络(RNN)迭代地融合三维特征格子反投影结果。用编码解码器正则化三维格子。为避免对图片顺序的依赖,[60]在训练时随机排列输入图片,同时保持不同顺序的结果是相同的。

7.1.2. 融合对损失体

[117]使用加权求和融合由每个图片对计算而来的损失体,其中每个损失体的权重是从损失体计算得到的置信度地图。

7.1.3. 融合重建曲面

[116]使用三维CNN处理每一对体格子,该CNN判断一个体素是否为曲面点。为了避免图片对的过度组合,[116]使用由全连接层组成的网络学习相对重要性,自动地基于相对重要性选择少量视角对以重建多体格子,并且对权重求和以产生最终的三维重建。

为了处理高分辨率体格子,[116]把整个空间分割成小的差色体素立方体(CVCs),并且逐个回归其表面。虽然减少了内存占用,但该方法需要多次传播,因些增加了计算时间。[91]避免显式地使用体表征。取而代之的方法是,在计算每对视角关联的学习特征之间的对关联之前,每个格子的体素被投影到每一个输入视角,然后对所有的视角对求平均。对每个深度值重复这一过程会产生每个像素的深度分布。用表达为可微函数的MRF正则化深度分布使端到端训练成为可能。

在性能方面,[116]的体方法需要4小时才能得到DTU数据中一个典型场景的完全重建。[91]提出的方法处理相同的任务差不多要25分钟,其硬件是Intel i7处理器和Nvidia GTX Titan X GPU。最后,完成融合后重建的方法相比于早期的融合方法有较大的重建误差。

7.2. 平面扫描体表征

这些方法直接从输入图片估计深度图而不使用三维几何的中间体表征。因此其开销是比较小的。 主要挑战是如何在单次传播的多个视角间进行有效的特征匹配。这一过程由平面扫描体(PSV)完成。也就是把输入图片或者学习到的特征反投影回不同深度值的平面,由估计的深度图生成PSV。之前的方法与PSV的没之处是带有特征提取和特征匹配块。

[66]提取由n_d个分支组成的网络(图6-(b)),每个分支处理一个深度平面。网络的第d个分支的输入是参考图片和深度d的其它图片的PSV平面。然后把这些结果打包在一起并喂入二阶网络。第一阶计算参考图片和深度d处的PSV平面之间的匹配特征。第二个阶段使用卷积层模似深度平面的相互作用。网络的最后一块是每个像素深度的softmax,也就是每个像素的概率深度。该方法要求视角的数量和每个视角的相机的参数都是已知的。

[27]先匹配图片对,其损失体由参考图片和每个输入图片计算得来。对于给定的图片对(I_1, I_i), i = 2, \cdots, nI_i是首先被反投影到PSV。然后用一个连体的网络计算I_1和每个PSV平面之间的匹配损失体。使用编码解码网络把这些损失体集成为一个简单的损失体,称为内体。最终,用最大池化层把多个内体集成为简单内体,然后用它预测深度图。

[27]的方法并不要求固定数量的输入视角,因为集成是由池化完成的。事实上,视角的数量可以在训练时变化,而是实时变化。与[27], [66]反投影输入图片不同,MVSNet[93]使用使用相机参数把学习到的特征反投影到参考相机的截头锥体中,这些截头锥体是把相机的视锥用一系列平行于像平面的平面截断而来的,每一个平面对应一个深度值。该方法在每个像素的方差测度上产生一个匹配损失体,最终用一个通用三维U-Net正则化匹配损失体以估计深度图。[119]以两种方式把MVSNet[93]扩展为P-MVSNet。第一种,用学习的像素块集成函数处理原始损失体再喂入到正则化网络。该方法改进了噪声数据的匹配鲁棒性和精度。第二种,PMVSNet使用混合的各向异性的3D-UNet取代通用的3D-U Net作正则化。深度扫描体在深度和空间方向上是各向异性的,但经常会用各向同性的损失体来近似,这是不太好的作法。实际上,可以沿着匹配损失体的深度方向推断关联深度图,但不能沿其它方向得到相同的信息。[119]利用这一特征,用混合了各向同性和各向异性三维卷积的三维U-Net来引导匹配置信空间的正则化。

PSV的主要优点是不需要双目校正。换名话说,相机参数可以隐式地编码。但是,为了计算PSV,相机的内参和外参需要预先知道或者预先估计,例如SFM技术[27]。这些方法要求预先设置视差范围和离散化。这样的方法一般会导致复杂的网络结构。[120]提出了一个轻量级的结构,把参考图片和它的损失体叠加在一起,这个损失体是由参考图片和其它图片在不同深度的绝对差,然后喂入带跳跃连接的编码解码网络以在三个不同分辨率上估计逆深度。[120]选择有足够角度差或者足够位移差的帧,然后用这些帧计算损失体。

最近,[30]使用特征反投影去估计方法,用宽基线多视角立体设备做全景深度估计。该方法球图和球损失体。

8. 训练端到端立体方法

训练的目标是寻找网络参数W以最小化损失函数\mathcal{L}\left ( W; \hat{D}, \Theta \right ),其中\hat{D}是估计的视差,\Theta是监督线索。损失函数定义为数据项\mathcal{L}\left ( \hat{D}, \Theta, W \right )的和,该项测量估计的视差与真值之间的差异和正则化或平滑项\mathcal{L}_2 \left ( \hat{D}, W \right ),该项用于最优解的局部或者全局约束。监督线索的类型定义监督度,可以用三维真值监督,用辅助线索自监督或者弱监督。某些方法使用附加线索,以最优解的约束的形式提升精度和性能。深度学习技术的一个主要挑战是可以推广到新的领域。8.3回顾了这些方法,8.4学习网络的结构。

8.1. 监督方法

8.1.1. 三维监督方法

监督方法训练时最小化损失函数,该损失函数测量估计的误差和真值视差之间的误差。

 

其中d_x\hat{d_x}分别是像素点x处的真值和估计视差。距离测量\mathcal{D}可以是L_2L_1距离,也可以是平滑但使用双参数鲁棒函数\rho(\cdot )近似的L_1距离。C(x) \in [0, 1]是像素x处的估计视差的置信度。设置C(x) = 1,阈值\epsilon = 0\forall x等同于于忽略置信度图。H(x)是重边函数,在x ≥ 0时值为1,否则值为0。Φ(·)是恒值函数或log函数。后者避免了把网络过拟合到大视差。

一些文章限制方程(6)的求和只能对有效像素或兴趣区域,例如前景或可见像素,这样可以避免外点。[93]把损失函数分成两部分,一部分用于初始视差,另一部分用于精化误差。总损失定义为两个损失的加权和。

8.1.2. 自监督方法

自监督方法本来用于光流估计,现在被推荐为缺乏足够真值训练数据时的可能解。这些方法主要依赖图片重建损失,在多张相同场景的图片可用时,利用投影几何和时空相干性。其根本原因是如果估计的视差图尽可能地接近真值,那么参考图片与任何其它未使用估计深度投影到参考图片的图片的差异也是最小的。广义的损失函数是:

其中\widetilde{I}_{ref}是未使用估计视差投影到I_{ref}I_{right}\mathcal{D}是距离测量。映射函数Φ可以是:

  • 常值。在这种情况,方程(7)的损失是光度或图像重建的损失。
  • 到特征空间的映射,也就是\Phi(I_{ref}) = f,其中f是学习到的特征图。
  • 图片梯度,也就是\Phi(I_{ref}) = \nabla I_{ref},该映射函数对光照变化不敏感且比光度损失的需求条件要少。

距离\mathcal{D}L_1距离或L_2距离。一些文章使用更加复杂的度量,例如像素块I_{ref}\widetilde{I}_{ref}之间的差异。

基于双目的监督方法并不要求真值三维标注,这些方法要求在训练时双目相机是标定好的。

8.1.3. 弱监督方法

视差估计的监督方法如果在大规模高质量的真值深度数据上进行训练,则会得到非常好的结果。但是人工标注真值深度数据是极其困难且昂贵的,而且可能有噪声和不精确。弱监督方法依赖辅助信号来减少大量的人工标注。尤其是[129]使用传统深度匹配技术精调深度估计网络,把由此得出的深度估计作为监督信号。由于这样的深度数据是稀疏的、有噪声的且有误差,因此推荐置信度引导的损失项,该项惩办那些被认为是不可靠的真值深度。在方程(6)中设置D(·)是L_1距离且\epsilon > 0即可实现这一想法。[130]使用稀疏的深度真值来作监督学习,强制深度网络在双目设备上使用直接图片对齐或重投影损失来生成光度一致的稠密深度图。这两个方法都依赖于专门的视差估计器。为了取消对这个视差估计器的依赖,[131]提出一种迭代方法。该方法随机初始化网络,在每次迭代中计算左目右目的匹配和右目到左目的匹配。接下来选择高置信度的匹配并把它们当作标注数据来使用,用于接下来的迭代。置信度使用方程(12)中的左右一致性计算置信度。

8.2. 包含附加项

有一些工作引入附加的线索和约束去改善视差估计的质量。例如附加平滑性[70],左右一致性[70],最大深度[70],尺度不变的梯度损失[121]。这些线索可以以辅助信息的形式出现,例如用于引导视差估计网络的语义。下面将分别讨论这些工作。

8.2.1. 平滑性

一般来说,可以假设邻近的像素有相似的视差。这个平滑性约束可以是最小化:

  • 像素x的预测视差与其领域N_x内每个像素y的预测视差之间的绝对差

 其中N是像素总数。

  • 估计的视差图的一阶梯度∇:

  •  估计的视差图的二阶梯度:

  •  估计的视差图的二阶梯度用图像的二阶梯度加权 

8.2.2. 一致性

[70]引入了环一致损失。考虑左目图片I_{left}与使用右目视差图把右目是图片转换到左目得到的图片\widetilde{I}_{left},还有,把用左目视差把左目图片转换到右目,再用右目视差将其转换回左目,得到\widetilde{\widetilde{I}}_{left}。这三个版本的左目图片提供了两个约束,I_{left} = \widetilde{I}_{left}I_{left} = \widetilde{\widetilde{I}}_{left},可以用于正则化视差图。[133]引入了左右一致项,它是环约速的线性近似。它约束使左目视差图与投影到左目的右目视差图相等。

其中\widetilde{d}投影到左目的右目视差。

8.2.3. 最大深度启发

有多个变形函数完成相似的变形的损失项,尤其对无纹理区域。在这些区域提供了强的正则化。[70]使用最大深度启发(MDH)定义了所有深度(视差)的和。

8.2.4. 尺度不变的梯度损失

该损失邻近像素的相对深度误差。该损失促使网络对比每个像素与其领域,它激发了深度的不连续性,激发了尖锐的边,也增加了同类区域的平滑性。

8.2.5. 合入语义信息

一些文章引入附加线索,如法向量,分割和边缘图去引导视差估计。这些线索可以在初始的时候估计,例如[76]用一个单独的方法估计,也可以与视差图联合估计。[135]提出一个机制,使用深度图来精化法向量估计的质量,然后用法向量精化深度估计。用一个双流网络完成这一过程,一个网络使用初始深度估计精化法向量,一个网络使用估计的法向量再精化深度。

[68]和[76]利用带三维损失体的层叠语义图来引入语义信息。[68]使用一种损失函数联合训练视差估计与分割网络。该损失函数定义为重建误差,平滑项,分割项的加权和。[76]把边缘线索引入到边缘平滑损失,这样可以惩罚在平坦区域剧烈的深度变化。为了允许物体边缘的深度不连续性,边缘平滑损失项定义为基于由边缘检查网络得来的梯度图,该梯度图比原始像素强度的变化更有意义。

[79]提出一种方法,整合多尺度四维损失体与语义特征,该语义特征来自语义分割子网络。该方法使用左目和右目图像的特征作为输入,输入到类似于PSPNet的语义分割网络。每个图片的语义特征来自分割网络的分类层的输出。在每个视差等级上把每个语义特征和与其关联的立体图片的语义特征连接起来形成四维语义损失体。空间金字塔损失体和语义损失体一同喂入到三维损失集成模型,该模型编码解码器接一个三维特征整合模块集成它们,形成一个简单三维损失体。该过程以成对的方法从最小损失体开始。

综上所述,附加语义特征到损失体改善了精细重建,尤其是临近物体的边缘。

8.3. 域适配与迁移学习

用于深度估计的深度结构很受域偏移影响。在训练图片与推断图片差别很大时,域偏移会影响其有效性。例如,在室内与室外环境,或者人造数据与真实数据,或者相机模型或参数改变时,都会观测到这一现象,如图7所示。

也就是说,深度学习网络在一域上训练,但在另一个域上使用,例如在合成数据上训练,但在真实数据上使用,会导致物体的边界模糊,还有在不适定的区域产生误差。例如重复纹理,无纹理区域。这属于泛化故障。

有一些策略可以处理域偏差问题。这些策略可以分成两类:精调适配和数据迁移适配。在这两种情况中,都可以离线或在线适配。

8.3.1. 用精调来适配

这类方法先在一个域上训练网络,例如在合成图像上,然后在目标域上精调。这种方法的主要困难是为目标域收集精确的真值 。在实际中,用主动传感器(例如激光雷达)去获取监督数据是不可行的。[129], [137], [138]用已有的立体算法非监督地得到视差或深度真值,与最优秀的置信度测量算法一同确定现存立体算法的测量正确性。后者在[129], [138]中用于区别可靠和不可靠视差测量,也用于选择前者并精化预训练模型,例如DispNet,使用小且稀疏的点集作为真值标签。

[137]也使用类似方法去处理泛化故障。但是,该方法利用尺度多样性(上采样立体对以使模型有效)以本地化的方式来实现亚像素立体匹配,实现预测结果的迭代优化,该预测源自多个分辨率的输入。

用于视差估计的自监督和弱监督技术也可以用于离线域适配。尤其是,如果目标域的立体对可用,这些技术可以以无监督的方式,用重投影损失来精调。

尽管有效,这些离线适配技术减少了其可用。因为它要求用户在每次遇到新领域时都要重新训练模型。一些最近发表的文章提出了在线适配技术。例如[84]把适配看作一个连续学习过程,因此可以基于相机在实际布置过程中收集的图片在线适配网络。使用非监督的方式完成这一过程,在当前帧上计算误差信号,然后用单次反射传播迭代更新到整个网络上,再移动到下一个输入图片对。为了保持高帧率,[84]提出轻量级、快速、模块化的结构,叫作MADNet,它允许独立训练整个网络的每个子部分。这允许适配视差估计网络到未见过的环境,而无而在约25帧/秒的帧率上监督学习,且其精度与DispNetC相当。类似的,[142]使用视频序列随机初始化去在线训练深度网络。在其模型中使用了LSTM以利用预测中的临时信息。

[142]和[84]考虑单独从初始训练在线适配。另一方面,[143]把适配过程引入学习目标以获得适合在线适配的初始参数,亦即,可以快速适配到未见过的环境。[144]使用模型不可知的元学习框架实现这一过程,一个学习适配框架让立体方法可以以非监督的方式快速且连续地适配到新的目标域。

8.3.2. 用数据转移来适配

这类方法把一个域的数据迁移成看起来风格类似的另一个域的数据。例如[145]提出的二步方法。第一步使用合成数据训练深度估计模型。第二步训练如何把合成图片转移到真实世界图片。这样做的结果是,首先把迁移真实的图片以使与风格与合成的数据匹配,然后喂入深度估计网络,该网络是在合成数据上训练的。[146]的做法完全相反,是迁移合成数据使其变得更加真实并用它们训练深度估计网络。[147]同时使用两种方法,即合成数据迁移到真实,真实数据迁移到合成。两个迁移器以对搞的方式训练,使用一个对抗损失和一个回路一致性损失。回路一致性损失的意思是把合成图片转换为真实图片再转换回来,得到的结果应该与原图尽可能地相似。

尽管这些方法早已经用于单目深度估计,对于多目立体匹配方法它们依然是适用的。

8.4. 学习网络结构

很多研究工作都是去人工优化网络结构,但是最优网络结构和它的参数可以一道从数据中学习到吗?[149]指出如何使用并扩展现存的AutoML技术以有效地优化大尺度类U-Net的编码解码器,用于深度估计。传统的AutoML技术有极大的计算开销需求,这限制了它在小尺度分类任务上的使用。

[149]把可微的结构搜索(DARTs)应用到编码解码器,其主要思路是构建一个大网络,包括所有的体系结构选择,然后在通过优化来选择网络中最好的一部分。该方法还可以放松到连续优化问题,与规范网络一同训练,这导致一个上下两层的优化问题。

DispNet[75]是[22]的一个改进版本,它指出自动优化的DispNet(AutoDispNet)产生相比[75]的基线DispNet更好的性能,且二者的参数数量相同。[75]还指出,自动优化的优点在大的层叠网络上依然有体现。

9. 讨论与比较

表3和表4分别对比了分别对比了本文提到的一些文章在标准数据集上的性能。这些方法中大部分已经在这些开源数据集的子集上训练过。一个好的视差估计方法,一旦正确地训练,不仅会在开源可用的数据集上取得很好的性能,而且任意的新图片上依然表现良好。该方法在每次域改变的时候既不要求重训练,也不要求精调。本节介绍一些方法在从未见过的新图片上的表现。首先介绍评测协议、使用的图片,以及评估度量。然后讨论这些方法的性能。

9.1. 评价协议

我们考虑几种关键方法并在ApolloScape数据集的子集上评价它们,然后再在室内收集的四张图片上评价它们。这个选择背后的动机是双重的。首先,ApolloScape数据集包含室外自动驾驶设备采集的立体图片。因此它带一些挑战场景,如不可控的复杂环境、光照条件变化、严重遮挡。其次,该数据集比较新,以致于现存的方法没有在该数据集上训练过。因此,它可以用于评价这些方法的泛化能力。在这些数据集中。在该数据集中,已经使用激光雷达采集的三维点云作为视差真值,且用三维CAD模型拟合独立运动的汽车。我们还使用了四张室内图片,其宽为640,高为480,如图9所示,它们主要是为了挑战各种方法。

两张图片来自真实场景:一个是自行车场景,即在公园中有自行车;另一个是室内桌面场景,包含一些办公室家具。我们使用移动的立体相机拍摄多张立体图片对,然后使用SFM重建这些场景的三维模型。然后从真实相机的视点生成深度图。深度估计的置信度较高的区域用于真值。剩余的两张图片是合成的,但看起来很真实。其包括带有复杂结构的物体,例如,薄结构(如植物),大面积的单调颜色或单调纹理、重复纹理,这些都是立体深度估计算法的挑战场景。

我们测试了2018年和2019年发表的9篇文章中的16个立体方法,如下。我们使用作者提供的网络权重。

9.1.1. AnyNet [88]

该网络由粗到精构建三维损失体,总共分为四步。第一步在小的视差范围内搜索以估计低分辨率视差图。接下来使用残差学习估计精化的视差图。

9.1.2. DeepPruner [83]

组合了深度学习和PatchMatch,适当地裁剪出潜在的大搜索空间以加速推断。有两个变种:DeepPruner(最优),它四倍下采样了损失体;DeepPruner(快),它八倍下采样了损失体。

9.1.3. DispNet3 [75]

是DispNet的一个改进版本,遮挡和视差联合估计。

9.1.4. GANet [85]

在正则块中把大量的三维卷积层替换为(1)两个三维卷积层;(2)一个半全局集成层(SGA);(3)一个局部引导集成层(LGA)。SGA和LGA获取局部和整张图片的损失依赖。这意味着在挑战区域,例如遮挡,大的无纹理,反射区域,薄结构可以改善精度。

9.1.5. HighResNet [32]

在高分辨率图片上,为了精化空间和深度分辨率,该方法使用从精到细方法层级增量地搜索关联。

9.1.6. PSMNet [64]

逐步调整低分辨率四维损失体,该损失体由特征金字塔估计而来。

9.1.7. iResNet [63]

初始视差和学习到的特征用于计算一个特征一致图,该图测量立体匹配的正确性。然后把初始视差图和特征一致图喂入视差精化子网络。

9.1.8. UnsupAdpt [129]

这是一个非监督适配方法,它不使用任何真值信息精调。它首先使用KITTI 2012训练集训练DispNet-Corr1D,然后适配网络到KITTI2015 和 Middlebury 2014。

9.1.9. SegStereo [68]

这是一种非监督视差估计方法,使用分割遮蔽来引导视差估计。使用端到端网络联合估计分割和视差图。

方法(1)到(7)是带有深度真值的监督方法,方法(8)和(9)是自监督的。我们使用根均值平方误差(RMSE)和最坏n误差实时对比了它们的精度。RMSE定义如下

最坏n误差定义为估计视差与真值偏差超过n个像素的百分比。n \in \{0.5, 1, 2, 3, 4, 5\}。最坏n误差考虑到了误差的分布和扩展,因此提供了更好的精度洞察。除精度外,我们还介绍了计算时间和实时的内存占用。

9.2. 计算时间与内存占用

从表5中可以区分出三类方法 ;慢速方法,例如PSMNet [64], DeepPruner (Best)和(Fast) [83],GANet [85],每个视差图耗时超过一秒。内存占用在3GB到10GB之间。因此这些方法很难布署到移动平台上。中速方法,例如 AnyNet [88]和iResNet [63],生成一张视差图耗时在一秒左右。快速方法,例如HighResNet,耗时小于0.1秒。一般,使用三维损失体的方法相较于使用四维损失体的方法更快且内存占用更少。但是,有两个例外,iResNet [63]和DeepPruner [83],使用了三维损失体,但内存占用更大。iResNet处理每个宽度为640,高度为480的图片耗时少于1秒,因为它使用了二维卷积来正则化损失体,DeepPruner耗时超过3秒。我们还观察到,HighResNet使用四维损失体但采用层级方法产生视差,其效率很高,耗时只有37ms,其计算速度差不多是AnyNet的8倍,后者使用三维损失体。因为内存占用小,AnyNet可以在移动设备上运行。

9.3. 重建精度

表5显示了9.1中每个方法的平均RMSE。本文构建了一个基本子集,包含141张图片,看起来有点像KITTI2012,以下文中称之为基线集,另外构建一个包含33张图片的子集,包含光照条件挑战,在下文中称为挑战集。本文主要关注各种方法的比较,因为某些高误差可能被认为其真值已经被ApolloScape数据集获得,而不是方法本身。

我们观察到,这些方法在两个子集上表现相似。但是,重建误差十分重要,相比于在标准数据集如KITTI2012和KITTI2015上的结果,大于8个像素。这意味着,训练集和测试集的域的巨大差别严重影响重建精度。

我们还在图10的最坏n曲线上观察到相同的趋势,在这里所有的方法都有超过25%的像素的重建误差超过5个像素。最坏n曲线显示,在前景像素上的误差大,也就是与车关联的像素,有超过55%都超过3个像素,与之对比的是背景像素的这一比例只有35%。有意思的是,表5和图10显示,大多数方法都有类似的重建精度。仅有的例外是iResNet [63],它是在Kitti2015和ROB [152]上训练的,其误差大于5个像素的像素比较分别是前景90%,背景55%。在所有方法中,只有不到5%的像素的误差小于2像素。在未来的研究中,亚像素精度依然是一个巨大的挑战。

注意到,自监督方法SegStereo [68]与许多监督方法性能相近。[129]的非监督自适配方法使用基线网络DispNet-Corr1D,在KITTI 2012上训练,适配到KITTI2015和Middlebury 2014,在前景区别实现了最好的性能。

依据估计的视差的视觉质量,如图11,我们观察到,大多数方法可以恢复出整个数的形状,但是叶子等细节恢复得比较差。 在平坦区域和物体边缘重建误差很高。高反射材料和弱光照条件是这些方法的挑战,如图11-(b)所示。附加材料提供了图9中个立体对的更多结果。

10. 未来研究方向

用于立体深度估计的深度学习方法已经取得了不错的的结果。但是,该领域依然处于发展的早期,还希望能够继续发展。本文中,我们提出一些目前的关注点和未来发展的潜在方向。

10.1. 相机参数

本文介绍的大部立体技术都要求校正图片。MVS技术要求平面扫描体(PSV)或反投影图片(特征)。这两者都要求相机参数已知。是自然环境下估计相机参数是一项挑战。许多文章尝试用联合估计相机参数和三维场景几何结构的方法处理这一问题以帮助单目深度估计和三维形状重建。

10.2. 光照条件和复杂材料特征

弱光照条件和复杂材料特征对目前大多数方法来说依然是挑战,例如图11-(b)。把目标识别、高级别的场景理解、低级别的特征学习组合在一起会是一条康庄大道。

10.3. 空间和深度分辨率

目前大多数技术并不能处理高分辨率的输入图片,一般只能生成空间和深度维度上都是低分辨率的深度图。深度分辨率尤其受限,导致这些方法不能重建薄结构,例如蔬菜和头发,距离相机较远的结构也不能重建。尽管精化模块可以改善估计的深度图的分辨率,相比于输入图片的分辨率,其增益依然是较小的。最近提出的层级技术能够处理这类问题,该技术可以按需求取中间结果分辨率。在这些方法中,低分辨率深度图可以实时生成,因此可以应用于移动平台,高分辨率图需要更多的计算时间。实时生成精确的空间和深度高分辨率图在未来的研究中依然是一项挑战。

10.4. 实时处理

多数用于视差估计的深度学习方法使用三维和四维损失体,在处理和正则化时用到二维和三维卷积。这会带来较高的内存占用和较大的计算开销。开发轻量级、快速、端到端的深度网络在未来的研究中是一项挑战。

10.5. 视差范围

目前的技术均匀地离散化视差范围。这会带来一系列问题。有时在视差空间重建误差可能比较小,但在深度空间误差就比较大,尤其比较远的地方。在视差离散化时在对数空间均匀地离散化,这种方法可以减缓这一问题。此外,改变视差范围要求离散化网络。把深度看作是连续量在未来的研究中会是一条康庄大道。

10.6. 训练

深度网络严重依赖带真值标签的训练图片的可用性。对于深度(视差)重建,这样做成本很高且劳动强度大。训练数据严重影响深度网络的性能和泛化能力,包括在特定域过拟合模型。现存的技术解决这一问题的方法是:设计损失函数使其不需要三维标注,使用域适配和迁移学习策略。但是,前者要求相机是标定好的。域适配技术,尤其是非监督域适配,最近很引人注目。应用这种技术,可以在容易训练的合成数据和真实数据上训练。不仅可以以非监督的方式适配,而且可以实时地改变环境。早期的结果非常鼓舞人心,因此希望未来会有用于三维重建的类似ImageNet的数据集出现。

10.7. 从数据自动学习网络结构、激活函数和参数

多数现存的研究聚焦于设计新奇的网络架构、新的训练方法用于参数优化。最近有一些文章开始聚焦于学习最优架构。早期的一些深度,例如[149]聚焦于简单架构。我们期望未来在自动学习复杂视差估计架构和激活函数方面有更多的研究。例如,神经深化理论[154], [155],这将把人类从设计网络结体中解放出来。

11. 结论

本文对最近在使用深度学习技术的立体深度估计的发展进行了系统的研究。尽管该领域还处于初级阶段,但也取得了不错的结果。从2014年以来,数据驱动和机器学习技术在图像深度重建领域扮演了中心角色,这开启了一个新的纪元。我们看到,从2014年到2019年,在机器视觉、计算机图形学、机器学习领域的期刊和会议上,该领域的文章已经发表了150余篇。在本文的结稿时还有一些新的文章发表,这使得保持对该领域发展状态的持续追踪是较为困难的。更重要的是理解新方法与旧方法的差异与相似性。本文可以为读者提取一些引导,在这个快速增长的领域指导一下方向。

最后,本文也涉及了一些相关的话题。例如使用深度学习技术从事基于图像的三维重建,最近[153]作过综述。还有基于单目和视频的深度估计,在最近五六年里有大量的综述文章。其它话题包括光度立体和主动立体,这都不在本文的讨论范围之内。

参考文献

A Survey on Deep Learning Techniques for Stereo-based Depth Estimation 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值