没有合适的资源?快使用搜索试试~ 我知道了~
nerf-slam的复现文档
3星 · 超过75%的资源 需积分: 5 26 下载量 70 浏览量
2023-05-06
12:21:22
上传
评论 8
收藏 11.01MB DOCX 举报
温馨提示
试读
62页
nerf-slam的复现文档,我根据自己的操作一步一步写的写的,源码是有错误的,我文档有说怎么修改错误,已经把坑都过了一遍了
资源推荐
资源详情
资源评论
nerf-slam 实现三维重建
Introduction
我们知道在 slam 领域,传统视觉 slam 算法经过较长时间的理论积累和工程优化
经验,是目前工程上主流的实现方案,而深度学习与在 slam 上的发展也慢慢显
露出其优势,发展速度也越来越快。目前基于 nerf 的火热,nerf-base 的 slam
相关工作也慢慢出现,nerf-base 可以将 nerf 的惊人效果和 slam 结合在一起,
与传统 slam 如 orb-slam 这种稀疏关键点地图相比,在稠密建图上可以实现惊人
的重建效果。本文介绍的 nerf-slam 是一篇结合了多个优秀工作的成果,与
nice-slam 相比,它的输入值需要 rgb 数据就可以实现非常优秀的效果。
Tracking: Dense SLAM with Covariances
输入由连续的单目图像组成(这里表示为 Img 1 和 Img 2)。从右上角开始,该
架构使用 instant-NGP 的 NeRF,其输入为 RGB 图像 I,深度 D 来监督,其中深度
由其边缘协方差∑D 加权。我们从稠密单目 SLAM(Droid SLAM)计算这些协方差。
蓝色显示 Droid SLAM 的贡献和信息流,同样,粉色显示 Rosinol 的贡献,红色
显示本文的贡献。
RAFT
Droid SLAM 是基于 RAFT 的思路来做的,所以我们先来看看 RAFT 做了什么。RAFT
是一个利用 convGRU 来做光流估计的模型,获得了很好的效果:
RAFT 由 3 个主要组件组成:
(1)从两个输入图像中提取每像素特征的特征编码器,以及仅从 I1 中提取特征
的上下文编码器。(2) 一个相关层,通过取所有对的内积来构建 4D W×H×W×
H correlation volume 特征向量。4D correlation volume 的最后二维在多个尺
度上进行合并,以构建一组多尺度体积。
(3) 一种更新算子,通过使用当前估计值从一组相关体积中查找值来反复更新
光流。
Droid-SLAM
droid-slam 在 RAFT 基础上修改了更新部分。看上图示,操作符作用于 frame
graph 中的边,预测通过(DBA)层映射到深度和位姿更新修正。
注意这里的 pi 指的是 frame i 对应的像素点 p,di 为 frame i 的逆深度,通过相
机投影和反投影,
pij 表示 frame i 的像素点 pi 使用估计的 pose 和深度信息映射到 frame j。
这里的 Cij 输入是使用 pij 通过查找表的方式从 correlation volume 获得的(图
中表述为 Lr)。
convGRU 并不是直接输出 G 和 D 的残差,而是输出 pij 的残差量 :rij 和信心矩
阵 :wij
接下来看最重要的 DBA 部分
Dense Bundle Adjustment Layer (DBA)
其实这部分应用到了传统 slam 中 BA 的很多知识点,首先 c 和 p 分别表示 BA 过
程中的相机和 路标点,我们知道 p 的数量一般远远大于 c,所以一般在 vslam 中
求解 H 矩阵我们会先算出 c,在代入算出 p。具体操作如下:
首先通过舒尔补 Schur 将原来的 H 编程和 camera 相关的矩阵 Ht:
注意这里的 delta d 就是我们所要求的路标点逆深度,delta 柯西就是相机的位
姿,我们先求出 delta 柯西然后代入 delta d
西格马 T 和西格马 d 就是对应的边际协方差的求解,注意我们可以利用
Cholesky 分解获得:
H = LLT
现在重新回顾这张图对比一下大家就会理解的比较清楚
Mapping: Probabilistic Volumetric NeRF
Instant-NGP
这个方法利用了 hash 编码让 nerf 在速度上获得了很大的提升,上图以 L=2 两层
的分辨率为例,对应点 x,在粉色和蓝色分别有不同的 hash 编码值,将它们与
输入编码拼接组合后,再输入到 MLP,这里关于体渲染基础可以参考 Volume
Rendering
Mapping Loss
在给定超参数λD 平衡深度和颜色监督(我们将λD 设置为 1.0)的情况下,我
们将姿态 T 和神经参数θ最小化。特别是,我们的深度损失由下式给出:
来自原始深度图的神经辐射场的深度监督,无论是从密集 SLAM 估计的还是来自
RGB-D 的,都容易出错,因为深度图通常是有噪声的,并且有异常值。对于密集
的单目 SLAM,这是特别有问题的,因为即使对于无纹理或锯齿区域,也会估计
深度值。
使用 groud true 姿态和深度进行快速准确的神经辐射场重建(右上角图像)。
如果没有提供 groud true 深度,但 groud true 姿态可用,则辐射场也会收敛,
尽管速度较慢(左中);这是 NeRF(姿势图像)的经典输入。相反,如果我们
提供有噪声的姿态和无深度图,辐射场不会在 60 秒内收敛(左下角),而使用
groud true 深度和有噪声的姿势仍然会产生很好的结果(右中角)。我们的方法
旨在达到最后一个结果。右下角的图像显示,尽管使用了有噪声的姿势和深度,
但只要根据它们的不确定性进行加权,我们的方法就可以取得很好的结果。
Results
1. Install
2. Download Datasets
3. Run
4. Citation
5. License
6. Acknowledgments
7. Contact
Install
Clone repo with submodules:
git clone https://github.com/ToniRV/NeRF-SLAM.git
--recurse-submodules
git submodule update --init --recursive
From this point on, use a virtual environment... Install torch (see here for other
versions):
# CUDA 11.3
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113
--extra-index-url https://download.pytorch.org/whl/cu113
Pip install requirements:
pip install -r requirements.txt
pip install -r ./thirdparty/gtsam/python/requirements.txt
Compile ngp (you need cmake>3.22):
先升级 cmake 到 3.22 版本
查看当前 cmake 版本
cmake --version
下载:
wget
https://cmake.org/files/v3.22/cmake-3.22.0-rc2-linux-x86_64.tar.gz
--no-check-certificate
剩余61页未读,继续阅读
资源评论
- qq_446240172024-01-06请问这个报错是因为什么./examples/../slam/visual_frontends/visual_frontend.py", line 63, in <module> from networks.modules.extractor import BasicEncoder ModuleNotFoundError: No module named 'networks.modules'
搬砖者(视觉算法工程师)
- 粉丝: 314
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功