我在 NeRF 中折腾自动探索式三维重建的心得
写在前面:
最近我在研究三维重建方向,深切感受到 NeRF (Neural Radiance Fields) 在学术界和工业界都备受瞩目。以往三维重建通常要依赖繁琐的多视图几何管线(比如特征匹配、深度估计、网格融合等),或者需要依靠激光雷达 / RGB-D 传感器才能得到可观的三维数据。但 NeRF 出现后,给三维重建带来了革命性的思路:它直接用一个多层感知机(MLP)来隐式建模场景位置和方向与颜色、密度的映射关系,再配合可微分的体渲染公式,就能端到端地重建出精准且逼真的场景。
然而,NeRF 往往默认已经有一批“采集好”的图像,训练时并不考虑如何采集这些图像。一旦缺乏足够且有效的多视图信息,NeRF 也很难重建出理想效果。
所以在本文里,我想分享的核心想法是:如果我们能主动控制相机的运动轨迹,怎样才能高效、全面地探索场景,从而让 NeRF 重建的质量更优?
用 NeRF 做三维重建时,如何自动选择拍摄视角?——我的探索尝试
为什么要关心相机视角?
大家可能都知道,NeRF(Neural Radiance Fields) 这种用神经网络来做三维重建的方法很火,它能在一批图像的驱动下,隐式地学习场景的几何和外观,然后渲染出各种新视角图像。但问题是,如果拍摄视角不够好,或者数据采集做得比较随意,就算再强大的 NeRF 也很难得到完整、清晰的重建。所以我就想:既然相机可以移动,那能不能自动规划相机的运动,让它去“看”最需要看的地方?这样既能节省拍摄成本,也能让 NeRF 获得更准确的三维模型。于是,就折腾出了下面这套“自动探索式”三维重建方法的思路。
一、总体想法
1. 大方向
- 一开始,用少量随机拍摄到的图像先训练出一个初步的 NeRF;
- 然后让相机(例如无人机或者机器人上的摄像头)自动探索:
- 根据当前 NeRF 的“模型不确定性”评估哪些位置、哪个角度拍摄更有价值;
- 规划相机的运动路径,让它飞过去拍摄;
- 将新获得的图像再增量更新到 NeRF 中;
- 如此循环,直到我们的 NeRF 足够“自信”,或者时间 / 资源耗尽。
2. 为啥要不确定性?
NeRF 其实暗含了一个体密度(也可以理解为“有没有东西”)的分布,某些区域如果模型还没看清,就会有比较大的“熵”(表明不确定度高)。如果在这些区域多来几张照片,模型就能对它更确定,进而让重建更加精准和全面。
二、用“熵”来衡量哪些视角值得拍
1. 信息增益的概念
我们可以把相机的某个视角记为 VVV,然后把这个视角可以“看到”的所有光线统称为 R(V)R(V)R(V)。如果 NeRF 在这些光线上不太确定,那就说明这个视角能带来“新知识”。用熵函数 HHH 描述不确定度的话,信息增益可以用下面这个公式来表示:
Gain(V∣F)=∑r∈R(V)∫nearfarH(σF(r(t))) dt \text{Gain}(V \mid F) = \sum_{r \in R(V)} \int_{near}^{far} H\bigl(\sigma_F(r(t))\bigr)\, dt Gain(V∣F)=r∈R(V)∑∫nearfarH(σF(r(t)))dt
这里,σF(r(t)\sigma_F(r(t)σF(r(t) 是 NeRF 对光线上某点密度的估计;H(p)=−plogp−(1−p)log(1−p)H(p) = -p \log p - (1-p)\log(1-p)H(p)=−plogp−(1−p)log(1−p) 是二值分布的熵。当 p≈0.5p \approx 0.5p≈0.5 时熵最大,也就代表不确定性最高。
2. 时间衰减
在实际探索中,我们希望在早期阶段多挖掘信息,因此让早期视角的增益更“值钱”,可以给它加一个时间衰减系数 1/i1/i1/i:
Gain(Vi∣F)=1i∑r∈R(Vi)∫nearfarH(σF(r(t))) dt \text{Gain}(V_i \mid F) = \frac{1}{i} \sum_{r \in R(V_i)} \int_{near}^{far} H\bigl(\sigma_F(r(t))\bigr)\, dt Gain(Vi∣F)=i1r∈R(Vi)∑∫nearfa

最低0.47元/天 解锁文章
6万+

被折叠的 条评论
为什么被折叠?



