NeRF是什么
NeRF 是 2020 年 ECCV 上获得最佳论文荣誉提名的工作,NeRF 将隐式表达推上了一个新的高度,仅用 2D 的 posed images 作为监督,即可表示复杂的三维场景。
NeRF的网络结构
NeRF的主体网络结构是简单的8层全连接网络,输入为五维的连续坐标,输出为体积密度和RGB颜色信息。
在采样的过程中,我们顺着相机的视角进行一系列点的采样,并且运用传统的体积渲染的方法将得到的颜色信息和体积密度映射到一张二维图片上。
NeRF的训练
针对复杂几何和外观的渲染,NeRF依赖于Positional Encoding的特征工程。
Positional Encoding
简而言之,对于输入![[公式]](https://www.zhihu.com/equatio...),对原始的坐标以及视角方向的每一维度都做相同的操作,然后再输入到网络中,事实上在官方的代码实现中,输入的是![[公式]](https://www.zhihu.com/equatio...),也就是说原始信息也保留了下来。
NeRF训练效果
采用Positional Encoding方法编码的效果如上图所示,可以看到这种multi-resolution的feature embedding还是非常有效的。不过渲染单一场景的训练时间需要几小时,这样就限制了NeRF的应用范围和商用价值。
NeRF加速训练:
最近,英伟达在Instant Neural Graphics Primitives with a Multi-resolution Hash Encoding 提出了多分辨率哈希编码来代替vanilla NeRF中的positional encoding编码方式。
多分辨率哈希编码
上图采用维护L个不同分辨率的可训练哈希表,这样做的好处有如下几点:
1. 便于区分不同分辨率的信息
2. 降低对后面MLP的大小需求,论文中后面仅采用了2层MLP,O(10k)参数
3. 哈希表存在Cache中训练速度可以提升十到百倍
除此之外,基于tiny-cuda-nn 进行实现上述算法,实现了MLP的完全算子融合,可以大幅加速训练。针对NeRF的问题,整体的训练效果如下图所示。
NeRF训练结果:多分辨率哈希编码和其他SOTA算法
可以看出基于哈希表可以将之前小时级别的训练时长压缩到分钟甚至秒级。
总结
我们可以看到好的算法落地需要强大的工程能力支持。AI框架作为其中核心引擎,其重要性不言而喻。华为昇思MindSpore AI框架致力于打造全场景统一的AI计算框架,欢迎各位老师,同学积极参与MindSpore社区的建设。
原文链接:知乎
作者: 于璠
推荐阅读
更多嵌入式AI技术相关内容请关注嵌入式AI专栏。