复现opendrivelab的“点云预测”项目

news2024/11/16 4:46:14

本文的主要工作就是复现下述论文中的算法。

该论文全称:Visual Point Cloud Forecasting

论文内容在此不做过多介绍,直接上项目。

一、准备工作

首先通读readme.md文件的内容,了解所需要的相关依赖和数据等内容。

一定要多读几遍,不要扫一眼就过了。

接下来就是部署环境,根据readme.md文件的内容直接部署环境即可。他们这里给的部署环境的步骤还是较为详细的。

由于我电脑内存不够的原因,我在这里使用的是AutoDL上面的算力,它默认的就是Linux环境。至于AutoDL怎么用,可以去官网看帮助文档。

如果你嫌配置环境过于麻烦,可以后台私信我,我这边直接把AutoDL上的环境的镜像免费共享给你。

我的环境:

Linux:ubuntu18.04

GPU:RTX 4090(24GB) * 4

接下来就是打开pycharm,看看有没有什么导包的错误(导包时的路径问题)将其修改正确。

二、准备数据

在AutoDL中的autodl-pub文件夹中有nuScenes数据集,所以我这边直接就使用了这里面的数据。

接下来在ViDAR这个项目里面创建一个data文件夹,把下图中两个文件夹里面的数据解压至data里面。

需要注意的是,不用解压Fulldatasetv1.0文件夹中的Mini数据

数据解压准备好后,data文件夹应该长这样

如果不是这样也不用急,运行后面的代码时改一下路径即可

接下来就是运行下面的代码生成一些pkl文件

python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --version v1.0 --canbus ./data

如果你的路径和上图中的不一样,你需要手动改一下这个命令。

在运行这个命令之前,你会发现create_data.py文件中许多库是报红没有的,但是针对nuScenes数据集,这些报错不用理会。当正式运行这些命令时,会出现几个报错,提示你需要安装这几个包,例如 lyft-dataset-sdk,nuscenes-devkit等,此时你需要根据提示进行相应库的安装

运行完上述命令后,再根据readme.md文件中的内容,运行下述命令

python tools/merge_nusc_fullset_pkl.py

需要注意的是,运行时需要把里面的路径换成绝对路径,否则有可能会报错,如下图所示:

三、训练模型

CONFIG=path/to/config.pyGPU_NUM=8./tools/dist_train.sh ${CONFIG} ${GPU_NUM}

根据readme文件中的内容,运行上述命令。

其中CONFIG是你要使用的配置文件,我这边使用了项目中提供的一个阉割版配置文件mem_efficient_vidar_1_8_nusc_3future.py,GPU_NUM是你要使用多少个GPU训练模型,我这边使用的是4个。

确定好使用的配置文件和GPU数量后,把CONFIG和GPU_NUM添加到环境变量中去,具体方法如下:

vi /etc/profile
# 把下面这两句话加进去
export CONFIG=/root/autodl-tmp/ViDAR/projects/configs/vidar_pretrain/nusc_1_8_subset/mem_efficient_vidar_1_8_nusc_3future.py
export GPU_NUM=1
#保存退出后刷新环境变量
source /etc/profile

接下来就是更改配置文件mem_efficient_vidar_1_8_nusc_3future.py(如果你GPU数量够的话就不用改了)

其中那个scales这个参数你可以根据你的GPU数量进行放大或者缩小

配置文件修改好后,安装DCNv3这个库(No module named 'DCNv3')

cd ViDARcd projects/mmdet3d_plugin/bevformer/backbones/ops_dcnv3sh make.sh

安装好这个库后,就可以运行./tools/dist_train.sh ${CONFIG} ${GPU_NUM}命令了,在运行这个命令时也会出现各种各样的错误。

接下来就是一些运行代码时的错误和相应解决办法。

1、报错:bash: ./tools/dist_train.sh: Permission denied
解决办法chmod u+x tools/dist_train.sh
2、报错:/usr/bin/env: ‘bash\r’: No such file or directory
解决办法sudo apt-get install dos2unix,再执行dos2unix tools/dist_train.sh
3、报错:AttributeError: module 'PIL.Image' has no attribute 'LINEAR',
解决办法根据报错信息,修改detectron2/data/transforms/transform.py文件内容python3.8/site-packages/detectron2/data/transforms/transform.py中第46行代码,把LINEAR替换为BILINEAR即可
4、报错:File "/root/miniconda3/envs/vidar/lib/python3.8/site-packages/mmcv/utils/config.py", line 496, in pretty_text

text, _ = FormatCode(text, style_config=yapf_style, verify=True)

TypeError: FormatCode() got an unexpected keyword argument 'verify'

解决办法修改/root/miniconda3/envs/vidar/lib/python3.8/site-packages/mmcv/utils/config.py文件的第496行,text, _ = FormatCode(text, style_config=yapf_style)(把verify=True删除)
5、报错:AssertionError: ViDAR: ViDARHeadV1:During handling of the above exception, another exception occurred
解决办法
修改ViDAR/projects/mmdet3d_plugin/bevformer/dense_heads/vidar_head_v1.py第四十一行代码
​

6、报错File"/root/miniconda3/envs/vidar/lib/python3.8/sitepackages/torch/utils/tensorboard/__init__.py", line 4, in <module>
 LooseVersion = distutils.version.LooseVersion
AttributeError: module 'distutils' has no attribute 'version'
解决办法:修改torch/utils/tensorboard/__init__.py文件中的内容将from setuptools import distutils替换成from distutils.version import LooseVersion并注释LooseVersion = distutils.version.LooseVersion和del distutils

7、报错:NotImplementedError: Got <class 'dict'>, but numpy array, torch tensor, or caffe2 blob name are expected
解决办法:
打开 mmcv/runner/hooks/logger/tensorboard.py 文件。
找到 log 方法并将其修改为下面的代码。
def log(self, runner):
    tags = self.get_loggable_tags(runner, allow_text=True)
    for tag, val in tags.items():
        if isinstance(val, str):
            self.writer.add_text(tag, val, self.get_iter(runner))
        elif isinstance(val, dict):
            # 如果 val 是一个字典,展开并记录每个键值对
            for sub_tag, sub_val in val.items():
                self.writer.add_scalar(f"{tag}/{sub_tag}", sub_val, self.get_iter(runner))
        else:
            self.writer.add_scalar(tag, val, self.get_iter(runner))

四、验证模型

CONFIG=path/to/vidar_config.pyCKPT=path/to/checkpoint.pthGPU_NUM=8./tools/dist_test.sh ${CONFIG} ${CKPT} ${GPU_NUM}

这里面的CKPT就是权重,我的如下:

export CKPT=/root/autodl-tmp/ViDAR/work_dirs/mem_efficient_vidar_1_8_nusc_3future/epoch_24.pth

接下里就开始运行

./tools/dist_test.sh ${CONFIG} ${CKPT} ${GPU_NUM}

运行时会遇到和训练模型时一样的问题,可以参考上面的解决方法。

RuntimeError: NCCL error in: /opt/conda/conda-bld/........../ProcessGroupNCCL.cpp:911, unhandled system error, NCCL version 2.7.8
ncclSystemError: System call (socket, malloc, munmap, etc) failed.
​
解决办法:
运行export NCCL_IB_DISABLE=1; export NCCL_P2P_DISABLE=1; NCCL_DEBUG=INFO NCCL_SOCKET_IFNAME=eth0 ./tools/dist_test.sh ${CONFIG} ${CKPT} ${GPU_NUM}
​
(这里的eth0怎么看(ifconfig -a))
​
也可以把 export NCCL_IB_DISABLE=1; 
export NCCL_P2P_DISABLE=1; 
export NCCL_DEBUG=INFO 
export NCCL_SOCKET_IFNAME=eth0添加到环境变量中去,从而直接运行./tools/dist_test.sh ${CONFIG} ${CKPT} ${GPU_NUM}即可
RuntimeError: NCCL error in: /opt/conda/conda-bld/....../torch/lib/c10d/ProcessGroupNCCL.cpp:845, internal error, NCCL version 2.7.8
ncclInternalError: Internal check failed. This is either a bug in NCCL or due to memory corruption
​
解决办法:
在test.py文件中放入以下几行代码
import os
os.environ["NCCL_IB_TC"] = "128"
os.environ["NCCL_IB_GID_INDEX"] = "3"
os.environ["NCCL_IB_TIMEOUT"] = "22"

五、可视化

CONFIG=path/to/vidar_config.pyCKPT=path/to/checkpoint.pthGPU_NUM=1./tools/dist_test.sh ${CONFIG} ${CKPT} ${GPU_NUM} \  --cfg-options 'model._viz_pcd_flag=True' 'model._viz_pcd_path=/path/to/output

把里面的/path/to/output改成你自己的随意创建的文件夹即可

至此,项目运行结束。

六、结语

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# udp通信测试助手

1、UI界面和最终实现功能测试 2、代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threa…

【C++BFS算法】2998. 使 X 和 Y 相等的最少操作次数

本文涉及知识点 CBFS算法 LeetCode2998. 使 X 和 Y 相等的最少操作次数 给你两个正整数 x 和 y 。 一次操作中&#xff0c;你可以执行以下四种操作之一&#xff1a; 如果 x 是 11 的倍数&#xff0c;将 x 除以 11 。 如果 x 是 5 的倍数&#xff0c;将 x 除以 5 。 将 x 减 …

Linux项目实战——业务系统(后附百问网课程视频链接)

处理配置文件 一、main函数流程 初始化显示系统——>初始化输入系统——>初始化文字系统——>初始化页面系统——>业务系统 二、业务系统框架 1. 读取配置文件 2. 根据配置文件生成按钮、界面 3. 读取输入事件 4. 根据输入事件找到按钮 5. 调用按键的OnPressed函…

小程序开发怎么申请HTTPS证书?

小程序开发中申请SSL证书的流程包括选择信任可靠的SSL证书服务商、申请SSL证书、配置服务器、测试验证以等。以下将具体分析这个过程&#xff1a; 1、选择信任可靠的SSL证书服务商&#xff1a; 选择信任可靠的证书服务商&#xff0c;致命的证书服务商可以提供可靠的产品和完善…

【已解决】页面操作系统功能,诡异报错500nginx错误

【已解决】页面操作系统功能&#xff0c;诡异报错500nginx错误&#xff0c;后台没有任何报错信息 不知道啥原因 清理了浏览器缓存 也没有效果 还有一个表现情况&#xff0c;同样的操作&#xff0c;有时可以又是不行 因为报错ng的代理问题&#xff0c;检查了ng配置 后续经过同…

Unity强化工程 之 SpriteEditer SingleMode

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 因为unity不只是3d需要&#xff0c;还有2d游戏需要大量编辑处理图片素材&#xff0c;所以需要了解Sprite&#xff08;精灵…

Cesium初探-实体

在 Cesium 中&#xff0c;"实体"&#xff08;Entity&#xff09;是一个核心概念&#xff0c;它代表了可以在场景中渲染的任何东西&#xff0c;从简单的点、线、多边形到复杂的模型和图像。实体可以用来表示地理空间数据&#xff0c;如地标、轨迹、卫星轨道等。 以下…

【数据结构】栈的概念、结构和实现详解

本文来介绍一下数据结构中的栈&#xff0c;以及如何用C语言去实现。 1. 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;它只允许在固定的一端进行插入和删除元素的操作。 进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。 栈中元素遵循后进先出…

PXE实现linux系统批量自动安装

实验环境&#xff1a; 1、RHEL7主机 2、主机图形化 3、配置网络可用 4、关闭vmware dhcp功能 一、实验环境准备 1、主机图形化 在安装安装RHEL7系统时&#xff0c;选择图形化安装&#xff0c;如果没有选择&#xff0c;可以在后面通过命令安装&#xff0c;如下&#xff1…

Pinia状态管理库

为了跨组件传递JWT令牌&#xff0c;我们就会利用Pinia状态管理库&#xff0c;它允许跨组件或页面共享状态。 使用Pinia步骤&#xff1a; 安装pinia&#xff1a;cnpm install pinia 在vue应用实例中使用pinia 在src/stores/token.js中定义store 在组件中使用store 1.在main.js文…

sql注入靶场sqli-labs常见sql注入漏洞详解

目录 sqli-labs-less1 1.less1普通解法 1.在url里面填写不同的值&#xff0c;返回的内容也不同&#xff0c;证明&#xff0c;数值是进入数据库进行比对了的&#xff08;可以被注入&#xff09; 2.判断最终执行的sql语句的后面还有内容吗&#xff0c;并且能够判断是字符型的拼接…

MySQL增删改查(基础)

1、. 新增&#xff08;Create&#xff09; 语法&#xff1a; INSERT [INTO] table_name[(column [, column] ...)] VALUES (value_list) [, (value_list)] ... 例子&#xff1a; -- 创建一张学生表 DROP TABLE IF EXISTS student; CREATE TABLE student (id INT,sn INT com…

电子琴——Arduino

音调有7个音调&#xff0c;分别是哆来咪发索莱西&#xff1b;如果用蜂鸣器来发出这七个音调就要分别设置这七个音调对应频率。 电子琴实现需要物品有&#xff0c;arduino开发板一个&#xff0c;按键7个&#xff0c;蜂鸣器1个&#xff0c;杜邦线若干 重点讲一下按键原理 按键开…

linux运维一天一个shell命令之vim详解

前言&#xff1a; 在日常运维工作中&#xff0c;掌握好 Vim 的使用可以极大地提高工作的效率。Vim 作为一个强大的文本编辑器&#xff0c;广泛应用于各种运维场景 一、定义 Vim 是一个非常强大的文本编辑器&#xff0c;在 Unix/Linux 环境中非常流行。它具有许多高级功能和快…

【神软大数据治理平台-高级动态SQL(接口开发)】

1、背景 业务部门需大数据平台按照所提需求提供企业数据接口&#xff0c;基于神软大数据治理平台-高级动态SQL功能&#xff0c;满足业务需求&#xff0c;如下&#xff1a; &#xff08;1&#xff09;业务系统需求&#xff1a; 输入&#xff1a; enterpriseName&#xff1a;…

【抖音卡片】在抖音私信的时候给对方发送抖音卡片链接

效果展示 效果说明 在默认情况下&#xff0c;给对方发送连接的时候是以文本的形式展示的可点击的超链接&#xff0c;但是经过处理之后可以将你发送的连接一样卡片的形式展示。 实现步骤 第一步&#xff1a;打开微信云托管 微信云托管 (qq.com)https://cloud.weixin.qq.com/c…

原装二手MSO5204B泰克DPO5204B混合信号示波器

泰克 MSO5204B混合信号示波器&#xff0c;2 GHz&#xff0c;4 16 通道&#xff0c;10 GS/s Tektronix MSO5204B 具有出色的信号保真度和高级分析和数学功能。 当今数据速率更快、时间裕度更严格&#xff0c;因此设计时需要具有出色信号采集性能和分析功能的示波器。Tektronix…

电源芯片负载调整率测试方法、原理以及自动化测试的优势-纳米软件

在芯片设计研发领域&#xff0c;负载调整率作为稳压电源芯片的关键性能指标&#xff0c;直接关系到芯片的稳定性和可靠性&#xff0c;因此其测试和优化显得尤为重要。以下是对负载调整率测试原理、方法以及使用ATECLOUD-IC芯片测试系统优势的进一步阐述&#xff1a; 负载调整率…

阿里云oss存储之定期删除

存储到OSS中文件基于存储费用的考虑需要将存储指定时间的文件进行删除,如果想实现定期删除,有以下方法可以处理,简单记录一下: 1、oss控制台 配置生命周期策略删除,如附件1截图 2、通过sdk,调用DeleteObject请求删除文件 如client.delete(ossdemo/some-not-exists-object); …

matlab的strel()函数的使用方法(OK)

这个函数 是形态学的结构元素 使用方法如下 SE strel(nhood) SE strel("diamond",r) SE strel("disk",r) SE strel("disk",r,n) SE strel("octagon",r) SE strel("line",len,deg) SE strel("rectangle",…