文章目录
概述
论文链接: https://arxiv.org/pdf/1807.08865.pdf
作者单位: Google Inc.
被引: 161
tag: ECCV 2018
StereoNet是端到端的立体匹配网络中比较经典的方法,源于谷歌实验室,是2018年的ECCV。
StereoNet在Nividia Titan X上可以跑到60帧。与大多的深度学习立体匹配网络一样,其在低分辨率上构建代价空间,进而得到粗视差,再从原图上引入信息逐级地进行边缘上的引导,以期使得高分辨率视差图展现一种边缘锐利的效果。
网络结构
网络结构非常简单,首先在低分辨率使用孪生网络提取立体图像的特征,然后在低分辨率上构建代价空间,进而得到比较粗分辨率的视差估计。最后再逐层地对结果进行refine,目的是恢复视差图上小的细节,以及一些thin structures。
特征提取网络
在特征提取中,采用了比较大的感受野,且对于输入来说,左右图所过的特征提取网络是共享权重的。首先使用
K
K
K个
5
∗
5
5*5
5∗5大小、stride为2的卷积核对输入影像进行下采样,特征通道数为32。
在具体的实验中,将
K
K
K设置为3或者4。
然后采用了6个残差块的结构(
3
∗
3
3*3
3∗3卷积、BN、以及leaky relu(
α
=
0.2
\alpha = 0.2
α=0.2)),再之后则使用了一个不带BN和激活函数的大小为
3
∗
3
3*3
3∗3的卷积核,最后的输出是一个低分辨率的,32通道的特征图(对于单张影像输入而言)。
低分辨率表达的好处是:
- 感受野较大,对于弱纹理的局域来说有优势;
- 使得特征向量表达更为紧凑。
代价空间
代价空间中所采用的初始测度为立体图像特征向量之间的差值。
在传统方法中,会选择采用二者特征向量之间最低的欧几里得距离所对应的视差作为最终视差,这也是广为人知的所谓的“WTA”方式,即winner takes all。
然而,在网络中,我们选择让卷积来自行选择出一个更为合理的、非线性的测度。
特别地,为了能够既在空间域又在视差域进行语义信息的融合,这里采用了4个3D卷积(大小为
3
∗
3
∗
3
3 * 3 * 3
3∗3∗3、使用BN以及leakyReLU),而最终的3D卷积,则不使用BN或者激活,最后在每一个像素和候选视差上产生一维的输出。
对于输入影像大小为
W
∗
H
W * H
W∗H,视差最大值为
D
D
D来说,代价空间的尺寸为
W
2
K
∗
H
2
K
∗
D
+
1
2
K
\frac{W}{2^{K}} * \frac{H}{2^{K}} * \frac{D+1}{2^{K}}
2KW∗2KH∗2KD+1,其中
K
K
K则表征了降采样的倍数。
此外,文章发现大多数的性能收益都来自于低分辨率的匹配,而性能消耗则来自于高分辨率,也因此,文章认为并不需要在高分辨率进行匹配工作。
可微分的argmin
通常来说,我们从代价空间中得到视差的方式是:
d
i
=
arg
min
d
C
i
(
d
)
d_{i}=\arg \min _{d} C_{i}(d)
di=argdminCi(d)
显然,这样的式子是不可微的,自然,也没办法进行反向传播。
因此,在网络中所采用的方式为基于softmax加权的方式,具体的数学表达为:
d
i
=
∑
d
=
1
D
d
⋅
exp
(
−
C
i
(
d
)
)
∑
d
′
exp
(
−
C
i
(
d
′
)
d_{i}=\sum_{d=1}^{D} d \cdot \frac{\exp \left(-C_{i}(d)\right)}{\sum_{d^{\prime}} \exp \left(-C_{i}\left(d^{\prime}\right)\right.}
di=d=1∑Dd⋅∑d′exp(−Ci(d′)exp(−Ci(d))
分层的Refinement / 边缘感知的上采样
号称是边缘感知的上采样。
低分辨率代价空间匹配给人最直观的感受就是细节的缺失。
注意到网络在视差优化阶段的任务是通过扩张或者说腐蚀视差的数值来和影像的高频信息进行结合,进而学到细节,或者说高频信息。因此,这样的像素对像素的映射,与计算摄影中的一些工作非常接近(Chen 等,2017
[
1
]
[
2
]
^{[1][2]}
[1][2];Gharbi 等,2017)。
特别地,这里只让refinement分支学习视差的残差,学到后再与粗视差相加或相减,进而得到优化后的视差。
refinement网络的输出自然是粗视差,但其首先需要被上采样到高分辨率同分辨率。
近年来,发现解卷积的操作会产生类似于棋盘格的问题,因此在这里采用了双线性上采样+卷积的方式进行替代。
级联的颜色和视差图,首先被喂入一个
3
∗
3
3 * 3
3∗3 大小的卷积层,输出了一个32维的表达,该表达再进一步地被喂入6个残差块(使用
3
∗
3
3*3
3∗3的卷积,BN以及leaky ReLU)。
具体地,在残差块中使用atrous卷积来得到更大的感受野,且不增加网络体量。
对于残差块而言,膨胀系数分别为1,2,4,8,1。输出再使用一个
3
∗
3
3 * 3
3∗3大小的卷积进行处理,只不过在这之后并不接BN或激活。
此时网络的输出是一个一维的视差残差,该残差将被用于与之前的粗视差相加,最后再过一个ReLU层以限制视差输出均为正值。
在实验中,具体地评估了逐级优化以及直接优化的效果。下图表现了每一层refinement输出的效果:
这种上采样的方式很容易让人联想到联合双边上采样,而事实上,确实认为这是一个基于网络学习的边缘感知的上采样函数。
损失函数
StereoNet采用有监督的方式进行训练,分层的损失函数为:
L
=
∑
k
ρ
(
d
i
k
−
d
^
i
)
L=\sum_{k} \rho\left(d_{i}^{k}-\hat{d}_{i}\right)
L=k∑ρ(dik−d^i)
其中,
d
i
k
d_i^{k}
dik表示在像素
i
i
i的第
k
k
k次refinement层级上的预测视差(
k
=
0
k=0
k=0表示是输出的预优化),
d
i
^
\hat{d_i}
di^则是该像素的GT值。
预测的视差往往会通过双线性的上采样来和GT的视差图大小达到一致。最后,
ρ
(
⋅
)
\rho(\cdot)
ρ(⋅)即为两参数的广义的鲁棒函数,在实验中具体的设定为
α
=
1
\alpha = 1
α=1,
c
=
2
c=2
c=2,与Smoothed L1损失非常接近。
实现细节
采用tensorflow来实现以及训练StereoNet。
所有的实验都采用RMSProp的优化方式,且使用exp衰减的学习率,学习率初始值为1e-3。
输入的数据首先被归一化至
[
−
1
,
1
]
[-1,1]
[−1,1]之间,batchsize为1,并且不做裁剪。
网络大概迭代150k次后进行收敛。
此外,发现同时使用左右视差图进行训练会显著增加训练时间。
然而,对于比较小的数据集来说,从零开始训练几乎是不可取的,因此采用使用预训练模型额外训练50k次迭代的方式。
实验
在许多个数据集上,都仅使用了较小的成本代价,获得了高质量的结果。
数据和实验设置
在Scene Flow、KITTI 2012、KITTI 2015上都验证了StereoNet的能力。Scene Flow是一个适用于网络训练的大型合成数据集。
而另外的KITTI数据集,尽管更接近于真实世界,但是对于直接端到端的训练来说体量过小。
因此,首先在Sceneflow数据集上进行预训练,然后再独立的使用KITTI数据集进行finetune。通过这样的方式对网络进行训练,并与其他的SOTA进行比较。
此外,在Sceneflow数据集上进行了消融实验。具体地,验证了下采样倍数分别为8和16时对结果的影响。尽管refinement可以引入许多的细节,但是如果在cost volume内完全丢失了信息的话,几乎是无论如何也无法恢复的。还验证了逐级递增的refinement与直接上采样的refinement之间的效果区别。
亚像素精度讨论
我们知道,传统双目是基于三角测量的数学原理来实现的深度估计,其深度方向上的误差与深度距离以及模组参数都有关系,具体的数学表达形式为:
Z
:
ϵ
=
δ
Z
2
b
f
Z: \epsilon=\frac{\delta Z^{2}}{b f}
Z:ϵ=bfδZ2
而其他的三维重建技术,比如说ToF在深度方向上的误差,实际上是随着深度的增加而线性增长,也因此相对于双目来说,在长距离的重建任务上显得更有优势。不过,由于多路径问题的存在,ToF在近处的重建任务上存在着几何变形的问题,这是ToF受人诟病的最主要原因之一。
然而,深度网络的架构相对于传统方法而言,在亚像素精度上有了巨大的突破,也就是说,端到端的立体匹配网络有能力处理远距离的匹配任务。
在传统立体匹配任务上,往往先进行整像素的离散搜索,再通过插值的方式得到亚像素,通常来说,这样做所能获取的亚像素精度为0.25个像素,对于一个基线为55cm的双目系统(Intel RealSense D415)来说,在3m远的距离对应着4.5cm的误差。
为了评估方法的亚像素精度,使用了SceneFlow验证集中那些在整视差上匹配正确的像素作为候选对象,并计算其平均误差作为测度。
对应的结果如下图所示:
从这张图上可以得到以下几个信息:
(1)StereoNet能够得到的亚像素精度高达0.03,比传统方法高了一个量级;
(2) 无论代价空间的尺寸如何,多级refinement的效果是类似的;
(3) 即使没有refinement,低分辨率代价空间直接进行输出也可以取得0.03的亚像素精度,然而,其误差几乎随着降采样倍数线性地增长。
亚像素精度为0.03,则对应Intel RealSense D415中3m距离5mm的误差。这样的效果,基本上可以媲美ToF技术中不遭受多路径干扰影响的效果。
定量结果
SceneFlow
尽管该数据集是合成数据集,验证集还是由于遮挡、thin structures以及大视差等问题的存在,具备着一定的挑战。
在下表中,体现了模型的EPE效果:
至于代价空间分辨率对之后refinement精度的影响,论文实验征明1/16分辨率的代价空间足以恢复精细的细节,示意图如下图所示:
KITTI
在KITTI数据集上定量以及定性的结果如下所示:
尽管说StereoNet没有在这里达到SOTA,但其实时性还是比较有价值。
运行时间分析
当前的算法可以在NVidia Titan X上以60fps的速度运行。
下图是算法中每一个步骤所消耗的时间,注意到特征提取、代价空间构建以及滤波都只耗费了整个算法计算的41% 的时间,而单单最后一层的refinement就消耗掉了38%的计算量。
结论
提出了一个实时的,高质量的立体匹配网络。
文章认为大部分的收益都来源于低分辨率,因此,只在低分辨率上进行匹配工作,且对于低分辨率匹配所得到的视差图细节不够的问题,采用了基于边缘感知的逐层优化方式进行解决,最终收获了1/30像素的亚像素精度。
此外,文章还认为限制该网络能力的最大原因是可用的数据不够,因此,下一步将结合自监督和监督的方式来对训练数据集进行增强。
参考文献
[1] Chen, Q., Xu, J., Koltun, V.: Fast image processing with fully-convolutional networks. In: IEEE International Conference on Computer Vision. vol. 9 (2017)
[2] Chen, Q., Koltun, V.: Photographic image synthesis with cascaded refinement networks. In: The IEEE International
Conference on Computer Vision (ICCV). vol. 1 (2017)
[3] Gharbi, M., Chen, J., Barron, J.T., Hasinoff, S.W., Durand, F.: Deep bilateral learning for real-time image enhancement. ACM Transactions on Graphics (TOG) 36(4), 118 (2017)