2019-09-15(论文学习笔记——MegaDepth: Le

2019-09-29  本文已影响0人  雨住多一横

摘要

目前基于3D传感器的数据集及其缺陷:

论文中的数据集:
基于对运动中获取的结构多视点立体(MVS)进行建模来处理多视点网络图片——任意数据源,基于此方法产生一个叫Megadepth的规模很大的深度图片数据集。

来自MVS数据的挑战:包含噪声不可重构的实体,因此本文中提出了一种新的数据清洗的方法

在本文提出的数据集——Megadepth上训练的模型表现出了很强的泛化性能(即使在在Make3D、KITTI和DIW等旧的数据集(训练中并没有用到)上也有好多额表现)

介绍

相对于预测场景实体的3D形状,单点深度估计是一个不受约束的问题,采用深度学习的方法解决的话需要大量的训练数据,然而RGB-D图像对的采集非常困难,现有方法存在着严重的缺陷,例如:

本文中采用几乎没有人合法限制的数据源构建数据集来解决上面的问题(有重复视点的网络图片),这样采用从运用中获取结构多视点立体技术可以自动地产生稠密的深度图片。用以上的系统的输出作为机器学习方法的输入来解决单点深度估计问题。

本文的贡献:

相关工作

MegaDepth数据集

图片校准和重构

通过COLMAP为收集的每张图片构建3D模型。COLMAP是最先进的SfM系统——重构相机位姿和稀疏点云,和MVS系统——稠密深度映射。COLMAP可以为每张重构的图片I产生一个深度映射D和诸如:相机参数、稀疏SfM点、camera visibility

改善深度映射

COLMAP产生的原始深度映射包含很多奇异值(产生原因:移动实体、噪声深度不连续、背景深度融合进前景实体),因此需要进行深度映射的改善

通过语意分割进行深度强化

MVS方法在有多个种类的实体的当场景中有不好的表现,但是如果可以知道图像中的语意分布,则可以减小多实体的影响,或者至少可以确定有问题的像素位置,而深度学习在语意分割中具有良好的表现。
语意分割在构建我们提出的数据集过程中有三个主要的作用1)移除前景区域中的伪MVS深度;2)通过分割作为区分每张图片是提供绝对深度信息或者相对深度信息的指标;3)通过组合语意信息和MVS深度自动地标注相对深度关系,标注的这些数据有助于训练MVS不能够重构的区域。
- 语意过滤:对于每张图片,采用PSPNet进行语意分割,并把像素按语意分为三个子集:
1)前景实体:包括一些经常出现在前景中的实体,有静态前景和动态前景。
2)背景实体:包括建筑、山等。
3)天空:在深度过滤中填空需要特殊处理
语意分类后,为了克服移动实体(人)造成的伪深度,文中对图片中每个连通区域进行处理:如果<50%的像素有重构的深度信息,将移除该区域中的所有深度信息。此外为了克服填空的影响,文中还去掉了在填空区域中的重构深度。

创建数据集

数据集中包含了有稠密3D重构的世界各地地标的200个模型,同时呈现了15万的重构图片。过滤后保留了13万张可用图片,在这13万张图片中有大约10万为绝对深度数据,3万张为相对深度数据。再加上A. Knapitsch, J. Park等人用过的数据集,构成了完整的Megadepth

深度估计网络

网络结构:对比了VGG,“hourglass” network,和ResNet,最后确定了使用hourglass作为深度预测模型

尺度不变部分(data term):在线性时间内计算所有对数深度对之间区别的均方误差。
这里用L表示预测对数深度、用L^*表示对数ground truth深度。L_iL_i^*表示i位置对应的对数深度值。这里定义R_i = L_i - L_i^*,并且定义:
\mathfrak{L}_{data} = \frac{1}{n}\sum_{i = 1}^{n}\left ( R_i \right )^2 - \frac{1}{n^2}\left ( \sum_{i = 1}^{n}R_i \right )^2
上式中n表示ground truth深度数据中合法深度的个数。

多尺度、尺度不变梯度匹配部分(grad term):为了在训练过程中在奖励更平滑的梯度变化的同时惩罚更尖锐的深度不连续性,文中用了一个多尺度、尺度不变的梯度匹配子\mathfrak{L}_{grad}作为损失函数的一部分,其定义为:预测和ground truth深度数据之间对数深度的梯度区别的\mathit{l}_1惩罚项:
\mathfrak{L}_{grad} = \frac{1}{n}\sum_{k}\sum_{i}\left ( \left | \bigtriangledown _xR_i^k \right | + \left | \bigtriangledown _yR_i^k \right | \right )
上式中:R_i^k对数深度区别矩阵中位置为i尺度为k的值,由于损失是在多尺度下计算的,\mathfrak{L}_{grad}可以捕获不同尺度图像的深度梯度。文中使用的尺度有4个尺度。

具有鲁棒性的相对深度损失(ord term):相对深度损失部分,捕获的是前文中自动生成的相对深度关系误差。
对于相对深度数据集中的每张图片,在训练过程中,文中选取单个像素对(i, j),其中i像素和j像素或者在前景F_{ord}中或者在B_{ord}中,\mathfrak{L}_{ord}的设计如下,它对少数的不正确的相对深度关系对是鲁棒的。
\mathfrak{L}_{ord} = \left\{\begin{matrix} log\left ( 1 + exp\left ( P_{ij} \right ) \right ) & if P_{ij} \leq \tau \\ log\left ( 1 + exp\left ( \sqrt{P_{ij}} \right ) \right ) + c & if P_{ij} \geq\tau \end{matrix}\right.
其中P_{ij} = -r_{ij}^*(L_i - L_j)r_{ij}^*就是前文中自动标注的i和j之间的相对深度关系, 如果 r_{ij}^* = 1则i像素比j像素离镜头更远,否则 r_{ij}^* = -1,c是一个常数,它的作用是是\mathfrak{L}_{ord}是连续的。训练过程中对于一张图片,如果文中的自动标注方法认为图中的一个像素对有相似的深度顺序,则\mathfrak{L}_{ord}鼓励该点对之间的深度差最大(并且是有序的),在训练过程中,基于交叉验证,文中设定\tau = 0.25

评估

评估的目的是回答下面的三个问题:

要回答以上的三个问题,文中设计了多个实验内容——在一个数据集上训练,在其他数据集上测试,以此来展示MD数据集训练的网络的强大的泛化能力。

实验过程中也说明了文中提出的深度数据强化策略在实现泛化能力上的必要性;同时说明了文中提出的损失函数在预测的数量质量上都提高了预测表现。

实验设计:从MD数据集的200个重构模型中,随机选择46个作为测试集,在剩余的154个重构模型中,随机的将每个模型的所有图片分成训练集和验证集,其中训练集占96%,测试集占4%,在验证过程中设置\alpha = 0.5\beta = 0.1。实验时采用pytorch实现模型,采用Adam算法调参,以32的批量大小训练了20个epochs

为了比较的公平性,在所有的实验中训练和验证都采用MD作为数据集,文中通过MD数据集一共训练了4个模型并计算了平均错误率。

在MD测试集上模型的简化测试和评估

下面介绍在MD数据集上测试通过MD数据集训练的模型的实验过程。

评价指标:为了量化估计,采用了两个尺度不变的错误度量方法(SfM不具有尺度特性)。
第一个是:scale-invariant RMSE,公式如下:

第二个是:SDR——SfM Disagreement Rate,公式如下:
SDR\left ( D, D^* \right ) = \frac{1}{n}\sum_{i, j \in \psi } \mathbb{I}\left ( ord\left ( D_i, D_j \right ) \neq ord\left ( D_i^*, D_j^* \right ) \right )
上式中的\psi是像素对(有用于比较的SfM深度的像素对)的集合,n是满足条件像素对的个数,ord(.,.)是一个可以表示三种深度关系(更远、更近、同样深度)的映射,具体如下:
ord\left ( D_i,D_j \right )=\left\{\begin{matrix} 1 & if \frac{D_i}{D_j} > 1 + \delta \\ -1 & if \frac{D_i}{D_j} < 1 - \delta \\ 0 & if 1 - \delta\leq \frac{D_i}{D_j} \leq 1 + \delta \end{matrix}\right.

文中也定义了SDR^=SDR^\neq分别为ord\left ( D_i^*,D_j^* \right ) = 0ord\left ( D_i^*,D_j^* \right ) \neq0的反对(预测深度关系和SfM深度关系不同)率。文中的实验中设置\delta = 0.1来容忍SfM深度点中深度的不确定性。为了提高效率文中只在所有的SfM深度数据集中采样一个子集来计算误差。

不同的网络和损失函数对实验结果的影响:文中共尝试了三种主流的网络来预测深度,分别为VGG、hourglass、ResNet ,来测试文中提出的损失函数在三种网络中和现有损失函数(Eigen el al)的比较结果。
文中还以他们提出的损失函数中的单个部分的组合为损失函数分别训练了神经网络,最终的结果显示,以文中提出的损失函数(data_term+grad_term+ord_term)训练的网络的泛化能力最强。并且在不同的组合中,hourglass网络和其他网络相比,效果最好。

值得一提的是:损失函数中增加\mathfrak{L}_{grad}部分可以很大程度上提高ord\left ( D_i^*,D_j^* \right ) = 0ord\left ( D_i^*,D_j^* \right )

实验结果表明文中提出的损失函数可以有效地保护深度数据中的原始结构,同时可以有效地捕获距离较近实体(人和电线杆)之间的深度差距。

文中还通过在KITTI、Make3D、DIW三个数据集上测试来比较在MD数据集上训练的模型在采用和不采用文中提出的深度强化方法时的预测表现。实验结果表明,在原始的MVS数据集上训练的模型泛化能力并不是特别好,证明了文中提出的深度强化方法的有效性。

上一篇 下一篇

猜你喜欢

热点阅读