0%

深度学习在深度(视差)估计中的应用(1)

本文对KITTI stereo 2015 datasets 冠军之作Cascade Residual Learning: A Two-stage Convolutional Neural Network for Stereo Matching进行简要解读。

前言

目前深度学习发展的如火如荼,利用CNN可以将图像对的匹配问题看成一个学习问题。但是如何能够得到高质量的深度图像仍然是一个普世问题。本文作者提出了一种新型的层叠式(cascade)CNN结构(CRL:Cascade Residual Learning)去估计深度信息。深度估计的过程大致可以分成两个步骤:

  1. 在现有的DispNet的基础上添加几个反卷积模块,目的是为了得到full resolution的初始的深度信息,同时能够学习到更多的细节信息;
  2. 第二步是对第一步中学习到的深度信息进行校准(rectify);这一步利用到了第一步得到的多尺度的深度信息,然后并非是直接学习到优化后的深度信息,而是学习了每个尺度下的深度残差,然后结合第一步中得到的多尺度深度信息合成最终的深度图(这里有点类似于何凯明的residual的思想: It is easier to learn the residual than to learn the disparity directly)。

网络结构

下面详细的介绍下这个网络的结构:

可以很清楚地在上图中看到这两个不同的阶段。对于第一个阶段,类似于文献[1]中提到的DispNetC结构(C是correlation层的意思),本文作者同样采取了沙漏形的网络结构。但是DispNetC网络的输出图像的分辨率只有原始尺寸的一半!CRL中的DispFulNetDispNetC的基础上,在最后的两个卷积层增加了添加了反卷积模块,然后再串联左图;通过再次添加一个额外的卷积层,可以使得网络输出为全分辨率(和左右图大小一致)。注意:每个尺度(共6个尺度)上的临时输出与其对应的ground truth之间计算$l_1$损失。
总结一下就是,这个DispFulNet学习了这样一个网络:通过输入一对图片$I_L$和$I_R$,学习到了视差$d_1$,使得:

上式中的$\tilde{I}_L$就是把右图根据视差移动后的结果,我们的目标就是$\tilde{I}_L$越来越接近$I_L$。

接下来就是第二阶段,将$I_L$,$I_R$,$\tilde{I}_L$,$d_1$以及$e_L=|I_L-\tilde{I}_L|$串联起来[2]作为dispResNet的输入。此优化网络最后学到的是多尺度的残差$ \{r_2^{(s)} \} _s^S$,其中s=0时表示全尺度残差。最后与DispFulNet输出的多尺度深度图$\{d_1^{(s)}\}_s^S$做和运算得到最后优化后的深度$\{d_2^{(s)}\}_s^S$:

于是$d_2^{(0)}$就是最后的全尺度输出。

实验结果

以下是对其结果展示:

参考文献

[1]. N. Mayer, E. Ilg, P. Hausser, P. Fischer, D. Cremers, A. Dosovitskiy, and T. Brox. A large dataset to train convolutional networks for disparity, optical flow, and scene flow estimation. In Proc. of the IEEE Conference on Computer Vision and Pattern Recognition, pages 4040–4048, 2016.
[2]. E. Ilg, N. Mayer, T. Saikia, M. Keuper, A. Dosovitskiy, and T. Brox. Flownet 2.0: Evolution of optical flow estimation with deep networks. In Proc. of the IEEE Conference on Computer Vision and Pattern Recognition, pages 2462–2470, 2017.
[3]. KITTI: Stereo Evaluation 2015
[4]. code: Cascade Residual Learning (CRL)