美文网首页
深度估计:MegaDepth

深度估计:MegaDepth

作者: Valar_Morghulis | 来源:发表于2023-01-16 07:40 被阅读0次

    MegaDepth: Learning Single-View Depth Prediction from Internet Photos

    Apr 2018

    CVPR2018

    https://arxiv.org/abs/1804.00607

    http://www.cs.cornell.edu/projects/megadepth/

    https://github.com/lixx2938/MegaDepth

    注:DPT中用到此文中的梯度匹配损失(gradient-matching loss)

    单视图深度预测是计算机视觉中的一个基本问题。最近,深度学习方法取得了重大进展,但这种方法受到可用训练数据的限制。当前基于3D传感器的数据集具有关键限制,包括仅室内图像(NYU)、少量训练示例(Make3D)和稀疏采样(KITTI)。我们建议使用多视图互联网照片集,这是一个几乎无限的数据源,通过现代结构从运动和多视图立体(MVS)方法生成训练数据,并基于这一想法提出一个称为MegaDepth的大深度数据集。来自MVS的数据有其自身的挑战,包括噪音和无法检测的物体。我们使用新的数据清理方法来解决这些挑战,并使用语义分割生成的有序深度关系来自动扩充数据。我们验证了大量互联网数据的使用,表明在MegaDepth上训练的模型不仅对新场景,而且对包括Make3D、KITTI和DIW在内的其他不同数据集表现出强大的泛化能力,即使在训练期间没有看到这些数据集的图像。

    1.引言

    从单个图像预测3D形状是视觉推理的一项重要功能,应用于机器人、图形和其他视觉任务,如内在图像。虽然单视图深度估计是一个具有挑战性的欠约束问题,但深度学习方法最近取得了重大进展。当接受大量数据训练时,这种方法会蓬勃发展。不幸的是,(RGB图像、深度图)对形式的完全通用的训练数据很难收集。商品RGB-D传感器(如Kinect)已广泛用于此目的[34],但仅限于室内使用。激光扫描仪已经实现了重要的数据集,如Make3D[29]和KITTI[25],但这些设备操作起来很麻烦(在工业扫描仪的情况下),或者产生稀疏的深度图(在LIDAR情况下)。此外,Make3D和KITTI都是在特定场景中收集的(分别是大学校园和汽车顶部)。训练数据也可以通过众包生成,但迄今为止,这种方法仅限于收集稀疏有序关系或表面法线[12,4,5]。

    在本文中,我们探讨了如何使用几乎无限的数据源来解决这个问题:来自互联网的重叠视点的图像,根据这些图像,来自运动的结构(SfM)和多视图立体(MVS)方法可以自动生成密集深度。此类图像已广泛用于大规模3D重建的研究[35,14,2,8]。我们建议使用这些系统的输出作为机器学习方法的输入,用于单视图深度预测。通过使用来自世界各地拍摄的照片的大量不同训练数据,我们试图学习以高精度和可推广性预测深度。基于这一想法,我们引入了MegaDepth(MD),这是一个由互联网照片集生成的大规模深度数据集,我们将其完全提供给社区。

    据我们所知,我们首次使用互联网SfM+MVS数据进行单视图深度预测。我们的主要贡献是MD数据集本身。此外,在创建MD时,我们发现必须小心从有噪声的MVS数据中准备数据集,因此我们还提出了处理原始MVS输出的新方法,以及使用该数据训练模型的相应新损失函数。值得注意的是,由于MVS倾向于不重构动态对象(人、车等),我们使用从语义分割自动导出的有序深度关系来扩充数据集,并使用包含有序项的联合损失进行训练。在我们的实验中,我们表明,通过在MD上进行训练,我们可以学习一个模型,该模型不仅在新场景的图像上运行良好,而且还可以非常好地推广到完全不同的数据集,包括Make3D、KITTI和DIW,实现了比现有数据集更好的推广。图1显示了来自仅在MD数据集上训练的网络的不同测试集的示例结果。

    2.相关工作

    单视图深度预测。

    已经提出了多种用于单视图深度预测的方法,最近通过利用机器学习[15,28]。标准方法是收集具有真值深度的RGB图像,然后训练模型(例如,CNN)以从RGB预测深度[7,22,23,27,3,19]。大多数这样的方法都是在一些标准数据集上训练的,如NYU[33,34]、Make3D[29]和KITTI[11],这些数据集是使用RGB-D传感器(如Kinect)或激光扫描捕获的。如引言中所述,这种扫描方法具有重要的局限性。最近,Novotny等人[26]在视频SfM+MVS的3D模型上训练了一个网络,以学习单个对象的3D形状。然而,他们的方法仅限于对象的图像,而不是场景。

    通过将视图合成用作监控信号[38,10,13,43],场景的多个视图也可以用作单视图深度预测的隐式训练数据源。然而,视图合成只是深度的一个代理,可能并不总是产生高质量的学习深度。Ummenhofer等人[36]通过使用单个相机拍摄的重叠图像对进行训练,并学习预测图像匹配、相机姿势和深度。然而,它在测试时需要两个输入图像。

    纵坐标深度预测。

    另一种收集深度数据用于训练的方法是要求人们手动注释图像中的深度。虽然标记绝对深度很有挑战性,但人们擅长指定相对(有序)深度关系(例如,比、比)[12]。Zoran等人[44]使用这些相对深度判断来预测点之间的顺序关系。Chen等人利用有序深度标签的众包创建了一个大型数据集,称为“野外深度”[4]。虽然对于预测深度排序很有用(因此我们结合了从图像中自动生成的序数数据),但仅从序数数据学习的深度的欧几里德精度是有限的。

    根据互联网照片进行深度估计。

    十年来,从互联网照片集中估算几何图形一直是一个活跃的研究领域,运动[35,2,37,30]和多视图立体[14,9,32]的结构都取得了进展。这些技术通常对10s到1000s的图像进行操作。使用这些方法,过去的工作已经使用检索和SfM来构建从单个图像中播种的3D模型[31],或者将照片注册到现有的3D模型以传递深度[40]。然而,这项工作需要事先为每个位置建立详细的3D模型,或者在运行时构建一个模型。相反,我们使用SfM+MVS来训练网络,将其推广到新的位置和场景。

    3.MegaDepth数据集

    在本节中,我们将描述如何构建数据集。我们首先从Flickr上下载Landmarks10K数据集中一组拍摄良好的地标的互联网照片[21]。然后,我们使用最先进的SfM和MVS方法在3D中重建每个地标。这产生了每个重建图像的SfM模型以及密集深度图。然而,这些深度图具有显著的噪声和异常值,根据原始深度数据训练深度网络不会产生有用的预测值。因此,我们提出了一系列处理步骤,准备这些深度图以用于学习,并另外使用语义分割来自动生成有序的深度数据。

    3.1.照片校准和重建

    我们使用COLMAP、最先进的SfM系统[30](用于重建相机姿态和稀疏点云)和MVS系统[32](用于生成密集深度图),从每个照片集构建3D模型。我们使用COLMAP是因为我们发现它通过谨慎的增量SfM程序生成高质量的3D模型,但也可以使用其他这样的系统。COLMAP为每个重建的照片I生成深度图D(其中如果COLMAP无法恢复深度,D的一些像素可能是空的),以及其他输出,例如相机参数和稀疏SfM点加上相机可见性

    3.2.深度图细化

    COLMAP的原始深度图包含来自一系列来源的许多异常值,包括:(1)出现在单个图像中但仍被指定(不正确)深度的瞬时对象(人、车等),(2)有噪声的深度不连续性,以及(3)背景深度渗入前景对象。由于立体匹配中固有的模糊性,其他MVS方法表现出类似的问题。图2(b)显示了COLMAP生成的两个示例深度图,说明了这些问题。这些异常值对我们试图训练的深度预测网络具有高度负面影响。为了解决这个问题,我们提出了两种新的深度细化方法,旨在生成高质量的训练数据:

    首先,我们设计了一种基于COLMAP的改进MVS算法,但在深度估计方面更保守,这是基于我们更喜欢较少的训练数据而不是较差的训练数据的想法。COLMAP迭代计算深度图,在每个阶段尝试确保附近深度图之间的几何一致性。该策略的一个不利影响是背景深度可能会“侵蚀”前景对象,因为提高深度图之间一致性的一种方法是一致地预测背景深度(见图2(顶部))。为了抵消这种影响,在COLMAP中的每个深度推断迭代中,我们比较更新前后每个像素的深度值,并保持两者中较小的(更接近的)。然后,我们应用中值滤波器来去除不稳定的深度值。我们在补充材料中详细描述了我们改进的MVS算法。

    第二,我们利用语义分割来增强和过滤深度图,并产生大量有序的深度比较作为额外的训练数据。图2的第二行显示了使用对象感知过滤计算的示例深度图。我们现在详细描述语义分割的使用。

    3.3.通过语义分割进行深度增强

    多视图立体方法可能会对许多对象类型产生问题,包括人和汽车等瞬态对象、难以重建的对象(如电线杆和交通信号灯)以及天空区域。然而,如果我们能够理解图像的语义布局,那么我们可以尝试减轻这些问题,或者至少识别出有问题的像素。我们发现,语义分割的深度学习方法开始变得足够可靠[41]。

    我们提出了语义分割在创建数据集中的三种新用途。首先,我们使用这种分割来去除前景区域中的虚假MVS深度。其次,我们使用分割作为标准,将每张照片分类为提供欧几里德深度或序数深度数据。最后,我们结合语义信息和MVS深度来自动注释有序深度关系,这可以用于帮助MVS无法重建的区域中的训练。

    语义过滤。

    为了处理给定的照片I,我们首先使用PSPNet[41]运行语义分割,PSPNet是一种最近的分割方法,在MIT场景分析数据集(由150个语义类别组成)上训练[42]。然后,我们根据预测的语义类别将像素划分为三个子集:

    1.前景对象,表示为F,对应于经常出现在场景前景中的对象,包括静态前景对象(例如雕像、喷泉)和动态对象(例如人、汽车)。

    2.背景对象,表示为B,包括建筑物、塔楼、山脉等(有关前景/背景类别的详细信息,请参见补充材料。)

    3.天空,表示为S,其在下面描述的深度滤波中被视为特殊情况。

    我们以几种方式使用像素的语义分类。如图2(底部)所示,像人这样的瞬时物体会导致虚假的深度。为了从每个图像I中去除这些,我们考虑前景掩模F的每个连接分量C。如果C中的像素<50%具有重建深度,我们丢弃C中的所有深度。我们使用50%的阈值,而不是简单地去除所有前景深度,因为F中某些物体(如雕塑)上的像素确实可以精确重建(我们发现PSPNet有时会将雕塑和人误认为彼此)。这种对前景深度的简单过滤在深度图质量上产生了很大的改进。此外,我们删除了位于天空区域S内的重建深度,因为这些深度往往是虚假的。

    欧几里得与序数深度。

    对于每个3D模型,我们都有数千张重建的互联网照片,理想情况下,我们将尽可能多地使用这些深度数据进行训练。然而,一些深度图比其他深度图更可靠,这是由于诸如估计的相机姿态的准确性或存在大型封堵器等因素。因此,我们发现将训练限制在高度可靠的深度图的子集是有益的。我们设计了一种简单但有效的方法来计算高质量深度图的子集,通过对重建像素的分数进行阈值处理。特别地,如果图像I(忽略天空区域S)的≥30%由有效深度值组成,那么我们将该图像作为学习欧几里德深度的训练数据。该标准更喜欢没有大的瞬时前景对象的图像(例如,“无自拍”)。同时,这样的前景重图像对于另一个目的非常有用:自动生成用于学习顺序深度关系的训练数据。

    自动顺序深度标记。

    如上所述,MVS重建中经常缺少短暂或难以重建的物体,如人、车和路标。因此,仅使用互联网衍生的数据,我们将缺乏此类对象的真值深度,并且很可能在学习如何重建它们方面做得很差。为了解决这个问题,我们提出了一种新的方法,基于估计的3D几何和语义分割,从我们的训练图像中自动提取有序深度标签。

    让我们将不满足上述“无自拍”标准的照片子集表示为O(“Ordinal”)。对于每个图像I∈O,我们计算两个区域,Ford∈F(基于语义信息)和Bord∈B(基于3D几何信息),使得Ford中的所有像素可能比Bord中的所有图像更接近相机。简言之,Ford由F的大连通分量组成,Bord由B的大分量组成,这些分量也包含I的全深度范围的最后四分之一的有效深度(详见补充信息)。我们发现这种简单的方法非常有效(在成对的顺序关系中,准确率超过95%),这可能是因为自然照片往往以某些常见的方式合成。图3中显示了几个自动顺序深度标签的示例。

    3.4.创建数据集

    我们使用上述方法从世界各地的地标密集地重建200个3D模型,代表约150K个重建图像。在我们提出的过滤之后,我们剩下130K个有效图像。在这些130K张照片中,约100K张图像用于欧几里得深度数据,剩余的30K张图像被用于导出顺序深度数据。我们还将[18]中的图像纳入训练集。这些数据一起构成MegaDepth(MD)数据集,可在http://www.cs.cornell.edu/项目/百万深度/。

    4.深度估计网络

    本节介绍了用于从单个照片预测深度的端到端深度学习算法。

    4.1.网络架构

    我们评估了先前单视图深度预测工作中使用的三个网络:VGG[6]、“沙漏”网络[4]和ResNet架构[19]。其中,沙漏网络表现最好,如第5节所述。

    4.2损失函数

    SfM+MVS生成的3D数据仅达到未知尺度因子,因此我们无法直接比较预测深度和真值深度。然而,如Eigen和Fergus[7]所指出的,深度对的比率在缩放(或在对数深度域中,对数深度对之间的差异)下保持不变。因此,我们在对数域中求解深度图,并使用尺度不变损失函数Lsi进行训练。Lsi包含三个术语:

    尺度不变数据项。

    我们采用了Eigen和Fergus[7]的损失,该损失计算了线性时间内所有对数深度对之间的差的均方误差(MSE)。假设我们有一个预测对数深度图L和一个真值对数深度图L*。Li和L*i表示由像素位置i索引的相应的单个对数深度值。我们表示Ri=Li−L*i,并定义:

    其中n是真值深度图中的有效深度的数量。

    多尺度尺度不变梯度匹配项。

    为了鼓励预测深度图中更平滑的梯度变化和更尖锐的深度不连续性,我们引入了多尺度尺度不变梯度匹配项Lgrad,定义为预测深度图和真值深度图之间对数深度梯度差异的“1惩罚”:

    其中Rk i是位置i和尺度k处的对数深度差图的值。因为损失是在多个尺度上计算的,所以Lgrad捕获了大图像距离上的深度梯度。在我们的实验中,我们使用了四种尺度。我们在图4中说明了Lgrad的效果。

    稳健的有序深度损失。

    受Chen等人[4]的启发,我们的序数深度损失项Lord利用了第3.3节中描述的自动序数关系。在训练期间,对于有序集合O中的每个图像,我们选择一对像素(i,j),其中像素i和j属于前景区域Ford或背景区域Bord。Lord被设计为对少量错误排序的对具有鲁棒性

    其中Pij=−r*ij(Li−Lj),r*iji是i和j之间自动标记的有序深度关系(如果像素i比j更远,则r*ij=1,否则为−1)。c是一个常数集,因此Lord是连续的。如果我们的自动标记方法判断一对点具有可能的深度排序,Lord鼓励一对点的深度差异较大(且有序)。我们在图5中说明了Lord的效果。在我们的测试中,我们基于交叉验证设置τ=0.25。

    5.评估

    在本节中,我们在多个数据集上评估了我们的网络,并与基于各种训练数据训练的几种最先进的深度预测算法进行了比较。在我们的评估中,我们试图回答几个问题,包括:

    •我们接受MD培训的模型在多大程度上推广到从未见过的地点的新互联网照片?

    •深度图处理有多重要?损失函数中的条款有什么影响?

    •我们在MD上训练的模型对来自其他数据集的其他类型图像的推广效果如何?

    第三个问题可能是最有趣的,因为对大量不同数据进行训练的承诺是很好的概括。因此,我们在一个数据集上运行了一组实验训练,并在另一个数据集中进行了测试,结果表明我们的MD数据集具有最佳的泛化性能。

    我们还表明,我们的深度细化策略对于实现良好的泛化至关重要,并表明我们提出的将尺度不变数据项与有序深度损失相结合的损失函数在数量和质量上都提高了预测性能。

    实验设置。

    在我们的MD数据集中的200个重建模型中,我们随机选择46个来形成测试集(在训练过程中看不到的位置)。对于剩余的154个模型,我们将每个模型的图像随机分成训练集和验证集,尺度分别为96%和4%。我们使用MD验证集设置α=0.5和β=0.1。我们在PyTorch[1]中实现了我们的网络,并使用Adam[17]进行了20个时期的训练,批量大小为32。

    为了公平比较,我们使用所有实验的MD数据来训练和验证我们的网络。由于跨数据集测试的性能差异,我们在MD上训练了四个模型,并计算了平均误差(参见每个单独模型性能的补充材料)。

    5.1.MD测试装置的评估和消融研究

    在本小节中,我们描述了在MD训练集上训练和在MD测试集上测试的实验。

    错误度量。

    对于数值评估,我们使用两个尺度不变误差度量(与损失函数一样,由于SfM模型的无标度性质,我们使用尺度不变度量)。第一个度量是尺度不变RMSE(si RMSE)(等式2),它度量精确的数值深度精度。第二项措施是基于保持深度排序。特别是,我们使用了类似于[44,4]的度量,我们称之为SfM不一致率(SDR)。SDR基于与从估计SfM点导出的有序深度关系的不一致率。我们使用稀疏的SfM点而不是密集的MVS,因为我们发现稀疏的Sf M点捕获了一些MVS未重建的结构(例如,灯柱等复杂对象)。我们定义SDR(D,D*),即预测(非对数)深度图D=exp(L)和真值SfM深度D*之间的顺序不一致率,如下:

    其中P是具有可用SfM深度进行比较的像素对的集合,n是成对比较的总数,ord(·,·)是三种深度关系之一(大于、小于和等于):

    我们还将SDR=和SDR6=分别定义为ord(D*i,D*j)=0和ord(D*i,D*j)6=0的不一致率。在我们的实验中,我们将δ=0.1设置为SfM点的不确定性公差。为了提高效率,我们从全集合中采样SfM点来计算这个误差项。

    网络和损失变量的影响。

    我们在MD测试集上评估了三种常用的深度预测网络架构:Eigen等人使用的VGG网络[6]、“沙漏”(HG)网络[4]和ResNets[19]。为了将我们的损失函数与Eigen等人的损失函数进行比较。[6],我们还测试了与[6]在MD上训练的相同的网络和损失函数。[6]使用具有尺度不变损失加上单尺度梯度匹配项的VGG网络。定量结果如表1所示,定性比较如图6所示。我们还评估了仅使用一些损失项训练的方法的变体:(1)仅具有尺度不变数据项Ldata的版本(与[7]中的损失相同),(2)添加了多尺度梯度匹配损失Lgrad的版本,以及(3)包括Lgrad和序数深度损失Lord的完整版本。结果见表2。

    如表1和表2所示,HG架构实现了三种架构中的最佳性能,与其他损耗变体(包括[6](表1的第一行))相比,我们的全损耗训练产生了更好的性能。需要注意的一点是,增加Lord可以显著提高SDR6=,同时增加SDR=。图6显示,我们的联合损失有助于保存深度图的结构,并捕获附近的物体,如人和公共汽车。

    最后,我们实验在MD上训练我们的网络,使用和不使用我们提出的深度细化方法,在三个数据集上进行测试:KITTI、Make3D和DIW。表3所示的结果表明,基于原始MVS深度训练的网络不能很好地概括。我们提出的改进显著提高了预测性能。

    5.2.推广到其他数据集

    我们的3D重建衍生训练数据的一个强大应用是将户外图像推广到地标照片之外。为了评估这一能力,我们在MD上训练了我们的模型,并在三个标准基准上进行了测试:Make3D[28]、KITTI[11]和DIW[4],而没有从这些数据集中看到训练数据。由于我们的深度预测被定义为一个尺度因子,因此对于每个数据集,我们将来自所有非目标数据集训练模型的每个预测与真值值对齐,方法是通过最小二乘解计算真值值与预测深度之比的标量。

    制作3D。为了在Make3D上进行测试,我们遵循[23,19]的协议,将所有图像的大小调整为345×460,并移除大于70m的真值深度(因为Make3D数据在远距离不可靠)。我们只在MD上使用我们的全部损失来训练我们的网络。表4显示了数值结果,包括与在Make3D和非Make3D数据上训练的几种方法的比较,图7显示了我们的模型和其他几个非Make3D训练模型的深度预测。我们在MD上训练的网络在所有非Make3D训练模型中具有最好的性能。最后,表4的最后一行显示,我们在Make3D上微调的模型实现了比现有技术更好的性能。

    基蒂。

    接下来,我们基于[7]的分裂,在KITTI测试集上评估我们的模型。与我们的Make3D实验一样,我们在训练期间不使用KITTI的图像。KITTI数据集与我们的数据集非常不同,由包括难以用SfM/MVS重建的物体(如人行道、汽车和人)的驾驶序列组成。然而,如表5所示,我们的MD训练网络仍然优于在非KITTI数据集上训练的方法。最后,表5的最后一行显示,通过在KITTI训练数据上微调网络,我们可以实现最先进的性能。图8显示了我们的结果与在其他非KITTI数据集上训练的模型之间的视觉比较。我们可以看到,与其他非KITTI数据集相比,我们获得了更好的视觉质量,并且由于我们的有序深度损失,我们的预测可以合理地捕捉附近的物体,如交通标志、汽车和树木。命令。最后,我们在DIW数据集上测试了我们的网络[4]。DIW由具有一般场景结构的互联网照片组成。DIW中的每个图像都有一对具有人类标记的有序深度关系的点。与Make3D和KITTI一样,我们在训练期间不使用DIW数据。对于DIW,质量通过加权人类不一致率(WHDR)来计算,WHDR测量预测深度图和测试集人类注释之间的不一致频率。数值结果如表6所示。我们的MD训练网络在所有未经DIW训练的模型中再次具有最佳性能。图9在DIW测试图像上可视化了我们的预测和其他非DIW训练网络的预测。我们的预测在视觉上实现了更好的深度关系。我们的方法甚至适用于办公室和特写等具有挑战性的场景。

    6.结论

    我们提出了互联网衍生的SfM+MVS数据的一种新用途:为单视图深度预测生成大量训练数据。我们证明,该数据可用于预测训练期间从未观测到的位置的最先进深度图,并很好地推广到其他数据集。然而,我们的方法也有一些局限性。即使是静态场景,MVS方法仍然无法完美地重建,特别是当存在倾斜表面(例如,地面)、薄或复杂物体(例如,灯柱)和困难材料(例如,闪亮的玻璃)时。我们的方法不能预测公制深度;SfM未来的工作可以使用学习或语义信息来正确缩放场景。我们的数据集目前偏向户外地标,但通过缩放到更大的输入照片集,我们将发现更多样化的场景。尽管存在这些局限性,我们的工作还是将互联网作为几何学习问题的有趣、有用的数据来源。

    相关文章

      网友评论

          本文标题:深度估计:MegaDepth

          本文链接:https://www.haomeiwen.com/subject/moracdtx.html