NeRF based SLAM学习笔记(2):NeRF与iMap
NeRF
相关工作与基础知识
==volume rendering==
voxel grids
PDF(NeRF里面提到的PDF)
==normalized device coordinate (NDC) space==
之前在考虑相机内参对NeRF有什么影响,不过论文附录里面说把光线从相机空间映射到了NDC空间。这部分附录的内容对应的代码之前也没太看懂,还需要再好好理解一下!
NeRF里面对near和far的处理非常非常关键,这部分的附录也需要再看看。
神经渲染这边有两篇综述,可以一并看了
Transformer工作里面有一个position encoding,需要好好了解一下!
==SDF相关的工作==
==Occupancy Networks相关的工作==
其他想法
之前听co-SLAM的时候,作者就提到了如何更公平更有效地评估自己的工作。
这里NeRF其实是更之前的东西,这里实验部分也好好讲了用什么指标、如何评估等,以及为什么和xx工作比较、为什么不和xx工作比较、在哪些数据集下比较、定性的比较和定量的比较都有。
另外,这里NeRF还有很详细的消融实验。
疑问:为什么需要一个粗网络+一个细网络,为什么不能只使用同一个网络,然后粗采样+细采样呢?
iMAP
相关工作与基础知识
- 传统SLAM里面的一些东西,比如滑动窗口
- 之前一直没弄懂的几个小点:
- voxel grid,和其中的occupancy values
- matching cubes(这好像是个很熟悉的算法emmm)
- ==Code-SLAM==,iMAP对这个工作的描述:“Machine learning can discover low-dimensional embeddings of dense structure which enable efficient, jointly optimisable representation. CodeSLAM [1] is one example, but using a depth-map view representation rather than full volumetric 3D. Learning techniques have also been used to improve dense reconstruction but require an existing scan [5] or previous training data [21, 36, 2].”
- ==TSDF fusion/TSDF fusion Kintinuous==(很多NeRF based SLAM的工作都和这个比较)
- ==Fourier features let networks learn high frequency functions in low dimensional domains. Neural Information Processing Systems (NIPS), 2020==
iMAP论文提到的观点
实现的系统运行的效果是:Tracking 10Hz,Mapping 2Hz
隐式神经表示的优势:
原文:The advantages ofan implicit MLP over standard dense SLAM techniques include efficient geometry representation with automatic detail control and smooth, plausible filling-in of unobserved regions such as the back surfaces ofobjects.
- 可调整分辨率的几何表示 efficient geometry representation with automatic detail control
- 对物体背面等未观测区域进行平滑、似是而非的填充 smooth, plausible filling-in of unobserved regions such as the back surfaces ofobjects.
iMAP作者将SLAM视为一个持续学习的问题
当深度图可用时,引导稀疏采样进行渲染和训练可以用到实时的SLAM系统中
持续学习的系统应该有两方面的能力:
- 可塑性:获取新知识的能力
- 稳定性:保留旧知识的能力
遗忘旧知识是持续学习的神经网络需要面对的问题,避免新的经历覆盖记忆很重要。
iMAP的作者面对如何解决持续学习的神经网络遗忘旧知识提到的解决办法:
- 通过相对权重保护避免新数据的影响,类似SLAM中的滤波方法,可以进一步研究;
- 而冻结或者固定自网络的方法对SLAM系统来说过于简单和离散;
- iMAP在这个问题上,主要实现了基于回放的持续学习方法,用回放的方式避免遗忘(利用关键帧来进行回放)
所以如果我后面看NICE-SLAM的时候,可以再回到iMAP上面来。
iMAP具体实现
输入的是稀疏的主动采样结果,说明对于每张图像,可能只会选择其中的一部分像素点进行训练,这应该是为了保证实时性
网络结构:
- 4层隐藏层,每一层的大小为256;
- 2个输出层,一个是color,一个是density value;
- 不考虑观察方向,因此输入的位置仅仅是x,y,z
- 位置编码:
- 应用傅里叶特征网络(Fourier features let networks learn high frequency functions in low dimensional domains. Neural Information Processing Systems (NIPS), 2020)中提到的高斯位置嵌入,对输入的位置进行升维;
- 上面的结果也连接到了网络的第二个激活层
深度和颜色的渲染:
这里也提到了归一化视角(normalised viewing direction),其他地方和NeRF基本一致
联合优化部分:
设定一组关键帧集合,每个关键帧保存了图像的颜色和深度,以及网络估计的姿态;
联合优化这部分都是基于关键帧进行处理的,而Tracking则是针对每一帧做的优化;
固定场景网络,通过Tracking以计算最新帧的位姿;
联合优化这部分我认为重点还是优化网络的参数,也可以说重点是建图,不过这里也还是优化了位姿的。
更新的网络参数继续用于下一轮联合优化期间的Tracking。
关键帧选择:
第一帧用于初始化网络并且固定世界坐标系;
类似于传统SLAM的第一个关键帧,ORB-SLAM2第一个关键帧就是第一帧
使用信息增益的方法选择关键帧:
每次添加一个新关键帧,就保存当前网络参数为一个副本;
联合优化都是基于关键帧处理的,应该没必要保存副本?
在保存的副本上面检查新的帧,如果遇到一个明显的新区域,就把这一帧选择为新关键帧;论文公式(6)定义了判断某一帧对于网络来说是否为新区域的标准,大概就是对于某一帧,选中其中的部分像素进行渲染,然后计算一个平均的深度误差,看目前的网络对于这一帧包含的信息,到底学习到了多少。
这里还提了一句距离物体越近的时候关键帧添加越频繁。
很类似ORB-SLAM2,近点变动大的时候也会添加关键帧,因为利用远点计算的位姿不准确;而这里的话就是考虑距离物体越近,细节越多,需要学习表示的也越多。
另外论文里面提到“mapping过程中接收的每一帧都会被用于一定迭代的联合优化,这样的话关键帧集合就是由选择的关键帧和最新的一些帧组成”。
这里说明,mapping还是考虑了非关键帧,然后选择了学习的不好的一些帧作为关键帧???
这样的话,上面保存网络参数为副本也可以理解了
主动采样:
Image Activate Sampling
每张图像只渲染其中200个像素点,利用渲染的损失引导系统对损失较大、不够精确的地方进行主动采样。
- 先把图像分成8x8的网格;
- 在每个网格里面均匀采样,计算损失;
- 在损失较大的区域重新采样一组新的数据;
主动采样只使用在联合优化部分,而相机跟踪还是用的均匀采样。
Keyframe Activate Sampling
类似Image Activate Sampling,损失较大的关键帧多采样。
Bounded Keyframe Selection
听说这个类似VINS里面的滑动窗口?
联合优化的过程中,会根据Keyframe Activate Sampling选择3个关键帧,并且再纳入最后一个关键帧和当前的实时帧进行优化。这里就组成了一个W=5的关键帧有界窗口,窗口中的关键帧会根据时间不断变化。
其他的想法
实验部分说“We recover mesh reconstructions if needed by querying occupancy values from the network in a uniform voxel grid and then running marching cubes. Meshing is for visualisation and evaluation purposes and does not form part of our SLAM system.”
前半段没太弄懂,但是这里应该是为了方便转化成mesh,用来评估和可视化?4.2部分也说,精度、完成度、补全率都是要和ground truth的mesh作比较,所以应该是要把NeRF学到的场景转化为mesh的。这种评估方式应该不是很好,但是也没有别的很好评估的方法了,后面的工作NCIE-SLAM、以及更后面的Co-SLAM也提到了这样做的问题,Co-SLAM表示自己尝试构建一个更公平的转化为mesh的方法来做评估。
iMAP在实验部分说’使用随机变化的信息进行快速迭代比使用密集和缓慢的迭代更好。”这里指的是每张图像随机采样一部分像素点吗???
iMAP这里倒是发现一个问题:一个场景(房间)只需要十几个关键帧就能很好的重建出来,而使用更多的关键帧则无法提高场景的完成率。这个是受到网络大小的限制吗?还是受到了iMAP所使用的Activate Sampling的影响?另外,iMAP也指出自己的模型能够几秒钟得到一个粗糙的重建,但是加入细节信息需要花上几分钟时间,看他的Figure 13就发现了,很快就深度误差只有5cm了,但是从5cm降低到0.75cm就会花费非常长的时间。
iMAP论文说未来的研究方向是:更结构化和复合的表示。
原文:Future directions for iMAP include how to make more structured and compositional representations that reason explicitly about the self similarity in scenes.
iMAP在深度和颜色渲染这部分也提到了归一化视角(normalised viewing direction),这个和NeRF的NDC应该是一样的?但是这里的目的是什么呢?