NeRF-Diffusion系列文章阅读

news2024/11/9 2:16:11

文章目录

  • 前置知识
  • 《Latent-NeRF for Shape-Guided Generation of 3D Shapes and Textures》【CVPR'23】
  • 《NeRDi: Single-View NeRF Synthesis with Language-Guided Diffusion as General Image Priors》【CVPR'23】
  • 《SparseFusion: Distilling View-conditioned Diffusion for 3D Reconstruction》【CVPR'23】

前置知识

1)纹理
\quad 在计算机图形学领域,纹理是一种应用于三维模型表面的一种贴图技术,包括颜色、图案、光泽度、凹凸、透明度等属性。纹理可以是任何形式的图像,例如木纹、石纹、花纹、斑点、噪声、透明校准图等等。直白来说,可以将纹理看作一种包含多种属性的数据。
\quad 通过将纹理映射到三维模型的表面,就可以在渲染时模拟真实场景的细节和复杂度。纹理映射需要基于 UV 映射将三维表面映射到二维纹理图像上,以便于渲染引擎在渲染时正确的将纹理信息应用到模型表面上。
2)UV Map(UV映射)
\quad 在3D建模中,模型的表面通常是由一系列三角形或四边形组成的网格构成的。每个三角形或四边形的每个顶点都有一个坐标,这些坐标被称为“顶点坐标”。在UV映射过程中,每个三角形或四边形的每个顶点都会被分配一个对应的二维坐标,称为“UV坐标”。 这些UV坐标通常被表示为(u,v)坐标,类似于平面直角坐标系中的(x,y)坐标。UV坐标的范围通常是从0到1。
\quad 一旦将UV坐标分配给模型表面的每个顶点,就可以将纹理图案或图像映射到模型表面上,使其贴合到正确的位置。这样的一个过程,类似于将一块贴纸贴在3D模型上的过程。


《Latent-NeRF for Shape-Guided Generation of 3D Shapes and Textures》【CVPR’23】

Paper: 链接
Code: https://github.com/eladrich/latent-nerf
Author: Tel Aviv University

1)动机:
dream fusion开创了2d扩散模型引导nerf生成的先河,但是其使用的是Imagen,或使用stable diffusion进行复现,庞大的资源开销是不可忽视的一个问题。此外,虽然文本能够通过预训练模型的桥梁给与3D语义上的指导,但是这种方式内在上缺乏对3D结构的约束和指导。所以这篇文章想做的事情有两个:

  • 在隐空间上进行扩散过程,即引入基于潜空间的diffusion模型(LDM),使NeRF生成的图像为一个latent-code,然后stable-diffusion在这个latent-code上执行。(在隐空间上操作使得计算量更小,采样也更方便,Stable-diffusion模型也是一个LDM模型。)
  • 在生成过程中给予形状的指导,即在生成过程中引入两种指导:Sketch-shape,Latent-Paint。

因此,这篇文章的主要贡献是:以往使用预训练扩散模型进行text-to-3d的工作中,文本只能提供语义的指导,在shape-guidance上缺失,所以这篇文章主要做的是为text-to-3d任务中引入两种shape-guidance。并且为了提高计算效率,作者通过结合NeRF+LDM在隐空间上实现这一过程。即用户先使用sketch-shape定义初始的几何,然后使用Latent-NeRF基于prompt来细化形状和引入纹理。

2)相关工作:

最开始的text-to-3d的工作是基于CLIP提供guidance,这一类工作以DreamFields为代表。在DreamFields出现之前,有篇文章叫CLIPMesh也是利用CLIP的guidance,DreamFields也借鉴了这个思想,但是是用NeRF来表征3D目标而不是用显式的三角网络。

在这里插入图片描述

在DreamFields后,CLIPNeRF对于一个condition(e.g., text or image. 也可以称prompt),使用CLIP转换为embedding,然后分别经过两个linear输出 z s z_s zs z a z_a za分别来控制形状和外貌。具体地, z s z_s zs输入至最开始的NeRF decoder输入来控制密度σ的生成(形状), z a z_a za输入至最后一个阶段控制颜色的生成(外貌,纹理)。最后渲染出的图像不仅用GT来监督,还用CLIP loss来监督。
在这里插入图片描述
在预训练扩散模型火爆之后,这一系列的工作逐渐开始使用预训练扩散模型(Imagen/Stable-diffusion)作为guidance,最初的文章是DreamFusion,它提出了SDS损失,后续的工作都是基于SDS来做的。
在这里插入图片描述
这里对SDS(Score Distillation Sampling)做一个回顾。SDS的过程是: 对于NeRF渲染出的一个视角的图像,往里加入noise后输入至预训练扩散模型,然后扩散模型的目的是预测往这个图像里加入的噪声。最后,预测到的噪声和往图像里加的噪声被用来计算每个像素的梯度。然后,这个梯度反向传播至NeRF中来更新3D NeRF模型。在这里插入图片描述在这里插入图片描述
预训练扩散模型(Stable-diffusion)其实就是一个扩散模型反向过程的U-Net,对于从标准正态分布中采样的一个噪声ε,可以在给定一个text prompt y的条件下生成想要的图像,这个预测的图像可以用t个时间步不断往ε中添加的噪声来表示。

因此更细节来讲,SDS的过程是,对于NeRF渲染出的一个图像,使用扩散模型的正向过程不断往里加噪声,使其最终变成一个标准正态分布噪声。正向过程中的这t个噪声就代表了NeRF渲染出的这个图像。而预训练扩散模型的作用是在给定一个text prompt y的条件下,对于从标准正态分布中采样的一个噪声,预测到想要的图像,这个图像可以用t个时间步不断往最初噪声中添加的噪声来表示。也就是在SDS的过程中,正向过程的噪声代表NeRF预测出的图像(将rendering image离散化),反向过程预测到的噪声代表预训练扩散模型认为text prompt y对应的图像(我们以这个作为GT),将这两个做差就是我们的loss就是我们的 L S D S L_{SDS} LSDS

3)Latent-NeRF
Latent-NeRF与DreamFusion中SDS的训练过程一样,只不过NeRF生成的不是一个color和一个density,而是4个pseudo-color通道和一个density。这四个pseudo-color构成了一个隐空间图像z(64644),或者说latent color image,然后使用stable-diffusion重建这个latent code z,这样做的好处是计算效率高。注意这个过程不像DreamFusion中对NeRF产生的color和density还要渲染一下才能得到image,Latent-NeRF的输出就是latent color image,可以无需渲染直接丢进Stable-diffusion中
在这里插入图片描述

虽然在latent space上训练后Latent-NeRF可以生成latent texture image,但是如何将Latent-NeRF在latent space上生成的code(color image)转换为RGB空间也是很关键的,因为我们想要的其实是RGB Image。

为了实现这一点,作者借鉴了github的一个项目<Decoding latents to rgb without upscaling>,它证明了:一个线性映射对于将4个通道的latent super pixel转换为RGB颜色是足够的,通过下面这个转换矩阵即可实现
在这里插入图片描述
这个矩阵中的值是通过大量自然图像的RGB-latent pairs计算出来的。因此为了将latent-code转换为RGB,作者使用一个使用上面矩阵中的值初始化的线性层来进行转换。如果想要实现RGB细化的时候,再按照一下流程训练就行了。


4) Sketch-Shape Guidance
上面是Latent-NeRF的计算方式,但是作者想做的还有一件事,就是引入Shape guidance。这里引入的第一个guidance是Sketch-Shape Guidance,就是在训练时不仅输入text prompt,还输入一个3D mesh作为shape guidance。这个有点像Blended latent diffusion一样为网络添加shape guidance。

那么一个问题就是,这个3D mesh如何用呢?

最理想的出发点是,希望Latent-NeRF的输出密度与sketch-shape的密度相一致。此外,我们也希望新的NeRF有能力创建新的细节和几何图形,匹配输入文本提示并提高形状的保真度。以此,为了实现这种宽松的约束条件,作者鼓励NeRF的输出的每个点的密度与这个点在sketch-shape上的winding-number(平面上的闭曲线关于某个点的卷绕数(Winding number),是一个整数,它表示了曲线绕过该点的总次数。就是对每个点,都可以计算它的winding number)相匹配,但是对于表面(边界)附近的点,权重要相对更小,这样是为了鼓励网络产生新的几何图形。这样的监督方式可以形式化为下面这个损失:
在这里插入图片描述
其中,点p与3D sketch mesh的surface的距离, σ S σ_S σS是一个控制损失宽容程度的超参数, σ S σ_S σS值越低表示对NeRF输出的密度(形状)的约束越紧,也就是要求输出的结果越像Sketch-shape。

下图是训练过程。首先初始化一个大小为 H × W × 4 的随机潜在纹理图像,其中 H 和 W 可以根据所需的纹理粒度选择,实验中设置为 128。然后使用UV map映射到3D sketch mesh上。然后在每次score distillation的过程中,使用可微分渲染器对网格进行渲染,得到一个64 × 64 × 4的特征图,然后使用SDS的损失对z进行计算梯度,但注意不是将损失反向传播到NeRF的MLP参数,而是通过可微渲染器反向传播来优化深层纹理图像(H × W × 4)。最后在推理阶段,为了得到最终的RGB纹理图像,简单地将潜在的纹理图像通过解码器转换为RGB值,以获得更大的高质量RGB纹理。
在这里插入图片描述


《NeRDi: Single-View NeRF Synthesis with Language-Guided Diffusion as General Image Priors》【CVPR’23】

这篇文章主要做的是: single-view 3D reconstruction。

本文指出从单个视角进行重建的任务仍具有 挑战性,因为这是一个ill-posed问题,即从2D图像到3D场景的一对一对应关系并不存在。然而现在的大多数工作都尝试通过重建的方式来解决这个问题,即通过输入的image来优化NeRF的参数。但是这种方式需要带相机姿态的多视角图像作为监督,但是这样的方式在许多情况下是不可行的,比如互联网图像或非专业用户使用移动设备捕获的图像。最近有些工作通过使用具有新视角的对抗性损失和自我一致性的无监督训练尝试来放宽这样的约束,但是这些方法仍需要测试集遵循训练集的分布,导致泛化性有限,对未见类别的泛化性较差。

但是,尽管single view从2d到3d的映射对计算机很困难,但是对于人类而言却并不难。这是因为人类通过日常观察获得了关于3D世界的知识,并形成了一种对事物应该是什么样子和不应该是什么样子的常识。给定一个特定的图像,人类可以迅速将先验知识用于这张图象的推断上,这使得人类能够熟练地解决ill-posed的感知问题,如单视图三维重建。 也就是说,人们是因为长时间积累下来的先验知识才能更好地完成推断,所以说先验知识其实是很重要的,所以这篇文章也希望借助这样的先验知识,所以用到了stable-diffusion。

这篇文章提出的方法如下。对于一个图像,如何提供先验知识,这里使用并用GPT-2为每个图像生成标题(语义caption s 0 s_0 s0,文本caption s ∗ s_* s)。然后将NeRF的生成z和caption s=[ s 0 s_0 s0 s ∗ s_* s]一同输入至stable-diffusion中进行训练。相当于拿prior caption的当作stable-diffusion的condition来监督z?
在这里插入图片描述
上面场景的分布其实就是多个视角下的分布。


《SparseFusion: Distilling View-conditioned Diffusion for 3D Reconstruction》【CVPR’23】

TODO: 这篇文章具有泛化性
在这里插入图片描述

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

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

相关文章

【系统找不到D盘指定驱动设备之解决方法】

文章目录 1.原因2.解决经过3.最终解决办法 1.原因 今天在搞课设&#xff0c;突然之间电脑一顿卡&#xff0c;然后整个电脑屏幕空白&#xff0c;D盘以及所有的安装软件都不见了。点击屏幕出现提示系统找不到指定驱动设备等等提示&#xff0c;查看此电脑发现D盘神奇的消失了。 …

Kafka面试题01

1、kafka有哪些特点 高吞吐&#xff0c;低延迟 可以热扩展 并发度高 具有容错性&#xff08;即使挂的只剩下一台也可以正常工作&#xff09; 可靠性高2、请简述你在那些场景下会选择kafka&#xff1f;kafka的应用 日志收集&#xff1a; 一个公司可以用kafka收集各种服务的log…

B站、抖音上那些4K、60帧视频是如何修复的?

如何把一个不清晰的视频变成高清的视频&#xff1f;今天就来教大家视频画质修复把720p的渣画质变成4K超清画质。 相信对于电影和后期爱好者来说&#xff0c;糊成马赛克的画质一定劝退了无数人&#xff0c;那不妨试试这个 牛学长视频修复工具 牛学长视频修复工具通过高级的AI…

Java网络开发(Tomcat)—— 登陆 和 注册功能 的实现 从html 到 jsp 迭代升级 session保存登陆信息

目录 引出登陆功能---从html到jsp1.登陆--用post请求2.用html文件的form表单登陆&#xff08;1&#xff09;index.html页面&#xff08;2&#xff09;login.html登陆的页面&#xff08;3&#xff09;LoginServlet.java处理输入信息的代码&#xff08;4&#xff09;登陆成功&…

ChatGPT提示大解析:如何有效定制Prompt并用插件管理

有时候&#xff0c;你可能在编程时遇到难题&#xff0c;需要解决方法。有时候&#xff0c;你在学习新的语言时&#xff0c;想要找到一位悉心的教师。又或者&#xff0c;你可能只是需要一些新的灵感&#xff0c;来润色你的文章。在所有这些情况下&#xff0c;ChatGPT都可以发挥巨…

轻量应用服务器哪款性价比高?

最近云服务器618活动正在火热进行中&#xff0c;选对时间入手自己心仪的云服务器其实可以为你省去一大笔费用&#xff0c;这里先开门见山将三家的云服务器活动粒度做个对比。 腾讯云 懂行的人一看这种配置性价比就会内心无比激动&#xff0c;按照平时的价格根本买不到这么实惠的…

JavaSE基础知识笔记

​1、基础语法 在一个Java源文件中可以声明多个class&#xff0c;但是最多只有一个类可以被声名为public&#xff0c;而且被声名为public的类的类名必须与源文件名相同。 计算机底层都以补码的方式来存储数据&#xff01;目的是为了简化计算机的结构设计&#xff0c;同时提升运…

如何在Moonbeam设置多重签名钱包,加固资产安全

Moonbeam Safe是以太坊上Safe&#xff08;先前名为Gnosis Safe&#xff09;的分叉。Safe于2018年正式推出&#xff0c;并发展成为了以太坊上知名的去中心化托管协议和集体资产管理平台。 Moonbeam Safe可用于创建多重签名Safe钱包&#xff0c;通过配置一个多签&#xff08;mul…

02.Web大前端时代之:HTML5+CSS3入门系列~H5结构元素

Web大前端时代之&#xff1a;HTML5CSS3入门系列&#xff1a;Web大前端时代之&#xff1a;HTML5CSS3入门系列 - 毒逆天 - 博客园 1.结构元素 可以理解为语义话标记&#xff0c;比如&#xff1a;以前这么写<div id"nav"></div> 现在偷懒写&#xff1a;&l…

JavaWeb笔记_SpringBoot原理

JavaWeb笔记_SpringBoot原理 配置优先级Bean管理获取BeanBean作用域第三方Bean SpringBoot原理自动配置原理ComponentScan组件扫描Import导入源码跟踪Conditional自定义starter创建aliyun-oss-spring-boot-starter模块创建aliyun-oss-spring-boot-autoconfigure 来源 配置优先级…

opencv、dlib、paddlehub人脸检测

opencv、dlib、paddlehub检测效果对比。dlib和paddlehub的效果相对好一点。 说明&#xff1a;本文只做人脸检测不识别&#xff0c;找识别的不用看本文。 ## 部署说明 # 1. 安装python或conda # 2. 安装依赖&#xff0c;pip install -r requirements.txt # 3. 192.168.1.41 修…

Docker 基本使用

安装 Linux安装 # 1、查看当前Linux系统版本 Linux系统版本需要>3.0 [rootzjrs_test2_152 ~]# uname -a Linux zjrs_test2_152 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux [rootzjrs_test2_152 ~]# uname -r 3.10.0-957.el…

Baumer工业相机堡盟工业相机如何使用BGAPI SDK控制相机数据流的开启和关闭(C#)

Baumer工业相机堡盟工业相机如何使用BGAPI SDK控制相机数据流的开启和关闭&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机BGAPI SDK的技术背景Baumer工业相机使用BGAPISDK控制相机数据流的方式1.引用合适的类文件2.使用BGAPISDK控制相机数据流的方式2.使用BGAPISDK控…

AOP--@DeclareParents--引入新功能

目录 引入 解析 示例 引入 Java不是动态语言&#xff1b;一旦类编译完成了&#xff0c;我们就很难再为该类添加新的功能了切面能够为现有的方法增加额外的功能&#xff0c;为什么不能为一个对象增加新的方法呢&#xff1f;实际上&#xff0c;利用被称为引入的AOP概念&#x…

从数据开始,构建值得信赖的生成式AI应用

生成式AI有望从根本上打开新世界机遇的大门&#xff1a;从能够个性化回复的对话式聊天机器人&#xff0c;到各种应用的代码&#xff0c;再到营销传播的定制化内容......生成式AI正在彻底改变企业的运作方式。越来越多的领先企业正在构建可信的生成式AI应用&#xff0c;让它们在…

信息共享、管理协作!工程劳务管理模板让企业内部更加通畅

随着建筑行业的快速发展&#xff0c;工程劳务管理变得越来越复杂&#xff0c;同时企业也需要更加高效地管理劳务人员的信息、工资、考勤等方面。因此&#xff0c;工程劳务管理系统应运而生&#xff0c;帮助企业解决这些问题。作为一款低代码开发平台&#xff0c;百数根据市面上…

面向 MSP 的IT管理

MSP&#xff08;管理服务提供商&#xff09;是通过建立自己的网络运作中心(NOC&#xff0c;Network Operating Center)来实施管理服务的。用户的网络通过WAN与MSP的NOC相连&#xff0c;并使用加密技术保证信息在网络上的传输安全。通过NOC&#xff0c;MSP可以实现远程的管理、实…

LVS负载均衡群集----DR部署

文章目录 一、数据包流向分析二、DR模式的特点三、LVS-DR中的ARP问题四、LVS单网段DR模式部署第一步配置负载调度器第二步设置两台节点服务器第三步设置DR 服务器第四步在本地查看调度服务器 一、数据包流向分析 &#xff08;1&#xff09;客户端发送请求到 Director Server&a…

前后端 java 对接海康威视监控-hls实现h5播放

海康的获取监控预览流的接口当中支持 rtsp、rtmp、hls等协议。 这篇文章主要是说hls协议的。 贴上海康的开发平台地址&#xff0c;其中有对应的API&#xff1a;海康开发平台 1、java层面代码 这里除了main方法之外&#xff0c;有两个方法&#xff0c;分别是&#xff1a; 1&am…

【Python】一文教你如何使用 Requests 库

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…