Monocular Depth Estimation using Diffusion Models

本文介绍了一种名为DepthGen的单目深度估计方法,利用去噪扩散模型克服训练数据噪声和不完整性的挑战。通过预训练和监督微调,DepthGen在NYU和KITTI数据集上表现出色,且能处理深度模糊和缺失值,支持文本到3D生成。
摘要由CSDN通过智能技术生成

基于扩散模型的单目深度估计

论文链接:https://arxiv.org/abs/2302.14816

论文项目地址:DepthGen

出处:CVPR2023

1. 摘要

作者受高保真图像生成方面取得成功的启发,使用【去噪扩散模型】来进行单目深度估计。

方法:具体地,引入了新的方法来解决训练数据中由于噪声、不完整的深度图而产生的问题,包括分步去噪扩散、L1损失和训练过程中的深度填充。为了应对监督训练数据的有限可用性,作者在自监督的图到图翻译任务上使用预训练

效果:通过一个通用的损失和架构,论文的DepthGen模型在室内NYU数据集上取得了SOTA性能,在室外KITTI数据集上也取得了接近SOTA的结果。

此外,通过多模态后验概率,DepthGen能够比较自然地解决深度模糊的问题(例如,来自透明表面),并且其零样本性能与深度填充(扩散模型易于插补,DepthGen 还可用于推断缺失的深度值。)相结合,实现了简单但有效的文本到3D的pipeline。

2. Intro

该论文将扩散模型应用于单目深度估计。用于单目深度推理的训练扩散模型中的两个关键问题涉及可用训练数据的数量和质量

针对数量限制:多数现存的数据集包含噪声并且不完整,这导致扩散模型在训练和测试之间的概率分布转移有问题。作者建议使用 L1 损失来提高鲁棒性,在训练期间填充缺失的深度值,并引入阶跃展开去噪扩散。

针对质量限制:作者考虑使用自我监督的预训练。作者提出了一个训练pipeline,包括多任务自我监督预训练,然后是监督微调。该模型可以使用零样本,也可以针对特定域进一步微调。(这利用了扩散模型在着色和修复等任务上的强大性能,捕获了可能转移到其他任务的丰富图像结构)

总结贡献:

  • 引入了 DepthGen,这是一种用于单目深度估计的扩散模型,包括自监督预训练和监督微调。在没有专门的损失函数或架构的情况下,它在NYU数据集基准测试中实现了 0.074 的 SOTA 相对误差。
  • 为了在噪声、不完整的深度数据上训练扩散模型,建议使用 L1 损失、深度填充和逐步展开去噪扩散 (SUD) 来减少训练和推理之间的潜在分布偏移
  • 论文表明,DepthGen 支持多模态深度推理和缺失深度的插补,例如,用于文本到 3D 生成和新视图合成

3. 方法DepthGen

图注:培训架构。给定真实深度图,首先使用最近邻插值来填充缺失的深度。然后,按照标准扩散训练,将噪声添加到深度图,并训练神经网络来预测给定 RGB 图像和噪声深度图的噪声。在微调过程中,展开前向传递的一步,并用预测替换真实深度图

在虚线部分,是用逐步展开的denoised predicted depth来代替插值填充过的真实GT depth

3.1 背景知识

扩散模型是潜变量生成模型,经过训练将高斯噪声样本转换为数据分布样本。扩散由两个过程组成,一个前向过程:随着“时间”t 从 0 增加到 1,通过添加噪声来逐渐消除数据,以及一个学习的生成过程:该过程反转前向过程,从 t = 1 时刻的随机噪声样本开始,随着 t 减小到 0 逐步添加结构(衰减噪声)。条件扩散模型是通过限制逆过程的步骤来实现。在深度估计的情况下,条件信号(输入)是 RGB 图像 x,目标是深度图上的条件分布 p(y | x)。

扩散模型的核心是一个去噪网络 f_\theta,经过训练可以在某个时间步长 t 获取噪声样本,并预测噪声较小的样本。在前向过程中使用高斯噪声,可以将转换序列上的训练目标(随着 t 缓慢减小)表示为非线性回归损失的总和,即

 其中\epsilon \sim \mathcal{N}(0,1)标准正态分布,t\sim U(0,1)均匀分布,其中 \gamma_t > 0 是使用预先确定的噪声表计算的。对于推理(即采样),作者绘制一个随机噪声样本 y_1,然后迭代地使用 f_{\theta} 来估计噪声,从中可以计算下一个潜在样本 y_s,其中 s < t

3.2 自监督预训练

DepthGen 训练包括自监督预训练,然后对 RGB-D 数据进行监督训练。预训练模型是自监督多任务扩散模型。下面从头开始训练 Palette 模型,执行四个图像到图像的转换任务,即着色、修复、去裁剪和 JPEG 伪影去除。

3.3 使用有噪声、深度不完整的数据进行监督训练

在预训练之后,并对架构进行少量修改(参见第 4.2 节),继续对成对的 RGB 和深度数据进行训练。虽然概念上很简单,但可用于深度估计的训练数据集提出了巨大的挑战。深度图包含噪声,并且通常包含缺少深度值的区域。对于简单的前馈网络或回归模型来说,孔洞在很大程度上是无关紧要的,因为人们只能反向传播具有已知深度值的像素子集的损失,而忽略那些丢失深度的像素。然而,对于扩散模型来说,训练数据的这种损坏是有问题的。

扩散模型通过迭代细化执行采样——在该论文的例子中,深度图 y 以 RGB 图像 x 为条件。它以高斯噪声 y1 的样本开始,以预测分布 p(y0 | x) 的样本结束。从时间 t 到 s(其中 s < t)的细化步骤通过从参数化分布 p_{\theta}(y_s | y_t, x) 进行采样来进行。

简而言之,在推理过程中,每一步都对上一步的输出进行操作。相比之下,在训练时,不同的步骤在某种程度上是解耦的(参见方程 1),其中去噪网络在GT深度图的噪声版本上运行,而不是前一次迭代的输出(让人想起训练 RNN 中的教学强制teaching forcing) 。这引入了训练和推理之间的分布转变,因为带有孔的噪声训练深度图的边缘分布可能与推理时噪声深度的分布有很大不同,理想情况下(例如来自完美、无噪声的传感器),这应该是真实完整深度图的噪声版本(因为我们不学习损失中孔的分布)。这对模型性能有显着的负面影响。训练深度图中的结构化或重尾噪声进一步加剧了这个问题。

作者发现,在训练过程中进行以下修改可以有效缓解这些问题:

  • 深度插值
  • 逐步展开的去噪扩散
  • L1损失

3.3.1 深度插值

为了减少训练和推理之间的分布变化,需要估算缺失的深度值。作者发现最近邻插值足以估算室内训练数据中缺失的深度。对于室外数据,继续使用最近邻插值,天空区域除外,因为它们通常很大,并且比图像中的相邻物体距离相机更远。使用现成的天空分割器,然后将所有天空像素设置为最大建模深度(此处为 80m)。尽管对缺失深度进行了插补,但作者注意到训练损失仅在具有已知(与填充)深度的像素处计算。

3.3.2 逐步展开的去噪扩散

由于训练和推理之间存在潜在边缘分布 y_t 的分布转移问题,解决该问题的另一种方法是使用模型的输出而不是GT深度来构造 y_t具体来说,可以通过稍微修改训练过程来运行模型的一次前向传递,并通过向模型的输出而不是训练深度图添加噪声来构建 y_t 来实现这一点。训练过程不会为此前向传播传播梯度。作者发现这会使 TPU v4 上的训练速度减慢约 15%。作者将此称为逐步展开去噪扩散 (SUD)。

作者仅在微调期间执行 SUD,而不是在监督深度预训练期间执行 SUD。在训练早期,深度预测可能不准确。因此,噪声训练深度图上的潜在边缘将比通过向模型输出添加噪声产生的边缘更接近所需的真实边缘。因此,不建议在监督预训练中尽早进行 SUD。可以考虑使用课程在监督预训练的后期逐步引入SUD,但这也引入了额外的超参数,所以作者只是在微调时调用SUD,并将对课程的探索留给以后的工作。

这种训练/推理分布偏移问题类似于自回归模型中的暴露偏差问题,其中不匹配是由训练期间teaching forcing 引起的。

最后,作者注意到(Ning et al., 2023)在深度数据上训练矢量量化器时面临类似的问题。他们通过按照精心选择的掩蔽比率综合添加更多孔来解决这个问题。相比之下,作者更偏向于自己的方法,因为最近邻填充是无超参数的,并且逐步展开的去噪扩散可以更普遍地适用于具有稀疏数据的其他任务。

3.3.3 采用L1损失函数

方程1中的 L2 损失适用于具有加性高斯噪声的无噪声训练数据,据报道,在图像到图像转换模型的训练过程中,L1 损失具有良好的性能。考虑到深度数据中可能存在大量噪声,特别是对于大深度和近孔,论文假设 L1 损失提供的鲁棒性也可能在训练 RGB 到深度扩散模型时有用。

4. 实验

4.1 数据集

1. 对于无监督预训练

使用 ImageNet-1KPlaces365数据集并训练着色、修复、取消裁剪和 JPEG 解压缩的自监督任务。

2. 对于室内模型的监督图像到深度预训练,使用以下两个数据集(在批次级别混合数据集)

  • ScanNet:使用类似 Kinect v1 的传感器捕获的 250 万张图像的数据集。它提供 640 × 480 的深度图和 1296 × 968 的 RGB 图像。
  • SceneNet RGB-D:通过渲染 SceneNet 场景中的 ShapeNet对象而生成的 500 万张图像的合成数据集,分辨率为 320 × 240.

对于室内微调和评估,使用 NYU depth v2,这是用于评估室内深度预测模型的常用数据集。它提供 640 × 480 分辨率的对齐图像和深度图。使用由 50k 图像用于训练和 654 图像用于评估组成的官方分割。在评估之前,使用双线性上采样将我们模型的预测深度图调整为全分辨率。根据先前的工作对提出的裁剪区域进行评估。

3. 对于户外模型训练,使用 Waymo 开放数据集

这是一个由约 20 万帧组成的大规模驾驶数据集。每帧提供来自 5 个摄像头的 RGB 图像和 LiDAR 地图。仅使用来自前、左前和右前摄像头以及顶部 LiDAR 的 RGB 图像来构建约 600k 对齐的 RGB 深度图。

对于后续的微调和评估,使用 KITTI ,这是一个户外驾驶数据集,它提供分辨率接近 1226 × 370 的 RGB 图像和 LiDAR 扫描。使用,包括 26k 训练图像和 652 测试图像。在评估之前,使用双线性插值将 DepthGen 的预测深度上采样到全分辨率。根据先前的工作对中提出的裁剪区域进行评估。

4. 数据增强和预处理

使用随机水平翻转数据增强进行监督深度训练。在需要时,使用双线性插值来调整图像和深度图的大小以适应模型的训练分辨率。扩散模型期望输入并生成范围为 [−1., 1.] 的输出。对于室内模型,使用的最大深度为 10 米,对于室外模型,将深度图标准化为最大深度为 80 米的范围。

4.2 框架

扩散模型的主要架构是为 DDPM 模型开发的 U-Net,对于 DepthGen,采用了为 Imagen 开发的 Efficient U-Net 架构。 Efficient U-Net 架构比之前工作中使用的 UNet 更高效,因为它具有更少的自注意力层、更少的参数以及在更高分辨率下的计算量更少,以及其他使其非常适合训练中分辨率扩散模型的调整。

作者对此架构进行了一些细微的更改,以使其适应图像到深度模型。删除文本交叉注意力层,但保留自注意力层。 Efficient U-Net 有 6 个输入通道和 3 个输出通道,因为目标是 RGB 图像(输入由 3 通道源 RGB 图像和沿通道维度连接的 3 通道噪声目标图像组成)。对于深度模型,由于论文方法有标量输出图像,因此将架构修改为具有四个输入通道和一个输出通道,这意味着需要在监督深度预训练阶段之前重新初始化输入和输出卷积核。

解决办法:重新训练的 Palette 模型是针对分辨率为 256 × 256 的图像进行训练的。对于训练深度模型,选择接近此分辨率的分辨率,同时保留原始深度训练数据集的纵横比。室内模型在 320 × 240 下进行训练。对于 Waymo,使用 384 × 256,对于 KITTI 416 × 128。该模型不包含学习的位置嵌入,因此可以轻松地在不同分辨率下进行预训练和微调。

4.3 超参数、采样器、评价指标

4.3.1. 超参数

自监督模型训练 280 万步,以L2 作为损失函数,小批量大小为 512。其他超参数与原始 Palette 论文中的类似。深度模型使用 L1 损失进行训练。在监督深度预训练期间使用恒定的学习率 10^{-4},但在微调期间切换到略低的学习率 3^{-5},作者发现这取得了稍微更好的结果。作者对所有模型进行超过 10k 步的学习率预热。所有深度模型均使用较小的小批量大小 64 进行训练。

室内深度模型在 ScanNet 和 SceneNet RGBD 的混合上进行 2M 步的训练,然后在 NYU 上进行 50k 步的微调。室外深度模型在 Waymo 上训练 0.9M 步,并在 KITTI 上微调 50k 步。

4.3.2. 采样器

论文使用 DDPM 祖先采样器,具有 128 个去噪步骤。进一步增加去噪步骤的数量并没有极大地提高性能。论文尚未探索渐进式蒸馏以加快采样速度。作者相信生成图像模型的蒸馏结果应该很好地转移到图像到深度模型,从而缩小扩散采样和单步深度估计模型的速度之间的差距。

4.3.3. 评估指标

对于 NYU depth v2 和 KITTI 数据集,评估指标为绝对相对误差 (REL)、均方根误差 (RMS) 和准确度指标(对于 i ∈ 1, 2, 3,δi < 1.25i)。对于NYU数据集,还设置对数深度的绝对误差 (log10)作为评估指标。对于 KITTI,还设置了平方相对误差 (Sq-rel) 和对数深度的均方根误差 (RMS log)。

4.4 实验

4.4.1. 实验结果

表 1 显示了 NYU depth v2 的结果。实现了最先进的REL 0.074。

表 2 显示了 KITTI 的结果,DepthGen 的表现与之前的工作具有竞争力。

 4.4.2. 消融实验

 作者认为预训练和考虑缺失深度对于模型性能至关重要

表3表明,自监督预训练和监督深度预训练都很重要,其中监督深度训练影响更大,这是可以预料的。

表 4 显示深度填充对于室外 KITTI 数据集极其重要。它对 NYU 的影响较小,这是可以理解的,因为 KITTI 的深度图更稀疏。在缺乏填充深度图的情况下,逐步展开的去噪扩散可显着改善结果,尤其是在 KITTI 上。即使进行深度填充,SUD 也能持续提高室内和室外数据集的性能。

此外,作者取消了表 5 中损失函数的选择。发现 L1 损失比 L2 产生更好的性能,可能是因为 L1 对较大深度的噪声更稳健。 

4.5 多模态和新颖视角合成

4.5.1. 多模态

扩散模型的优势之一是它们能够捕获复杂的多峰分布。这可以有效地表示深度不确定性,特别是在可能存在自然深度模糊性的情况下,例如,在透过窗户观看时透明的情况下。图 2 和图 3 显示了 NYU 和 KITTI 数据集上的多个样本,这些样本表明该模型捕获了传感器数据中的多模态,并在出现歧义的情况下提供了合理的样本。

 4.5.2 新颖视角合成

扩散模型的优点之一是可以轻松地以图像(或深度图)的其余部分(或深度图)为条件,对图像(或深度图)的一部分进行零样本插补。这里作者利用它来构建有限但有效的文本到 3D 场景生成管道。

如图 5 所示使用 Imagen 文本到图像模型来生成图像(给定文本 c),对其应用 DepthGen(零样本)来采样相应的深度图。然后通过移动相机,从新的相机姿势渲染 RGBD 点云。当然,这仅提供新帧中像素子集的 RGB 和深度值,因为视场不同。使用扩散模型可以轻松推断出丢失的像素。

令 xa 和 ya 分别为从新相机姿势渲染的像素位置处的 RGB 和深度值,并令 xb 和 yb 对应于原始帧中不可见的视线。首先使用 Imagen 编辑器的取消裁剪/修复功能推断缺失的 RGB 值,即 p(xb|xa, c)。然后使用 DepthGen 来估算缺失的深度值,即从 p(yb|ya, [xa, xb]) 采样。使用替换方法对以现有深度 ya 和图像 x = [xa, xb] 为条件的未知深度 yb 进行采样。

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值