Group-wise Correlation Stereo Network 论文学习

Abstract

立体匹配估计一对矫正过的图像之间的视差(disparity),这对深度感知、自动驾驶和其它相关任务非常重要。之前的学术工作主要是算出代价量(cost volume),通过交叉相关或者是在所有的视差层级上进行左右特征的 concat,然后用一个 2D或3D的卷积网络来回归出视差图。这篇论文中,我们提出要通过分组相关(group-wise correlation)来算出代价量。沿着通道维度将左、右特征划分为若干组,然后在每组中计算相关图,进而得到多个匹配代价 proposals,然后打包到代价量中。分组相关为特征的相似度的计算提供了有效的表示,而不会像完全相关(full correlation)一样造成过多的信息丢失。和之前的方法相比,它在降低参数个数的同时也可以保持原先的性能。这篇论文也改进了 3D stacked Hourglass 网络,提升性能,降低推理计算成本。我们在 Scene Flow, KITTI2012 和 KITTI2015 数据集上进行了实验,证明该方法的性能。

代码:https://github.com/xy-guo/GwcNet

1. Introduction

准确的深度感知对许多计算机任务非常关键,如自动驾驶、机器人控制、景深图像合成等。立体匹配属于被动的深度感知技术,其通过匹配由两个相机捕获的矫正过的图像对的像素来估计深度。一个像素点的视差dd可以通过Fl/dFl/d转换为深度值,FF表示相机的焦距,ll是两个相机中心点的距离。因此,深度的精度随着视差预测的精度而提升。

传统的立体方法通常由以下四个步骤组成,匹配代价计算、代价聚合、视差优化、和后处理。匹配代价计算为左图像块和可能对应的右图像块提供初始相似性度量,这一步对立体匹配很关键。一些常用的匹配代价包括绝对差值(SAD)、平方差之和(SSD)、归一化互相关(NCC)。代价聚合和优化步骤则结合了上下文匹配代价、正则化项来得到更强大的视差预测。

基于学习的方法则探索了不同的特征表示和聚合算法,从而匹配代价。DispNetC 从左图特征、右图特征计算出一个相关量,并利用一个 CNN 直接回归出视差图。GC-Net 和 PSMNet 构建基于 concatenation 的特征量,加入了一个 3D CNN来聚合上下文的特征。还有一些方法试图汇总来自多个手工特征的匹配代价提案的证据。但是这些方法都有若干个缺陷。完全相关提供了一个有效的方法来计算特征相似性,但是它丢失了太多的信息,因为它在每个视差层级上只产生单个通道的相关图。Concatenation 量在随后的聚合网络中需要更多的参数,从头开始学习相似度量函数。

这篇论文中,我们提出了一个简单但是高效的操作,称为组相关,解决上述的缺陷。提取出多层级的一元特征,将它们 concat 起来,以形成左、右图像对的高维特征表示 fl,frf_l, f_r。然后,沿着通道维度将这些特征划分为多个组,在所有的视差层级上,将第ii个左特征组和第ii个右特征组互相关,得到分组相关图。最后,将所有的相关图打包为一个 4D 代价量。一元特征可以看作为结构化的向量组,所以特定组的相关图可以看作为匹配代价提议。这样,我们就可以利用传统的互相关匹配代价的方法,在接下来的3D聚合网络中提供更优的相似度测量方法。多重匹配代价提议也可避免类似于完全相关中的信息丢失。

我们改进了 PSMNet 中的 3D stacked hourglass 聚合网络,以进一步提升模型表现,降低推理计算成本。在每个hourglass模块中,我们在 shortcut connection 中使用 1×1×11\times 1\times 1的3D卷积,而不会增加计算成本。

这篇论文的主要贡献如下:

  • 提出了分组相关性,来构建代价量,以提供更好的相似性度量;
  • 改进了 stacked 3D hourglass 网络,提升表现,却没有增加推理时间;
  • 该方法在 Scene Flow, KITTI2012, KITTI2015数据集上,和之前的方法相比取得了更好的表现;
  • 实验表明,当我们限制 3D 聚合网络的计算成本时,我们提出的网络在性能上的下降要比 PSMNet 小很多,说明分组相关在实时立体网络中很有应用价值;

2. Related Work

2.1 传统方法

通常,传统的立体匹配包括下面四个步骤的全部或部分:匹配代价计算、代价聚合、视差优化、后处理步骤。在第一步,对于所有可能的视差,计算所有像素的匹配代价。常用的匹配代价包括绝对差异(SAD)、平方差之和(SSD)、归一化互相关(NCC)等。Local 方法探索了将匹配代价和相邻像素聚合的不同策略,通常利用赢者通吃(WTA)的策略来选择具有最低匹配代价的视差。相比之下,global 方法则最小化一个目标函数,得到最优的视差图,它通常要考虑匹配代价和平滑先验,例如置信传播和图切割。半 global 匹配方法(SGM)通过动态规划来近似全局优化。Local 和 global 方法可以结合起来用,达到更好的性能和鲁棒性。

2.2 Learning based methods

除了人工选择的方法,研究人员也提出了许多学到的匹配代价和代价聚合算法。Zbontar和 Lecun首先提出了用神经网络来计算匹配代价。然后使用传统的基于交叉的代价聚合和半 global 匹配来处理预测的匹配代价以预测视差图。通过关联一元特征,加速了匹配代价计算。Batsos等建议CBMV结合来自多个基本匹配代价的证据。Schonberger等提出利用随机森林分类器对扫描线匹配代价候选进行分类。

在DispNetC之后,有很多工作直接从相关代价量中回归视差图。给定左右特征图fl,frf_l,f_r,计算每个视差层级dd的相关代价量:

Ccorr(d,x,y)=1Ncfl(x,y),fr(xd,y)C_{corr}(d,x,y)=\frac{1}{N_c} \langle f_l(x,y), f_r(x-d,y) \rangle

其中,,\langle \cdot, \cdot \rangle 是两个特征向量的内积,NcN_c表示通道的个数。CRL和iResNet延续了DispNetC的思想,用堆叠的子网络来进一步提升性能。另一些工作则整合了额外的信息,如边缘特征和语义特征。

最近的一些工作利用基于 concat 的特征量和3D聚合网络,实现更优的上下文聚合。Kendall等提出了GC-Net,首先利用3D卷积网络来聚合上下文信息得到代价量。它不是直接给出代价量,而是将左、右特征图fl,frf_l, f_r concat,形成一个4D特征量:

Cconcat(d,x,y,)=Concat{fl(x,y),fr(xd,y)}C_{concat}(d,x,y,\cdot) = Concat\{f_l(x,y), f_r(x-d,y)\}

从相邻的像素和视差,用3D卷积网络聚合上下文特征,预测一个视差概率量。延续GC-Net,Chang等人提出了金字塔立体匹配网络(PSMNet),它有一个金字塔池化模块和堆叠的3D沙漏网络,从而优化成本量。Yu等人提出了产生和选择多重成本聚合提议。Zhong等提出了一个自适应的递归立体模型,处理开放世界的视频数据。

LRCR利用左右连续性检查和递归模型,聚合成本量,改进那些原先不可靠的视差预测。

3. Group-wise Correlation Network

我们提出了组相关立体网络(GwcNet),用组相关代价量和改进的3D堆叠沙漏网络扩展了PSMNet。在PSMNet中,concatenated 特征的匹配代价必须通过3D聚合网络从头开始学习,通常需要更多的参数和计算量。而完全相关通过点积提供了一个测量特征相似性的有效方式,但是它会造成很多的信息丢失。我们提出的组相关克服了上述两个缺点,为相似性测量提供更优的特征。

3.1 网络结构

Group-wise Correlation Stereo Network 论文学习
组相关网络的结构如图1所示。网络由四部分组成,一元特征提取、代价量构建、3D聚合、视差预测。代价量、堆叠沙漏、输出模块的详细结构在表1中有列举。

对于特征提取,我们采用 PSMNet 中类似于 ResNet 的网络,具有半扩张设置,没有空间金字塔池模块。我们将 conv2,conv3,conv4conv2, conv3,conv4的最后特征图 concat 起来,形成了320通道的一元特征图。

代价量由两部分构成,一个 concatenation 量和一个组相关量。Concatenation 量和PSMNet中的一样,但是通道数要少些,在它之前我们用两个卷积将一元特征压缩为 12 个通道。组相关量在 3.2 节中有描述。然后将这两个量 concatenate 起来,作为3D聚合网络的输入。

用 3D聚合网络将相邻视差和像素点得到的特征聚合起来,预测优化后的代价量。它由一个预沙漏模块和三个堆叠的3D沙漏网络构成,正则化特征量。如图2所示,预沙漏模块由4个3D卷积,具有BN和ReLU。然后是三个堆叠的3D沙漏网络,通过encoder-decoder 结构来细化低质量模糊度和遮挡部分。和其它论文的 3D聚合网络相比,我们提出了一些改进的地方,提升了性能、增加了推理速度,具体细节在3.3节有描述。

Group-wise Correlation Stereo Network 论文学习

预沙漏模块和三个堆叠3D沙漏网络和输出模块相连。每一个输出模块都预测一个视差图。输出模块的结构和损失函数将在3.4节有描述。

Group-wise Correlation Stereo Network 论文学习

3.4 组相关量

左边的一元特征和右边的一元特征用fl,frf_l,f_r表示,有NcN_c个通道,是原始输入图像大小的1/41/4。在之前的论文中,左、右特征在不同的视差层级上要么是相关的,要么是 concatenated的,产生代价量。但是,相关量和 concatenation 量都有缺陷。完全相关提供了一个测量特征相似性的有效方法,但是它丢失了太多的信息,因为它在每个视差层级仅输出单通道的相关图。Concatenation 量不包含特征相似性的信息,所以在接下来的聚合网络中就需要更多的参数,从头开始学习相似性度量。为了解决上述问题,我们提出了组相关,结合了 concatenation 量和相关量的优势。

组相关的基本思想就是将特征分割为若干个组,然后按组来计算相关图。我们将一元特征的通道表示为NcN_c。所有的通道都沿着通道维度被平均分为NgN_g个组,所以每个特征组就有Nc/NgN_c / N_g个通道。第gg个特征组flg,frgf_l^g, f_r^g 由原始特征fl,frf_l,f_r的第gNcNg,gNcNg+1,...,gNcNg+(NcNg1)g \frac{N_c}{N_g}, g \frac{N_c}{N_g}+1, ..., g \frac{N_c}{N_g} + (\frac{N_c}{N_g} - 1)个通道构成。组相关计算过程如下:

Cgwc(d,x,y,g)=1Nc/Ngflg(x,y),frg(xd,y)C_{gwc}(d,x,y,g) = \frac{1}{N_c/N_g}\langle f_l^g(x,y), f_r^g(x-d,y) \rangle

,\langle \cdot, \cdot \rangle 是两个特征向量的内积。注意,我们计算所有分组gg的相关,而且是在所有的视差层级dd。然后,将所有的相关图打包为一个匹配代价量,形状为[Dmax/4,H/4,W/4,Ng][D_{max} / 4, H/4, W/4, N_g]DmaxD_{max}表示最大视差,Dmax/4D_{max}/4对应着该特征的最大视差。当Ng=1N_g=1时,组相关变成了完全相关。

组相关量CgwcC_{gwc}可以看作NgN_g代价量提议,每一个提议都是从相应的特征组计算得来。随后的3D聚合网络将多个候选者聚合起来,回归视差图。组相关成功地使用了传统相关匹配代价,为3D聚合网络提供丰富的相似性测量特征,缓解了对参数的需求。在4.5节中,我们探索了如何降低3D聚合网络的通道,我们所提出的网络在性能上的下降要比其它方法小得多。组相关量只需较少的参数,就可以获得不错的结果。

为了进一步提升性能,组相关代价量可以和 concatenation 量结合起来。实验证明,组相关量和 concatenation 量是彼此互补的。

3.3 改进的3D聚合模块

在PSMNet中有一个堆叠的沙漏结构,目的是学习更好的上下文特征。基于此网络,我们做了一些改动,使得它更适合组相关,并且加快推理速度。3D聚合结构在图2和表1中有展示。

首先,我们为预沙漏模块的特征增加了一个辅助的输出模块(图2中的输出模块0)。这个辅助的损失让网络在较浅的层学到更好的特征,对最终的预测是有利的。

其次,去掉了不同输出模块之间的残差连接,所以辅助输出模块(输出模块0,1,2)在推理时要被去掉,这样可以节省计算成本。

第三点,在每个沙漏模块中,我们在 shortcut 连接中增加了1×1×11\times 1\times 1的3D卷积(图2中的虚线部分),提升性能,而不会增加计算成本。因为1×1×11\times 1\times 1的3D卷积和3×3×33\times 3\times 3卷积相比,乘法操作数量仅为1/271/27,速度更快,时间几乎可以忽略。

3.4 输出模块和损失函数

对于每个输出模块,我们用了2个3D卷积来输出一个单通道的4D量,然后对这个量进行上采样,用 softmax函数沿着视差维度将之转换为一个概率量。具体细节如表1所示。对于每个像素,我们有一个长度为DmaxD_{max}的向量,包含着所有视差层级概率pp。然后,通过soft argmin 函数给出视差估计值d~\tilde d

d~=k=0Dmax1kpk\tilde d = \sum_{k=0}^{D_{max}-1} k \cdot p_k

其中,k,pkk, p_k表示一个可能的视差层级和对应的概率。从四个输出模块中得到的预测视差图分别表示为:d~0,d~1,d~2,d~3\tilde d_0,\tilde d_1,\tilde d_2,\tilde d_3。损失函数如下:

L=i=0i=3λiSmoothL1(d~id)L=\sum_{i=0}^{i=3} \lambda_i \cdot Smooth_{L_1}(\tilde d_i - d^*)

其中,λi\lambda_i表示第ii个视差预测的系数,dd^*表示 ground-truth 视差图。Smooth L1 损失计算如下:

SmoothL1(x)={0.5x2,ifx<1x0.5,otherwise Smooth_{L_1}(x)=\left\{ \begin{aligned} 0.5x^2 & , & if |x|<1 \\ |x|-0.5 & , & otherwise \end{aligned} \right.

4. 实验

Pls read paper for more details.