论文阅读《Point NeRF:Point-based Neural Radiance Fileds》

news/2024/9/23 1:38:56/

论文地址:https://arxiv.org/abs/2201.08845
源码地址:https://xharlie.github.io/projects/project_sites/pointnerf


概述

  体素神经渲染的方法生成高质量的结果非常耗时,且对不同场景需要重新训练(模型不具备泛化能力),而基于MVS的方法可以快速重建场景。Point NeRF结合了两种方法的优点,通过在基于光线进行的渲染管道中聚合场景表面附近的神经点特征来有效渲染。Point NeRF与可以与其他 3D 重建方法结合,并使用一种新的剪枝与生长机制来处理此类方法中的错误与异常值,其重建方法比NeRF提升了30倍。


Point-NeRF 场景表示

在这里插入图片描述

体渲染与辐射场

  经典的体渲染模型可以通过沿着可微的光线来计算预测的结果,如式1所示:
c=∑Mτj(1−exp⁡(−σjΔj))rj,τj=exp⁡(−∑t=1j−1σtΔt).(1)\begin{aligned} c & =\sum_{M} \tau_{j}\left(1-\exp \left(-\sigma_{j} \Delta_{j}\right)\right) r_{j}, \\ \tau_{j} & =\exp \left(-\sum_{t=1}^{j-1} \sigma_{t} \Delta_{t}\right) . \end{aligned}\tag{1}cτj=Mτj(1exp(σjΔj))rj,=exp(t=1j1σtΔt).(1)
其中 τ\tauτ 表示透过率,σj\sigma_jσj 表示每个点的体密度,rjr_jrj 表示点的颜色 ,Δ\DeltaΔ 表示相邻采样点之间的距离。
辐射场是使用每个点的3D坐标与方向信息来表示空间中点的颜色与不透明度的一种方式。NeRF使用空间点的坐标与方向信息来回归辐射场。

基于点云的辐射场

  神经点云表示为 P={(pi,fi,γi)∣i=1,...,N}P=\{(p_i, f_i, \gamma_i)|i=1, ...,N\}P={(pi,fi,γi)i=1,...,N} ,其中 pip_ipi 表示空间点的位置,fif_ifi 表示的局部场景信息的特征向量,γi∈[0,1]\gamma_i\in[0,1]γi[0,1] 表示点的置信度(点在物体表明的概率),Point NeRF使用神经点云来回归辐射场。

  给定任意 3D 点的位置 xxx ,得到半径为 RRR 的范围内的 KKK 个邻域神经点。Point-NeRF可以被抽象为一个神经模块——任意点沿着任意方向从邻域点K回归出对应的 σ\sigmaσ (不透明度)与 rrr (RGB值):
(σ,r)=Point -NeRF⁡(x,d,p1,f1,γ1,…,pK,fK,γK)(2)(\sigma, r)=\text { Point -} \operatorname{NeRF}\left(x, d, p_{1}, f_{1}, \gamma_{1}, \ldots, p_{K}, f_{K}, \gamma_{K}\right)\tag{2}(σ,r)= Point -NeRF(x,d,p1,f1,γ1,,pK,fK,γK)(2)
PointNeRF使用类似PointNet的多层MLP结构来回归辐射场。

Per-Point processing:使用基于MLP的F来对 xxx 的邻域神经点处理,得到表示 xxx 位置的特征向量:
fi,x=F(fi,x−pi)(3)f_{i, x}=F(f_i, x-p_i)\tag{3}fi,x=F(fi,xpi)(3)
使用了相对位置信息 x−pix-p_ixpi 有利于提高模型的泛化能力。
View-dependent radiance regression: 对邻域内神经点的特征向量进行加权得到表示位置 xxx 的特征向量:
fx=∑iγiwi∑wifi,x, where wi=1∥pi−x∥. (4)f_{x}=\sum_{i} \gamma_{i} \frac{w_{i}}{\sum w_{i}} f_{i, x} \text {, where } w_{i}=\frac{1}{\left\|p_{i}-x\right\|} \text {. }\tag{4}fx=iγiwiwifi,x, where wi=pix1(4)
其中 γi\gamma_iγiiii 点的置信度。
  使用基于MLP的 RRR 来回归得到 xxx 位置关于 ddd 方向的RGB值:
r=R(fx,d)(5)r = R(f_x, d)\tag{5}r=R(fx,d)(5)
Density regression:使用基于MLP的 TTT 来回归不透明度,并使用邻域点的不透明度进行加权,如式6所示:
σi=T(fi,x)σ=∑iσiγiwi∑wi,wi=1∥pi−x∥(6)\begin{aligned} \sigma_{i} & =T\left(f_{i, x}\right) \\ \sigma & =\sum_{i} \sigma_{i} \gamma_{i} \frac{w_{i}}{\sum w_{i}}, w_{i}=\frac{1}{\left\|p_{i}-x\right\|} \end{aligned}\tag{6}σiσ=T(fi,x)=iσiγiwiwi,wi=pix1(6)
  Point-NeRF在3D层面进行体渲染,通过神经点引导模型在物体表面进行渲染,避免了在大范围深度场景采样,减小了计算量。

Point-NeRF 重建

在这里插入图片描述

Generating initial pointbased radiance fields

神经点的位置与置信度:以多张带有位姿的视图为输入,基于MVSNet获取点云与每个点的置信度:
{pi,γi}=Gp,γ(Iq,Φq,Iq1,Φq1,Iq2,Φq2,…)(7)\left\{p_{i}, \gamma_{i}\right\}=G_{p, \gamma}\left(I_{q}, \Phi_{q}, I_{q_{1}}, \Phi_{q_{1}}, I_{q_{2}}, \Phi_{q_{2}}, \ldots\right)\tag{7}{pi,γi}=Gp,γ(Iq,Φq,Iq1,Φq1,Iq2,Φq2,)(7)
神经点特征:使用带有3个下采样层的 VGG 架构 GfG_fGf 来提取 2D 图像的多尺度特征图 IqI_qIq
{fi}=Gf(Iq)(8)\left\{f_{i}\right\}=G_{f}\left(I_{q}\right)\tag{8}{fi}=Gf(Iq)(8)

Optimizing pointbased radiance fields

  初始点云的有空洞与离群点会影响渲染质量,使用点云剪枝与生长来对初始点云进行优化。
剪枝:使用置信度 γi\gamma_iγi 来对初始点云剪枝,每迭代 10k 次就给将 γi<0.1\gamma_i<0.1γi<0.1 的点云剔除。
在这里插入图片描述
  同时使用置信度稀疏损失函数,使得模型在优化过程中将置信度趋近于 0 或趋近为 1:
Lsparse =1∣γ∣∑γi[log⁡(γi)+log⁡(1−γi)](9)\mathcal{L}_{\text {sparse }}=\frac{1}{|\gamma|} \sum_{\gamma_{i}}\left[\log \left(\gamma_{i}\right)+\log \left(1-\gamma_{i}\right)\right]\tag{9}Lsparse =γ1γi[log(γi)+log(1γi)](9)
生长:使用点云生长方法来填充空洞区域的点云,选择渲染过程中不透明度最高的点 xjgx_{jg}xjg 为初始点:
αj=1−exp⁡(−σjΔj),jg=argmax⁡jαj(10)\alpha_{j}=1-\exp \left(-\sigma_{j} \Delta_{j}\right), \quad j_{g}=\underset{j}{\operatorname{argmax}} \alpha_{j} \tag{10}αj=1exp(σjΔj),jg=jargmaxαj(10)
计算与 xjgx_{jg}xjg 最近的领域点的距离 ϵjg\epsilon_{jg}ϵjg,如果同时满足 αjg>Topacity\alpha_{jg}>T_{opacity}αjg>Topacityϵjg>Tdist\epsilon_{jg}>T_{dist}ϵjg>Tdist 则生长一个点,这些天满足在物体表面附近且远离其他点,通过重复迭代这种生长策略来得到覆盖物体表面的点云。
在这里插入图片描述
损失函数
Lopt =Lrender +aLsparse (11)\mathcal{L}_{\text {opt }}=\mathcal{L}_{\text {render }}+a \mathcal{L}_{\text {sparse }}\tag{11}Lopt =Lrender +aLsparse (11)
其中 Lrender \mathcal{L}_{\text {render }}Lrender  为渲染过程中的损失函数,α=2e−3\alpha=2e^{-3}α=2e3


实验结果

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

在这里插入图片描述


http://www.ppmy.cn/news/38662.html

相关文章

springboot(10)异步任务

文章目录1、SpringBoot异步任务1.1使用注解EnableAsync开启异步任务支持1.2使用Async注解标记要进行异步执行的方法1.3controller测试2.异步任务相关限制3.1自定义 Executor3.1.1应用层级&#xff1a;3.1.2方法层级&#xff1a;3.2自定义 Executor (第二种方式)4.1异常处理4.1.…

【python设计模式】3、抽象工厂模式

设计哲学&#xff1a; 抽象工厂模式的哲学思想是面向接口编程&#xff08;Interface Segregation Principle&#xff0c;ISP&#xff09;。这一原则强调&#xff0c;客户端不应该依赖于它不需要的接口&#xff0c;而应该将接口尽可能地细化&#xff0c;只包含客户端所需的方法…

数字藏品系统功能介绍

一、特色功能 1、数字藏品专业的产品打造 为数字藏品提供链上的存证独立的身份认证&#xff0c;所有的产品都是有一连串数字的。 2、数字藏品实现发售&#xff0c;拍卖&#xff0c;申购&#xff0c;盲盒等 数字藏品提供发售渠道&#xff0c;利用多种模式的方式进行发售&…

项目二:电子骰子

项目二&#xff1a;电子骰子 文章目录项目二&#xff1a;电子骰子一、导入(5分钟&#xff09;学习目的二、新授(65分钟)1.预展示结果(5分钟)2.本节课所用的软硬件(5分钟)3.硬件介绍(1分钟)4.图形化块介绍(1分钟)5.单个模块的简单使用(1分钟)6.电子骰子编程逻辑分析(25分钟)7.电…

Python教程:GC垃圾回收

一.GC垃圾回收 1.小整数对象池&#xff1a;Python为了优化速度&#xff0c;使用了小整数对象池&#xff0c; 避免为整数频繁申请和销毁内存空间。Python 对小整数的定义是[-5, 257) 这些整数对象是提前建立好的&#xff0c;不会被垃圾回收 2.大整数对象池&#xff1a;每一个大…

清明-微信小程序

# 云开发接入 初始化云开发 环境保密

探寻人工智能前沿 迎接AIGC时代——CSIG企业行(附一些好玩的创新点)

上周我有幸参加了由中国图像图形学会和合合信息共同举办的CSIG企业行活动。这次活动邀请了多位来自图像描述与视觉问答、图文公式识别、自然语言处理、生成式视觉等领域的学者&#xff0c;他们分享了各自的研究成果和经验&#xff0c;并与现场观众进行了深入的交流和探讨。干货…

UEFI BootOption Variable存储字节流

uefi shell 使用dmpstore命令可以看到所存储的所有Variable变量数据。这里随便举2个例子 图中的Boot0000就是存储启动项Boot0000的属性变量名称&#xff0c;启动路径的数据。 // // Common structure definition for DriverOption and BootOption // typedef struct { // // D…