论文阅读笔记《Cascade Residual Learning A Two-stage Convolutional Neural Network for Stereo Matching》

摘要

  利用卷积神经网络的最新进展,从一对立体图像中匹配稠密的对应关系可转化为一个学习问题,其表现要优于其他的传统方法。然而,在一些病态区域生成高质量的视差图时依旧存在很多问题。为了解决这个问题,我们提出了一种新型的两级CNN结构。第一级是在DispNet网络的基础上增加额外的上卷积模块(up-convolution modules),以获得保留更多细节的视差图。第二级是对第一级初始化的视差图进行优化,它与第一级配合生成不同尺度下的残差信号。将两级网络的输出加起来得到最终的视差图。与直接在第二级网络中学习视差相反,我们展示了学习残差可以带来更好的优化效果。此外,它也有利于整个串联网络的训练。

1.介绍

  为了解决病态区域的问题,我们提出了串联残差学习网络(CRL),由两级沙漏型卷积神经网络构成。在第一级网络中,一个简单却不寻常的上卷积模块用来生成带有细节纹理的视差图,为第二级网络的残差学习提供了一个很好的起始点。在第二级中,用多尺度下的残差信息对视差进行优化。与ResNet机制相似,学习残差比直接学习视差要更容易。然而,在一个接一个串联的残差结构中不能直接对残差学习进行监督。与之前的方法不同,我们嵌入了多尺度的残差学习机制,使得残差可以由初始视差值和真实视差值之间的误差来监督,这可获得更好的视差优化效果。
  CRL网络是端到端训练的,利用堆叠的非线性层整合了立体匹配,代价聚合,视差优化再到视差精细化整个流程。双级CRL网络改进了整个结果并在立体匹配结果中实现了当前最优。

2.相关工作

  基于CNN来估计视差值的方法可以分为以下三种:
  匹配代价学习,与手工设计匹配代价计算方法不同,是利用CNNs来测算两个图块之间的相似性。Han等人提出了名为MatchNet的Siamese网络,从一对图块中提取特征,然后利用决策模块来计算相似性。同时,Zagoruyko和Zbontar等人研究了一系列用于成对匹配的二分类网络架构,并将其应用到视差估计中。与单独的在图块之间进行二分类的方案相反,Luo等人提出学习所有视差值的概率分布。这一策略采用了多种多样的训练样本集,并没有考虑训练样本之间不平衡性。即使数据驱动的相似性度量方法比传统的手动设计的方法要好很多,但要得到一个好的结果,一些后处理的手段还是需要的。
  规则性学习,基于对视差图的观察,发现视差图通常都是分段平滑的,一些现存的网络将平滑约束增加到学习过程中。Menze等人利用纹理和边缘信息将自适应平滑约束应用于稠密视差估计。通过发现局部的不连续的带有标签的像素,Gidaris等人提出了检测,代替,改善的网络结构。然而,用新的视差值来代替不可靠的视差值非常消耗计算量。视差估计也可以靠与中级或高级视觉任务相结合来正规化。例如,视差可以在解决语义分割问题的同时进行估计。Guney和Geiger提出了Displets,利用物体识别和语义分割来寻找立体图像的相关性。
  端到端的视差学习,通过认真设计和监督网络,可以直接通过一对图像端到端的学习得到很好的视差图。Mayer等人提出了DispNet,使用合成的立体图像来训练一个端到端的卷积神经网络。与此同时,与Dispnet相似的CNN架构也应用于光流估计,如FlowNet和他的下一代FlowNet 2.0。一个很优秀的方法GC-Net使用3D卷积来结合上下文信息用于视差学习。对于单目深度估计,端到端的半监督或无监督方法也有应用,将估计出的视差值与立体图像结合起来 ,并且只需要有限的带有真实视差的训练数据。
  我们网络属于第三种。尽管基于CNN方法的表现优越,但在病态区域生成精确视差值仍有很大的挑战性。与现有的方法不同,我们提出一种串联的残差学习机制去解决病态区域的问题。特别的,我们采用两级的CNN网络,第一级生成高质量的初始视差图。之后,第二级利用多尺度的残差信号来进一步精细化视差。我们的实验显示,本文提出的串联残差学习网络在能接受的运行时间条件下生成了最优的视差估计图。

3.串联残差学习

  这一节详细介绍串联残差学习:

3.1 两级视差计算

  一般来说,在低级别的视觉任务中,如去噪和去模糊可以用来提高后处理迭代优化效果,视差和光流估计也不例外。最近,Ilg等人提出的FlowNet2.0,使用堆叠CNNs用于光流精细化,并获得合理的结果。先前的工作启发我们使用双级CNN用于视差估计。
  类似与DispNetC的方案(“C”表示网络有相关层(correlation layer)),第一级网络是带有跳跃链接的沙漏型结构。然而,DispNetC输出的视差图是输入图像分辨率的一半。不同的是,我们的网络包含一个额外的反卷积模块用于方法视差图,使得视差估计与输入图像的尺寸相同。我们称第一级网络为DispFulNet(“Ful”表示全分辨率)。
  在我们的网络中两级网络串联起来,特别的,第一个网络输入一对立体图像ILIR并输出初始视差图d1(左图的)。根据视差对右图进行warp处理,获得合成的左图,如下:

I~L(x,y)=IR(x+d1(x,y),y)

然后将IL,IR,d1,I~L(x,y)和误差值eL=|ILI~L(x,y)|级联起来作为第二级网络的输入。warp操作对于双线性插值是可微的,因此我们的网络能够端到端训练的。

3.2 多尺度残差学习

  对于第二级的精细化网络,我们采用了He等人的残差学习机制。特别地,由第一级网络获得初始视差值d1,第二级网络输出相应的残差信号r2,然后新的视差d2=d1+r2。通过这个方法,我们减轻了第二级网络的负担,使他只关注于学习非线性残差。在极限情况下,第一级网络输出一个最优的视差图,第二级网络只需要输出零残差来保持最优。
  网络的第二级也采用了沙漏型结构,生成多尺度下的残差信号。我们称第二级网络为DispResNet(“Res”表示残差)。在DispResNet的拓展部分,生成了多尺度下的残差。表示为{r2(s)}s=0S,其中0表示全分辨率的尺度。对视差d1(s)下采样与残差r2(s)求和得到s尺度下的新视差:

d2(s)=d1(s)+r2(s),0sS

为了训练DispResNet,我们在(S+1)个尺度上监督视差估计值{d2(s)}s=0S。因此,我们网络监督残差信号,可以得到更加优化的视差值。
  事实上,直接将FlowNet2.0应用于视差估计是DispNetS网络——一个不带有相关层的DispNetC的变种,“S”表示简单——直接学习视差值。尽管如此,我们在第四章的比较显示,结合残差学习可以比直接学习视差带来更好的结果。此外,残差学习也有利于整个网络的细调,因为它减轻了过拟合的问题,而使用DispNetS在整体优化后使结果更差。

3.3 网络结构

论文阅读笔记《Cascade Residual Learning A Two-stage Convolutional Neural Network for Stereo Matching》
图1.CRL的网络结构。第一级是DispFulNet,第二级是多尺度残差学习的DispResNet。“2s”表示d1缩小2s倍的下采样层
  我们的CRL结构如图1所示,其中d1=d1(0),最终视差输出是d2(0)。为了获得下采样的视差图{d1(s)}s=0S,我们采用了一个可微分的双线性下采样层,与空间转换网络(spatial transformer networks)中的采样模块相同。
论文阅读笔记《Cascade Residual Learning A Two-stage Convolutional Neural Network for Stereo Matching》
表1.DispFulNet的详细结构,红色的部分是DispFulNet与DispNetC的不同点,iconv0是DispFulNet的输出d1,该表转自:https://blog.csdn.net/qq_20909377/article/details/79118131
  在第一级DispFulNet中,扩展DispNetC网络的半分辨率的视差估计。结构如表1所示。整体上与DispNetC的思路相同。不同的是,我们在DispNetC最后的两个卷积层之后增加额外的上卷积层,上卷积层的输出再与左图级联起来。将这个三维数组输入到一个卷积层中(输出通道数为1),得到了DispFulNet的输出——一个全分辨率的视差图。这个全分辨率的视差图与其他六个不同尺度下的中间视差图,由真实视差图采用l1损失函数监督。
论文阅读笔记《Cascade Residual Learning A Two-stage Convolutional Neural Network for Stereo Matching》
表2. DispResNet的详细结构。带有pr_s1前缀的层是对第一级网络的预测结果的下采样层,带有pr_s2前缀的层是按元素相加的层,得到第二级网络的预测结果。K表示卷积核尺寸,S表示步长,Channels是输入和输出通道数,I和O是输入和输出相对于输入的下采样因子。形如pr_s1+res_1代表按元素相加,其他的+表示级联(特征图平行堆叠)勘误:阅读代码发现在iconv4层的输入中,并非是输入的pr_s2_16,其尺寸是其他输入的1/2,实际上输入的是pr_s2_16经过反卷积得到的上采样层,其他层中也有相同的操作
  第二级的详细说明如表2所示。在一个特定的尺度上,如1/4,双线行下采样层pr_s1_4是由DispFulNet的视差预测输出pr_s1压缩4倍得到。然后下采样的视差以元素相加的方式(矩阵中的每个位置对应相加)加上学习到的残差res_4得到1/4尺度下的视差值预测pr_s2_4。在每个尺度上我们都计算了视差估计和真实视差之间的l1损失函数来监督训练。
  关于我们的设计可能会有一个问题:如果两级串联结构表现很好,为什么不多串联几级?首先,增加更多层级会导致更高的计算成本和内存消耗,这在很多应用场合是不实际的。第二,在这篇论文中,我们关注于双级网络的研究,第一级生成全分辨率的初始化视差,第二级用残差学习尽力优化初始视差值。两级网络各司其职相互配合得到满意的结果。根据第4.3节,我们的双级网络得到了高质量的视差图,消耗时间也能够接受,在KITTI2015数据集上使用GTX 1080GPU 获得一个视差图需要0.47秒。

4. 实验

  这一章介绍实验的设置和结果。为了评估我们的设计效果,我们用简单的DispNetC和DispNetS来替代我们双级网络中某一部分用于比较。我们也将我们的方案与其他优秀的方法进行比较。

4.1 实验设置

数据集:采用了三个公开的数据集,用于训练和测试:FlyingThings3D、Middlebury2014和KITTI2015。
训练:我们用Caffe架构来实现我们的CRL网络。通常上讲,我们先训练DispFulNet,然后通过固定他的权重,DispResNet也完成训练。随后,我们对整个网络进行微调。根据测试的目标数据集,来制定不同的训练方案。为了方便描述,我们用1F-1K表示第一级网络用Flythings3D数据集进行训练,再用KITTI2015数据集精细化。三个数据集的训练方案如表2所示。我们在训练第一级或第二级网络时采用的批量尺寸为4,优于GPU内存的限制,在精细化时批量尺寸为2。在精细化过程中,我们训练网络迭代20万次,然而,在目标数据集是KITTI2015时,为了避免过拟合,我们迭代次数为10万次。
测试:我们在上述数据集上测试我们的网络,采用两个广泛应用的评价指标:

  1. 终点误差(EPE):估计视差值和真实视差值的平均欧式距离
  2. 三像素误差(3PE):计算终点误差超过三的像素的比例

4.2 结构比较

论文阅读笔记《Cascade Residual Learning A Two-stage Convolutional Neural Network for Stereo Matching》
表3.CRL结构(DispFulNet+DispResNet)和其他相似结构的比较。每个单元格中分别显示了EPE和3PE
  网络的客观表现如表3所示,我们观察到以下结论:

  1. 在第一级网络中我们的DispFulNet比DispNetC得到更高的准确率
  2. 即使增加了第二级网络改善了结果,DispResNet也比DispNetS带来更多的增益
  3. 当第二级采用DispNetS结构,整体精细化后表现反而恶化了。相反,当第二级采用DispResNet结构时,整体优化能够改善大多数情况下的效果。这是因为学习残差在训练数据时更不容易过拟合,使得网络对于整体优化更加稳定。

4.3 与其他方法的比较

论文阅读笔记《Cascade Residual Learning A Two-stage Convolutional Neural Network for Stereo Matching》
表4.CRL和其他方法在FlyingThings3D数据集上的客观表现
原文链接:https://arxiv.org/pdf/1708.09204.pdf
代码链接:https://github.com/Artifineuro/crl