论文笔记:DepthLab: From Partial to Complete

是一篇很精炼的论文,不知道咋总结了,就差全文翻译了,不过在这里我主要关注3D部分,因为他的pipeline是基于SD的,框图也比较清晰易懂,非常细节的内容可以回头看论文,哈哈哈,给作者大佬们点赞

1.abstract

        由于数据采集不完整和视角改变等多种原因,缺失值仍然是深度数据在广泛应用中的常见挑战。 这项工作通过 DepthLab 弥补了这一差距,DepthLab 是一种由图像扩散先验支持的基础深度修复模型我们的模型具有两个显着的优势:(1)它表现出对深度不足区域的弹性,为连续区域和孤立点提供可靠的补全,(2)在填充缺失值时,它忠实地保持了与条件已知深度的尺度一致性。 凭借这些优势,我们的方法在各种下游任务中证明了其价值,包括 3D 场景修复、文本到 3D 场景生成、使用 DUST3R 的稀疏视图重建以及 LiDAR 深度补全,在数值性能和性能方面都超过了当前的解决方案

2.Introduction

        深度修复是重建图像中丢失或遮挡的深度信息的任务,在许多领域都至关重要,包括 3D 视觉 [25, 34, 91]、机器人 [1, 32] 和AR [53, 61]。 如图 1 所示,强大的深度修复模型可以实现高质量的 3D 场景完成、编辑、重建和生成。 先前的深度修复研究可分为两种主要方法。 第一种方法 [12,26,48,65,71,89] 侧重于将全局稀疏 LiDAR 深度 [16] 数据完成为密集深度,通常在固定数据集上进行训练和测试。 然而,这些模型缺乏通用性,并且在不同下游任务中的适用性有限。 第二种方法[15,31,72,75,77]采用单目深度估计器来推断单个图像的深度,将修复区域与已知深度对齐。 由于估计深度与现有几何形状之间的不对准,这些方法经常会出现严重的几何不一致,特别是沿边缘最近的研究 [41] 将 RGB 图像合并到 UNet 输入中,作为训练深度修复模型的指导,但在复杂场景和修复大的缺失区域时,其性能仍然不理想。

        为此,我们提出了 DepthLab,一种 RGB 图像条件深度修复的基础模型,它引入了双分支深度修复扩散框架。 具体来说,该框架通过参考 U-Net 处理单个参考图像,提取 RGB 特征作为条件输入同时,已知深度和需要修复的掩模指示区域被输入深度估计 U-Net提取的 RGB 特征逐渐逐层集成到深度估计 U-Net 中,以指导修复过程。在训练过程中,我们对已知深度应用随机尺度归一化,以减轻已知区域中非全局极值引起的正则化溢出。 与 Marigold [31] 类似,我们的模型仅需要合成 RGBD 数据即可在几天的 GPU 内进行训练。 受益于扩散模型强大的先验,DepthLab在不同场景下展现出强大的泛化能力。

        如图1所示,得益于精确的深度修复,DepthLab支持多种下游应用。 (1) 3D场景修复[41]:在3D场景中,我们首先从摆好的参考视图中修复图像修复区域的深度,然后将点投影到3D空间中以实现最佳初始化,这显着提高了质量和速度 3D场景修复 (2) 文本到场景生成[83]:我们的方法通过消除对齐的需要,极大地改进了从单个图像生成 3D 场景的过程。这一改进有效地缓解了边缘分离的问题 之前由于修复和已知深度之间的几何不一致而产生的问题,从而显着增强了生成场景的连贯性和质量。(3)基于DUST3R的稀疏视图重建:InstantSplat[14]利用DUST3R[68]中的点云作为无SfM重建和新视图合成的初始化。通过将噪声作为潜在输入添加到DUST3R深度图中,我们的方法对缺乏交叉视点对应的区域的深度进行细化,从而产生更精确、几何一致的深度图。这些精细化的深度贴图进一步增强了InstantSplat的初始点云(4)激光雷达深度完成:传感器深度完成[89]是与深度估计相关的一项重要任务。与在单个数据集上训练和测试的现有方法(如NYUv2[46])不同,我们的方法在零镜头设置下可以获得类似的结果,并且可以通过最小的微调提供更好的结果。为了进行更全面的评估,我们通过对需要修复的区域应用不同类型的随机遮罩来评估其在深度估计基准上的有效性。

        这里只关注前三块。

2. Related Work

2.1. Depth Completion

        深度补全[22,39,42,43,70,74]是计算机视觉中的一项关键任务,特别是随着有源深度传感器的兴起。它的目标是从传感器提供的稀疏GT测量中估计准确的深度图。然而,现有的方法[12,26,48,65,70,89,90]往往是在固定的数据集上训练和评估的,这限制了它们的泛化能力,并且许多方法依赖于繁琐的处理流水线。

2.2. Monocular Depth Estimation

        单目深度估计是计算机视觉中的一项关键任务,主要通过判别和生成方法来实现。 判别方法通常将深度预测为绝对深度 [2, 3, 29, 36, 44, 86] 或相对深度 [13, 51, 52, 76, 77, 80, 81, 87]。 最近,生成模型 [4,23,88],特别是扩散模型,在深度估计中得到了普及。 DDP [27]、DepthGen [57]、Marigold [31] 和 GeoWizard [15] 等方法利用扩散过程来生成高质量的深度图,他们通常以缓慢采样为代价。 基于流匹配的模型 [18] 的出现是为了缓解这些限制,提供更快的采样。 尽管单目深度估计取得了进步,但将估计深度与已知数据对齐通常会导致几何不一致。 我们的工作通过为各种任务引入强大的基础深度修复模型来解决这个问题。

2.3. Downstream Tasks with Known Partial Depth

        除了传统的深度完成任务外,许多 3D 视觉任务还涉及部分已知的深度信息:(1)3D 场景修复侧重于填充 3D 空间的缺失部分,例如移除对象并为修复区域生成合理的几何形状和纹理。 早期的作品主要解决几何补全[10,11,19,30,49,62,69],而最近的方法侧重于联合修复纹理和几何[6,24,33,40,45,79]。 可以渲染此类 3D 场景以获得深度,其中未更改的区域用作已知的部分深度信息。 (2) 3D 场景生成涉及利用强大的生成先验和深度估计,根据单个图像或文本提示等输入创建 3D 内容。 最近的方法[8,20,35,47,83,84,92]改变相机视点,对扭曲的图像执行RGB修复,然后估计深度,将其与扭曲的深度对齐。 相反,我们的方法将扭曲深度视为已知,将现有的两步过程表述为以已知比例为条件的深度修复。 (3) DUST3R [68] 提出了一种新颖的 3D 重建管道,该管道在稀疏视图上运行,无需任何相机校准或姿势的先验知识。 最近,一些作品 [38,60,64] 利用 COLMAP [58] 或 DUST3R 中的初始点云进行后续任务,例如 3D 场景重建 [14]、新颖的视图合成 [85] 和 4D 场景生成 [7]。 然而,DUST3R 很难在没有视点重叠的区域中进行准确的重建。 我们的方法利用来自具有像素对应关系的区域的深度数据来增强缺乏匹配的区域的深度

3. Method

        给定原始(不完整或失真)深度图,指示修复目标区域的二值掩码,以及条件RGB图像,我们的目标是使用RGB图像来预测完整的深度图。这就要在保持未掩蔽区域中的深度值的同时准确地估计掩蔽区域中的深度。这一过程自然地将估计深度与现有几何体对齐,消除了已知修复区域和目标修复区域之间的不一致

        为了实现这一目标,我们引入了一种基于双分支扩散的深度修复框架包括用于 RGB 特征提取的参考 U-Net 和以原始深度和修复掩模作为输入的估计 U-Net。 我们没有使用常用的文本条件,而是利用 CLIP 图像编码器的交叉注意力来捕获丰富的语义信息。 通过参考 U-Net 和估计 U-Net 之间的注意力进行逐层特征融合,实现更细粒度的视觉引导。这种设计使DepthLab能够取得显著的效果,即使是对于大的修复区域或复杂的RGB图像,如图2。

3.1. Network Design

        两个分支都使用 Marigold [31] 作为基础模型,并根据 Stable Diffusion V2 [56] 进行了微调。 这种设计无需学习从RGB到深度的域转移过程,提高了训练效率。Marigold 如下, 是一个利用SD pipeline来估计深度的方法:

       以上是Marigold的简单介绍

         深度编码器和解码器: 我们使用VAE编码器 E 将 RGB 图像及其相应的深度图编码到latent空间中。 编码深度图的方式请查看上面的Marigold ,由于编码器 E 最初是为三通道 RGB 输入设计的,因此单通道深度图在三个通道之间复制以匹配 RGB 格式。 值得注意的是,由于 VAE 编码器适用于非稀疏输入,因此我们在编码之前应用最近邻插值来致密稀疏深度图在推理过程中,使用解码器 D 对step t = 0 处的去噪深度latent编码 进行解码,并将三个通道的平均值用作预测深度图。 与 Marigold 估计相对深度并使用最小二乘优化来获得度量深度不同,我们的深度修复旨在根据已知深度区域的值和比例直接估计度量深度图。 

        估计Unet用来估计的去噪Unet的输入由三个部分组成:噪声深度latent编码,masked latent和encoded mask,它们串联在一起变成12*h*w维度。latent depth representations是具有由VAE编码产生的4个通道,并且(h,w)是与原始输入维度(H,W)相比向下采样8倍的空间维度。为了更准确地保存掩码信息,而不是像传统的图像修复方法[28,93]中那样简单地对掩码进行下采样,我们使用VAE编码器E对mask进行编码获得,有效地保留了稀疏和细粒度的信息

        在训练过程中,通过将初始深度图d编码到latent空间,并在步骤t添加噪声来获得噪声潜在深度,通过对GT深度图进行随机mask,然后在修复区域中进行最近邻内插值并通过VAE进行编码来生成masked depth latent。由于SD2的VAE[56]擅长重建密集信息,这种方法更好地保留了稀疏点和复杂边缘边界上的已知深度值

参考UnetInFusion [41] 将单个参考图像输入编码器,随后连接了image latent with noisy depth latent、masked depth latent、downsampled mask,总共有 13 个通道。但是这种方法可能会丢失区域深度信息或难以生成清晰的深度边缘,特别是在修复大面积或使用复杂的参考图像时。 最近的研究 [21, 73] 表明额外的 U-Net 可以从参考图像中提取更细粒度的特征。 我们采用了类似的架构。 我们首先分别从Reference UNet和Estimation Denoising U-Net获得两个特征图,。 然后我们沿着宽度维度连接这些特征图,得到。然后,我们对连接的特征图应用自注意力操作,并提取结果特征图的前半部分作为输出。 这样能够在训练期间利用基础模型每一层的细粒度语义特征。 此外,由于参考 U-Net 和估计去噪 U-Net 共享相同的架构和初始权重——均在 Marigold [31] 上进行预训练——估计去噪 U-Net 可以在同一网络中选择性地从参考 U-Net 中学习相关特征。 特征空间

3.2 Training Protocol

        主要关注一下mask是怎么加的

        为了最大限度地覆盖大量下游任务,采用了各种掩蔽策略。最初,我们从笔划、圆圈、正方形或这些形状的随机组合中随机选择来创建蒙版。然后,为了增强深度完成任务:从传感器采集的稀疏深度数据中恢复完整的深度图,我们使用随机点mask,其中只有0.1%-2%的点被设置为已知。最后,对于改进的对象级修复,我们利用接地SAM[54]来标注训练数据,然后根据它们的置信度分数来过滤掩码。总体而言,多种掩蔽策略的结合应用进一步增强了该方法的稳健性。

4.Experiments

        主要关注在下游任务中的效果

4.3 Applications

1.3D高斯修复

首先,我们使用Gaussian Grouping[78]来分割和去除部分高斯。然后将SDXL修复模型[50]应用于在参考视图中渲染的图像。 修复后的 RGB 图像随后用作完成该参考视图的深度信息的指导。 然后将这些点反投影到三维空间中以实现最佳初始化。 如图4所示,由于修复和原始高斯之间的几何一致性以及像素和修复高斯之间的对齐,对修复图像进行简单编辑就可以在修复区域中进行纹理修改和对象插入。

        这里是Gaussian Grouping的介绍,主要是利用SAM来做mask,然后反投影到对应部分的高斯球,再经过训练这样的一个pipeline

2.文本到 3D 场景生成

         最近的方法 [8,47,92] 首先将单视图深度估计投影到 3D 场景上,以从给定的视点创建初始点云。 然后旋转相机以计算扭曲图像和扭曲深度。 在对扭曲的 RGB 图像进行修复之后,应用单眼深度估计,并将估计的深度与之前扭曲的深度对齐。 然后,对齐的深度数据不会投影回原始点云。 随着视角的改变,这个过程会重复进行。 然而,如图5所示,以LucidDreamer[8]为例,这种方法存在以下问题:在不同尺度的深度对齐过程中出现几何不一致,对 Inpainted 区域的深度精度产生不利影响。相比之下,我们的模型可以直接将 inpainted 图像和 warped depth 作为输入,无需对齐即可生成几何一致的深度图

        下面这是LucidDreamer,挺好玩的一个工作

3.使用 DUST3R 重建

         DUST3R [68] 从稀疏视图引入了新的 3D 重建流程,无需有关相机校准或姿势的先验信息。 该方法可以提供密集的像素到像素和像素到点的对应关系,使其适用于各种 3D 视觉任务,包括深度预测。 然而,我们观察到 DUST3R 主要在具有像素对应的点上提供高质量的深度预测,同时尽力为不同视图之间没有对应的点生成清晰的深度边缘

        为了克服这个限制,我们针对对应关系较弱或不存在引入了一种改进区域深度估计的框架我们的方法开始通过为没有任何源图像匹配的像素生成掩模。 然后通过我们的方法对这些不匹配区域进行细化我们采用VAE将 DUST3R 的初始深度估计编码到latent空间中,添加噪声以产生noisy latents。 匹配点处的深度被编码为masked depth latents。 把这些输入到我们的模型中,以生成具有增强的准确性和空间一致性的精细深度图。 我们在 InstanSplat [14] 上评估我们的方法,InstanSplat 是一种稀疏视图、SfM-free的GS方法,该方法使用 DUST3R 的预测点云进行新颖的视图合成。 通过将增强的深度图投影到 3D 空间中,我们用这个框架refined的数据(想知道这里是怎么根据补充后的深度图得到DUST3R 稠密点云的?需要看看release的代码)替换 DUST3R 的原始点云作为 InstanSplat 的输入。 如图 6 所示,我们的方法有效地锐化了 DUST3R 的初始深度,显着提高了GS渲染质量。 我们还在补充材料中提供定量比较。

5.Conclusion

        在这项工作中,我们引入了 DepthLab,这是一个强大的深度修复框架,旨在通过利用 RGB 图像和已知深度作为条件输入来处理复杂的场景。 我们的方法保持几何一致性,确保估计的深度与现有结构无缝对齐。 通过利用预训练扩散模型中的先验知识,DepthLab 展示了跨各种深度修复任务的显着泛化能力。 其在多个基准测试和应用程序中的卓越性能证明了这一点,包括 3D 场景生成、高斯修复、LiDAR 深度补全和稀疏视图重建。 我们的实验展示了我们方法的稳健性,强调了其提高深度精度和下游 3D 场景质量的能力。 我们设想 DepthLab 成为更广泛任务的基础模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/64691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode--排序算法(堆排序、归并排序、快速排序)

排序算法 归并排序算法思路代码时间复杂度 堆排序什么是堆?如何维护堆?如何建堆?堆排序时间复杂度 快速排序算法思想代码时间复杂度 归并排序 算法思路 归并排序算法有两个基本的操作,一个是分,也就是把原数组划分成…

ShardingSphere-Proxy分表场景:go测试案例

接续上篇文章《ShardingSphere-Proxy分表场景测试案例》 go测试用例: package mainimport ("fmt""math/rand""time""github.com/bwmarrin/snowflake""gorm.io/driver/mysql""gorm.io/gorm""gor…

主流在售AI电子宠物产品

市面上已经有许多类型的AI电子宠物产品,它们各具特色,旨在提供情感陪伴、教育娱乐以及智能互动等功能。以下是几款在市场上较为知名的AI电子宠物玩具,涵盖了不同的形态和技术特点: 1. Moflin 制造商:日本消费电子公司…

Debian-linux运维-docker安装和配置

腾讯云搭建docker官方文档:https://cloud.tencent.com/document/product/213/46000 阿里云安装Docker官方文档:https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance 天翼云常见docker源配置指导:htt…

【机器学习 | 数据挖掘】时间序列算法

时间序列是按时间顺序排列的、随时间变化且相互关联的数据序列。分析时间序列的方法构成数据分析的一个重要领域,即时间序列分析。以下是对时间序列算法的详细介绍: 一、时间序列的分类 时间序列根据所研究的依据不同,可有不同的分类&#…

Qt6.8.1 Mingw13.1 编译opencv4.10时cannot convert ‘char*‘ to ‘LPWSTR

当选择build_world时出错 G:\ForOpencv4.10\opencv-4.10.0\modules\core\src\utils\filesystem.cpp: In function cv::String cv::utils::fs::getCacheDirectory(const char*, const char*): G:\ForOpencv4.10\opencv-4.10.0\modules\core\src\utils\filesystem.cpp:442:43: e…

MIT S081 Lab 2 System Calls

Lab链接 一 实现trace功能 1 题目要求 In this assignment you will add a system call tracing feature that may help you when debugging later labs. You’ll create a new trace system call that will control tracing. It should take one argument, an integer “ma…

[Linux] 服务器CPU信息

(1)查看CPU信息(型号) cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c输出:可以看到有128个虚拟CPU核心,型号是后面一串 128 Intel(R) Xeon(R) Platinum 8336C CPU 2.30GHz(2&…

通过无障碍服务(AccessibilityService)实现Android设备全局水印显示

一、无障碍功能简介 首先我们先来了解下无障碍功能的官方介绍: 无障碍服务仅应用于帮助残障用户使用 Android 设备和应用。它们在后台运行,并在触发 AccessibilityEvents 时接收系统的回调。此类事件表示用户界面中的某些状态转换,例如焦点已…

java中多线程的一些常见操作

Java 中的多线程是通过并发编程来提高应用程序的效率和响应速度。Java 提供了多个机制和类来支持多线程编程,包括继承 Thread 类、实现 Runnable 接口、使用线程池等。以下是 Java 中一些常见的多线程操作和应用场景。 1. 创建线程 1.1 通过继承 Thread 类创建线程…

使用 Docker 搭建 Hadoop 集群

1.1. 启用 WSL 与虚拟机平台 1.1.1. 启用功能 启用 WSL并使用 Moba 连接-CSDN博客 1.2 安装 Docker Desktop 最新版本链接:Docker Desktop: The #1 Containerization Tool for Developers | Docker 指定版本链接:Docker Desktop release notes | Do…

【每日学点鸿蒙知识】广告ID、NFC手机充值、CSS支持语法、PC与模拟器交互、SO热更新等

1、HamonyOS 样机获取成功返回Oaid为00000000-0000-0000-0000-000000000000? 请求授权时需要触发动态授权弹窗,看一下是不是没有触发授权弹窗。 可以参考以下代码以及文档: // ets import identifier from ohos.identifier.oaid; import hilog from oh…

【YOLO 项目实战】(12)红外/可见光多模态目标检测

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO 项目实战】(10)YOLO8 环境配置与推理检测 【YOLO 项目实战】(11)YOLO8 数据集与模型训练 【YOLO 项目实战】(12)红外/可…

logback日志框架源码分析

目录 (一)入口:slf4j选择日志框架 (二)日志框架初始化 (1)logback的3种配置方式 a、BasicConfigurator默认配置 b、SPI方式配置的Configurator实现类 c、通过配置文件初始化 (2)xml配置文件初始化 (三)Logger的创建 (四)打印日志 本文源码基于:logback版…

国产数据库OceanBase从入门到放弃教程

1. 介绍 是由蚂蚁集团(Ant Group,原蚂蚁金服)自主研发的分布式关系型数据库。它旨在解决海量数据存储和高并发访问的问题,特别适合金融级应用场景,如支付宝等对数据一致性、可靠性和性能有极高要求的服务。以下是关于…

连接Milvus

连接到Milvus 验证Milvus服务器正在侦听哪个本地端口。将容器名称替换为您自己的名称。 docker port milvus-standalone 19530/tcp docker port milvus-standalone 2379/tcp docker port milvus-standalone 192.168.1.242:9091/api/v1/health 使用浏览器访问连接地址htt…

机器学习中的欠拟合

当模型不能够准确地表达输入与输出的关系时,就是欠拟合。它在训练集和未见过的数据都会产生高误差率。过度拟合则在训练集表现出低误差率,只有对未见过的数据表现出高误差率。 当模型太过于简单时,它需要更多的训练时间、更多的输入特征、更…

安卓入门二 Kotlin基础

Kotlin Kotlin的历史 Kotlin由Jet Brains公司开发设计,2011年公布第一版,2012年开源。 2016年发布1.0正式版,并且Jet Brains在IDEA加入对Kotlin的支持,安卓自此又有新的选择。 2019年谷歌宣布Kotlin成为安卓第一开发语言&#x…

淺談Cocos2djs逆向

前言 簡單聊一下cocos2djs手遊的逆向,有任何相關想法歡迎和我討論^^ 一些概念 列出一些個人認為比較有用的概念: Cocos遊戲的兩大開發工具分別是CocosCreator和CocosStudio,區別是前者是cocos2djs專用的開發工具,後者則是coco…

STM32驱动NRF24L01

一、NRF24L01的相关介绍 1.2 引脚的介绍 关于SPI的引脚就不再说了,这里介绍其余的两个引脚: CE 模块控制引脚:芯片开启信号,激活RX或TX模式 IRQ 模块中断信号输出引脚:其低电平有效,也就是中断时变为低电平…