Lift-Splat-Shoot 复现

news/2025/3/16 5:25:56/文章来源:https://www.cnblogs.com/eslzzyl/p/18504164

我理解的复现,就是把代码跑通,完整训练一遍,然后测试,争取达到论文里报告的效果。虽然大部分工作复现出来可能都到不了论文里的性能,比较玄学。

概述

Lift-Splat-Shoot (LSS) 是 BEV 方法的开山之作,作者来自 NVIDIA。该方法是一个纯视觉的感知方法,用来做 BEV 分割任务的,但是其架构和思路可以推广到其他感知任务。

思路:等我看懂了再补吧……

代码简介

原代码仓库:https://github.com/nv-tlabs/lift-splat-shoot

我 fork 的仓库:https://github.com/Eslzzyl/lss

LSS 的代码简直是自动驾驶感知方法里的一股清流。

现在的大多数方法都是用 mmdet3d 改的,mmdet3d 相对比较成熟,如果熟悉这个框架改起来当然容易,但 mmdet3d 的环境太难配了,python pytorch cudatoolkit setuptools mmengine mmcv mmdet nuscenes-devkit mmdet3d 这几个包(以及它们的一大堆依赖)的版本互相牵扯,坑非常多;而且这个框架比较复杂,对初学者不是很友好;最难顶的是这些方法绝大多数都是用自己魔改的 mmdet3d 代码库,很多要自己编译 CUDA 算子,又牵扯到 gcc 和 nvcc,问题繁多。

LSS 的代码则是直接在 nuscenes-devkit 的基础上自己写了数据加载、模型结构和训练流程,整体上还是比较复合标准的 PyTorch 训练 pipeline 的,依赖也很少,对像我这样的小白来说比较容易理解。

再加上 LSS 是一个纯视觉的方法,不需要做 Fusion、模态对齐之类的,结构就更简单。这份代码实测可以用最新版本的工具链来训练,详见环境配置部分。

LSS 代码库只有 6 个主要的 Python 文件:

  • main.py,程序入口
  • train.py,训练脚本
  • data.py,建立在 nuscenes-devkit 基础上的数据加载代码
  • models.py,模型代码
  • tools.py,实用工具
  • explore.py 主要是模型验证和可视化代码

环境配置

我配置的环境如下:

  • Python 3.12
  • Pytorch 2.4.1
  • torchvision
  • 自己改的 nuscenes-devkit,兼容 Python 3.12

以下是具体配置过程。

创建虚拟环境

建议使用 conda 创建虚拟环境。

conda create -n lss python=3.12
conda activate lss

安装 PyTorch 和 torchvision

本文假定读者已经安装了 NVIDIA 显卡驱动和 CUDA 工具包,示例版本是 12.1。LSS 不需要自行编译 CUDA 算子。

# 此处遵循 PyTorch 官网指南安装最新版本的 pytorch 和 torchvision 即可
conda install pytorch torchvision pytorch-cuda=12.1 -c pytorch -c nvidia

安装 nuscenes-devkit

# 克隆我修改的 nuscenes-devkit
git clone https://github.com/Eslzzyl/nuscenes-devkit.git
cd nuscenes-devkit
# 安装。nuscenes-devkit 的依赖将被自动安装。
pip install -v -e ./setup

安装 LSS 的依赖

# 克隆我修改的 LSS 代码
git clone https://github.com/Eslzzyl/lss.git
cd lss
# 安装依赖
pip install -r requirements.txt

环境配置到此完成。没有恼人的版本不兼容问题,不需要执行任何编译操作。

训练

我尝试了在两套环境上训练 LSS:

  1. 8 卡 2080Ti(11G),96G内存,双路 Xeon Gold 5118 CPU,共 24 核
  2. 单卡 4090(24G),41G内存,Xeon w7-3465x CPU,9核(这个是在 docker 容器里面跑的,所以没法用到所有的内存和 CPU)

LSS 代码里设定是 nuScenes trainval 上跑 10000 个 epoch,应该是随便给了一个比较大的数,然后看收敛了就停下来。我改成 1000 了,在环境 1 训练完需要大概 3 天,环境 2 是 6 天。但是环境 1 因为后面内存爆了就停下来了。这里要引以为鉴,nuScenes 上开多个 worker 加载数据非常消耗内存,可用的内存一定要和卡数匹配。

幸运的是,LSS 的数据加载部分没有内存泄露的问题。这个方向有很多代码的数据加载是有内存泄漏的,根本跑不完整个训练过程。

(环境 2)查看 TensorBoard 的日志,基本上到第 20k 个 step 模型就已经收敛,IOU 来到 0.28 左右。此时距离模型开始训练过去了两个小时。

# 在执行下面的命令启动训练之前,先修改 train.sh 中的超参数,确保适合自己的硬件配置,不会导致内存或显存溢出。
bash train.sh

验证

其实就是在 nuScenes 的验证集上跑一遍验证过程,这个和训练过程中的验证是完全一样的。

bash eval.sh

程序将报告 IoU 指标,我这里测的是 0.28 左右。就像上面说的,训练开始不久后验证的 IoU 指标就达到了这个值。

可视化

bash visual.sh

将产生许多张图片,这是其中一张。

可视化结果

总结

LSS 的代码是很值得借鉴的,干净利落,没有太多的封装。

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

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

相关文章

答题判题程序1~3总结性Blog

前言:总结三次题目集的知识点、题量、难度等情况 答题判题程序1 1.知识点 输入输出处理: 解析输入格式,包括题目数量、题目信息和答题信息。 按行处理输入内容,确保题目顺序和编号的独立性。 字符串解析与匹配: 需要识别并提取指定格式中的题号、题目内容、标准答案和用户…

minio 多节点部署

先决条件 firewalld 配置 firewall-cmd --permanent --zone=public --add-port=9000/tcp firewall-cmd --reload 节点说明 cat >> /etc/hosts << EOF 192.168.174.100 minio-01 192.168.174.101 minio-02 EOF 挂载点 mkdir -pv /data/disk1/minio mkdir -pv /dat…

gdal部署及java调用详细过程(linux版本-ubuntu)

建议gdal用3.5.3前的版本,因为目前网上大部分文章都是适用这个版本之前的编译方法 一、gdal部署 1)安装gcc 通过系统包管理器安装 sudo apt install gcc gcc --version 2)安装g++ 通过系统包管理器安装 sudo apt install g++ g++ --version 3)安装Ant 通过系统包管理器安装…

KBJ2510-ASEMI整流桥KBJ2510参数、封装、尺寸

GBJ2510-ASEMI整流桥GBJ2510参数、封装、尺寸编辑:ll KBJ2510-ASEMI整流桥KBJ2510参数、封装、尺寸 型号:KBJ2510 品牌:ASEMI 封装:KBJ-4 批号:2024+ 现货:50000+ 最大重复峰值反向电压:1000V 最大正向平均整流电流(Vdss):25A 功率(Pd):大功率 芯片个数:4 引脚数量:…

NS3安装

下载压缩包,解压 发现是直接打包好的虚拟机VMware打开vmx文件是一个ubantu系统 在root的家目录下发现有一个打包好的ns3的tar.bz2文件,解压 sudo tar -jxvf ns-allinone-3.33.tar.bz2不sudo也可以解压到当前目录,进入文件夹 cd ns-allinone-3.33 ls -a发现有一个build.py文件…

发电机过速诊断研究 - 基于LSTM进行状态监测

发电机过速诊断研究 思路 输入是选择的20个特征,切片长度为6,即 \(x \in \mathbb{R}^{6 \times 20}\)。 输出是 0-1,1表示故障,0表示正常,使用 MSELoss。 模型 双层 LSTM + Linear 结果看起来效果很不好。

DataGrip 2024.2.2 最新安装教程(附激活-2099年~)

下载 DataGrip 2024.2.2 版本的安装包。下载补丁https://pan.quark.cn/s/fcc23ab8cadf检查免责声明:本文中的资源均来自互联网,仅供个人学习和交流使用,严禁用于商业行为,下载后请在24小时内从电脑中彻底删除。对于因非法使用而引起的版权争议,与作者无关。所有资源仅供学…

缺陷的判定与提交

第九章 提交缺陷报告一、 软件缺陷的判定什么是缺陷软件存在着不符合质量需求或违背软件用户、客户、企业意愿的问题,这就是软件缺陷(Defect),又叫“Bug(臭虫)”。软件缺陷的判定准则软件未达到产品说明书标明的功能;产品说明书简称为说明(spec)或产品说明(product s…

高级语言程序设计第四次个人作业

这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/2024C/ 这个作业要求在哪里:https://edu.cnblogs.com/campus/fzu/2024C/homework/13293 学号:222200432 姓名:赛比海托合地亚尔 第六章 6.16.16.16.56.16.76.16.86.16.96.16.106.16.126.16.136.16.156.16.166.16.…

VulnHub-Brainpan1 靶机笔记

Brainpan1 靶机笔记 概述 靶机地址:https://vulnhub.com/entry/brainpan-1,51/#download 这台靶机是很好的缓冲区溢出漏洞利用的练习靶机,涉及到逆向和缓冲区溢出漏洞挖掘的一些知识。 一、nmap 扫描 1)端口扫描 nmap -sT --min-rate 10000 -p- -o ports 192.168.11.12Nmap …

Linux Centos安装ElasticSearch、分词器、es-head和Kibana

1 前言 Java中比较流行的搜索引擎是Elasticsearch,传统的数据库搜索,使用like’关键字%’,当内容过多时性能会大大降低,所以Elasticsearch就出现了。 下面,记录下Linux下Elasticsearch的安装过程。 2 Linux下安装Elasticsearch 2.1 下载和解压安装包 官网下载地址: https…