论文翻译:Anytime Stereo Image Depth Estimation on Mobile Devices

论文《Anytime Stereo Image Depth Estimation on Mobile Devices》的完整翻译,如有不当之处,敬请评论指出!蟹蟹~(2019-08-28)
发表:ICRA2019
代码:https://github.com/mileyan/AnyNet.

摘要

立体深度估计在机器人领域的许多应用都要求在重要的计算约束下实时生成精确的视差图。目前最先进的算法迫使用户在慢速生成精确映射和快速生成不精确映射之间做出选择,此外,这些方法通常需要太多的参数,无法在电力或内存受限的设备上使用。针对这些不足,提出了一种新的视差预测方法。与之前的工作相比,我们的端到端学习方法可以在计算和推理精度之间进行权衡。深度估计分阶段进行,在此阶段可以随时查询模型以输出其当前的最佳估计。我们的最终模型可以在NVIDIA Jetson TX2模块上处理1242x375分辨率的图像,在10-35帧每秒的范围内,使用比最具竞争力的基线少两个数量级的参数,误差只会有微小的增加。源码在github上:https://github.com/mileyan/AnyNet.

1.介绍

立体相机图像的深度估计是三维场景重建和理解的一项重要任务,从机器人[30]、[51]、[39]、[42]到增强现实[53]、[1]、[35]有着广泛的应用。高分辨率立体相机为3D感知提供了一个可靠的解决方案——与飞行时间相机不同,它们在室内和室外都能很好地工作,而且与激光雷达相比,它们实际上更便宜、更节能。给定一个经过校正的立体图像对、焦距和两相机之间的立体基线距离,深度估计可以转化为立体匹配问题,其目标是找到两幅图像中对应像素之间的差异。虽然立体图像的视差估计是计算机视觉[28]中一个长期存在的问题,但近年来深卷积神经网络(CNN)[52]、[32]、[20]、[25]、[36]的应用使该领域取得了长足的进展。深度网络可以通过端到端的监督学习来解决匹配问题,并且能够将局部上下文和先验知识结合到估计过程中。

另一方面,深度神经网络在处理高分辨率立体图像时,往往需要大量的计算,并且存在明显的延迟。例如,PSMNET[4]可以说是目前最先进的深度估计算法,在Nvidia Jetson TX2 GPU计算模块上获得低于0.3fps的帧速率,这对于无人机或其他自主机器人及时避障来说太慢了。

在本文中,我们提出了一种随时计算视差估计的方法,并给出了一个动态权衡速度和精度的模型(见图1)。如果一个物体出现在它的飞行路线上,它将能够迅速地感知到它,并通过降低它的速度或执行规避动作作出相应的反应。在低速飞行时,延迟并不那么有害,而且同一架无人机可以计算出更高的分辨率和更精确的3D深度地图,从而实现在拥挤的场景中进行高精度导航或对环境进行详细映射等任务。

卷积网络深度估计的计算复杂度通常与图像分辨率成立方关系,与最大视差[20]成线性关系。考虑到这些特性,我们依次细化深度图,同时始终确保分辨率或最大视差范围足够低,以确保最小的计算时间。我们从低分辨率(1/16)估计深度地图在整个视差范围。立方复杂度允许我们在几毫秒内计算这个初始深度映射(其中大部分时间用于初始特征提取和向下采样)。从这个低分辨率的估计开始,我们通过向上采样,然后纠正现在在高分辨率下明显的错误,从而不断提高视差图的分辨率。通过CNN预测输入图像上采样视差图的残差进行校正。尽管使用了更高的分辨率,但这些更新仍然很快,因为可以假设剩余的差异被限制在几个像素范围内,允许我们将最大的差异和相关的计算限制在整个范围的10-20%。

这些连续的更新完全避免了全范围视差计算,除了初始的低分辨率设置,并确保所有的计算都被重用,使我们的方法有别于大多数现有的多尺度网络结构[40]、[15]、[19]。此外,我们的算法可以在任何时间轮询,以检索当前最佳估计深度地图。可以实现多种可能的帧速率(TX2模块上的10-35FPS),同时在高延迟设置下仍然保持精确的视差估计。我们的整个网络可以使用所有规模的联合损耗进行端到端训练,我们将其称为随时立体网络(AnyNet)。

我们在多个基准数据集上评估AnyNet用于深度估计,得到了各种令人鼓舞的结果:首先,AnyNet使用最先进的方法获得了具有竞争力的准确性,而参数比基线少几个数量级。这对于资源受限的嵌入式设备尤其有效。其次,我们发现深度卷积网络能够从粗糙视差图中预测残差。最后,包括一个最终的空间传播模型(SPNet)[26]显著提高了视差图的质量,以现有方法计算成本(和参数存储需求)的一小部分获得了最先进的结果。

2.相关工作

a)视差估计:传统的视差估计方法是基于左右图像[2]、[41]的匹配特征。这些方法通常是由以下四个步骤:(1)计算匹配图像块的成本范围的差异,(2)平滑通过聚合产生的成本张量方法,(3)估计斑块之间的差距通过寻找一种低成本的匹配在左图像和正确的图像,和(4)精炼这些差距通过引入全球平滑估计先验地图上的差异[41],[13],[11],[14]。最近有几篇论文研究了step(1)中卷积网络的使用,特别是Zbontar &LeCun[52]使用Siamese convolutional network来预测patch的相似性来匹配左右patch。通过使用更有效的匹配网络[29]和更深层的高速公路网络训练来最小化多级损失[43],他们的方法得到了进一步的改进。

b)端到端的差距预测:灵感来自最初的成功卷积网络的差异估计,以及他们的成功在语义分割[27],光流计算[7],[17],和深度的评估从一个框架[5],最近的一些研究探讨了端到端差距评估模型[32],[20],[25],[36]. 例如,在[32]中,提出了直接预测图像对问题的差异的差分预测和一种称为DispNet的卷积网络,将其表述为一个监督学习问题。disnet所做的改进包括级联细化过程[36]。其他研究采用[7]中引入的相关层来获取初始匹配成本;训练了两个卷积网络来预测和进一步细化图像对[25]的视差图。之前的一些研究也探索了摆脱监督学习范式,使用立体图像[9]或视频流[54]以非监督的方式进行深度估计。

我们的工作部分灵感来自于[20]中提出的几何和上下文网络(GCNet)。为了预测两幅图像之间的视差图,GCNet将对图像对进行运算的二维Siamese卷积网络与对匹配代价张量进行运算的三维卷积网络相结合。GCNet采用端到端方式进行训练,是目前在精度和计算效率方面最先进的方法之一。我们的模型与GCNet,它有相同的两个阶段(2 d暹罗图像卷积网络和三维张量成本卷积网络),但它不同,它可以随时执行预测迅速产生一个初始差距地图预测,然后逐步预测剩余纠正这种预测。LiteFlowNet[16]也尝试预测光流计算的残差。然而,LiteFlowNet使用残差来促进大位移流的推断,而不是加快计算速度。

c)随时预测:在推断时间[46]、[10]、[18]、[49]、[50]、[47]、[15]存在大量计算预算约束的机器学习模型工作。这些方法大多基于决策树分类器[46]、[49]、[10]和[50]的集合,这些集合允许逐树评估,从而促进了预测的渐进更新,而这正是任何时间预测的特点。近年来的一些研究探索了利用图像分类CNNs动态评估网络部分时刻预测,逐步细化预测[24]、[15]、[45]、[48]、[33]、[6]。我们的工作不同于这些早期的任何时候CNN模型,我们关注的是差异地图估计的结构化预测问题,而不是图像分类任务。我们的模型利用了差异预测问题的特殊性质:即通过逐步提高CNN内部表示的图像数据的分辨率,可以实现对差异的渐进估计。

3. ANYNET

图2显示了AnyNet体系结构的示意图。输入图像对首先通过U-Net特征提取器,该提取器以几个输出分辨率(1/16、1/8、1/4)计算特征映射。在第一阶段,只计算最小尺度特征(1/16),并通过视差网络(图4)生成低分辨率视差图(视差阶段1)。视差图估计右输入图像w.r.t.和左输入图像中每个像素的水平偏移量,并可用于计算深度图。由于输入分辨率低,整个第一阶段的计算只需要几毫秒。如果允许更多的计算时间,我们通过在U-Net中继续计算来获得更大的(1/8)特征,从而进入第二阶段。在第2阶段中,我们只是从第1阶段纠正已经计算好的视差图,而不是在这个更高分辨率下计算完整的视差图。首先,我们放大视差图以匹配阶段2的分辨率。然后,我们计算一个残差图,它包含一些小的修正,这些修正指定了每个像素的视差图应该增加或减少多少。如果时间允许,阶段3遵循与阶段2类似的过程,并再次将分辨率从1/8翻倍到1/4。阶段4使用SPNet[26]改进了阶段3的视差图。

在这里插入图片描述
图2:AnyNet的网络结构。

在本节的其余部分中,我们将更详细地描述模型的各个组件。

a) U-Net特征提取器:图3为UNet[38]特征提取器的详细示意图,分别应用于左右图像。U-Net体系结构以不同的分辨率(1/16、1/8、1/4)计算特征图,这些分辨率在阶段1-3用作输入,仅在需要时计算。原始输入图像通过最大池或条纹卷积进行降采样,然后用卷积滤波器进行处理。较低分辨率的特征映射捕获全局上下文,而较高分辨率的特征映射捕获本地细节。在比例为1/8和1/4时,最后的卷积层包含了先前计算的低比例特性。
在这里插入图片描述

b)视差网络:视差网络(图4)将左右立体图像的特征图作为输入,以计算视差地图。我们使用这个组件来计算初始视差图(阶段1),以及计算后续校正的剩余图(阶段2 &)视差网络首先计算视差成本体积。这里的代价是指左图中一个像素与右图中相应像素的相似性。如果输入feature map的维数为hw,则cost volume的维数为hw M,其中(i, j, k)项描述了左图像的像素(i, j)与右图像的像素(i, j, k)匹配的程度。M表示所考虑的最大视差。我们可以代表每个像素(i, j)在左图像矢量p L ij,α,维度对应于(i, j)进入αth地图与左图像相关联的输入特性。类似地,我们可以定义p R ij。然后,成本体积中的条目(i, j, k)被定义为两个向量plij和pr i(j+k)之间的L1距离,即Cijk = kp lij pr i(jk) k1。
在这里插入图片描述

这个代价卷可能仍然包含由于输入图像中模糊的对象、遮挡或模糊匹配而导致的错误。作为视差网络(图4中的3D Conv)的第二步,我们使用几个3D卷积层[20]对代价体积进行细化,进一步提高得到的代价体积。如果右边图像中的像素(i, j)最相似,那么左边图像中的像素(i, j)的视差为k。如果代价体积是精确的,我们可以计算像素(i, j)的视差为D ij = argmink Ci,j,k。然而,成本估计可能太过嘈杂,无法寻找到硬性的最小值。相反,我们按照Kendall等人[20]的建议计算加权平均(图4中的差异回归)。
在这里插入图片描述
如果某一差异k的成本最低(即它是唯一的良好匹配),那么它将通过加权平均得到恢复。如果存在歧义,输出将是可行候选项的平均值。

c)残差预测:AnyNet体系结构的一个关键方面是,我们只在第一阶段的分辨率很低。第二阶段及我们预测残差[16]。差异预测最昂贵的部分是构建和细化成本量。成本体积按hw M进行缩放,其中M为最大差异。在高分辨率下,两个像素之间的最大差异可能非常大(通常在KITTI数据集[8]中M = 192像素)。通过限制自己的残差,即对现有差距的修正,我们可以将自己限制在M = 5(对应于偏移量2,1,0,1,2),并获得可观的速度提升。

为了计算第二阶段的残差3、我们首先对粗视差图进行高维处理,并利用它对输入的特征进行高维变形(图2)。特别是,如果估计像素(i, j)的左视差为k,则我们将每个右feature map中的像素(i, j)的值覆盖到对应的像素(i, j + k)的值(若超出边界则使用0)。如果当前的视差估计是正确的,那么更新后的右特征图应该与左特征图匹配。由于低分辨率输入的粗糙性,通常仍然存在几个像素的不匹配,我们通过计算剩余视差图来纠正。剩余视差的预测与全视差图的计算方法相似。唯一的区别是成本体积计算为Cijk = kpij pi(j k+2)k1,得到的剩余视差图被添加到前一阶段放大的视差图中。

d)空间传播网络:为了进一步改进我们的结果,我们添加了最后一个阶段,在这个阶段中,我们使用空间传播网络(SPNet)[26]来细化我们的视差预测。SPNet通过应用一个局部滤波器来锐化视差图,该滤波器的权值是通过在左侧输入图像上应用一个小的CNN来预测的。我们表明,这种改进以相对较少的额外成本显著提高了我们的结果。

4.实验结果

在本节中,我们对我们的方法进行了实证评估,并与现有的立体算法进行了比较。此外,我们还在Nvidia Jetson TX2计算模块上测试了我们的方法的效率。

a)实现细节:我们在PyTorch[37]中实现AnyNet。具体网络描述见表一。我们的实验使用了一个包含四个阶段的AnyNet实现,如图2所示,并在前一节中进行了描述。将原始图像的最大视差设置为192像素,对应第1阶段代价体深度M = 192/16 = 12。第二阶段及残差范围为2,对应于阶段2的16个像素,阶段3的8个像素。所有四个阶段,包括SPNet在阶段4中,共同训练,但是损失的权重不同,重量λ1 = 1/4,λ2 = 1/2,λ3 = 1 和 分别λ4 = 1。总的来说,我们的模型包含40,000个参数——这比StereoNet[21]少一个数量级的参数,比PSMNet[4]少两个数量级。我们的模型使用Adam[22]进行端到端训练,初始学习率为5e4,批量大小为6。在场景流数据集[32]上,保持学习速率不变,训练总共持续10个周期。对于KITTI数据集,我们首先在场景流上对模型进行预训练,然后对其进行300个时代的微调。历元200之后,学习率除以10。所有输入图像均归一化为零均值,具有单位方差。所有实验均采用原始图像分辨率进行。使用一个GTX 1080Ti GPU,在场景流数据集上的训练花费3.5小时,在KITTI上的训练花费30分钟。所有的结果平均在5个随机的80/20训练/验证分割。
在这里插入图片描述

图5显示了在我们的模型的四个阶段预测的视差图。随着计算时间的增加,AnyNet生成越来越精细的视差图。由于SPNet的后期处理,第4阶段的最终输出更加清晰和准确。
在这里插入图片描述

b)数据集:我们的模型在合成场景流[32]数据集上进行训练,并在KITTI-2012[8]和KITTI-2015[34]两个实际数据集上进行评估。场景流数据集包含22000个用于训练的立体图像对和4370个用于测试的图像对。每幅图像的分辨率为960 540像素。就像在[20]中一样,我们在从原始图像中随机裁剪的512x256个patch上训练我们的模型。KITTI-2012数据集包含194对用于训练的图像和195对用于测试的图像,而KITTI-2015数据集包含200对图像。所有的KITTI图片的尺寸都是1242375。

c)基线:尽管据报道,基于CNN的最先进立体估计方法在TITAN X GPU[21]上可以达到60FPS,但在Nvidia Jetson TX2等资源受限的计算设备上,这些方法还远远不能实现实时性能。在此,我们将我们的方法与四种竞争基准算法(PSMNet[4]、StereoNet[21]、disnet[32]和StereoDNN[44])在TX2上进行对照比较。PSMNet模型有两个不同的版本:PSMNet-classic和PSMNet-hourglass。我们使用前者,因为它比PSMNet-hourglass更有效,同时具有相当的准确性。对于StereoNet,我们使用Tensorflow实现报告运行时间,我们发现它的速度是PyTorch实现的两倍。

最后,我们还将AnyNet与两种经典的立体匹配方法进行了比较:块匹配[23]和半全局块匹配[12],OpenCV[3]支持这两种方法。

为了在tx2上为这些基线方法收集有意义的结果,我们使用了下采样的输入图像以加快推理时间。基线方法被重新实现,并对向下采样的立体图像进行训练——这允许公平的比较,因为当给定低分辨率输入时,对全尺寸图像进行训练的模型将会出现显著的性能下降。在得到一个低分辨率的预测后,我们使用双线性插值将其上采样到原始尺寸。
在这里插入图片描述
A.评估结果表II
包含了AnyNet在KITTI-2012和KITTI-2015数据集上的数值结果。另外,图6a和图6a显示了我们的模型相对于基线方法的评估误差和推断时间。[3]、[21]、[4]、[31]、[44]中最初报告的基线算法结果用交叉图表示。对于AnyNet以及StereoNet和PSMNet基线,计算是跨多个下采样输入分辨率执行的。结果由全分辨率、1/4、1/8和1/16分辨率的输入生成,分辨率越低,推理时间越快,如图6a和6b所示。从图中可以看出,只有AnyNet和StereoNet能够在30 FPS的速度下快速进行实时预测,并且AnyNet在这两个数据集上的错误率都大大降低。此外,即使使用全分辨率输入,AnyNet也能够以超过10帧每秒的速度运行,而且在每个可能的推断时间范围内,AnyNet在预测误差方面明显优于所有基线。PSMNet能够产生最精确的整体结果,但是这只在计算速率为1 FPS或更慢时才成立。我们还观察到,唯一一种非cnn的方法OpenCV在任何推断时间范围内都没有竞争力。

a)随时设置:我们还在随时设置中评估AnyNet,在这个设置中,我们可以在任意给定时间t提前轮询模型,以检索其最新的预测。为了模拟基准OpenCV、StereoNet和PSMNet模型的任何时间设置,我们在越来越高的输入分辨率下依次进行预测,并按大小的递增顺序执行这些预测。在t时刻,我们评估最近计算的视差图。图6c和图6d显示了任意时间设置下的三像素错误率。与非任何时间的结果类似,AnyNet在10-30 FPS范围内获得了更精确的结果。此外,视差图完成之间的时间(图6c和图6d中显示为水平线)比任何基线都短得多,如果在视差图计算期间发出查询,可以减少浪费的计算量。

B.消融实验
为了检查不同部件的影响对于任何一个网络架构,我们都会进行烧蚀研究。第一种方法是用三个不共享权值的独立卷积神经网络替换UNet特征提取器;第二种方法在每个分辨率级别上计算全尺寸预测,而不是只预测剩余视差;而第三种方法用PSMNet[4]中的方法代替了基于距离的成本卷构建方法,该方法生成一个2 M成本卷堆栈。我们方法的所有ablated variable都是从零开始训练的,在KITTI-2015上对它们进行评估的结果如图7所示。

a)特征提取器:我们对模型s的特征提取器进行了修改,将U-Net替换为三个单独的二维卷积神经网络,这三个网络在计算成本上是相似的。如图7所示(line AnyNet w/o UNet),误差在前两个阶段急剧增加(20.4%和7.3%)。我们假设,通过从高分辨率中提取上下文信息,U-Net即使在低分辨率下也能产生高质量的成本卷。这使得它成为特征提取的理想选择。

b)残差预测:我们将我们的默认网络与一个变量进行比较,该变量通过在第二和第三阶段直接预测差异而不是残差来改进差异估计。结果如图7所示(直线AnyNet w/o残差)。虽然该变量能够达到与原始模型类似的精度,但后两个阶段的评估时间增加了6倍以上。这一增长表明,提出的残差预测方法在细化粗视差图方面是高效的,因为它避免了构建需要考虑大范围差异的大成本卷。

c)基于距离的成本体积法:最后,通过与PSMNet[4]中使用的方法进行比较,对基于距离的成本体积法进行了评价。该方法无需显式计算特征与左右图像之间的距离,即可构建多个成本卷。图7中的结果(直线AnyNet w/o DBCV)表明,我们基于距离的方法比这个选择快10%左右,这表明明确考虑特征距离可以更好地权衡精度和速度。

5.讨论与结论

据我们所知,AnyNet是第一种利用立体图像进行任意深度估计的算法。随着(低功耗)gpu变得越来越便宜,并越来越多地融入到移动计算设备中,随时深度估计将为各种机器人应用程序提供准确可靠的实时深度估计。

致谢

该研究部分由国家科学基金会(III-1618134、III-1526012、IIS1149882、IIS-1724282和TRIPODS-1740822)、海军研究国防部办公室(N00014-17-1-2175)和比尔及梅林达·盖茨基金会提供资助。感谢SAP美国公司的大力支持。我们感谢卡米洛J。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值