3D 生成重建005-NeRF席卷3D的表达形式

2023-10-10 17:20

本文主要是介绍3D 生成重建005-NeRF席卷3D的表达形式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

3D生成重建005-NeRF席卷3D的表达形式


文章目录

    • 0 论文工作
    • 1 论文方法
      • 1.1 体渲染
      • 1.2 离散积分
      • 1.3位置编码
      • 1.4分层采样
      • 1.5 影响
    • 2 效果

0 论文工作

NeRF(神经辐射场技术)最早2020年提出用于新视图合成任务,并在这个领域取得了优秀的效果。如下图所示,受到体渲染的启发,论文通过已知的一组相机参数对物体进行图像采集,然后通过这组图像去训练一个MLP,MLP训练好之后能合成新视图的图像,且合成质量很高。
在这里插入图片描述

参考
NeRF: Representing Scenes as Neural Radiance Fields for View Synthes

1 论文方法

虽然我们的输入是图像,但是实际上nerf的基本原理是在射线的层次进行。下图是相机成像的简化原理,主要包括相机光心(小孔),物体,图像平面和虚平面。nerf的相关原理都是在光心,虚平面和3d物体之间展开。
在这里插入图片描述

通过若干已知相机参数对一个物体进行多角度的图像采集后,得到物体环绕一周的密集视图。借助相机将图像拆分成若干条射线进行训练。如下图,以相机中心O通过虚平面想某一像素位置发出的光线为例。训练一个MLP,输入空间点的位置(x,y,z)和相机信息 ( θ 和 ϕ ) (\theta 和\phi) (θϕ)去预测他的密度和颜色 ( σ , R G B ) (\sigma,RGB) (σ,RGB),通过积分的形式用光线上点的 ( σ , R G B ) (\sigma,RGB) (σ,RGB)预预测虚平面上该位置的RGB,然后通过对比损失去优化MLP。简化成 F θ ( X , d ) = ( c , σ ) F_{\theta}(X,d)=(c,\sigma) Fθ(X,d)=(c,σ)输入体空间中任意一点的位置和光线的方向,去预测他的颜色c和密度 σ \sigma σ
在这里插入图片描述

1.1 体渲染

其中 σ x \sigma_{x} σx表示光线在位置为x的例子处终止的概率,也可以叫密度或者不透明度。光线r的颜色表示为 C r C_r Cr,光线表示为 r ( t ) = O + t d r(t)=O+td r(t)=O+td,O表示相机光心,t表示步长,d表示光线的方向,用 t n 和 t f t_n和t_f tntf表示体渲染的边界。那么这条光线的颜色可以表示为 C ( r ) = ∫ t n t f T ( t ) σ ( r ( t ) ) c ( r ( t ) , d ) ) d t C(r)=\int_{t_n}^{t_f}T(t)\sigma(r(t))c(r(t),d))dt C(r)=tntfT(t)σ(r(t)c(r(t),d))dt
上面的公式主要包含了3项其中 σ ( r ( t ) , c ( r ( t ) , d ) \sigma(r(t),c(r(t),d) σ(r(t),c(r(t),d)分别表示位置t处的密度和颜色, T ( t ) = e x p ( − ∫ t n t σ ( r ( s ) ) d s ) T(t)=exp(-\int_{t_n}^t\sigma(r(s))ds) T(t)=exp(tntσ(r(s))ds)表示前面所有点的累计投射率,即光线穿过前面的所有点的概率。
整体的表达就是,光线的颜色等于每一点处累积透射率和终止率和颜色的积分。
显然当点x是连续的时候,这个积分的计算是很困难的,因此下面使用离散积分的情况。

1.2 离散积分

现在把 [ t n , t f ] [t_n,t_f] [tn,tf]N等分那么ti表示一个区间内的点 t i t_i ti~ u [ t n + i − 1 N ( t f − t n ) , t n + i N ( t f − t n ) ] u[t_n+\frac{i-1}{N}(t_f-t_n),t_n+\frac{i}{N}(t_f-t_n)] u[tn+Ni1(tftn),tn+Ni(tftn)]
那么体渲染的积分方程变为 C ( r ) ^ = ∑ i = 1 N T i ( 1 − e x p ( − σ i δ i ) ) c i 其中 T i = e x p ( − ∑ j = 1 i − 1 σ j δ j ) \hat{C(r)}=\sum_{i=1}^{N}T_i(1-exp(-\sigma_i\delta_i))c_i 其中T_i=exp(-\sum_{j=1}^{i-1}\sigma_j\delta_j) C(r)^=i=1NTi(1exp(σiδi))ci其中Ti=exp(j=1i1σjδj)
上面 的式子中 δ i = t i + 1 − t i \delta_i=t_{i+1}-t_i δi=ti+1ti表示间距。 1 − e x p ( − σ i δ i ) 1-exp(-\sigma_i\delta_i) 1exp(σiδi)等价于原来的 σ \sigma σ
整体上相当于把积分变成每个bin区间的和了。

1.3位置编码

因为MLP在预测xyz这种位置相关的问题时表示高频信息的能力较差,因此通过位置表明的形式将输入转换为高频信息。
γ ( p ) = ( s i n ( 2 0 π p ) , c o s ( 2 0 π p ) . . . s i n ( 2 L − 1 π p ) , c o s ( 2 L − 1 π p ) ) \gamma(p)=(sin(2^0\pi p),cos(2^0\pi p)...sin(2^{L-1}\pi p),cos(2^{L-1}\pi p)) γ(p)=(sin(20πp),cos(20πp)...sin(2L1πp),cos(2L1πp))
对于x来说L=10,对于d来说L=4
在这里插入图片描述

1.4分层采样

因为遮挡和空白区域也会产生大量计算,论文使用Hierarchical volume sampling,采用由粗到细的策略,根据粗网络的结果,在细网络中很具重要程度进行采样。改写的公式为
C ( r ) ^ = ∑ i = 1 N c w i c i , 其中 w i = T i ( 1 − e x p ( − σ i δ i ) ) \hat{C(r)}=\sum_{i=1}^{N_c}w_ic_i,其中w_i=T_i(1-exp(-\sigma_i\delta_i)) C(r)^=i=1Ncwici,其中wi=Ti(1exp(σiδi))
重要程度用 w ^ = w i ∑ j = 1 N c w j \hat w=\frac{w_i}{\sum_{j=1}^{N_c}w_j} w^=j=1Ncwjwi表示。

1.5 影响

后续研究者对nerf的渲染速度训练速度和质量进行优化,使得nerf逐渐成为一种很重要的3d表达形式。

2 效果

在这里插入图片描述
在这里插入图片描述

这篇关于3D 生成重建005-NeRF席卷3D的表达形式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/181951

相关文章

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

SQLServer中生成雪花ID(Snowflake ID)的实现方法

《SQLServer中生成雪花ID(SnowflakeID)的实现方法》:本文主要介绍在SQLServer中生成雪花ID(SnowflakeID)的实现方法,文中通过示例代码介绍的非常详细,... 目录前言认识雪花ID雪花ID的核心特点雪花ID的结构(64位)雪花ID的优势雪花ID的局限性雪花ID的应用场景

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法