WonderWorld: Interactive 3D Scene Generation from a Single Image 论文解读

目录

一、概述

二、相关工作

1、新视图生成

2、单视图3D场景生成

3、视频生成

4、快速的3D场景表示

三、WonderWorld

1、FLAGS表示

2、引导深度扩散模块

3、单视角层次生成

4、基于几何的初始化

surfel表示

5、阶段一——生成3D场景部分

6、阶段二——用户交互控制部分

7、优化过程

四、实验

五、Limitation


一、概述

        该论文提出WonderWorld,用于交互式3D场景生成,通过单个图像生成广阔的沉浸式3D场景,实现用户交互地指定场景内容和布局,并实现低延迟创建场景。WonderWorld在A6000 上不到10秒就可以生成多样的3D场景,也为用户驱动内容创建和探索提供了新的潜力。

        相比于以往的3D场景生成基于离线的方式,需要大量的时间,适用于小型场景或视频,该方法考虑生成场景更大、更多样,更受到用户自由探索的交互式场景。

        对于阻碍交互性场景问题最大的问题就是生成速度慢,归根结底由于场景生成的方法步骤存在问题,通过单视图逐渐生成密集的多视图,在通过深度图进行对准,大量时间进行优化几何形状和外观,最终的场景边界处会出现失真,空白,未对准的情况。

        该论文:

(1)提出了WonderWorld,第一个支持交互式3D场景生成方法,并可以低延迟交互创建不同的、连接场景。

(2)提出快速场景生成FLAGS(快速分层高斯曲面表示),并且实现单个图像生成3D场景,解决速度问题。

(3)利用引导深度扩散模型来改善新生成场景与现有场景之间的几何对齐问题。

二、相关工作

1、新视图生成

        新视图生成上近期很多都是在不超出输入图像范围内进行静态场景的生成,比如利用深度图,辐射场,多视图,点云特征等等,而该论文提到使用FLAGS表示来结合深度图和辐射场,实现生成不局限于单个图像上的生成的多场景连接。

        近期工作还有做持续视图生成来实现类似的效果。

        持续视图生成:给定一个场景的单个输入图像,合成一组对应于所述场景任意长度的,由用户控制3D路径(轨迹)的逼真输出视图。如Infinite Images(最早的通过图片拼接的方法),Infinite Nature(通过图像生成,貌似是用的GAN)。后续考虑引入LLM和Diffusion来优化图像生成质量和实现用户交互。如SceneScape(通过简单的Prompt优化),WonderJourney(通过LLM来生成不同内容和生成点云表示)。

2、单视图3D场景生成

        在单视图3D场景生成中,大量的工作局限于室内环境,或者城市街区。如Text2NeRF,LucidDreamer,CAT3D生成多视角图像,RealmDreamer,DreamScene通过蒸馏多视角图像和深度图来生成3D场景。

        对于做场景生成的工作,使用离线方式来生成固定的场景,即不能用于用户交互,生成速度也慢,比如Genvs,Zeronvs等(主要是用利用3D特征和隐式辐射场表示,实现稀疏视角下的场景生成)。

3、视频生成

        近期工作考虑引入场景生成器或者引入相机参数的控制,允许用户在场景中“移动”,但不能保证3D一致性,如Stable Video Diffusion。

4、快速的3D场景表示

        主要依赖于3DGS和NeRF的场景表示,NeRF的包括InstantNGP,Plenoxels,3DGS相关包括3DGS,InstantSplat等等,该论文考虑使用surfel(曲面元素)并通过基于几何的初始化来促进场景表示优化。

三、WonderWorld

        WonderWorld分为两个部分:生成3D场景部分,系统从输入图像生成一个初始3D场景FLAGS表示。用户交互控制部分,用户可以通过移动相机视角来控制新场景的生成位置,通过文字提示控制新场景的内容,新生成场景作为现有场景的延伸,也可以作为独立的新场景。

1、FLAGS表示

        FLAGS(Fast LAyered Gaussian Surfels,快速分层高斯曲面),是一种3D场景表示方式,是3DGS的变体之一,每个高斯核的z轴被压缩到很小的数值,并且去除视角相关的颜色信息,而这种方式的渲染仍然使用3DGS相同的可微分渲染(包括3D到2D的投射,alpha渲染)

        每一个场景\varepsilon是用前景、背景、天空三个辐射场合并而来\varepsilon =\left \{ L_{fg},L_{bg},L_{sky} \right \},其中每一层都包含一系列参数。如L_{fg}=\left \{ p_i,q_i,s_i,o_i,c_i \right \}^{N_{fg}}_{i=1},其中三维空间位置p_i,旋转四元数q_i,x轴和y轴的放缩系数s_i=[s_{i,x},s_{i,y}],不透明度o_i,视角独立的颜色信息c_i

        另外对于协方差矩阵计算,也要在z轴上进行压缩:\Sigma=Qdiag(s_x^2,s_y^2,\epsilon ^2)Q^T,其中\epsilon表示远小于另外两个放缩系数的平方最小值的一个小数,防止最终无法反向传递权重。

2、引导深度扩散模块

        生成连续3D场景中,由于估计深度与现有几何之间存在不一致性而导致几何失真,所以引入了引导深度扩散的方式。该方法依赖于上一个场景已知的的深度和掩码来推断新的场景的深度。

        目的是:由于生成新场景一定与原场景(或者说原单个输入图像)之间一定存在重叠部分,我们依靠上一个场景生成的深度图在新场景投影下重叠的部分的深度图,作为新场景深度图生成的引导图,来保证新场景与原场景之间重叠部分的深度方向的一致性所以这也进一步解释了为什么FLAGS表示中拍扁z轴,也就是其他场景的深度,都依赖于深度扩散得到的深度,而不是RGB图像渲染出的深度。

        具体来说,首先输入RGB图像,并依赖外推场景的深度图作为引导,来估计带外场景的深度图。在生成3D场景部分和用户交互控制部分两个部分用到了不同的深度图作为引导,一个是地面深度图,相当于除去地面以外部分作为外场景,一个是第一阶段的视角深度图,相当于扩展出的图像作为外场景。

        对于扩散模型仍然使用去噪得U-Net模型,将原图I_{scene}作为输入,深度图d_t作为补充,时间步t下解码出预期噪声,但在该方法中引入了一个正则项s_tg_t来保证平滑的几何一致性。其中s_t是正则化权重,g_t是每一轮预测几何特征与引导几何特征的2范数的梯度值,或者说是t-1步的预测深度图D_{t-1}与原深度图掩码M_{guide}“引导图”)与原深度图D_{guide}与原深度图掩码M_{guide}的2范数对t步预测深度图d_t的梯度。(t-1步的预测深度图是先由已知深度图编码t步,得到含有图像信息的噪声图,之后解码1步,或者若干步得到的噪声,经过与噪声图相减得到的t-1步预测深度图)

3、单视角层次生成

        通过单视角图像I_{scene}来生成背景(F)、前景(B)、天空(S)三个视角下的FLAGS三维表示。这个过程可以用数学语言描述如下,其中\mathcal{J,U}分别代表,用户提示(如garden)和场景描述(如 You are an intelligent scene generator. Imagine you are wandering through a scene or a sequence of scenes ...)

                                                \mathcal{T}=\left \{ \mathcal{F,B,S} \right \}=g_{LLM}(\mathcal{J,U})

        接下来对于我们要生成的背景,前景,天空的RGB图像分别定义为I_{fg},I_{bg},I_{sky}

前景RGB图生成

        首先,我们能够通过预训练的分割网络得到每一个对象的掩码O_k,根据给定的预测深度图D,可以计算得到一个显式深度边缘掩码E,深度边缘掩码通过计算预测深度图各像素的梯度,如果大于阈值则使得该像素的掩码为1。

                        ​​​​​​​        ​​​​​​​        ​​​​​​​        E_{h,w}=1 \quad if||\nabla D_{h,w} ||_2 >T

        之后,我们计算前景掩码,通过图像中各对象与各对象显式深度边缘掩码的并集得到。

                                                M_fg=\bigcup_k O_k:||O_k \bigodot E||>0

        前景RGB图像通过前景掩码与原场景RGB图像点积得到。

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        I_{fg}=I_{scene} \bigodot M_{fg}

背景RGB图生成

        首先,通过预训练分割网络得到天空的掩码M_{vis}

        之后,计算背景掩码,通过1-天空的掩码得到。M_{bg}=1-M_{vis}

        最后,计算背景RGB图像,通过背景掩码M_{bg}和生成被前景遮挡的背景区域点积得到。        

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        I_{bg}=M_{bg} \bigodot I_{inpaint}(I_{scene},M_{fg},\left \{ B,S \right \})

        其中,I_{inpaint}是一个依靠文本引导的扩散模型,用于生成被前景层遮挡的背景和天空区域。

天空RGB图生成

        计算天空RGB图生成,直接生成被前景遮挡的天空区域得到。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        I_{sky}=I_{inpaint}(I_{scene},1-M_{vis},\left \{ "sky",S \right \})

4、基于几何的初始化

        基于几何的初始化围绕两个关键设计步骤,像素对齐生成和surfel表示。

        初始化的目的达到了最小化渲染时的高频伪影和过度重叠(或者说无缝覆盖),另外加快了FLAGS表示的优化过程,防止从头开始优化,大大加快生成速度。

像素对齐生成

        第一个是像素对齐生成,保证像素级几何对齐。

        首先给定前景层RGB图像I_{fg},我们生成前景层场景L_{fg}

        对于每一个surfel应该对应一个有效像素,所以数量应该一致,N_{fg}=||M_{fg}||_F

        surfel颜色初始化为对应像素的RGB值。

        surfel的位置通过像素的坐标计算得到p=R^{-1}(d \cdot K^{-1}[u,v,1]^T)-T

surfel表示

        surfel表示部分主要针对于方向和尺度来进行初始化

        对于方向由,估计像素法线n_c来初始化旋转矩阵Q=[Q_x,Q_y,Q_z],计算如下:

        其中u=[0,1,0]^T,n=R^{-1}n_{cam} ,n_{cam}是相机视角下的估计法线,n世界视角下的估计像素法线

        对于尺度,考虑根据奈奎斯特定理中最大信号频率是\frac{1}{2T_N},那么将surfel的高斯核带宽的倒数设为信号频率\frac{1}{2ks_x},尺度初始化为s_x=d/(kf_xcos \theta_x)s_y=d/(kf_ycos \theta_y),其中d是像素深度,f是相机焦距,\theta是surfel法线n与图像平面法线[0,0,-1]^T夹角,超参数k=\sqrt{2}(相机坐标系下,图像平面法向量指向相机负z轴方向)

        对于不透明度,初始化o=0.1

        

5、阶段一——生成3D场景部分

        首先,输入单个图像生成地面深度图(应该是先分割地面,然后获得深度图)

        之后利用引导深度扩散方法,输入地面深度图,并基于原图的引导来生成该图像的完成深度图。

        接下来输入深度图和原图像到单视角层次生成模块,并依赖于VLM生成的前景,背景,天空的提示词来生成三张不同层的RGB图像,并依赖于这三张RGB图像来生成三维的FLAGS表示,也就是进行场景重建,得到原视角三维场景。

6、阶段二——用户交互控制部分

        首先通过用户移动相机位姿,得到与上一个场景重叠的图片,保证上一个场景的信息保留,其他用灰度填充的图像记作Rendered。

        之后用LLM输入用户的Prompt,并且通过扩散得到得到新视角下的图像(Text-guided outpainting)。

        接下来再依赖原来的Rendered图像生成深度图Rendered depth。再输入新视角图像到引导深度扩散模块,并依照Rendered depth图进行引导生成引导深度,也就是预测深度图。 

        最后与阶段一相同,进行单视角层次生成模块和FLAGS的优化(生成新视角FLAGS,改进原来场景FLAGS,计算损失)。

7、优化过程

        首先优化天空层L_{sky},用光度掩码损失L=0.8L_1+0.2L_{D-SSIM}计算,对比原图天空层I_{sky}和生成的天空层L_{sky}

        之后冻结天空层,优化背景层,对比背景层的L_{bg}和背景与天空组成的图像M_{bg} \bigodot I_{bg}+M_{vis} \bigodot I_{sky}进行优化。

        最后冻结背景层和天空层,对前景层L_{fg}优化。

四、实验

        放一个backbone之间的对比吧

五、Limitation

        局限性提到,一是相机视角基本在原视角方向的一个特定范围,不能看到场景的后面。二是对于细小的物体容易产生空洞。 

参考项目:WonderWorld

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

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

相关文章

网络:IP分片和组装

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言16位标识,3位标志,13位片偏移分片组装总结 前言 对于IP分片和组装的总结 当一个IP数据报的大小超过网络的MTU(最…

从0到1搭建flink程序-WordCount(图文/详细/mac)

目录 一、目标以及前置资料 1.1 目标 1.2 前置资料 二、实现 2.1 搭建流程 2.2 调试 参考 一、目标以及前置资料 1.1 目标 初步感受flink任务,从0到1快速搭建一个flink程序 1.2 前置资料 1、下载jdk:Mac 安装jdk_mac 安装jdk 1.8-CSDN博客 2、…

ctfshow——web(总结持续更新)

文章目录 1、基础知识部分2、php伪协议2.1 php://input协议2.2 data://text/plain协议 3、webshell连接工具3.1 蚁剑连接一句话木马 4、各个web中间件重要文件路径4.1 Nginx 5、sqlmap使用6、php特性6.1 md5加密漏洞 7、TOP 10漏洞7.1 SQL注入 1、基础知识部分 识别base64编码…

FineReport 倒计时特效

1、代码准备 将下面的代码生成对应文件 1.1、zzsc.js 这段代码是一个JavaScript计时器脚本,用于计算从当前时间到第二天午夜(即0点)之间的时间差,并将这个时间差显示在网页上的特定元素中。具体来说,它会实时更新页…

【Linux】编辑器vim 与 编译器gcc/g++

目录 一、编辑器vim: 1、对vim初步理解: 2、vim的模式: 3、进入与退出: 4、vim命令模式下的指令集: 移动光标: 删除: cv: 撤销: 其他: 5、vim底行模…

虚拟机 Ubuntu 扩容

文章目录 一、Vmware 重新分配 Ubuntu 空间二、Ubuntu 扩容分区 一、Vmware 重新分配 Ubuntu 空间 先打开 Vmware ,选择要重新分配空间的虚拟机 点击 编辑虚拟机设置 ,再点击 硬盘 ,再点击 扩展 选择预计扩展的空间,然后点击 扩展…

【搜索引擎】俄罗斯搜索引擎yandex

俄罗斯搜索引擎yandex 1997年,俄罗斯搜索引擎Yandex(俄语意为:语言目录)首次上线,已发展成为全球第四大搜索引擎和第二大非英语搜索引擎 https://yandex.com/

【深度学习】CrossEntropyLoss需要手动softmax吗?

【深度学习】CrossEntropyLoss需要手动softmax吗? 问题:CrossEntropyLoss需要手动softmax吗?答案:不需要官方文档代码解释 问题:CrossEntropyLoss需要手动softmax吗? 之前用 pytorch 实现自己的网络时&…

Uniapp的H5以及App不支持后端传FormData类型参数的解决方案

在uniapp中不支持FormData的传参,这就很恶心;如果强行传的话会提示,请求失败的报错信息。 因为后端必须要FormData类型的传参,所以在查阅一系列方案后,有一种解决办法可以完美解决。 代码: init() {const…

img 标签的 object-fit 属性

设置图片固定尺寸后,可以通过 object-fit 属性调整图片展示的形式 object-fit: contain; 图片的长宽比不变,相应调整大小。 object-fit: cover; 当图片的长宽比与容器的长宽比不一致时,会被裁切。 object-fit: fill; 图片不再锁定长宽…

机器人领域中的scaling law:通过复现斯坦福机器人UMI——探讨数据规模化定律(含UMI的复现关键)

前言 在24年10.26/10.27两天,我司七月在线举办的七月大模型机器人线下营时,我们带着大家一步步复现UMI「关于什么是UMI,详见此文:UMI——斯坦福刷盘机器人:从手持夹持器到动作预测Diffusion Policy(含代码解读)」&…

scala---10.30

val、var package com_1030class Person {var name:String"rose"def sum(n1:Int,n2:Int):Int{n1n2} } object Person{def main(args: Array[String]): Unit {//创建person对象var personnew Person()println(person.sum(10,20))//30println(person.name)person.nam…

Oracle与SQL Server的语法区别

1)日期和日期转换函数。 SQL: SELECT A.*, CASE WHEN NVL(PAA009,) OR PAA009 >Convert(Varchar(10), SYSDATE,120) THEN Y ELSE N END AS ActiveUser FROM POWPAA A WHERE PAA001admin or PAA002admin Oracle: SELECT A.*, CASE WHEN NVL(PAA009,) or PAA009&…

让Chrome⽀持⼩于12px 的⽂字⽅式有哪些?区别?

让Chrome⽀持⼩于12px 的⽂字⽅式有哪些?区别? 1、背景 Chrome 中⽂版浏览器会默认设定⻚⾯的最⼩字号是12px,英⽂版没有限制 原由 Chrome 团队认为汉字⼩于12px就会增加识别难度 • 中⽂版浏览器 与⽹⻚语⾔⽆关,取决于⽤户在C…

慢即是快,少即是多

慢即是快 “慢即是快”是一种强调质量而非速度的哲学或策略。以下是它的一些应用和解释: 1. 精准与质量: - 通过慢工出细活,确保任务或项目的每个步骤都高质量完成,避免因匆忙带来的错误和返工。最终,虽然过程看似…

Hadoop期末复习(完整版)

前言(全部为语雀导出,个人所写,仅用于学习!!!!) 复习之前我们要有目的性,明确考什么,不考什么。 对于hadoop来说,首先理论方面是跑不掉的&#x…

微信小程序中,点击视频,没有跳转播放,可能是因为没有在app.json中正确注册视频播放页面的路径

const customMethodMap {handlePreview(e) {const { item: { url } } e?.currentTarget?.datasetconsole.log(Clicked item URL:, url); // 输出URLconst type url.split(.)[url.split(.)?.length - 1]console.log(File type:, type); // 输出文件类型console.log(isDoc(…

Effective C++ 学习笔记二

Effective C 学习笔记二 文章目录 Effective C 学习笔记二别让异常逃离析构函数绝不在构造和析构的过程中调用virtual函数令operator 返回一个reference to *this在operator中处理"自我赋值"C四种转换 别让异常逃离析构函数 C 并不禁止析构函数吐出异常,…

python如何安装扩展包

1、扩展包 Python安装额外的扩展包,一般使用anconda进行管理。 1、1安装命令 一般我们在anconda中通过pip install 包名 的方式进行安装,不过由于这些包在国外下载,因此需要配置合适的镜像促使其下载更快。 1、2 镜像源配置 1、2、1 一次…

Manus在虚拟现实仿真模拟中的应用案例分享

Manus虚拟现实手套作为一种高精度的人机交互设备,在仿真模拟领域展现出了巨大的应用潜力。通过提供实时、准确的手指动作捕捉数据,Manus手套为多个行业带来了前所未有的仿真体验,推动了技术发展和应用创新。 技术特点 1. 高精度手指跟踪 Ma…