103、GAUDI: A Neural Architect for Immersive 3D Scene Generation

news2024/11/18 1:32:12

简介

github
在这里插入图片描述

 GAUDI在多个数据集的无条件生成环境中获得了最先进的性能,并允许在给定条件变量(如稀疏图像观察或描述场景的文本)的情况下有条件地生成3D场景。

实现流程

 目标是在给定3D场景中轨迹经验分布的情况下,学习一个生成模型,设 X = { x i ∈ { 0 , … , n } } X = \{x_{i∈\{0,…,n\}} \} X={xi{0n}} 表示定义经验分布的示例集合,其中每个示例 x i x_i xi 是一个轨迹。每个轨迹 x i x_i xi 被定义为相应的RGB,深度图像和6DOF相机姿态的可变长度序列,如下图。
在这里插入图片描述
 实现过程包括两阶段:

  1. 为每个示例 x ∈ X x∈X xX 获得一个 latents representation z = [ z s c e n e , z p o s e ] z = [z_{scene}, z_{pose}] z=[zscene,zpose],它表示场景辐射场和在单独的解纠缠向量中姿态。为了获得这种latents representation,采取 encoder-less [Deepsdf: Learning continuous signed distance functions for shape representation.] 的方法,并将 z 解释为通过优化问题找到的自由参数。
  2. 给定潜在集合 Z = { z i ∈ { 0 , … , n } } Z = \{z_{i∈\{0,…,n\}} \} Z={zi{0n}}学习分布p(Z),为了将 latents z 映射到轨迹 x,设计了一个网络架构(即解码器,如下图),可以解缠相机姿态和辐射场参数化。

在这里插入图片描述

encoder-less:在Deepsdf中使用了一种Auto-decoder方法实现SDF建模,即只要中间 latents 和解码器,每一次训练一个模型的时候,随机初始化一个可训练的 latents code z,并和3d点一起输入解码器,公共优化 z 和解码器。当处理测试数据集的时候,冻结解码器权重同时初始化一个 latents code z,由于解码器经过了训练,因此该过程收敛很快。Auto-decoder网络结构如下图。

在这里插入图片描述

因此,简单而言,训练好Auto-decoder得到了训练好了 decoder 和 每个模型的 latents,利用DDPM得到 latents 的生成扩散模型,结合两者就可以得到3d场景生成模型。即利用DDPM得到去噪后的 latent,将latent输入 decoder得到场景 三平面 特征和相机位姿。

解码器

逻辑

在这里插入图片描述

相机姿态解码器网络 c (由 θ c θ_c θc 参数化)以表示整个轨迹中相机姿态的 z p o s e z_{pose} zpose 为条件,负责预测轨迹中归一化时间位置 s∈[- 1,1] 的相机姿态 T ^ s ∈ S E ( 3 ) \hat{T}_s∈SE(3) T^sSE(3)。为了确保 c 的输出是有效的相机姿态(例如SE(3)的元素),输出一个表示方向的归一化四元数 q s q_s qs 的3D向量和一个3D平移向量 t s t_s ts

在这里插入图片描述

场景解码器网络 d (由 θ d θ_d θd参数化)负责预测辐射场网络 f 的调节变量。该网络将表示场景 z s c e n e z_{scene} zscene 的潜代码作为输入,并预测一个轴对齐的三平面表示 W ∈ R 3 × S × S × F W∈R^{3×S×S×F} WR3×S×S×F。对应空间维度 S × S 和 F 通道的 3 个特征图 [ W x y , W x z , W y z ] [W_{xy}, W_{xz}, W_{yz}] [Wxy,Wxz,Wyz],每个轴向对齐平面一个: xy, xz 和 yz。

在这里插入图片描述

辐射场解码器网络 f (由 θ f θ_f θf参数化)的任务是使用体渲染方程重建图像级目标。该过程就是[K-Planes]。

网络架构

在这里插入图片描述

场景解码器网络 d 遵循VQGAN解码器的架构,使用在每个块的末尾包含自注意力层的卷积架构进行参数化。场景解码器的输出是形状为64 × 64 × 768的特征图。为了获得三平面表示 W = [ W x y , W x z , W y z ] W = [W_{xy}, W_{xz}, W_{yz}] W=[Wxy,Wxz,Wyz],将输出特征图的通道维度划分为3个大小相等的块64 × 64 × 256。

相机姿态解码器 c被实现为具有4个条件批归一化(CBN)块的MLP,残差连接和隐藏大小为256。条件批归一化参数从 z p o s e z_{pose} zpose 预测。将位置编码应用于相机姿态编码器(s∈[- 1,1])的输入。

辐射场解码器 f被实现为一个具有8个线性层、隐藏维度为512和 LeakyReLU 激活的MLP。应用位置编码输入辐射场解码器 ( p ∈ R 3 ) (p∈R^3) (pR3) 和连接调节变量 w x y z w_{xyz} wxyz 向MLP每隔一层的输出从输入层(如层0、2、4、6),为了提高效率,呈现一个小分辨率特性的地图512个频道(两次小于输出分辨率),而不是一个RGB图像和使用UNet额外反褶积层预测最终的图像。

 在训练时,初始化所有 latents z = 0,并使用3个模块的参数联合训练它们。使用Adam优化器,潜变量的学习率为0.001,模型参数的学习率为0.0001。在8块A100 NVIDIA gpu上训练模型2-7天(取决于数据集大小),批处理大小为16个轨迹,其中每个轨迹随机采样2张图像。

损失函数

 制定了一个去噪重建目标来联合优化。如扩散模型一样,latents z 由公式 z = z + β N ( 0 , s t d ( Z ) z = z+ \beta \N(0,std(Z) z=z+βN(0,std(Z)得到。
在这里插入图片描述

L s c e n e L_{scene} Lscene z s c e n e z_{scene} zscene 中编码的辐射场和轨迹 x s i m x^{im}_s xsim中的图像之间的重建(其中 s 表示轨迹中帧的归一化时间位置),给定渲染所需的地面真实相机姿态 T s T_s Ts,对 RGB 使用 l 2 l_2 l2 损失,对深度使用 l 1 l_1 l1 损失。

L p o s e L_{pose} Lpose测量 z p o s e z_{pose} zpose 中编码的姿态 T ^ s \hat{T}_s T^s 和真实姿态之间的相机姿态重建误差,对平移采用 l 2 l_2 l2 损失,对相机姿态的归一化四元数部分采用 l 1 l_1 l1 损失。虽然理论上归一化四元数不一定是唯一的(例如q和- q),但在训练过程中没有观察到任何问题

 给定一组因最小化公式2中的目标而产生的潜 z ∈ Z z∈Z zZ,目标是学习一个捕获其分布的生成模型 p(z) (即在最小化公式2中的目标后,将 z ∈ Z z∈Z zZ解释为潜空间中经验分布的示例)。为了对 p(Z) 建模,采用了去噪扩散概率模型(DDPM),为了训练的先验 p θ p ( Z ) p_{θ_p}(Z) pθp(Z),采用公式3中定义的目标函数。

在这里插入图片描述

 在推理时,按照 DDPMs 中的推理过程对 z ∼ p θ p ( z ) z \sim p_{θ_p} (z) zpθp(z) 进行采样,采样 z T   N ( 0 , I ) z_T ~ N (0, I) zT N(0,I),并迭代地应用 ϵ θ p \epsilon_{\theta_p} ϵθp 逐步去噪 z T z_T zT,从而反转扩散马尔可夫链以获得 z 0 z_0 z0。然后将 z 0 z_0 z0作为输入输入到解码器架构,并重建辐射场和相机路径。

实验

数据集

Vizdoom , Replica VLN-CE 和 ARKit Scenes

文本条件生成

 使用VLN-CE中提供的导航文本描述来调节模型。这些文本描述包含有关场景以及导航路径的高级信息。“走出卧室,进入客厅”,“从旋转门走出房间,然后进入卧室”)。采用预训练的 RoBERTa-base 文本编码器,并使用其中间表示来调节扩散模型。下图显示了GAUDI对这项任务的定性结果。这是第一个允许以摊销方式从文本中有条件地生成3D场景的模型(即不通过昂贵的优化问题提取CLIP)。
在这里插入图片描述

图像条件生成

 随机选择轨迹 x ∈ X x∈X xX 中的图像,并将其作为条件变量 y。在这个实验中,使用VLN-CE数据集中的轨迹。在每次训练迭代中,为每个轨迹 x 采样一个随机图像,并将其用作调节变量。采用预训练的 ResNet-18 作为图像编码器。在推理过程中,产生的条件GAUDI模型能够对从随机角度观察给定图像的辐射度场进行采样。在下图中,显示了以不同RGB图像为条件的模型样本。
在这里插入图片描述

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

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

相关文章

golang 反序列化出现json: cannot unmarshal string into Go value of type model.Phone

项目场景: 今天在项目公关的过程中,需要对interface{}类型进行转换为具体结构体 问题描述 很自然的用到了resultBytes, _ : json.Marshal(result),然后对resultBytes进行反序列化转换为对应的结构体err : json.Unmarshal(resultBytes, &…

【scala】编译build报错 “xxx is not an enclosing class“

private[sources] val creationTimeMs: Long {val session SparkSession.getActiveSession.orElse(SparkSession.getDefaultSession)require(session.isDefined)private[xxx]是访问权限控制在xxxx包的意思。 解决办法: 把[sources]删掉,或者改成和包名…

C语言——(一维数组基础知识)

简介 本内容主要介绍了数组如何初始化,以及存储等知识点。 一.数组的概念 1.数组是相同类型元素的集合 2.数组中可以存放一个或者多个数据,但是个数不能为0 3.数组中存放的元素类型是相同的 二.数组的创建和初始化 1.数组的创建 type arr_name[常量值…

浅研究下 DHCP 和 chrony

服务程序: 1.如果有默认配置,请先备份,再进行修改 2.修改完配置文件,请重启服务或重新加载配置文件,否则不生效 有些软件,安装包的名字和系统里服务程序的名字不一样(安装包名字:…

GitLab 502 Whoops, GitLab is taking too much time to respond. 解决

1、先通过gitlab-ctl restart进行重启,2分钟后看是否可以正常访问,为什么要2分钟,因为gitlab启动会有很多配套的服务启动,包括postgresql等 2、如果上面不行,再看gitlab日志,通过gitlab-ctl tail命令查看&…

FineBI实战项目一(19):每小时订单笔数分析开发

点击新建组件,创建下每小时订单笔数组件。 选择饼图,拖拽cnt(总数)到角度,拖拽hourstr到颜色,调节内径。 修改现在的文字 拖拽组件到仪表盘。 效果如下:

【技术选型】Doris vs starRocks

比对结论 仅从当前能看到的数据中,相比于doris,starRocks在性能方面具备优势,且更新频率高(降低维护成本)。 目标诉求 并发性不能太低——相比于clickhouse不到100的QPS支持大表关联——降低数据清洗的压力&#xf…

什么是个人合同企业合同?

个人相关的合同业务,比如和对方个人、对方企业之间的合同事务。 如果企业合同和个人签署人事合同时,相关的个人就需要登录个人合同模式进行合同的签署合同管理。 如果是个人和社会任何自然人签署的租赁合同,也可以登录个人合同进行管理。 …

【2024】OAK智能深度相机校准教程

编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多👍⭐️✍ 内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。 ▌前言 Hello,大家好,这里是OAK中国,我是Ash…

ArchVizPRO Interior Vol.8 URP

ArchVizPRO Interior Vol.8 URP是一个在URP中制作的建筑可视化项目。这是一个完全可导航的现代公寓,包括一个带开放式厨房的客厅、休息区、两间卧室和两间浴室。从头开始构建每一个细节,这个室内有130多件家具和道具、自定义着色器和4K纹理。所有家具和道具都非常详细,可以在…

vue的mvvm模式

1.mvvm优点: 低耦合:视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model可以不变,当Model变化的时候,View也可以不变。 可复用&…

2024.1.12每日一题

LeetCode 2085.统计出现过一次的公共字符串 2085. 统计出现过一次的公共字符串 - 力扣(LeetCode) 题目描述 给你两个字符串数组 words1 和 words2 ,请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。 示例 1: 输…

oracle 19c容器数据库data dump数据泵传输数据(2)---11g导19c

目录 1.在11gnon-cdb数据库中创建测试用户 2.在19cCDB容器数据库中新建pdb2 3.执行命令导出 4.执行命令导入 Exporting from a Non-CDB and Importing into a PDB 我們要記住一点:如果是全库导出导入的话,目标数据库没有的表空间我们要事先创建&#…

86.乐理基础-记号篇-速度记号

内容来源于:三分钟音乐社 上一个内容:85.乐理基础-记号篇-力度记号-CSDN博客 速度记号在下方两个里面已经写过一部分了,这些标记总体上是属于 不变速度 的标记,比如一首乐谱就记了 每分钟60拍,那整首速度就都是不变的…

GEE数据集——2000 年至 2022 年与传感器无关的 MODIS 和 VIIRS LAI/FPAR CDR

2000 年至 2022 年与传感器无关的 MODIS 和 VIIRS LAI/FPAR CDR 该地理空间数据集包含关键的生物物理参数,即叶面积指数(LAI)和光合有效辐射分量(FPAR),是描述陆地生态系统特征不可或缺的参数。该数据集解…

Pinpoint 报告:2023年网安产业投资总额减少40%

根据网络招聘公司 Pinpoint Search Group 所作的报告,2023 年度网络安全行业共进行了 346 轮融资和 91 笔并购 (M&A) 交易。其中投资总额为 87 亿美元,比2022年的 145 亿美元减少了 40%。 这些数字也反映在 2023 年第四季度,网络安全公司…

【Java 干货教程】Java实现分页的几种方式详解

一、前言 无论是自我学习中,还是在工作中,固然会遇到与前端搭配实现分页的功能,发现有几种方式,特此记录一下。 二、实现方式 2.1、分页功能直接交给前端实现 这种情况也是有的,(根据业务场景且仅仅只能用于数据量…

【深度学习目标检测】十三、基于深度学习的血细胞识别(python,目标检测,yolov8)

血细胞计数是医学上一种重要的检测手段,用于评估患者的健康状况,诊断疾病,以及监测治疗效果。而目标检测是一种计算机视觉技术,用于在图像中识别和定位特定的目标。在血细胞计数中,目标检测技术可以发挥重要作用。 首先…

数据在内存中的存储(C语言)

​ ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ ​ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 ​ 所属专栏:C语言学习 ​ 贝蒂的主页:Betty‘s blog 引言 ​ 我们早就学完基本的数据类型,那这些数据类型…

Linux系统的由来、特点、以及发行版本

Linux系统 Linux 系统主要被应用于服务器端、嵌入式开发和 PC 桌面 3 大领域,其中服务器端领域是重中之重。例如,我们熟知的大型、超大型互联网企业(百度、腾讯、Sina、阿里等)都在使用Linux 系统作为其服务器端的程序运行平台&a…