《Efficient Deep Learning for Stereo Matching》学习笔记

      水平有限,翻译难免存在很多不足,欢迎批评指正。

0.摘要      

      在过去的一年里,卷积神经网络在立体图像估计方面表现出色。然而,目前的网络体系结构依赖于连接,采用级联网络进一步处理,每个图像对需要快速的GPU计算。与此相反,在本文中,我们提出了一个匹配网络,能够在不到一秒钟的GPU计算内产生非常精确的结果。为了达到这个目标,我们设计了一个内积层用于计算连接层中两个特征的内积。训练该网络作为一个多分类问题,类别为所有可能的差值。这使我们能够获得校准分数,与现有方法相比,这可以带来更好的匹配性能。

1.引言

      3D重建场景是很多应用中的关键,例如机器人技术和自动驾驶汽车。为了简化这个过程,通常使用诸如LIDAR的3D传感器。使用摄像头是一个有吸引力的选择,因为它通常是更具成本效益的解决方案。然而,尽管经过数十年的研究,从立体图像对中估计深度仍然是一个未解决的问题。处理夹杂物、大饱和区域和重复模式仍然是一个挑战。

      已经开发了许多方法来聚合来自本地匹配的信息。例如,代价聚合可以对局部相邻的差异估计进行平均。类似地,半全局块匹配和基于马尔科夫随机场的方法将像素级预测和局部平滑度结合成能量函数。然而,所有这些方法都采用人工制作的损失函数,或者只从数据中学习功能的线性组合。

      在过去的几年里,我们目睹了高层次的视觉革命,深度特征直接从像素中学习,以前所未有的性能解决许多场景理解任务。目前这些方法在检测、分割和分类等问题上是最好的。最近,卷积网络也被用来学习如何匹配立体图像估计的任务。目前的方法通过将问题视为二元分类来学习匹配网络的参数;给定左图像中的patch,其任务是预测右图像中正确匹配的patch。虽然文献[29]《Computing the stereo matching cost with a convolutional neural network》在诸如KITTI 数据集等具有挑战性的测试中表现出色,但它在计算上非常昂贵,需要在GPU中进行快速的计算。这是因为他们采用了级联结构,然后通过连接和进一步处理,通过几层网络来计算最终得分。

      相反,在本文中,我们提出了一个匹配网络,它能够在不到一秒的GPU计算中产生非常准确的结果。为了达到这个目标,我们设计了一个内积层用于计算连接层中两个特征的内积。训练该网络作为一个多分类问题,类别为所有可能的差值。这使我们能够获得校准分数,与文献[29]《Computing the stereo matching cost with a convolutional neural network》相比,可以带来更好的匹配性能。该方法具体网络结构参考图1。我们证明了我们的方法在具有挑战性的KITTI数据集测试中的有效性,利用平滑技术后更具竞争性。我们的代码和数据链接:http://www.cs.toronto.edu/deepLowLevelVision/


图1 为了学习图像patch的表示,使用联合网络来提取每个像素的所有可能差异的边缘分布

2.相关工作

      在过去的几十年中,已经开发出许多立体图像匹配算法。由于对所有现有方法的讨论将超出本文的范围,因此我们主要将讨论限制为最近利用学习的方法的一个子集,并且主要将其制定为能量最小化(energy minimization)方面。

      早期基于学习的方法专注于纠正初始计算的匹配成本。学习也被用来调整能量最小化任务的超参数。文献[31,21,19]最早训练这些超参数,并研究了不同形式的概率图模型。

      倾斜的平面模型用倾斜的3D平面模拟像素组。它们在自动驾驶场景中非常具有竞争力,其中鲁棒性至关重要。他们有着悠久的历史,可以追溯到文献[2],并且在Middleburry以及KITTI数据集上非常成功。

      同时还探讨了共同解决许多任务的整体模型。其优点是许多低层次和高层次视觉任务是相关的,因此可以共同解决它们。例如文献[5,6,4,18,13]共同解决了立体场景和语义分割问题。Guney和Geiger [12]研究了高级视觉任务的效用,如用于立体匹配的对象识别和语义分割。

      在使用立体估计作为流水线的一部分时,估算每个匹配的信心(confidence?)是关键。学习方法已成功应用于这项任务,例如,通过随机森林分类器[14]结合若干置信度量度,或将随机森林预测并入马尔可夫随机场[23]。

      卷积神经网络(CNN)在高级视觉任务(如图像分类,目标检测和语义分割)方面表现出色。最近,CNN已被应用于低级视觉任务,如光流预测[10]。在立体估计的背景下,文献[29]利用CNN来计算两个图像块之间的匹配成本。特别是,他们使用了一个联合(Siamese)网络,该网络采用相同大小的左侧和右侧图像batch以及顶部的几个完全连接层来预测匹配成本。他们训练模型以最小化二元交叉熵损失。与文献[29]类似,文献[28]研究了不同的基于CNN的架构来比较图像batch。他们发现,将左右图像batch拼接成不同的通道效果最好,但代价是速度很慢。

      我们的工作与[29,28]最相似,主要有两点不同。首先,我们建议使用平滑的目标分布来学习所有差异值的概率分布。因此,我们能够隐含地捕获不同差异之间的相关性。这与对图像块进行独立二元预测的[29]形成了鲜明对比。其次,在卷积图层之上,我们使用一个简单的点积图层来连接网络的两个分支。这使我们能够以更快的速度进行计算。我们注意到,在提交论文时未发表的同时期工作[30,7]也引入了点积层。

3.深度学习立体匹配

      我们主要想计算给定立体图像对的视差。在本文中,我们假设图像对已经被矫正,因此极线与水平图像轴一致。令yi∈Yi表示第i个像素的视差,并令| Yi | 是该集合的基数(cardinality)(通常为128或256)。立体算法通过为左图像中的每个像素计算每个可能视差值的分数来估计3维成本量。这通常是通过利用给定像素周围的小patch和每个batch的简单手工特征来完成的。相反,在本文中,我们利用卷积神经网络来学习如何匹配。

      为实现这一目标,我们采用了一种联合结构,每个分支分别处理左侧或右侧图像。具体而言,每个分支都将图像作为输入,并将其传递到一组卷积神经网络层中,每个卷积神经网络层都包含具有较小滤波尺寸(例如,5×5或3×3)的空间卷积,然后是空间批量归一化(属于哪一层?)和一个整型线性单位(ReLU层)。请注意,我们删除了最后一层的ReLU,以便不会丢失以负值编码的信息。在我们的实验中,我们利用每层不同数量的滤波器(32或64)并在两个分支之间共享参数。

      与现有的利用连接并进一步处理的方法相反,我们使用内积(product)层,它简单地计算两个特征之间的内积以计算匹配分数。这种简单的操作显着加快了计算速度。如图2中,该图描绘了一个滤波器大小为3×3的4层网络的例子,这4层网络的结果是一个大小为9×9的感受野。


图2 我们的四层联合网络架构,其感受野大小为9

      训练:我们使用从ground truth可用于训练网络的一组像素中随机抽取的小左图像patches。这个策略为我们提供了一系列不同的例子,并且是有效的记忆。特别是,每个左图像patch的大小与我们网络的接受范围相当。令(xi,yi)为从左图像中随机提取的patch中心的图像坐标,并且令dxi,yi为相应的ground truth视差。我们对右边的图像使用较大的patch,以扩大感受野的大小以及所有可能的视差(即位移)。因此联合网络的两个分支输出的左分支是单个64维特征,右分支为| Yi |x64。然后将这两个向量作为输入传递给计算每个| Yi |视差得分的内积层。这使我们能够在所有可能的视差上计算每个像素的softmax。

      在训练过程中,我们将调整网络参数权重W来最小化交叉熵损失最:


      由于我们对3像素(3-pixel)误差度量感兴趣,所以我们使用以ground truth yGTi为中心的平滑目标分布pgt(yi),即:


      对于本文我们设定λ1= 0.5,λ2= 0.2和λ3= 0.05。请注意,这与分类中的交叉熵形成了对比,其中pgt(yi)是一个delta函数,它将所有质量(mass?)都放在注释的ground truth配置上(感觉翻译的有问题)。我们利用AdaGrade [8]并使用随机梯度下降反向传播来训练我们的网络。与基于瞬时随机梯度下降类似,AdaGrad根据历史信息调整梯度。对比基于瞬时的方法,它强调稀疏但信息丰富的特性。我们按照实验部分的详细说明每隔数千次迭代调整学习率。

      测试:对比训练过程,测试时通过随机抽取不同训练图像的位置,构成一个小batch,可以提高测试过程中的速度性能。我们的联合网络为每个像素i计算一个64维特征表示。为了有效地获得损失值,我们只对每个像素i计算一次64维特征,并且在计算损失值时,我们重新使用它的值来表示涉及此位置的所有视差(要好好理解)。

4.平滑深度网络输出

      鉴于使用CNN获得的是一元数据,我们计算每个图像位置的所有视差的预测。请注意,简单地为每个像素输出最可能的配置(configuration)与当前立体算法比没有竞争力,当前立体算法利用不同形式的损失聚合,后期处理和平滑。

      这对于处理具有遮挡,饱和或重复模式的复杂区域尤为重要。大多数方法将每个随机变量定义为像素的视差,并编码连续或邻近像素之间的平滑度。另一种方法是将图像分割成区域并估计每个区域的倾斜3D平面。在本文中,我们研究了不同平滑技术的影响。为了实现这个目标,我们将立体匹配作为多个不同马尔可夫随机场(MRF)中的推理问题来看待,其目的是平滑卷积神经网络产生的匹配结果。特别是,我们研究损失聚合(cost aggregation),半全局(semi-global)块匹配以及文献[27]的倾斜平面方法作为平滑的手段。以下我们简要回顾一下这些技术。

      损失聚合(cost aggregation我们利用了一种非常简单的损失汇聚方法,它只是在5×5大小的窗口上执行平均pooling。

      半全局块匹配(Semi global block matching):半全局块匹配通过引入额外的成对潜力(potentials)来增加从卷积神经网络获得的一元能量项(unary energy term),从而使得视差平滑。具体公式为:


      其中ε是指4-连通网格,一元能量Ei(yi)是神经网络的输出。

      我们将成对能量定义为:


      其中变量常数c1 <c2。我们遵循文献[29]的方法,其中如果在左侧或右侧图像中的相应位置存在强的边缘证据,则c1和c2减小。更多细节详见文献[29]。

      倾斜平面(Slanted plane):为了构建深度图,该方法在涉及外观、位置、视差、平滑度和边界能量的能量上执行块坐标下降。更具体地说,我们首先使用SLIC能量的扩展来对图像进行过度分段[1]。对于每个超像素,我们计算倾斜平面估计[27],应该坚持从卷积神经网络获得的深度图证据。然后,我们重复这两个步骤以最小化考虑到外观、位置、视差、平滑度和边界能量的能量函数。更多细节详见文献[27]。

      复杂后处理(Sophisticated post-processing):在文献[30]中,三步后处理被设计为执行插值、子像素增强和精简。内插步骤通过执行左右一致性检查来重新解决针对左图像和右图像计算的视差图之间的冲突。子像素增强将邻近点的二次函数拟合以获得增强的深度图。为了平滑视差图而不模糊边缘,在最后的补充步骤应用中值滤波器和双边滤波器。我们只使用插值步骤,因为我们发现其他两个并不总能进一步提高性能。

5.试验评估

      我们在KITTI 2012 [11]和2015 [20]数据集上评估了不同卷积神经网络结构和不同平滑技术的性能。在训练之前,我们将每幅图像归一化为零均值和标准差为1。我们使用均匀分布来初始化我们网络的参数。我们采用Ada Grad算法[8],学习率为。学习率在24k次迭代后减少5倍,然后每8k次迭代进一步减少5倍。我们使用128的batch大小。我们对网络进行了40k次迭代训练,这在NVIDIA Titan-X上需要大约6.5个小时。

5.1.KITTI 2012结果

      KITTI 2012数据集包含194个训练和195个测试图像。为了比较下面描述的不同网络体系结构,我们使用随机选择的160个图像对作为训练集,其余34个图像对用作我们的验证集。

      匹配网络的比较:我们首先展示我们网络的匹配能力,并将其与现有的匹配网络进行比较[29,30]。在这个实验中,我们不采用平滑或后处理,只利用网络的原始输出。继KITTI之后,我们使用视差误差大于固定阈值的像素百分比以及端点(end-point)误差作为度量标准。我们将我们的体系结构称为“Ours(19)”,它由9层3×3卷积组成,感受野为19×19。如表1所示,仅经过0.14秒的计算,我们的9层网络实现了3像素非遮挡8.61%立体误差。对比,文献[29]在20.13秒较长时间后误差为12.99%。他们更快的版本[30]需要0.20秒,但导致性能降低,误差升为15.53%。如表1中所示,我们的网络在所有标准上都大大优于以前设计的卷积神经网络。


表 1 在KITTI 2012验证集上比较不同匹配网络输出的误差

      平滑比较:接下来,我们评估使用不同网络尺寸时平滑和后处理的不同算法。具体而言,我们评估了前一节所述的损失聚合、半全局块匹配和倾斜平面平滑。我们也在我们的网络中试验不同的感受野大小,这对应于改变我们架构的深度。和以前一样,我们使用'Ours(n)'来指代我们的架构,其感受野大小为n×n像素。我们考察n = 9,19,29,37时的情况。对于n=9和n=19,我们使用大小为3×3的核,而对于n=39,核的大小为5×5。为了达到29的感受野,我们使用5层5×5层和4层3×3层。这将层数限制为9。

      如表2所示,具有不同感受野大小的网络导致错误范围从6.61%(n=37)到16.69%(n=37)。对于[30]的较慢和更准确的模型相应误差为12.99%,对于它们的快速模型为15.53%。平滑之后,由网络实现的立体误差的差异不再显着,他们都达到了略低于4%的误差。由于深度图往往非常平滑,我们认为积极的(aggressive)平滑有助于消除噪音的一元潜力(noisy unary potentials)。此外,我们观察到,利用简单的损失聚合来鼓励局部平滑有助于进一步略微改善结果。这是由于这样的技术消除了小的孤立噪声区域。而文献[30]中提出的后处理侧重于遮挡和子像素增强,文献[27]通过拟合倾斜平面为非纹理区域增加了额外的稳健性。两种方法都略微改善了半全局块匹配输出。我们表现最好的模型组合可达到3.64%的3像素立体误差。


表2 不同平滑方法的比较(该表显示了在KITTI 2012验证集上的非遮挡3像素误差)

      与最新的技术进行比较:为了评估测试集的性能,我们在整个训练集上训练了具有19个像素的感受野,即“Ours(19)”。获得的测试集性能如表3所示。由于我们并没有特别关注寻找平滑和单一的完美结合,我们的表现略低于目前的最新水平。


表3 在KITTI 2012测试集上最新立体技术的比较

      定性分析:图3描述了我们的方法进行立体估计的例子。我们观察到,我们的方法受到纹理较少的区域以及重复模式如栅栏的区域的影响。


图3 KITTI 2012测试集:(左)原始图像,(中心)立体估计,(右)立体误差

5.2.KITTI 2015结果

      KITTI 2015数据集包含200个训练和200个测试图像。我们直接处理RGB数据,而不是基于KITTI 2012数据集的灰度图像。为了比较不同的网络体系结构,我们随机选择160个图像对作为训练集,并使用剩余的40个图像对进行验证。

      匹配网络的比较:我们首先展示我们网络的匹配能力,并将其与现有的匹配网络进行比较[29,30]。在这个实验中,我们不采用平滑或后处理,而只是利用网络的原始输出。我们将我们的体系结构称为“Ours(19)”,它由9层5×5卷积组成,感受野为37×37。如表4所示,我们的9层网络在处理时间只有0.34秒后达到了7.23%的3像素立体误差,而文献[29]在22.76秒的更长的处理时间后误差为12.45%。与我们的方法相比,他们更快的版本[30]需要0.21秒,但导致性能变差,误差为14.96%。同样,我们的网络在所有标准上都大大优于以前设计的卷积神经网络。


表4 在KITTI 2015验证集上比较不同匹配网络输出的不同误差度量

      平滑比较:表5展示了将不同的后处理技术应用于不同的网络体系结构。就像处理KITTI 2012图像一样,我们观察到在应用平滑技术之后,网络性能的差异消失了。我们的最佳表现组合在验证集上实现了4.14%的3像素误差。


表5 使用不同CNN输出的平滑方法的比较(该表说明了在KITTI 2015验证集中的非遮挡3像素误差)

      深度和滤波器尺寸的影响:接下来,评估我们设计的CNNs网络的深度和感受野尺寸对匹配性能和运行时间的影响。图4a展示了匹配性能作为网络感受野尺寸的函数。我们观察到,越大的感受野尺寸实现了更好的性能。但是当感受野非常大时,改进是很小的,因为网络开始忽略小物体和深度不连续的细节。我们的发现对于非遮挡和所有像素都是一致的。如图4b所示,运行时间和参数数量高度相关。请注意,具有较大感受野的模型不一定具有更多参数,因为可训练权重的数量还取决于每个卷积层的滤波器数量和通道大小。


图4 评估立体错误(a),运行时间和参数数量(b)

      与最新技术进行比较:为了评估测试集性能,我们选择具有当前平滑技术的最佳模型,其具有37像素的感受野,即“Ours(37)”。获得的测试集性能如表6所示。我们在显着减少时间的情况下获得了同等的测试结果。


表6 在KITTI 2015测试集上的最新立体技术比较

      定性结果:我们提供了图5测试集的结果。同样,我们观察到我们的算法会受到无纹理区域以及具有重复图案的区域的影响。


图5 KITTI 2015测试集:(左)原始图像,(中)立体估计,(右)立体误差

6.结论

      近来,卷积神经网络对立体估计表现出非常好的性能。目前的体系结构依赖于联合网络,它利用级联的后续处理层,在GPU上需要快速处理立体对。相反,在本文中,我们提出了一个匹配网络,它能够在不到一秒的GPU计算内产生非常准确的结果。我们的主要贡献是用计算评分的单个内积层来替换连接层和后续处理层。我们在所有可能的视差上使用交叉熵来训练网络。这使得我们可以获得校准分数,与现有方法相比,这可以带来更好的匹配性能。我们还研究了不同平滑技术对进一步提高性能的影响。未来我们计划将我们的方法用于其他低级视觉任务,例如光流(optical flow)。我们还计划构建适合我们方法的平滑技术。

      Acknowledgments:这项工作得到了ONR-N00014-14-1-0232和NSERC的部分支持。我们要感谢NVIDIA支持我们的研究,NVIDIA通过捐赠GPU和Shenlong Wang来为这些数据提供帮助。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值