当前位置: 首页 > article >正文

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.kler.cn/a/381172.html

相关文章:

  • Unity XR Interaction Toolkit 开发教程(3)快速配置交互:移动、抓取、UI交互【3.0以上版本】
  • python正则总结
  • 深入Pillow:处理图像下载中的意外挑战
  • Spring框架和Spring Boot框架都使用注解来简化配置和提高开发效率,但它们之间存在一些区别
  • 中国雕塑、
  • C++笔试题之实现一个定时器
  • 【go从零单排】在 Go 语言中,:= 是什么意思?
  • TOEIC 词汇专题:旅游计划篇
  • ClickHouse数据库SSL配置和SSL连接测试
  • C语言 | Leetcode C语言题解之第540题有序数组中的单一元素
  • MySQL详细安装教程
  • 【机器学习】25. 聚类-DBSCAN(density base)
  • 云计算Openstack 虚拟机调度策略
  • Docker-- cgroups资源控制实战
  • 【C++刷题】力扣-#705-设计哈希集合
  • 「Mac畅玩鸿蒙与硬件27」UI互动应用篇4 - 猫与灯的互动应用
  • Flink-Kafka-Connector
  • 第五次作业
  • L1G3000 提示工程(Prompt Engineering)
  • 【Spring】Spring的简单创建和使用
  • 11.5日志
  • labview学习总结
  • Linux终端退出程序后,TCP地址仍被占用
  • 【前端】Fetch:数据请求
  • C++之数组和字符串
  • ffplay 实现视频流中音频的延迟