【Instant-NGP】将图像、3D模型、场景迅速参数化为神经网络MLP(Instant-NGP论文复现)

一、概述

NGPNeural Graphics Primitives)是一种基于神经网络的图形基元,使用全连接的神经网络进行参数化,其训练和评估成本可能很高。

作者提出了一种多分辨率哈希编码方法,该编码具有自适应性高效性的特点,可用于改善神经网络输入以提高近似质量和训练速度。多分辨率结构允许网络消除哈希冲突的歧义,从而形成一个简单的架构,可以在现代 GPU 上并行化。

作者将多分辨率哈希编码应用到全融合的CUDA内核,使得NGP得以利用其并行性,从而减小带宽和计算上的浪费。最终能够在几秒钟内训练得到高质量的NGP,并在数十毫秒内以1920x1080的分辨率进行渲染,故称Instant-NGP

二、原理介绍

多分辨率哈希编码Multiresolution Hash Encoding)具有自适应和高效的特点:

  • 可以应用在多种场景表示,如 Gigapixel图像sdf(符号距离场)nerf(神经辐射场)
  • 哈希查找的时间复杂度是O(1),无需控制流,在GPU上表现出色,避免了执行分歧和串行指针跟踪;
  • 结合了多个不同分辨率的层次,以捕捉场景中的粗糙精细特征。

具体实现原理如下:

在这里插入图片描述

  1. 对于给定的输入坐标x,在不同分辨率级别上找到包围它的体素,并通过对整数坐标进行哈希映射的方式,为这些体素的角(顶点)分配索引。
  2. 对于所有生成的角索引,从哈希表中查找相应的F维特征向量
  3. 根据x在相应体素中的相对位置对这些特征向量进行线性插值
  4. 将每个级别的特征向量以及辅助输入 𝜉∈ R𝐸 连接起来,得到 MLP 的输入编码 𝑦 ∈ R𝐿𝐹+𝐸
  5. 最后,通过反向传播损失梯度(loss gradients)来训练编码,梯度将通过MLP网络(5)、连接(4)、线性插值(3)反向传播,然后累积到查找到的特征向量中(2)。

三、实现细节

作者在CUDA中实现该多分辨率哈希编码,将其与tiny-cuda-nn框架的快速完全融合的MLP相结合,下面是一些具体实现细节:

  • 性能考虑:为了优化推理和反向传播性能,哈希表条目以半精度(每个条目2字节)存储。同时,维护一个全精度副本以稳定混合精度参数更新。

  • 分级计算:作者按级别评估哈希表,在处理一批输入位置时,仅需小部分连续哈希表保留在缓存中,从而充分利用GPU的缓存和并行性。

  • 模型结构:除了NeRF场景之外的任务,MLP的结构包括两个宽度为64个神经元的隐藏层(使用ReLU激活函数)和一个线性输出层。

  • 最大分辨率(Nmax:使用较大的值可以支持在广阔场景中靠近物体时的高质量渲染。

    • 对于NeRFSDF,最大分辨率被设定为场景尺寸的2048倍;
    • 对于gigapixel image(十亿像素图像),最大分辨率被设定为图像宽度的一半;
    • 对于辐射缓存Radiance Cache),最大分辨率被设定为219
  • 初始化:作者根据相关文献,对神经网络权重进行初始化,为神经网络各层的激活及其梯度提供合理的缩放;使用均匀分布 U(−10−4, 10−4) 对哈希表条目进行初始化,以提供一些随机性。

  • 训练:作者使用

Instant NGP是英伟达实验室开源的一种神经图形原语,全称为Instant Neural Graphics Primitives。它提供了4种神经图形原语的实现,包括神经辐射场(NeRF)、有符号距离函数(SDF)、神经图像和神经体积。 Instant NGP使用了多分辨率哈希输入编码的多层感知机(MLP)来进行训练和渲染,并且借助了tiny-cuda-nn框架。 在Windows操作系统上,您可以直接从GitHub上下载与您的显卡对应的版本,并解压缩后启动instant-ngp.exe来使用Instant NGP的交互式GUI。 如果您想在Linux上编译和运行Instant NGP,您可以使用以下命令克隆instant-ngp的GitHub存储库:git clone --recursive https://github.com/NVlabs/instant-ngp.git。 另外,Instant NGP的GUI是可关闭的。您可以使用./instant-ngp --no-gui或python scripts/run.py命令来关闭GUI。您还可以通过使用cmake -DNGP_BUILD_WITH_GUI=off ...来在编译时禁用GUI。 参考资料: 英伟达实验室开源的instant-ngp全称为Instant Neural Graphics Primitives,源码地址为https://github.com/NVlabs/instant-ngp,可用于快速的训练NeRF模型,论文名为:Instant Neural Graphics Primitives with a Multiresolution Hash Encoding, 项目主页为: https://nvlabs.github.io/instant-ngp/。支持在windows和linux上进行编译运行。 1.clone instant-ngp: git clone --recursive https://github.com/NVlabs/instant-ngp.git。 gui是可关闭的:Use ./instant-ngp --no-gui or python scripts/run.py. You can also compile without GUI via cmake -DNGP_BUILD_WITH_GUI=off ...。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ryan2k

请作者喝一杯咖啡吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值