Active Neural SLAM 复现记录

创建虚拟环境

conda create -n AVSLAM python==3.10
conda activate AVSLAM

安装habitat-sim

git clone https://github.com/facebookresearch/habitat-sim.git
cd habitat-sim
git checkout 9575dcd45fe6f55d2a44043833af08972a7895a9 # 切换到历史分支
pip3 install -r requirements.txt
python setup.py install --headless

安装habitat-api

git clone https://github.com/facebookresearch/habitat-api.git
cd habitat-api
git checkout b5f2b00a25627ecb52b43b13ea96b05998d9a121
pip3 install empy==3.3.4 rospkg pyyaml catkin_pkg
pip3 install -e .

安装Pytorch

我想直接一步到位,用目前的12.1CUDA的Pytorch2.4.1,于是:

pip3 install torch torchvision torchaudio

配置项目

git clone --recurse-submodules https://github.com/devendrachaplot/Neural-SLAM
cd Neural-SLAM
pip3 install -r requirements.txt

此时报错:
在这里插入图片描述
感觉应该是scikit的版本问题,我全不指定版本,进行安装。完成了。

准备数据

我看他实例的data文件夹格式给的是gibson数据集和pointnav任务,所以我先只下载这两个数据。
在这里插入图片描述

先搞Gibson场景数据

这个过程挺繁琐的:

  1. 先通过这个项目的readme跳转链接到habitat-lab项目:在这里插入图片描述

  2. 找到habitat-lab项目的Datasets一节,跳转链接到数据集表格:在这里插入图片描述

  3. 在表格中找到Gibson,点击跳转到habitat-lab项目关于Gibson场景数据集的下载说明:在这里插入图片描述

  4. 在下载说明中发现,要下载Gibson数据集要去Gibson项目。另外还有一个在Gibson基础上标注了语义信息的数据集叫3DSceneGraph。暂时先不管这个3DSceneGraph,点击Gibson链接跳转到Gibson项目:在这里插入图片描述

  5. 在Gibson项目中,找到Database一节。这里讲到,完整的Gibson数据集有572个空间,1440个楼层的场景,非常大。但还有一个只有39个场景的子集。推荐先下载这个子集,后面有需要哪个场景,再单独下载这个场景。所有Gibson场景可以由一个网页在线查看。此外,如果想用Gibson的仿真器跑其他数据集,例如Standford2D3DS或者Matterport 3D也是可以的。我们先只下载那个子集,点击第一个下载链接,跳转到Gibson数据集的下载指示页面:在这里插入图片描述6. 在下载指示页面,我们可以看到要下载Gibson数据集要提交表格签署承诺。要下载Stanford 2D-3D-Semantics数据集或者Matterport3D数据集,要走另外的流程。我们不要这俩数据集,点开for Habitat-sim的表格看下:在这里插入图片描述

  6. 发现可以提供A,B,C三种选项。A是Gibson这篇2018年CVPR论文中的数据,并给出了小杯、中杯、大杯、超大杯的配置;B是Gibson改进版iGibson,这个2021年IROS论文的数据,他相较Gibson的改进是交互性;C是用于Habitat-sim挑战的,我们要的就是这个。文档最后要签名一个PDF文件,填好电子表单的信息,然后提交。在这里插入图片描述

  7. 然后立马就有下载链接了。对于Habitat有两种选择。一种是可用于Habitat-sim全部的训练和验证集,压缩包有11G;一个是Habitat Challenge所用的4多个子集(具体哪几个,在Habitat ICCV 2019的论文里有说)。点击下载即可:在这里插入图片描述
    本项目论文中说,只用了Gibson的最小集合,所以那个11G的不下也没问题。我是磁盘目前还有1个T,先下载再说,万一以后要用。
    在这里插入图片描述
    最后把下载下来的压缩包提取出来,然后按照格式整理就好:
    在这里插入图片描述
    还可以检验以下MD5,看看下载过程中有没有出错。参照Gibson的MD5校验

md5sum ./gibson_habitat.zip 
35f274a781eba9ed1b77feba50d040da  ./gibson_habitat.zip

发现没问题~

再搞pointnav任务数据

还是从Neural SLAM的Setup跳转到Habitat-lab的Datasets,再跳转到Habitat-lab的数据集表格。发现Gibson场景有3个任务数据:
在这里插入图片描述
看本项目实例文件结构,好像只要V1的。
都很小,我就全点击下载了吧:
在这里插入图片描述

创建软链接

把外接磁盘的数据集软链接到项目中:

ln -s /media/lcy-magic/Dataset/Habitat_DataSet/ /home/lcy-magic/Habitat_TEST/2019_PointGoal/Neural-SLAM/data

检验依赖:

File "/home/lcy-magic/anaconda3/envs/AVSLAM/lib/python3.10/site-packages/seaborn/cm.py", line 1055, in <module>
    mpl_cm.register_cmap(_name, _cmap)
AttributeError: module 'matplotlib.cm' has no attribute 'register_cmap'

报错:

AttributeError: module 'matplotlib.cm' has no attribute 'register_cmap'

根据Kimi的说法,Matplot3.9.0之后,register_cmap变成了colormaps。可以选择改代码,也可以回退版本。但由于是seaborn这个包调用的。当时装matplotlib是直接pip,而seaborn则指定了0.9.0版本。所以改代码麻烦。还是改版本吧。先试试给seaborn升版本:

pip3 install --upgrade seaborn

我现在的版本是0.13.2。
再运行依赖测试脚本,新的报错:
在这里插入图片描述
然后发现issue中有人遇到了和我一样的问题还没有解决参考issue。只能自己一个一个找了。
发现第一个错误是以下代码用了np.float,而先在的numpy已经没有float了,应该换为float64。

File "/home/lcy-magic/anaconda3/envs/AVSLAM/lib/python3.10/site-packages/habitat_sim-0.1.2-py3.10-linux-x86_64.egg/habitat_sim/utils.py", line 93, in quat_from_angle_axis
    axis = axis.astype(np.float)

于是在整个habitat sim项目中查找np.float,都改成np.float64:
在这里插入图片描述
然后重新在habitat-sim项目根目录下,把habitat-sim安装进虚拟空间:

python setup.py install --headless

也可以用编辑模式安装,这样再改动就不需要重新安装了:

python setup.py develop --headless

又有新错误:

File "/home/lcy-magic/Habitat_TEST/2019_PointGoal/Neural-SLAM/env/habitat/utils/supervision.py", line 37, in _get_xy_bounding_box
    min_ = np.floor(np.min(zx, axis=0) - padding).astype(np.int)
  File "/home/lcy-magic/anaconda3/envs/AVSLAM/lib/python3.10/site-packages/numpy/__init__.py", line 324, in __getattr__
    raise AttributeError(__former_attrs__[attr])
AttributeError: module 'numpy' has no attribute 'int'.

看来又是np版本的问题。现在的np没有Int了,同样我们都替换为int64:
在这里插入图片描述
又有新报错:

File "/home/lcy-magic/Habitat_TEST/2019_PointGoal/Neural-SLAM/utils/optimization.py", line 50, in get_optimizer
    expected_args = inspect.getargspec(optim_fn.__init__)[0]
  File "/home/lcy-magic/anaconda3/envs/AVSLAM/lib/python3.10/inspect.py", line 1245, in getargspec
    raise ValueError("Function has keyword-only parameters or annotations"
ValueError: Function has keyword-only parameters or annotations, use inspect.signature() API which can support them
Exception ignored in: <function VectorEnv.__del__ at 0x7fd74b1e8f70>

这又是一个版本问题,现在我的python3.10已经没有inspect.getargspec了,取而代之的是inspect.signature,而且返回的parameters还是一个有序字典,不再是列表。所以应该这样改:

# expected_args = inspect.getargspec(optim_fn.__init__)[0]
    expected_args = list(inspect.signature(optim_fn.__init__).parameters)

此时,可以正常运行指标验证了:
在这里插入图片描述

测试

下载预训练权重:

mkdir pretrained_models
wget --no-check-certificate 'https://drive.google.com/uc?export=download&id=1UK2hT0GWzoTaVR5lAI6i8o27tqEmYeyY' -O pretrained_models/model_best.global

测试:

python main.py --split val --eval 1 --train_global 0 --train_local 0 --train_slam 0 \
--load_global pretrained_models/model_best.global \
--load_local pretrained_models/model_best.local \
--load_slam pretrained_models/model_best.slam 

糟糕:

AssertionError: Insufficient GPU memory

看下代码:

for i in range(num_gpus):
                gpu_memory = min(gpu_memory,
                    torch.cuda.get_device_properties(i).total_memory \
                            /1024/1024/1024)
                if i==0:
                    assert torch.cuda.get_device_properties(i).total_memory \
                            /1024/1024/1024 > 10.0, "Insufficient GPU memory"

竟然要10G显存!!!哭了
我暂时注释掉显存检测的部分,直接指定场景数:

for i in range(num_gpus):
                gpu_memory = min(gpu_memory,
                    torch.cuda.get_device_properties(i).total_memory \
                            /1024/1024/1024)
                if i==0:
                    pass
                    # assert torch.cuda.get_device_properties(i).total_memory \
                    #         /1024/1024/1024 > 10.0, "Insufficient GPU memory"

            num_processes_per_gpu = int(gpu_memory/1.4)
            # num_processes_on_first_gpu = int((gpu_memory - 10.0)/1.4)
            num_processes_on_first_gpu = 4

这个时候我的显存占用差不多到头了:
在这里插入图片描述
但光跑着,看不出什么名堂,我想可视化。发现可以添加-v 1实现,但并没有作用。原因是,matplotlib用的是非交互后端Agg,而我们需要交互后端Tagg:

if sys.platform == 'darwin':
    matplotlib.use("tkagg")
else:
    matplotlib.use('Agg')

这个sys.platform是怎么决定的呐?Kimi告诉我:

  • 对于 Windows 系统,sys.platform 通常是 ‘win32’。
  • 对于 macOS 系统,sys.platform 通常是
    ‘darwin’。
    对于 Linux 系统,sys.platform 通常是 ‘linux’。
    对于其他 Unix
    系统,sys.platform 可能是 ‘posix’ 或其他特定的值。
    这个项目作者用的macOS,所以这么写的。因此我们直接指定就好:
# if sys.platform == 'darwin':
#     matplotlib.use("tkagg")
# else:
#     matplotlib.use('Agg')
matplotlib.use('TkAgg')

这个项目其他地方的,也记得改过来。
这时候能显示了,但是总警告缺少字体,很烦人:
在这里插入图片描述
搜了下,这个字体付费,虽然可以免费下载,但感觉麻烦,换成无衬线字体族的Arial、Helvetica、Verdana、DejaVu Sans中一个。我尝试了下,只有DejaVu Sans可以:

# fontname='Helvetica',
fontname='DejaVu Sans',

注意,这时候最好把场景数num_processes_on_first_gpu设为1,这样看到的可视化界面不是一直乱跳的。
最后效果大概这样:
在这里插入图片描述

训练

把num_processes_on_first_gpu设成4后,我直接:

python main.py

看到明天早上组会前能跑多少吧:
在这里插入图片描述
早上来发现训练停止了,还报了已杀死。以为又是哪里报错把某个线程干掉了。组会就报告说失败了。结果下午睡一觉回来发现前面好像没有报错,估计是程序的自动结束。我看了下训练权重保存的地方,果然已经有了。于是加载自己训练的权重,可以跑起来:
在这里插入图片描述

### 复现 NERF-SLAM 项目所需的关键要素 #### 配置文件说明 NERF-SLAM项目包含多种配置文件,这些文件对于调整模型训练超参数以及设定系统运行环境至关重要。具体来说,存在用于调节NeRF训练过程中的各项参数的JSON文件,还有负责定义整个软件栈工作条件的YAML文件[^1]。 #### 启动文件概述 启动脚本通常位于项目的根目录下或是特定子模块内,其作用在于初始化必要的组件和服务以便顺利执行后续的任务流程。这类文件可能命名为`run.sh`或类似的名称,并且会调用其他辅助性的Python脚本来完成实际的工作逻辑。 #### 解决GTSAM错误提示 针对遇到的`AttributeError: 'gtsam.gtsam.GaussianFactorGraph' object has no attribute 'optimizeDensely'`这一问题,在官方GitHub仓库的相关Issue页面上已有讨论指出该问题是由于版本兼容性引起的。建议确认所使用的GTSAM库版本是否与项目文档中推荐的一致;如果仍存在问题,则考虑降级至已知稳定版次来规避此类异常情况的发生[^2]。 #### 提升性能展望 随着深度学习领域不断进步,未来的研究方向可能会聚焦于优化NeRF及其衍生技术的运算效能方面。这包括但不限于开发新颖的数据采样策略、改进神经网络架构设计、融合传统几何学概念以及构建更加高效能的图像合成引擎等措施,旨在加快渲染速度并降低整体资源消耗水平[^3]。 ```bash # 安装依赖项示例命令 pip install -r requirements.txt conda create --name nerf_slam_env python=3.8 conda activate nerf_slam_env git clone https://github.com/ToniRV/NeRF-SLAM.git cd NeRF-SLAM/ chmod +x run.sh ./run.sh ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Debug的魔法小马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值