立即注册找回密码

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

手机动态码快速登录

手机号快速注册登录

搜索

图文播报

查看: 221|回复: 5

[分享] 如何评价 NVIDIA 最新技术 5 秒训练 NERF?

[复制链接]
发表于 2025-1-3 16:43 | 显示全部楼层 |阅读模式
回复

使用道具 举报

发表于 2025-1-3 16:43 | 显示全部楼层
5秒训练自己的NeRF模型测试:Real-world NeRF demo with Instant NeRF
运行平台:R9000P,AMD Ryzen 7 5800H@ 3.20 GHz,RAM 16.0 GB
笔者使用 iPhone 12 录制了一段真实世界场景,将录制的视频抽帧并下采样到960x540(原分辨率为1920x1080,试过用原分辨率跑NeRF,显存直接爆了),抽帧后的图像数量265,3D点数量100K+ ;使用COLMAP进行稀疏重建获取相机位姿,最后使用intant-ngp在线训练NeRF模型。
说实话,instant-ngp本身训练的速度是非常快的,但是前面的数据准备阶段确实非常耗时,还是比较吃硬件的...
详细的软件配置过程参考后续列出的博客。
文献: Instant Neural Graphics Primitives with a Multiresolution Hash Encoding (SIGGRAPH 2022)
代码: https://github.com/NVlabs/instant-ngp
主页: https://nvlabs.github.io/instant-ngp
博客: https://vincentqin.tech/posts/instant-ngp
公众号:计算机视觉SLAM
回复 支持 反对

使用道具 举报

发表于 2025-1-3 16:44 | 显示全部楼层
个人理解,这篇paper主要的idea就是用了parameter encoding这个方法做了减少参数/提速,最精彩的地方就是,忽略 hash 碰撞照样可以做的很好。
意思是说,对于函数 f(x; theta),这个 x 可能有一些结构特征,它的影响有局部性(例如 nerf 就是 x 处在三维空间内,对周围的 feature 影响最大),那不如变成 f(y(x; phi); theta),其中这个 phi 参数也是可以 train 的,把它放到一个数据结构(k-d 格点)里存起来。
每次查询 x 的时候,从数据结构里查 x 周围格点的 feature 插值一下作为一个 encoding,然后喂给 f 这个神经网络,输出结果。
这样的好处是,y(x; phi) 可以利用到空间局部性,这样 x 影响的范围大大减少,更好 train 了,参数量也可以降低。坏处是按道理会损失精度。
解决方法是 multiresolution,y 存多个分辨率互相纠正。但过高的分辨率又会导致参数量太大,于是给每个分辨率存 T 个 feature entry,格点会用一个哈希函数映射到 entry 中某一项。因为格点的权重是不一样的,对于一个 feature entry,访问频率高的格点对它的梯度影响更大,虽然频率低的格点也会更新它的梯度,但是相比之下只是噪声而已。另外,多个 resolution 也能缓解碰撞的问题。
所以这个算法生成的结果,在局部会有高频噪声,这也算一个缺点吧,但是无伤大雅。
当然实现上,他们的 tiny-cuda-nn 很牛逼就是了……
回复 支持 反对

使用道具 举报

发表于 2025-1-3 16:44 | 显示全部楼层
恐怖的是,即使把hash encoding换成频率编码,也只要5分钟,照样暴打以前的NeRF。只能说tiny-cuda-nn太nb了。
GitHub - NVlabs/tiny-cuda-nn: Lightning fast & tiny C++/CUDA neural network framework
回复 支持 反对

使用道具 举报

发表于 2025-1-3 16:45 | 显示全部楼层
我觉得他的insight是,如果细粒度时发生了hash碰撞,由于参数可学习,会优化成牺牲已经被粗粒度部分拟合较好的那些位置,保全未被拟合好的有高频成分的位置。
最后的MLP render可以进一步抑制哈希碰撞导致的噪声。
相比于八叉树剪枝需要额外的工作,多分辨率哈希相当于在训练过程中自动完成剪枝,更加端到端。
这个工作也许还能和之前用八叉树直接存密度和球谐系数(从而不需要神经网络)的工作结合一下,可能会更快。
回复 支持 反对

使用道具 举报

发表于 2025-1-3 16:45 | 显示全部楼层
刚看到新闻非常惊讶,粗读了一下文章,原来是一堆加速hack,思路好哇,
作者的思路是(本人理解可能有误):

  • 对于图像/3D信息表达,传统方法存储的是结构化数据,计算是干净的公式,与计算分离的;
  • 神经网络计算与数据混到了一起,典型如Nerf,radience field数据信息存储到了网络权重里;
  • 但信息完全在网络权重里导致训练非常慢,效率低,网络表达能力也受训练的限制;
  • 于是有了parametric encoding方式,把latent feature用结构化方式存储,例如存到3D grid上,这样表达能力不受网络权重数量的限制,每次back propogate的参数只跟3D grid对应的cell以及小网络相关,训练的时间也大量缩短;
  • 但3D grid这种结构化数据,其实也非常浪费,因为三维模型只有表面信息有意义,绝大多数的cell都是空的;
  • 用分层的树形数据结构能减少内存和需要训练的数据量,但在训练过程中动态调整树的结构开销也不小;同样稀疏数据结构同样因为需要动态更新开销也大;
  • 所以不管那些空间结构,用个LOD哈希表存grid的feature,把位置hash一下存最dense,效率最高;
  • 为了简单,哈希函数选了个最快的,哈希碰撞就不管了,因为有LOD,并不在乎某一层的error,因为Loss是把所有层都叠一起训练的,在当前层碰撞了也没关系,反正前后层会弥补;
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册 微信登录 手机动态码快速登录

本版积分规则

关闭

官方推荐 上一条 /3 下一条

快速回复 返回列表 客服中心 搜索 官方QQ群 洽谈合作
快速回复返回顶部 返回列表