2019-09-15(论文学习笔记——MegaDepth: Learning Single-View Depth Prediction from Internet Photos)...

摘要

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

  • NYU:只有室内的照片
  • Make3D:训练集小
  • KITTI:稀疏采样

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

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

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

介绍

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

  • RGB-D传感器:被限制在室内使用
  • Laser scanners:基于此技术的典型数据集有Make3D和KITTI,但是这种设备操作相当麻烦,同时产生的只是稀疏的深度映射(LIDAR),此外Make3D和KITTI都是特定场景下的数据集(分别是大学校园、汽车上)

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

本文的贡献:

  • 第一次采用Internet SFM+MVS数据来解决单点深度估计问题。
  • 构建并提出了一个无限制数据源、大容量的深度图像数据集——Megadepth
  • 针对MVS图片,提出了新的数据清洗的方法
  • 基于Megadepth训练模型的新的损失函数

相关工作

  • 单点深度估计:一个标准的方法是收集RGB-D图像对,然后训练模型,训练好的模型就可以用来估计RGB图像的深度信息。这些模型一般在比较小的训练集上训练(NYU、Make3D、KITTI)
    Novotny等人基于从视屏中利用SfM+MVS构建的3D模型训练了一个网络来学习单个实体的3D形状。
    通过视图合成,多视点场景也可以作为单点深度估计模型训练的潜在数据源,但它仅仅是一个深度信息的替代,往往不能产生高质量的深度信息。
  • 相对深度估计:获取图像深度信息的另一个方法是人工标注图像深度,但是人工标注绝对深度是一个挑战,人类比较擅长标注相对深度。相对深度对于估计深度顺序是有用的(因此文中也从图片中自动集成了相对深度信息),但是仅仅通过相对深度学习的深度信息估计欧氏深度的精确度很有限。
  • 估计网络图片的深度信息:SfM和MVS技术的发展推动了此项任务的进步。已经有人通过检索和SfM从单张图片中构建3D模型,也有人利用以上技术注册一张图片到现有的3D模型中来推导深度信息。但是前人的工作中需要或者提前在每个位置有详细的3D模型或者运行时构建它们。在本文的工作中采用SfM+MVS训练网络去产生新的位置和场景。

MegaDepth数据集

  • 从Flickr下载网络图片——拍照效果非常好的地标
  • 采用最先进的SFM和MVS方法重构地标为3D模型,这将为张图片产生SfM模型和稠密深度映射,但这些深度映射有大量的噪声和奇异值。
    针对以上问题的处理:1)2)通过语意分割产生相对深度数据

图片校准和重构

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

改善深度映射

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

  • 首先,采用在深度估计上更稳定的基于COLMAP的改善的MVS算法。COLMAP迭代地计算深度信息,每次迭代中,尽量保证相邻像素深度映射的几何稳定性。保证该稳定性的一个方法是给背景预测一致的深度,一个坏的影响就是背景深度会吃掉前景实体。为了克服这个影响,COLMAP的每次迭代中,比较每个像素值更新前后的深度值,并选择最近(最小)的深度值,接着采用中值滤波器删除掉不稳定的深度值(平滑)。
  • 然后,采用语意分割的方法强化和过滤(实体感知过滤器)深度映射,并且产生额外的相对深度数据。

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

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

  • 绝对深度 VS 相对深度
    虽然每类3D实体有上千种场景图,但它们深度图的质量是不一样的,因此将训练数据集限制在一个具有该质量深度图的子集内是有用的。具体的,考察一张图片,如果>30%的像素由可靠的深度值组成,则保留它作为学习绝对深度信息的训练数据集样本,这个评价指标将保留那些没有大的移动前景实体的样本。不被用作学习绝对深度训练集的样本将有另一个的用途:自动生成学习相对深度关系的训练集。
  • 自动相对深度标注:
    来自网络的图片中,如果包含一些移动的实体、不易被MVS重构的实体,如果我们仅仅采用前文构建的数据集训练模型,将会缺少这些实体的的ground truth深度。为了解决这个问题,我们采用了一个新的基于3D几何信息和语意分割的方法为我们的训练图片(不属于绝对深度模型训练集的图片)自动地提取相对深度标签,具体方法如下:
    对于上面提到的每张图片,计算两个区域:F_ord(前景:基于语意信息)、B_ord(背景:基于3D几何信息, 也包含在整张图片深度范围的后四分位数以上深度可靠深度信息),F_ord中的每个像素一定比B_ord中的每个像素更接近相机。

创建数据集

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

深度估计网络

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

  • 损失函数
    SFM+MVS确定的的深度的尺度是不确定的,所以并不能直接拿预测深度和ground truth进行比较。但是深度对的相对深度的尺度是确定的(此处也可以是对数域中的利率,就是估计的深度先取对数,再进行成对比较,比值的尺度是确定的)。基于上面的考虑,文中处理的是对数域的深度,并且用一个不随尺度改变(深度对的比率)的损失函数进行训练。
    \mathfrak{L}_{si} = \mathfrak{L}_{data} + \alpha \mathfrak{L}_{grad} + \beta \mathfrak{L}_{ord}

尺度不变部分(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数据集上训练的模型在其他数据集上的泛化能力如何好

要回答以上的三个问题,文中设计了多个实验内容——在一个数据集上训练,在其他数据集上测试,以此来展示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数据集上训练的模型泛化能力并不是特别好,证明了文中提出的深度强化方法的有效性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值