Point-NeRF总结记录

news/2024/11/14 19:52:26/

渲染可以理解为三维模型或场景转换成二维图像的过程,广泛应用于电影、虚拟现实、建筑和产品设计等领域。在计算机图形学中,渲染通常指的是使用计算机程序对三维场景进行可视化的过程。假如游戏中的场景有一个3d模型、一个摄像机和光源,渲染要做的就是在摄像机的视角,3d模型结合光源进行计算,以2D的形式呈现出来。从三维重建算法角度考虑,渲染提供了以图片作为来源的三维重建算法的监督信号,可以通过将相同视角重建模型的渲染结果与输入图像做Loss以优化模型。

过去常用基于volumespoint cloudsmeshesdepth maps和implicit进行场景表示。NeRF是一种新印的神经场景表示方法,推进了新颖的视图合成和逼真渲染的技术水平。
NeRF的思想是通过多张图片重构出场景的3D
隐式表示——辐射场,由观察方向像素发射一条射线,采样得到辐射场中若干个点的(x,y,z),与观察方向通过position encoding映射到高维空间,输入到MLP,计算出点的RGB和体密度。一条射线采样的所有点加权求和得出该像素值,最后将预测的像素值与GT值计算损失。
贡献:引入MLP
预测像素颜色和体密度;将position encoding引入网络,增强其在高分辨率下的表征能力;采用coarse fine分层采样方式,能够更好适应高分辨率的表征(先均匀采样64个点估计出密度分布函数,再使用逆采样对高密度区域随机采样128个点。
缺陷:nerf无法避免对空场景进行采样,严重影响重建复杂、大规模场景的速度

Point-NeRF采用点云进行渲染并不是首创,但之前的方法都没有取得很好地效果。原因是使用的方法是splatting(抛雪球法)。它用一个函数计算每个点投影的影响范围,再用高斯函数定义范围内的点或者小区域像素的强度分布,从而计算出它们对图像的总体贡献。所有的splatting合起来就是一张渲染图片。模拟了雪球被抛到墙壁上留下的扩散状痕迹。
之前的方法要么对点云栅格化后做splatting
要么对特征splatting,再用CNN渲染。Point-NeRF直接从3D渲染,效果更好。

Nerf渲染同样为输入多视角图片,想到用MVSnet作为生成点云方法是合情合理的 。

 Mvsnet+Nerf,点云+神经渲染,既普通又新奇的方法。

 

 

1.为了克服nerf逐场景训练很慢的缺陷,pointnerf在网络中采用了一些预训练的手段,实现了场景生成的高效初始化。
2.尽管NeRF采用了coarse and fine的分层采样策略来尽可能多的在物体表面采样,但难免还是会对大量空区域进行采样,不如点云。
3.但点云包含的信息往往很少,所以传统点云重建中往往要特别稠密才能表达复杂的几何特征。Point-NeRF为了让点云储存更多信息,在采样时取临近的一些点,按一定的权重进行特征融合。这些点的特征来自于生成网络中,对输入图像进行2D卷积,并融合到生成的点云中。
4.根据相机内参(焦距、主点)外参(位姿),将每个像素点深度值转换为相机坐标系下的三维坐标,再根据相机坐标系变换到世界坐标系。

端到端的渲染损失一起训练。
以合理的权重初始化mlp
,节省了每个场景的拟合时间。
除了使用完整的生成网络,还支持使用从其他方法(如COLMAP
)重建的点云,其中不包括MVS网络的模型仍然可以为每个点提供有意义的初始神经特征。

沿着采样射线采样M个点,r为辐射值和NeRF的c是差不多的概念。整个场景表达公式和NeRF差不多。

输入x采样位置(着色点) 视角d 周围K个点及其特征f、置信度γ,输出体密度σ,辐射值r。
对目标着色点
x,不是直接取周边点特征进行融合。周边点特征提取后,先经过一个MLP_F,这个神经网络实现了输入周围一个点的特征,以及着色点和该点间距,预测该点在着色点的特征向量。这样做的原因是该点的特征通过2DCNN提取,编码了点pi周边的局部内容。使用点间距作为输入,使网络对点具有平移不变性,泛化性更好

 

 w(反距离权重)和γ(点置信度)作为权重,融合采样点周围点特征,计算出采样点处特征。将特征和视角d送入MLP_R,算出采样点处辐射值r。

 

公式跟计算r差不多,变为先解码周围点的体密度,再聚合。
渲染时候需要对点云进行检索,相较于体素网格,点云的检索要慢得多。Point-NeRF建立了grid-point indices(网格-点索引)储存神经点到均匀间隔的立方体3D网格中,具有球形体素的形状。通过光线行进,只搜索神经点近邻,并在被占据的网格或附近网格中进行着色计算。
优势:因为着色点只存在于存在神经点的位置,就避免了在空白空间进行计算;可以根据索引高效检索附近的点,大大加快查询速度。实验中取
K = 8个点作为近邻。

 

普通的MVSNet,用于计算出点云p和置信度γ。γ由概率空间三线性插值得到。 公式输入为基准视图和用于基准视图外的相邻视图,通常只采用两个。

普通的VGG网络,特征和点对齐。

初始点云通常会包含降低渲染质量的空洞和异常值。在逐场景优化过程中,为了解决这个问题,作者发现直接优化现有点的位置会使训练不稳定,无法填充较大的空洞,于是采用了新颖的点pruninggrowing策略,逐渐提高集合建模和渲染质量。
在重建出初始点云之后,对点云里的特征f
、置信度γ还有MLP里的参数进行优化。之前的几个计算公式都用到了置信度γ,它用于描述一个点位于物体表面的概率,它也被用在体密度渲染上,所以当一个点的γ较低时,说明体密度很低,可以认为那个位置是空的,可以被删除。实际实验中,每10K次迭代,去除γi<0.1的点。
使用如公式所示Loss
来优化γ,作者认为这样的loss可以让置信度趋于0或者1。这个loss是一个负值,当γ趋近于01时,都会让这个Loss成为一个绝对值很大的负值。计算出来后,乘以一个值很小的a与渲染损失相加,作为整体的Loss。实验中取了a = 2e^-3
点云扩展工作在着色点采样的时候,会计算一条采样射线上着色位置的不透明度,在该射线上不透明度超过阈值且离周边点较远的着色位置生成新点。这样的方法不仅可以实现空洞填补,还能控制新点的生成。因为需要满足不透明度和距离两个条件,所以添加的点都是相对有效、缺失的点。
xj  =
每条射线的着色位置;αj  = 着色位置的不透明度,体密度σ越大(该点存在物体概率)越大,不透明度越小,即该点在物体表面概率越大,αjg = 最大不透明度;jg = 每条射线采样点取得了最大不透明度的位置;xjg = Cjg = 取得了最大不透明度的位置间距。

 

作者死鸭子嘴硬,某些精度比不过别人就找理由(虽然确实很有道理)。赢就完事了。

细节部分重建的精度很好。

大场景同样表现优秀。ScanNet的结果很震撼,看不出是渲染出来的。

显而易见经过pruning&growing处理后效果很好,特别是COLMAP重建出的粗糙点云,经过处理后取得了巨大的提升。原始仅有1000COLMAP产生点的椅子,经过growing后产生了高质量的新视图。

比较使用提取图像特征,即Gf 2DVGG网络来初始化特征,和使用随机初始化特征(没懂是什么)。实验表明具有图像特征的神经点不仅性能更优,收敛速度也快得多。不过即使随机初始化的神经点不能达到完整模型效果,也仍然优于NeRFNSVF等方法。

总结,展望部分保密。

论文链接:https://arxiv.org/abs/2201.08845

代码:GitHub - Xharlie/pointnerf: Point-NeRF: Point-based Neural Radiance Fields
有点bug,不过训练好的模型可以直接跑出测试结果。 


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

相关文章

chatGPT写文章提问词-chatGPT生成论文要多久

让ChatGPT写评论文章 好的&#xff0c;下面是一篇由 ChatGPT 撰写的评论文章&#xff1a; 题目&#xff1a;《流浪地球》&#xff1a;中国科幻电影的里程碑 《流浪地球》是一部改变了中国电影市场的重要电影&#xff0c;它迎来了一个新时代的中国科幻电影。这部电影吸引了众…

分布式系统容灾部署方案

本文主要以OceanBase部署来说明分布式系统容灾部署方案 分布式系统提供持续可用的服务尤为重要。 好的分布式系统根据需求提供不同等级的的高可用与容灾级别。 而在分布式系统中&#xff0c;数据库系统又是最核心最关键的系统。 我们以数据库分布式系统为主&#xff0c;考虑…

MongoDB 查询文档(1)

一、查询语法 本篇我们主要讲解在集合或视图中查询文档&#xff0c;首先说明一下查询的语法&#xff1a; db.collection.find(query, projection, options) 此定义可以从集合或者视图中查找文档并返回一个游标(cursor)&#xff1b; 参数 query: 此选项可选&#xff0c;用于…

局域网(LAN),广域网(WAN)和互联网

网络异同 局域网&#xff08;LAN&#xff09;&#xff0c;广域网&#xff08;WAN&#xff09;和互联网是计算机网络的三种类型&#xff0c;它们之间有以下的区别和相同点&#xff1a; 相同点&#xff1a; 它们都是计算机网络的类型。 它们都可以让计算机之间进行数据交换和通…

Java IO常用操作详解(代码示例)

概览 Java I/O操作指的是数据的输入/输出操作。 Java的I/O操作类在java.io包中&#xff0c;主要分以下几种&#xff1a; 基于字节操作的I/O接口&#xff1a; InputStream和OutputStream基于字符操作的I/O接口&#xff1a; Writer和Reader基于磁盘操作的I/O接口&#xff1a; …

【多线程与高并发(锁)】1、锁的概念、分类和状态

1、锁的概念 java当中的锁、是在多线程环境下为保证共享资源健康、线程安全的一种手段。 线程操作某个共享资源之前&#xff0c;先对资源加一层锁&#xff0c;保证操作期间没有其他线程访问资源&#xff0c;当操作完成后&#xff0c;再释放锁。 2、锁的分类 Java中的锁按照…

I2C协议

目录 I2C协议 E2PROM AT24C02 I2C协议 假设主设备想要向从设备发送数据&#xff1a; 1. 主发送器发送START条件并寻址从接收器 2. 主发送器将数据发送到从接收器 3. 主发送器以STOP条件终止传输 如果主设备想要从从设备接收/读取数据&#xff1a; 1. 主发送器发送START条件并…

vue elementUI select下拉框设置默认值(赋值)失败

vue elementUI select下拉框设置默认值 要为select下拉框设定默认值&#xff0c;只需要把 v-model 绑定的值和你想要选中 option 的 value 值设置一样即可。 下面上代码&#xff1a; html部分代码&#xff1a; <el-select v-model"valuetype" change"ch…