Active Neural SLAM 复现记录

Active Neural SLAM 复现记录

  • 创建虚拟环境
  • 安装habitat-sim
  • 安装habitat-api
  • 安装Pytorch
  • 配置项目
  • 准备数据
    • 先搞Gibson场景数据
    • 再搞pointnav任务数据
    • 创建软链接
  • 测试
  • 训练

创建虚拟环境

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_axisaxis = 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_boxmin_ = 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_optimizerexpected_args = inspect.getargspec(optim_fn.__init__)[0]File "/home/lcy-magic/anaconda3/envs/AVSLAM/lib/python3.10/inspect.py", line 1245, in getargspecraise 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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/422155.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

存储课程学习笔记8_spdk的安装以及简单demo测试

已经对相关的基础概念有一定的了解&#xff0c;比如裸盘&#xff0c;文件系统&#xff0c;读写相关裸盘&#xff0c;裸盘挂载使用&#xff0c;内核插入文件系统的方式&#xff0c;相关操作io的库或者函数&#xff08;io_uring, readv&#xff0c;writev, mmap等&#xff09;&am…

nlohmann::json中有中文时调用dump转string抛出异常的问题

问题描述 Winodows下C开发想使用一个json库&#xff0c;使用的nlohmann::json&#xff0c;但是遇到json中使用中文时&#xff0c;转成string&#xff0c;会抛出异常。 nlohmann::json contentJson;contentJson["chinese"] "哈哈哈";std::string test con…

前端算法(持续更新)

1、最大的钻石 1楼到n楼的每层电梯口都放着一个钻石&#xff0c;钻石大小不一。你从电梯1楼到n楼&#xff0c;每层楼电梯门都会打开一次&#xff0c;只能拿一次钻石&#xff0c;问怎样才能最大的钻石&#xff1f; 解题思路&#xff1a; 这是一个经典的动态规划问题&#xff…

让人眼前一亮的软件测试简历,收不到面试邀请算我输

不知道大家的简历是不是都写成下面这样 根据需求文档进行需求分析 熟悉业务流程&#xff0c;明确测试点 根据测试点设计测试用例 参与评审测试用例 提交和回归跟踪缺陷&#xff0c;确认修复完成之后关闭Bug 通过使用Fiddler进行抓包分析并定位前后端Bug 使用简单的SQL语…

git一个项目关联多个远程仓库

一行代码就行&#xff1a; git remote set-url origin [想要关联的远程仓库地址]想要关联哪个就切换哪个 或者不用每次切换&#xff0c;集中管理&#xff1a; Git->Manage Remotes 点击“”&#xff0c;填入Name和想要关联的远程库地址 每次push时执行命令 git push [为…

美团OC感想

OC感想 晚上十点拿到美团意向了 到家事业部。&#xff0c;日常实习没过&#xff0c;暑期实习没过&#xff0c;秋招终于意向了&#xff0c;晚上十点发的&#xff0c;整整激动到一点才睡着&#xff0c;不仅因为这是秋招的第一个意向&#xff0c;更因为这是我一直心心念念想去的地…

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录 [web][极客大挑战 2019]Http 考点&#xff1a;Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点&#xff1a;弱密码字典爆破 四种方法&#xff1a; [web][极客大挑战 2019]Http 考点&#xff1a;Referer协议、UA协议、X-Forwarded-For协议 访问…

五款知名国内外OA系统厂商盘点,优缺点一目了然!

本文将推荐五款知名的OA系统&#xff0c;助力企业选型&#xff01; OA 系统就像是企业办公的智慧枢纽。它整合了流程审批、文档管理、沟通协作等多种功能&#xff0c;让企业的日常办公更加高效有序。就好比一个多功能的办公工具箱&#xff0c;为企业提供各种实用的工具。 然而…

研1日记9

1.理解conv1d和conv2d a. 1和2处理的数据不同&#xff0c;1维数据和图像 b. 例如x输入形状为(32,19,512)时&#xff0c;卷积公式是针对512的&#xff0c;而19应该变换为参数中指定的输出通道。 2.“SE块”&#xff08;Squeeze-and-Excitation Block&#xff09;它可以帮助模…

jenkins工具的介绍和gitlab安装

使用方式 替代手动&#xff0c;自动化拉取、集成、构建、测试&#xff1b;是CI/CD持续集成、持续部署主流开发模式中重要工具&#xff1b;必须组件 jenkins-gitlab&#xff0c;代码公共仓库服务器&#xff08;至少6G内存&#xff09;&#xff1b;jenkins-server&#xff0c;需…

无人机视角-道路目标检测数据集 航拍 8600张 voc yolo

数据集名称&#xff1a; 无人机视角-道路目标检测数据集 数据集规模&#xff1a; 图像数量&#xff1a;8600张拍摄方式&#xff1a;航拍&#xff08;使用无人机拍摄&#xff09;标注格式&#xff1a;支持VOC和YOLO格式 数据集内容&#xff1a; 该数据集由无人机从空中拍摄的…

网络安全架构师

网络安全架构师负责构建全面的安全框架&#xff0c;以保护组织的数字资产免受侵害&#xff0c;确保组织在数字化转型的同时维持强大的安全防护。 摩根大通的网络安全运营副总裁兼安全架构总监Lester Nichols强调&#xff0c;成为网络安全架构师对现代企业至关重要&#xff0c;…

源代码防泄密软件的五大特点

在数据防泄密领域&#xff0c;深信达的SDC沙盒软件以其独特的技术和创新应用&#xff0c;为源代码安全提供了强有力的保护。特别是在源代码防泄密方面&#xff0c;SDC沙盒表现出色&#xff0c;其实现方式主要包括以下几个方面&#xff1a; 1. **内核级虚拟沙盒技术**&#xff1…

Vue | Vue深入浅出——Vue中的render函数详解

1.render函数 在编写vue单文件的大多数情况下&#xff0c;我们都是使用template模板来创建HTML。然而在一些条件判断比较复杂的场景下&#xff0c;使用JavaScript去描绘HTML的生成逻辑会显得更加的简洁直观。 使用Vue官网的例子来简单说明&#xff1a; 如果自己在开发的时候…

部署Apache网站

简易部署自己的apache网站 写在前面&#xff1a;先安装好mysql&#xff0c;再来搭建站点 1.安装php [rootlocalhost ~]# yum install php -y ##安装了php&#xff0c;默认会和apache结合工作2.创建文件编写php网页代码 [rootlocalhost ~]# vim /var/www/html/index.php ##创…

linux入门到实操-1 Linux概述、诞生过程、发行版本,如何安装?

教程来源&#xff1a;B站视频BV1WY4y1H7d3 3天搞定Linux&#xff0c;1天搞定Shell&#xff0c;清华学神带你通关_哔哩哔哩_bilibili 整理汇总的课程内容笔记和课程资料&#xff0c;供大家学习交流下载&#xff1a;夸克网盘分享 本文内容为完整笔记的入门篇 概述部分历史内容…

Day9 | Java框架 | SpringBoot

Day9 | Java框架 | SpringBoot SpringBoot简介入门程序概述起步依赖 基础配置配置文件格式&#xff1a;3种yaml语法规则yaml数据读取三种格式 多环境启动配置文件参数命令行参数多环境开发控制&#xff1a;Maven & SpringBoot 多环境兼容 配置文件分类&#xff1a;4种 整合…

【JUC】15-ThreadLocal线程局部变量

1. ThreadLocal ThreadLocal提供线程局部变量。每个线程在访问ThreadLocal实例的时候都有自己的、独立的变量副本。ThreadLocal实例通常是类中的私有静态字段&#xff0c;使用它的目的是希望将状态(用户ID或事务ID)与线程关联起来。 class Saler {ThreadLocal<Integer> …

MATLAB实现Dijkstra算法和Floyd算法

目录 1、文件功能介绍 2、代码执行效果展示 3、Dijkstra算法求图的单源最短路径 4、Dijkstra fullPath的更新逻辑 5、DIjkstra算法流程图 6、Floyd算法实现图的任意两点间最短路径 7、Floyd算法流程图 8、Floyd fullPath的更新逻辑&#xff08;非递归算法&#xff09; …

labview串口大数据量报错的一种解决思路(通过tcp进行写入和读取串口数据)

因为项目要求&#xff0c;用labview给客户开发了一个上位机&#xff0c;在现场给客户调试上位机时&#xff0c;发现了几种奇怪的现象 1&#xff1a;客户样件有两路串口&#xff0c;一路串口可以多字节进行发送数据&#xff0c;一路只能单字节发送数据&#xff0c;每次单字节数据…