【论文简述及翻译】Computing the Stereo Matching Cost with a Convolutional Neural Network(CVPR 2015)

一、论文简述

1. 第一作者:Jure Zbontar

2. 发表年份:2015

3. 发表期刊:CVPR

4. 关键词:CNN、立体匹配、代价聚合、优化、改进

5. 探索动机:相对较少的立体算法使用具有真实值的信息来学习它们模型的参数。

6. 工作目标:是否可以利用深度学习计算匹配代价?

7. 核心思想:使用CNN学习块的相似性衡量,采用二分类的方式有监督地对网络进行训练,训练数据集是相似或者非相似区域。通过CNN获得的匹配计算结果来初始化匹配代价,之后进行与传统方法相同的步骤,代价聚合,优化,视差改进,并且通过增加训练样本数提高了视差精度。

8. 实现方法:

  • MC-CNN训练卷积神经网络来预测两个图像块的匹配程度
  • 使用MC-CNN来计算立体匹配代价
  • 通过基于交叉的成本聚合和半全局匹配来改进匹配代价
  • 通过WTA策略获得初始视差图
  • 进行左右一致性检查以消除遮挡区域中的错误
  • 使用亚像素插值提升分辨率
  • 使用中值滤波和双边滤波来获得最终的视差图

9. 实验结果:在KITTI立体数据取得了2.61%的错误率,并且是截止2014年8月在这个数据集里性能最好的方法。但是预测单个图像对需要100秒,计算匹配代价非常耗时,还不适用于机器人导航等实时应用。

10.论文下载:

https://openaccess.thecvf.com/content_cvpr_2015/papers/Zbontar_Computing_the_Stereo_2015_CVPR_paper.pdf

二、论文翻译

Computing the Stereo Matching Cost with a Convolutional Neural Network

摘要

我们提出一种从校正后的图像对提取深度信息的方法。我们通过训练卷积神经网络来预测两个图像块的匹配程度,并使用它来计算立体匹配代价,通过基于交叉的代价聚合和半全局匹配改进代价,接着是一个左右一致性检查来消除在遮挡区域的误差。我们的立体方法在KITTI立体数据取得了2.61%的错误率,并且是目前为止(2014年8月)在这个数据集里性能最好的方法。

1. 介绍

考虑以下问题:给定两张在不同水平位置的相机拍摄的图片,目标是计算左图的每个像素点的视差d。视差指的是在左右图像中同一个物体的水平位置的变化——在左图位置(x,y)的物体会出现在右图位置 (x−d,y)。知道了物体的视差d,我们就可以计算出它的深度z(也就是物体到相机的距离),通过以下的关系:

​其中f是相机的焦距长度,B是两个相机光心的距离。

上述的问题是立体重建的子问题,而立体重建的目标是从一个或多个图像中提取3D形状。根据Scharstein和Szeliski的分类标准,一个典型的立体算法包括四个步骤:(1)匹配代价计算,(2)代价聚合,(3)优化,(4)视差改进。根据Hirschmuller和Scharstein,我们参考步骤(1)和步骤(2)作为计算匹配代价,步骤(3)和步骤(4)作为立体方法。

我们提出在多对小图像块中训练一个卷积神经网络,图像块的真实视差是已知的(例如通过LIDAR获取)。网络的输出用来初始化图像块对之间的匹配代价。使用基于交叉的代价聚合方法,在图像强度相似的邻近像素点之间融合形成匹配代价。通过半全局匹配加强平滑约束,左右一致性检查用来检测和消除在遮挡区域的误差。本文的两个贡献是:

  • 我们说明了如何用卷积神经网络计算立体匹配代价。
  • 我们在KITTI stereo dataset取得了2.61%的误差率,相比先前最好的结果提高了2.83%。

2.  相关工作

在首次使用大型立体数据集之前,相对较少的立体算法使用具有真实值的信息来学习它们模型的参数;本节我们回顾了这些方法。立体算法的总体概述参考[14]。

Kong和Tao使用距离平方和来计算初始的匹配代价。他们训练了一个模型来预测三个分类的概率分布:初始视差正确的,由于前景物体稠密导致初始视差不正确的,以及由于其他原因导致初始视差不正确的。预测概率用于调整初始匹配代价。后来Kong和Tao通过计算不同窗口大小和中心的归一化后的互相关获得预测值进行融合,来扩展他们的工作。Peris等人用AD-Census方法初始化匹配代价,并使用多类线性判别式分析来学习从计算好的匹配代价到最终视差的映射。

真实的数据也曾用来学习图像模型的参数。Zhang和Seitz使用交替优化算法来估计马尔可夫随机场超参数的优化值。Scharstein和PalLi构建了一个包含30个立体对的新数据集,并用它来学习条件随机场的参数。Li和Huttenlocher提供了使用非参数代价函数的条件随机场模型并使用一个结构化的支持向量机来学习模型参数。

最近的工作集中在估计计算出的匹配代价的置信度。Haeusler等人使用随机森林分类器来组合几个置信度测量方法。同样,Spyropoulo等人使用了一个随机森林分类器来预测匹配代价的置信度并使用预测值作为在马尔科夫随机场的软约束来减少立体方法的误差。

​图1 输入是来自左右相机的一对图像。两个输入图像的不同大部分来自于物体的水平位置。注意到靠近相机的物体相对于远离相机的物体视差更大。输出是如右图所示的稠密视差图,用暖色代表较大的视差值(和较小的深度)。

3. 计算匹配代价

一个典型的立体算法是从计算每个位置点p所有要考虑的视差d的匹配代价C(p,d)开始的。一个简单的例子是绝对差值和(sum of absolute differences,SAD):

其中IL(p)和IR(p)是左右图像在位置点p的图像强度且Np是在以p为中心的固定矩形窗口内的位置集合。我们使用黑体小写字母(p,q, r) 来表示实数对。附加的小写d有以下含义:如果p=(x,y)则 pd=(x-d,y)。

公式(2)可以解释为用右图中一个以位置pd为中心的图像块匹配左图中一个以位置p为中心的的图像块来测量代价的方法。由于好坏匹配的例子可以从公开可用的数据集中获取,例如KITTI和Middlebury,我们可以尝试通过有监督学习的方法去解决匹配问题。受卷积神经网络成功应用于视觉问题的启发,我们使用它们来评估两个小图像块的匹配程度。

3.1. 建立数据集

一个训练的样本包含两部分,一个来自左图和一个来自右图:

其中PL9×9(p)表示一个9×9的左图的图像块,中心在p=(x,y)。对于每一个已知的真实视差值d的位置,我们提取一个负样本和一个正样本。负样本的获取是通过设置右图的图像块中心q到

其中Oneg是一个影响匹配的偏移量,从集合{-Nhi,...,-Nlo,Nlo,...,Nhi}中随机选取。类似地,一个正样本的获得是通过设置

其中Opos是从集合{−Phi,...,Phi}中随机选择的。Opos没有把它设置为零的原因与随后使用的立体方法有关。特别地,我们发现当网络把低匹配代价指派给好匹配和相邻匹配,基于交叉的代价聚合表现地更好。Nlo, Nhi, Phi和小图像块的大小n是此方法的超参数。

3.2. 网络结构

我们使用的网络结构如图2所描述。该网络包含八层,L1到L8。第一层是卷积,同时其他所有层是全连接层。网络的输入是两个9×9的灰度图像块。第一个卷积层包含了32个大小为5×5×1的卷积核。层L2和L3每个都有200个神经元的全连接。在L3之后两个200维的向量连接成一个400维的向量并且传递到L4到L7这四个全连接层,每层有300个神经元。最后一层L8将输出投射到两个实数,实数输入softmax函数,在两个类上产生一个分布(好匹配和坏匹配)。对于左右图像块,网络中L1、L2和L3的权重是一样的。除L8外,每一层之后都有校正过的线性单元。我们没有在结构中使用池化。网络包含接近六百万个参数。该结构适用于灰度图像,但通过在L1学习5×5×3而不是5×5×1滤波器,也可以很容易扩展网络来处理RGB图像。不同的数据集网络最优超参数(例如层数,每层的神经元数,输入图像块的大小)有所不同。我们选择这种结构是因为它在KITTI立体数据集中表现很好。

图 2. 我们的卷积神经网络的结构。

3.3. 匹配代价

匹配代价C CNN(p,d)由网络输出直接计算:

其中fneg(<PL,PR>)是当运行输入图像块PL和PR对于负类的网络输出。

自然地,我们必须对每个图像位置p和考虑中的每个视差d进行前向传递。以下三个实现细节确保运行时长的可管理性:

1. 每一个位置p只需要计算层L1、L2和L3的输出一次,并且不需要重新计算每个视差d。

2.通过将全分辨率图像而不是9×9图像块输入网络,在单个前向通道中L3的输出可以来计算所有位置。为了实现这一点,我们设置层L2和L3卷积——层L2使用大小为5×5×32滤波器,层L3使用大小为1×1×200滤波器,都输出了200个特征图。

3.类似地,L4到L8可以用大小为1×1的卷积滤波器来代替,为了在单个前向传递中计算所有位置的输出。遗憾的是,我们仍然需要对每个视差进行前向传递。

4. 立体方法

为了有意义地评估匹配代价,我们需要使用立体方法进行处理。我们使用的立体方法受到Mei等人的启发。

4.1. 基于交叉的代价聚合

通过在固定窗口上平均匹配代价来融合邻近像素的信息。这种方法在深度不连续的情况下会失败,因为违背了在窗口内深度不变的假设。我们可能倾向于一种自适应地选择每个像素的邻域的方法,以便从仅具有相似视差的像素中收集支持。在基于交叉的代价聚合中,我们围绕每个位置相似的像素建立一个局部邻域,并且具有相似的图像强度值。

基于交叉的代价聚合首先在每个位置构建垂直的正交结构。只要满足以下两个条件,位置p的左臂pl保持左延伸:

  • |I(p)−I(pl)|<τ。位置p和pl的图像强度的绝对差值小于τ。
  • ||p−pl||<η。位置p和pl之间的水平距离(在顶和底臂的情况下,垂直距离)小于η。

右、底、顶臂也有类似的构造。一旦四臂已知,我们可以定义支持区域U(p)为位置 p的垂直臂上的位置q的所有水平臂的集合。(见图3)。Zhang等人建议聚合应当考虑在一对立体图像的支持区域。令UL和UR表示左右图像的支持区域。我们定义结合的支持区域Ud为

匹配代价在结合的支持区域的平均是:

其中i是迭代数字。我们重复该平均过程四次;基于交叉代价聚合是

图3.位置p的支持区域是p垂直臂上位置q所有水平臂的集合。

4.2. 半全局匹配

​    我们通过对视差图添加平滑约束来改进匹配代价。根据Hirschmuller[4],我们定义了一个视差图D的能量函数E(D):

其中1{.}表示指标函数。第一个式子用来惩罚具有高匹配代价的视差D(p)。第二个式子在相邻像素视差为1时添加一个惩罚P1。在相邻像素视差大于1时则第三个式子添加一个更大的惩罚P2。与二维的最小化能量函数E(D)相比,我们采用动态规划进行单方向最小化。这种解决方案引入了不必要的条纹效应,因此在我们不打算优化的方向上不需要对视差图进行平滑。在半全局匹配中,我们将多个方向的能量E(D)最小化,并且取平均获得最终结果。虽然Hirschmuller建议选择16个方向,但我们只沿着两个水平方向和两个垂直方向进行优化:添加对角线方向并不能提高我们系统的精度。

为了最小化r方向的能量函数E(D),我们用如下的递推关系定义了一个匹配代Cr(p,d):

包含第二项是防止Cr(p,d)的值变太大,并且不影响最优视差图。根据图像梯度设置参数P1和P2,使视差中的跳跃部分和图像中的边缘是一致的。令D1=∣IL(p)−IL(p−r)∣,D2=∣IR(pd)−IR(pd−r)∣。我们根据以下规则设定P1和P2:

Π1、Π2和τSO是超参数。在垂直方向最小化时P1值减半。

在半全局匹配后我们重复了基于交叉的代价聚合,如前一节所述。

4.3. 计算视差图

​视差图D通过胜者为王策略(Winner-Take-All,WTA)计算,即通过找出视差d来最小化C(p,d)

4.3.1. 插值

​   DL表示将左图作为参考图像得到的视差图——到目前为止我们也是这样做的,即让DL(p)=D(p),然后让DR表示将右图作为参考图像得到的视差图。DL和DR在遮挡区域都有错误。我们通过使用左右一致性检查来尝试检测这些错误。我们将每个位置p标记为以下其中之一:

对于标记为遮挡的位置,我们想要从背景中获得新的视差值。我们通过向左移动直到我们找到一个标记为正确的位置并且使用该位置的视差值。对于标记为未匹配的位置,我们在十六个不同的方向上寻找最接近的正确像素,并使用他们视差的中位数进行插值。我们将插值视差图称作DINT。

4.3.2. 亚像素增强

​    亚像素增强提供一种简单方法来提升立体算法的分辨率。我们通过相邻代价拟合二次曲线,得到一个新的视差图像:

其中d=D INT(p),C-=C SGM (p,d-1),C= C SGM(p,d-1),C+=C SGM(p,d+1)

4.3.3. 改进

由于有卷积的边界效应,视差图DSE比原始图像小。我们通过复制边界像素的视差来扩大视差图,从而匹配输入的大小。我们采用5×5中值滤波器和双边滤波器:

其中g(x)是均值为零、标准差为σ的 正 态 分 布 的 概 率 密 度 函 数,W(p)是归一化常数:

τBF和σ是超参数。DBF是我们立体方法的最终输出。

5. 实验结果

由于需要大规模训练集去学习神经网络中的权重,我们选择在KITTI立体数据集上评估我们的方法。

5.1. KTTI立体数据集

​KITTI立体数据集是一组灰度图像对,由安装在车顶上的相距约54厘米的两个摄像头拍摄。这些图像是在白天,晴天和多云天气下,在Karlsruhe市及其周围行驶时拍摄的。数据集包括194个训练和195个测试的分辨率为1240×376的图像对。每个图像对都经过校正,使得一个物体出现在两个图像中的同一水平位置上。一个旋转的激光扫描仪,安装在左摄像头的后面,提供真实的深度。保留测试集的真实视差,并提供一个在线排行榜,以便研究人员在测试集上评估他们的方法。每三天只允许提交一次。KITTI立体数据集的目标是预测左图像上每个像素的视差。误差以实际视差和预测视差相差超过三个像素的像素百分比来衡量。将视差转换为深度,例如,距离相机2米的物体的误差公差为±3厘米,距离相机10米的目标的误差公差为±80厘米。

5.2. 学习中的细节

​    利用随机梯度下降训练网络,使交叉熵损失函数最小化。批处理大小设置为128。我们训练了16轮,学习率最初设置为0.01,并在12次和15次迭代中减少至十分之一。在进行学习之前,我们会打乱训练集。从194个训练图像对中,我们提取了4500万样本。一半属于正类,一半属于负类。我们对每幅图像进行预处理,减去平均值,再除以其像素强度值的标准差。立体方法在CUDA中实现,而神经网络的训练在Torch7环境中完成。立体方法的超参数如下:

5.3. 结果

​    在KITTI立体数据集上我们的立体方法实现了2.61%的错误率率,目前在线上排行榜排名第一。表1比较了该数据集上错误率表现得最好的几个算法。

表1 2014年11月KITTI立体数据集排行榜。

我们选择了一组示例,以及我们方法的预测结果,展示在图5。

图5:左侧展示输入的左图,右侧展示我们立体算法的输出。从上到下,示例难度逐渐增加。较难的示例中有如反射面、遮挡物以及视差中跳跃区域等困难,例如栅栏和灌木丛。底部选用较难的示例来凸显我们方法中的缺陷,并说明在现实图像中立体匹配的固有困难。

5.4. 运行时间

​    我们使用Nvidia Geforce GTX Titan GPU的计算机测量设置的运行时间。训练需要5个小时。预测单个图像对需要100秒。从表2可以明显看出,预测过程中的大部分时间都花在卷积神经网络的前向传递上。

表2 预测包含的每个部分所需要的时间

5.5. 训练集大小

​    我们想要知道是否更多的数据集可以使得立体方法表现更好。为了回答这个问题,我们在改变训练集大小的同时,在KITTI立体数据集的许多实例上训练我们的卷积神经网络。实验结果如图4所示。我们观察到训练集大小和测试集上的误差几乎呈线性关系。这些结果说明我们的方法会随着将来更大的数据集的出现而改进。

图4.训练集上的误差和训练集中的立体对数量的函数.

6. 结论

我们在KITTI立体数据集上的研究结果似乎表明,卷积神经网络是一种很好的计算立体匹配代价的方法。对于更大的数据集,错误率将会进一步降低。在立体方法中使用有监督的学习本身也是有益的。我们的方法还不适用于机器人导航等实时应用。未来的工作将会集中在提高网络的运行时性能上。

三.论文解读

【理论恒叨】【立体匹配系列】经典AD-Census: (2)十字交叉域代价聚合(Cross-based Cost Aggregation)https://blog.csdn.net/rs_lys/article/details/107804210半全局匹配SGMhttps://blog.csdn.net/Yong_Qi2015/article/details/102634143立体匹配---左右一致性检测/遮挡区填充https://blog.csdn.net/u010368556/article/details/75371035双目视觉中时差求精(Subpixel enhancement)https://blog.csdn.net/zhicheng_angle/article/details/102521280非线性滤波:中值滤波 双边滤波https://www.it610.com/article/1274398965994897408.htm

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华科附小第一名

您的支持对我的前行很重要!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值