NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
2024-09-08 00:21:21
概
通过MLP和不同视角的2D图像拟合3Dshape: 引入了positional encoding, 用于捕获高频信息.
主要内容
假设\(\bm{x} = (x, y, z)\)表示一个3D图的位置坐标, \(\bm{d}=(\theta, \phi)\)为观看(拍摄?)角度, 我们希望拟合一个MLP\(F_{\Theta}\)将这个5维的向量映射为该3D物体在\((x, y, z, \theta, \phi)\)处的颜色\(\bm{c}=(r, g, b)\)加上体密度\(\sigma\).
训练的监督信息是不同视角的2D图片, 以及其拍摄的参数.
所以, 对于每一张2D图片可以获得:
\[C(r) = \int_{t_n}^{t_f} T(t) \sigma(\bm{r}(t)) \bm{c}(\bm{r}(t), \bm{d}) \mathrm{d}t,
\]
\]
注: 这些个\(C(r)\)以及体密度之类概念不明白, 看这篇文章只是为了看看positional encoding 怎么发挥作用的, 感兴趣的请回看原文.
对于\(F_{\Theta}\)我们可以估计出:
\[\hat{C}(\bm{r}) = \sum_{i=1}^N T_i (1 - \exp(-\sigma_i \delta_i)) \bm{c}_i,
\]
\]
通过下列损失来更新
\[\mathcal{L} = \sum_{\bm{r}} [\|\hat{C}_c (\bm{r}) - C(\bm{r})\|_2^2 + \|\hat{C}_f (\bm{r}) - C(\bm{r})\|_2^2].
\]
\]
positional encoding
在\((\bm{x}, \bm{d})\)在被喂入\(F_{\Theta}\)之前, 对其进行一个预处理(entry-wise):
\[\gamma(p) = (\sin (2^0 \pi p), \cos (2^0\pi p), \cdots, \sin (2^{L-1}\pi p), \cos(2^{L-1}\pi p)).
\]
\]
\(\gamma (p)^T \gamma(p')\)仅和\(p-p'\)有关? 所以编码了相对信息?
额外的细节
\(\bm{c}\)是视角依赖的, 但是\(\sigma\)不是. 即:
- \(\bm{x}\)首先通过一个子网络得到\(\sigma\)和特征\(f\);
- 特征\(f\)加上\(\bm{d}\)一起通过另一个子网络得到\(\bm{c}\).
本文还用到了类似重要性的技巧, 不多赘诉了.
代码
最新文章
- [CareerCup] 14.6 CircularArray 环形数组
- 【读书笔记】读《JavaScript高级程序设计-第2版》 - 函数部分
- Oracle数据库“Specified cast is农田valid”
- yii2源码学习笔记(十八)
- 【学习】ie-css3.htc---让ie8以下支持css3
- 剑指Offer_编程题_25
- Python学习笔记-Linux下安装Python
- IntelliJ IDEA自动导入包去除星号(import xxx.*)
- orcle查看表空间数据文件使用情况
- HTTP协议与WEB框架简介
- SQL 行列转置
- BZOJ 1029 [JSOI2007]建筑抢修 (贪心 + 优先队列)
- 冒泡排序算法的C++,Java和Python实现和冒泡排序算法三种语言效率的比较
- linux内核分析第二次实验
- 剑指offer面试题7:用两个栈实现队列
- vue--环境搭建(创建运行项目)
- list,set中可以存放Object类型对象
- 2014.1.4 cxf spring webservice
- Android学习系列(2)--App自动更新之通知栏下载
- mobBUS