MVSNet笔记

输入:多个视角下拍摄的图像,相机信息
输出:每个视图的深度信息

传统的一些Multi-view方法使用的是人为设计的相似性度量和正则化,像NCC(归一化互相关)和SGM(半全局匹配)来计算密集的对应关系以及恢复三维点信息。这些设计方法在理想的实验环境下效果很好,但是不能对抗弱纹理、高光、反射这些情况,最终导致的结果就是目前的state-of-the-art的方法经常在精度上十分精准,但是完整性上表现的不尽人意。

ICCV’ 17上的SurfaceNet和NIPS’ 17上的Learned Stereo Machine (LSM)都是基于volumetric重建的,代价就是空间离散带来的误差以及内存消耗。因此LSM只能处理一些合成物体并且最终重建的分辨率较低。SurfaceNet 事先重建彩色体素立方体, 将所有像素的颜色信息和相机参数构成一个 3D 代价体,所构成的 3D 代价体即为网络的输入,而SurfaceNet 网络的规模很难增大,使用启发式的“分而治之”策略,需要花很长时间才能进行大尺度的重建。也正是由于这些原因,MVSNet选择基于深度图重建。

为此, 作者提出端到端的多视图深度预测网络 MVSNet, 和其他基于深度图的 MVS 方法类似, MVSNet 将一张参考图像和多张源图像作为输入, 为参考图像预测深度图,而不是整个 3D 场景。 网络的关键之处在于可微分的单应变换操作, 在从 2D 特征图构建 3D 代价体的过程中, 网络将相机参数隐式地将编码入网络。 为使网络能够适应任意数目的输入视图数,提出基于方差的指标, 该指标将多个特征体映射为一个代价体。 对代价体进行多尺度的 3D 卷积可以回归出一个初始的深度图。 最后使用参考图像对深度图进行优化以提升边界区域的精度。MVSnet与之前基于学习方法有两个明显的不同。 第一点, 基于深度图估计的目的,本文的 3D 代价体的构建是基于相机视锥体而不是规整的欧式空间。 第二点, 本文方法将 MVS 重建划分为逐视图的深度估计问题,使得大规模的重建成为可能。

以下部分参考https://blog.****.net/john_xia/article/details/88100410

1 特征提取

N 张输入图像→深度特征图
这些特征图用于后续的稠密匹配。 特征提取网络使用的是 8 层的2D 的卷积神经网络, 其第 3 层、第 6 层的卷积步长设为 2, 以此得到 3 个尺度的特征图。 与一般的匹配网络相同,特征提取网络的参数共享权重。
2D 卷积神经网络的输出为 N 个 32 通道的特征图。 与原图相比,在每个维度上进行了 4 倍的下采样。 值得注意的是, 虽然特征图经过了下采样, 但被保留下来像素的邻域信息已经被编码保存至 32 通道的特征描述子中(即虽然特征图缩小了,但是每个特征图像素包含了原始像素周围的信息,因此在最终的细化过程中不会丢失细节信息)。 与在原始图像上进行特征匹配对比, 使用提取的特征图进行匹配显著提高了重建质量。

2 可微分的单应变换

deep features→feature volumes
接下来是基于提取的特征图和相机参数构建 3D 代价体。 之前的空间划分的方法是基于规整的网格,但是对于深度预测的任务而言,我们是基于参考相机视锥体进行代价体的构建。MVSNet笔记
此处为论文主要创新:提出了一个基于单应变换的2D到3D的转换方法,并且将相机的几何关系结合到神经网络中。就是将其他图像的feature通过可微的单应变换,warp到参考图像相机前的这些平行平面上,这一步的转换根据如下的单应矩阵进行计算。
利用2D的feature生成3D的Feature Volume,即把其他图像上的feature warp到参考图像的相机视锥中的256个深度平面上,总有一个深度是对应的。第i个feature warp到参考图像相机视锥的深度d平面的单应矩阵计算为
MVSNet笔记
单应变换投影的过程类似于经典的平面扫描算法,唯一的区别在于采样点来自特征图而不是RGB图像。

3 代价指标(Cost Metric)

feature volumes→Cost Volumes
接下来我们将多个特征体聚合为一个代价体。 为了适应任意数目的视图输入, MVSNet 使用了一个基于方差的代价指标, 该指标用于衡量 N 张视图间的相似性。
MVSNet笔记

图源https://blog.****.net/john_xia/article/details/88100410

4 代价体正则化得到概率体

cost volume经过一个四级的U-Net结构来生成一个probability volume。这个probability volume其实就是在每个深度下,每个像素的可能性大小。
从图像特征图计算得到的初始代价体很有可能是包含噪声的(由于非朗伯体表面的存在或者视线遮挡的问题), 为了预测深度图还需要进行光滑处理。 正则化的步骤是对上面的代价体进行优化(refine)以得到概率体。 受 SurfaceNet 等工作的启发,我们使用一个多尺度的 3D-CNN 网络用于代价体正则化。 4 个尺度的网络类似于 3D 版本的 UNet, 使用编码-解码的结构方式,以相对较小的存储/计算代价在一个大的感受野范围内进行邻域信息聚合。 为了减轻网络的计算代价,在第一个 3D 卷积层后, 我们将 32 通道的代价体缩减为为 8 通道,将每个尺度的卷积从 3 层降为 2 层。 最后卷积层的输出为 1 通道的体(Volume)。最终在深度方向上使用 softmax 操作进行概率值的归一化。产生的概率体可很好适合于深度值预测,不仅可以用于逐像素的深度预测,还可以用来衡量估计的置信度。

5 深度图

概率体→深度图→深度图优化
winner takes all(如argmax)选择概率最大的深度作为点的深度,但这只适用于概率分布只有一个很尖锐的波峰的理想情况。在有多个波峰的情况下,这个策略就不是特别有效,而且这个方法不可微,不能在网络中进行反向传播。 所以我们采用在深度方向上计算期望,即所有假设深度值的加权和:MVSNet笔记
其中P(d)为在深度值 d 处的所估计的概率值。该操作在文献中被称为 soft argmin 操作,该操作可微分并且能够产生 argmax 操作的结果。 在代价体构建的过程中深度假设值是在一定范围内均匀采样得到的,所以预测的深度值是连续的。输出深度图的尺寸与 2D 特征图相同,即在每个维度上是原始图像的1⁄4。
MVSNet笔记
尽管从概率体恢复出深度图是一个直接而合理的过程, 但还是会存在一些问题。 由于正则化过程中较大的感受野造成重建深度图边界过平滑的现象, 这些问题也是在语义分割和图像抠图(Image Matting) 中存在的。我们注意到参考图像是包含图像边界信息的,因此可以将参考图像作为引导
来优化预测的深度图。 受到图像抠图算法的启发,我们在 MVSNet 的末端添加了一个深度残差学习的网络。
预测的深度图和被 resized 的参考图像被连接在一起构成一个 4 通道的输入,被送入三个 32 通道的 2D 卷积层和一个 1 通道的卷积层,来学习得到深度的残差值然后加到之前的深度图上从而得到最终的深度图。 为了可以学习到负的残差,最后一层网络没有使用 BN 层和 ReLU 单元。同样地,为避免在某一特定深度值上存在偏差,将初始深度幅值缩放至范围[0, 1]内,在深度图优化完成之后转换回来。

初始深度图到Ground-Truth的L1距离和细化后深度图到Ground-Truth的L1距离作为损失。只考虑那些有效的像素点,即存在 Ground Truth标签的像素。
MVSNet笔记

将之前得到的概率图c用来滤波,此对于之前采样的256个深度,取最接近期望的四个深度,他们概率的和应该足够大(如>0.8)才能确信这个是正确的,否则就将其视为外点。另外对于每个视角下的点的深度,将它投影到其他视角下,需要和那个视角的深度图信息相符合,就称为两视角一致。最终只保留那些三视角下一致的点。经过过滤得到的是每个视图下的深度图,将其经过深度融合得到最终的三维点云。
MVSNet笔记