NeRF算法

news2024/11/23 22:18:43

Instant-ngp

Instant-ngp简单介绍
Instant-ngp论文链接
英伟达实现的github链接
taichi实现Instant-ngp
taichi实现的github链接
在这里插入图片描述

渲染

  采用体素渲染方法,从相机光线出发,逐步采样3D场景中的三维坐标点的颜色,即可渲染出3D画面。如果直接将3D场景的所有体素存储起来,将会消耗大量内存,所以采用一个神经网络来进行拟合映射。神经网络的输入数据是5维变量,分别是三维坐标和二维角度,输出是4维变量,分别是三维颜色和一维密度。
  NeRF 训练和渲染的核心步骤是体渲染技术 (volume rendering)。体渲染可以把神经场“拍平”成一张 2D 图像,从而可以和基准图像进行比较。这个过程是可微的,从而可以用来训练网络。在介绍体渲染之前,先了解一下相机成像的基本原理。在图形学中,为了节约计算资源,会假设从相机发出的光线在击中场景中的点之后,该点的颜色就是光线与屏幕交点处像素的颜色。然而在渲染大气、烟雾等类似介质时,光线会穿过介质而不是仅仅在介质表面处停止。而且在光线前进的过程中,会有一定比例的光线被介质吸收掉(不考虑散射和自发光)。吸收光线的这部分介质会对光线的最终颜色有贡献。体密度高的地方吸收的光线就多,这部分介质的颜色就显得浓重。所以光线最终的颜色是光线沿途经过的点的颜色的积分。
在这里插入图片描述
  假设相机位置 O O O,光线方向为 d d d,光线方程为 r ( t ) = O + t d r(t)=O+td r(t)=O+td,像素颜色为 c ( r ) c(r) c(r)
c ( r ) = ∫ t n t f T ( t ) σ ( t ) c ( r ( t ) , d ) d t c(r)=\int_{t_n}^{t_f}T(t)\sigma(t)c(r(t),d)dt c(r)=tntfT(t)σ(t)c(r(t),d)dt
   T ( t ) T(t) T(t)表示透射到 t t t点的光线比例, σ ( t ) d t \sigma(t)dt σ(t)dt表示的是在 t t t点附近的一个小邻域内会挡住多少比例的光线比例,二者相乘就是到达 t t t且在 t t t点被拦下的光线比例,再乘上该点对应的颜色 c ( r ( t ) , d ) c(r(t),d) c(r(t),d) 就是这个点对光线最终颜色的贡献,积分区间 [ t n , t f ] [t_n,t_f] [tn,tf]表示射线与介质的最近交点 t n t_n tn t f t_f tf。在实际计算时我们需要用离散和来逼近积分值。也就是在光线上采集一些离散点,将它们的颜色加权求和。
在这里插入图片描述

1.[Camera paramertes] 在准备好一组拍摄的 2D 图像后,首先解算每张图像对应的相机位姿参数。这一步可以使用如 COLMAP 等现成工具。COLMAP 会匹配不同图像中出现的场景共同点来计算相机位姿。此外我们假设整个场景位于范围是 [ − 1 , 1 ] 3 [-1,1]^3 [1,1]3的立方体盒子内。
2.[3D point sampling] 对一张真实图像,从相机发出一条光线,光线穿过图像进入场景。光线和图像的交点 p p p的像素值 I ( p ) I(p) I(p)是基准颜色。我们在这条光线上离散采样得到若干个点。把这些采样点的空间坐标 ( x , y , z ) (x,y,z) (x,y,z)和第一步解算出的对应的相机的姿态 θ , ϕ \theta,\phi θ,ϕ组合起来作为神经网络的输入。
3.[NeRF model] 通过神经网络预测光线上每个采样点的颜色和密度。
4.[Rendering] 通过体渲染,我们可以用上一步神经网络输出的采样点的颜色和密度作离散和,近似计算对应光线的像素值 I ^ ( p ) \hat{I}(p) I^(p)
5.[Photometric loss] 把 I ^ ( p ) \hat{I}(p) I^(p)和光线颜色的真值 I ( p ) I(p) I(p)比较计算误差和梯度,就可以对神经网络进行训练。

Instant NGP

  原始版本的 NeRF 给出的效果已经十分惊艳,但它的训练速度较慢,通常需要一到两天左右。这里主要的原因是 NeRF 使用的神经网络还是有点“大”了,2022 年 NVIDIA 的论文 Instant NGP 大大改进了这一点。Instant NGP 相对于 NeRF 的核心改进在于它采用了“多分辨率哈希编码” (Multi-resolution hash encoding) 的数据结构。你可以理解为 Instant NGP 把原始 NeRF 中神经网络的大部分参数扔掉,换成一个小得多的神经网络;同时额外训练一组编码参数 (feature vectors),这些编码参数是存储在网格的顶点上的,这样的网格一共有 L L L层,它们按照分辨率从低到高,用于学习场景不同层次的细节。在每次训练时,小神经网络的参数和每层网格上只有点 ( x , y , z ) (x,y,z) (x,y,z)周围的 8 个顶点中的编码参数会被更新。Instant NGP 的另一个重要的工程优化是将整个网络实现在一个CUDA kernel中(Fully-fused MLP),使得网络的所有计算都在 GPU 的 local cache 中进行。据论文所称这会带来10x的效率提升。
  Instant-ngp主要用于解决NeRF在对全连接神经网络进行参数化时的效率问题。该方法提出一种编码方式,使得可以使用一个较小规模的网络来实现NeRF同时不会产生精度的损失。该网络由特征向量的多分辨率哈希表实现增强,基于随机梯度下降执行优化。多分辨率结构有助于GPU并行,能够通过消除哈希冲突减少计算。该方法最大的亮点是将NeRF以小时计的时间开销提升到秒级。下图为一些渲染样例,可以看到渲染时间有显著的提升。由简介可知,Instant-ngp项目最大的亮点在于提出了一个基于哈希搜索的编码方法,仅需一个小规模神经网络就能够实现全连接网络的效果,而且不损失精度。因此,该文章的核心要点可被分为两个部分:1). 多分辨率哈希编码的设计与实现;2). 基于编码的神经网络训练。
  稍微了解哈希搜索的人都应该了解其算法效率,根据内容就能直接定位数据位置。即使需要二次搜索相同哈希值下的候选,只要在设计时保持数据分布的平衡,依然可保持高效计算。假设提供一个全连接层m(y;Φ), Instant-ngp设计一个针对输入的再赋权:y=enc(x,𝜃)用来提升拟合质量和训练速度,同时避免额外的计算开销。这使得 Instant-ngp不仅拥有可训练的权重值Φ,同时还拥有可训练的编码权重𝜃。这些权重被安排再L层中,每层包含T个特征向量,伴随F维的数据。这些超参数值被表示在下表中:
在这里插入图片描述
在这里插入图片描述
  该图表示了利用不同分辨率的体素结构来编码点云数据的方式。红色方框表示的是分辨率较高的体素网格,蓝色方框对应的是分辨率较低的提速网格。根据网格顶点的数值以及对应的位置,可以实现对网格内部点的编码。该过程可以较快执行的原因在于整个编码过程是面向数值本身实现的,因此不需要搜索,仅需要比较计算即可实现快速精确定位与编码,并输出最终我们需要的T个L维特征向量。L对应的是特定分辨率体素对应的编码层,按照之前表格给出的超参数,层数被设置为16,即体素分辨率变化分为16级,对应的分辨率随级别变化。

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

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

相关文章

进阶神册,Redis+Nginx+设计模式+Spring全家桶+Dubbo核心技术笔记

最近花了很长的时间去搜罗Java核心技术好文,我把每个Java核心技术的优选文章都整理成了一个又一个的文档。昨天也是终于全部整理好了,今天就把这些东西分享给老铁们,也能为老铁们省去不少麻烦,想学什么技能了,遇到哪方…

vue3组件通信详解

vue3组件通信方式有以下几种:porps,$emit, bus,v-model,useAttrs,$ref/$parent,provide/inject,pinia,slot。下面将逐一讲解。 目录 1.porps:实现父子组件通…

V7.0_增加消息队列功能

一,功能描述 增加消息队列;使用自定义copy功能时,子进程copy结束后向父进程发送消息(通过消息队列)然后exit;此时因wait()而处于阻塞态的父进程终于解除了阻塞并且从队列中读取到消…

【云原生-K8s-1】kubeadm搭建k8s集群(一主两从)完整教程及kubernetes简介

🍁博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 文章目录 Kubernetes简介1 kubernetes架构1.1m…

清凉一夏小风扇-React版

这里写目录标题 前言 一、效果二、代码分享三、总结 前言 本片文章主要是做一个小练习,通过react来制作一个风扇练习css动画。 vue3实现部分看这里–> 一、效果 二、代码分享 1、主体框架 “react”: “^18.2.0” “sass”: “^1.62.1” 2、主要技术点 使用事…

企业上云容灾如何实现碳中和?

随着能源成本的增加和数据消费的激增,“电耗”和“碳排放”成为今年世界移动通信大会热议的话题。目前,ICT行业耗电量约占全球用电量的7%。预计到2040年,ICT行业碳排放量占全球排放量的比例将上升至14%。 容灾是企业为了在灾难时保证业务继续…

基于html+css的图展示99

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

Log4j2 - JNDI 注入漏洞复现(CVE-2021-44228)

文章目录 Apache Log4j简介漏洞介绍影响版本漏洞编号影响组件应用 环境准备靶场搭建漏洞利用利用工具使用方式 反弹shell操作 漏洞修复建议 Apache Log4j简介 Apache log4j 是 Apache 的一个开源项目, Apache log4j2 是一个 Java 的日志记录工具。该工具重写了 log4…

03.hadoop上课笔记之hdfs环境的搭建和使用

1.启动网络 在windows任务管理器启动服务vm Dhcp #由动态ip变为静态 #启动网卡ifup ens33#修改网卡配置文件vi /etc/sysconfig/network-scripts/ifcfg-ens33BOOTSTRAPstaticIPADDR192.168.202.101NETMASK255.255.255.0GATEWAY192.168.202.2DNS1192.168.202.2#重启网络 servic…

Vue动态路由在实际项目中的应用(包含前后台细节)

背景 近期做一个公司的门户网站,在产品和新闻这一块需要用到动态路由。本节博客以产品板块为例说一下动态路由的应用。 另外如果路由相关的基础知识有问题,可以查看我的这篇博客: Vue2路由的详细讲解 另外,这篇博客也会涉及到一…

macOS visual studio code 没有读写权限 检查更新报错

问题描述 visual studio code 检查更新,报错,visual studio code没有磁盘读写权限。(可能会导致插件安装报错?) 报错:The application is on a read-only volume. Please move the application and try a…

网络安全人员需要考的几本(含金量高)的证书!

网络安全行业含金量最高的当属CISSP——注册信息系统安全专家。但这个认证也是大家公认比较难考的证书. 含金量次之的CISP——国家注册信息安全专业人员,包含CISE(工程师)、CISO(管理)、CISA(外审&#xf…

面试前15天刷完这个笔记,拿下字节测开岗offer....

面试,跳槽,每天都在发生,跳槽,更是很常见的,对于每个人来说,跳槽的意义也各不相同,可能是一个人更向往一个更大的平台,更好的地方,可以通过换一个环境改变自己的现状。而…

基于OpenCV [c++]——形态学操作(分析和应用)

摘要: 形态学一般指生物学中研究动物和植物结构的一个分支。用数学形态学(也称图像代数)表示以形态为基础对图像进行分析的数学工具。 基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的。 形…

这篇文章把MOS管的基础知识讲透了

MOS管(Metal-Oxide-Semiconductor field-effect transistor)是一种常见的半导体器件,它在数字电路、模拟电路、功率电子等领域都有广泛的应用。本文将从MOS管的基本结构、工作原理、参数特性等方面讲解MOS管的基础知识。 一、MOS管的基本结构…

MediaPlayer error(-38, 0) 异常处理

文章目录 1、参考资料2、业务背景3、解决方案 1、参考资料 Media Player called in state 0, error (-38,0) MediaPlayer的使用 2、业务背景 对时长超过 5s 的音频提供裁剪、试听功能,裁剪、试听最大时长均为 5s。当视频长度在 5s ~ 6s 之间,试听暂停…

Flink on yarn任务日志怎么看

1、jobmanager日志 在yarn上可以直接看 2、taskmanager日志 在flink的webui中可以看,但是flink任务失败后,webui就不存在了,那怎么看? 这是jobmanager的地址 hadoop02:19888/jobhistory/logs/hadoop02:45454/container_e03_16844…

Apache应用和配置

目录 构建虚拟 Web 主机基于域名的虚拟主机基于IP地址的虚拟主机基于端口的虚拟主机 Apache 连接保持构建Web虚拟目录与用户授权限制Apache 日志分割 构建虚拟 Web 主机 虚拟Web主机指的是在同一台服务器中运行多个Web站点,其中每一个站点实际上并不独立占用整个服务…

【发电机、输变电JDL-5400A 电流继电器 报警信号切除故障JOSEF约瑟】

名称:电流继电器;品牌:JOSEF约瑟;型号:JDL-5400A;触点容量:250V2A;返回时间:≤35ms;整定范围:0.03-19.9A;特点:返回系数高…

应用案例 | 升级OPC Classic到OPC UA,实现安全高效的数据通信

一 背景 OPC(OLE for Process Control,用于过程控制的OLE)是工业自动化领域中常见的通信协议。它提供了一种标准化的方式,使得不同厂商的设备和软件可互相通信和交换数据。OPC Classic是旧版OPC规范,通过使用COM&…