【3D目标检测】MMdetection3d——nuScenes数据集训练BEVFusion

引言

MMdetection3d:【3D目标检测】环境搭建(OpenPCDet、MMdetection3d)

MMdetection3d源码地址:https://github.com/open-mmlab/mmdetection3d/tree/main?tab=readme-ov-file

IS-Fusion源码地址:https://github.com/yinjunbo/IS-Fusion

1 MMdetection3d环境搭建

官网教程链接🔗:https://mmdetection3d.readthedocs.io/en/latest/get_started.html
先准备好MMdetection3d的环境:【3D目标检测】环境搭建(OpenPCDet、MMdetection3d)
**直接抄作业安装如下:**

# 0 安装依赖
sudo apt install wget git g++ cmake ffmpeg libsm6 libxext6# 1 创建虚拟环境
conda create -n mmdet3d python=3.8# 2 激活虚拟环境
conda activate mmdet3d# 3 安装torch
pip install torch==1.10.0+cu113 torchvision==0.11.0+cu113 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html# 4 配置安装mmdetection3d
pip install openmim
# 下载的是mmdet3d是v1.3.0版本
git clone https://github.com/open-mmlab/mmdetection3d.git -b v1.3.0
cd mmdetection3d
# 使用mim可以自动配置mmcv,mmdet,mmengine
mim install -v -e .
# "-v" 指详细说明,或更多的输出
# "-e" 表示在可编辑模式下安装项目,因此对代码所做的任何本地修改都会生效,从而无需重新安装。# 5 安装 cumm-cuxxx spconv-cuxxx
pip install cumm-cu113
pip install spconv-cu113# 6 配置 mmdet3d中的BEVFusion
python projects/BEVFusion/setup.py develop
# 或者运行下面2句
# cd projects/BEVFusion
# pip install -v -e .# 7 安装及查看相关库的版本
## 7.1 openlab相关库安装
mim install mmcv==2.1.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
mim install mmdet==3.2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
mim install mmdet3d==1.3.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
mim install mmengine==0.10.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
## 7.2 openlab相关库版本
mim list
# 终端显示如下
mmcv       2.1.0      https://github.com/open-mmlab/mmcv
mmdet      3.2.0      https://github.com/open-mmlab/mmdetection
mmdet3d    1.3.0      /root/share/code/mmdetection3d
mmengine   0.10.1     https://github.com/open-mmlab/mmengine## 7.2 torch相关库版本
pip list | grep torch
# 终端显示如下
torch                     1.10.0+cu113
torchaudio                0.10.0+rocm4.1
torchvision               0.11.0+cu113

2 nuScenes数据集准备

数据集下载参考🔗【3D目标检测】OpenPCDet——nuScenes数据集训练BEVFusion/TransFusion_L
可以使用软连接将数据集链接到mmdetection3d/data文件夹下

ln -s /opt/data/DATASETS/nuscenes /opt/data/CNN_3D/mmdetection3d/data
├── data
│   ├── nuscenes
│   │   │── v1.0-trainval (or v1.0-mini if you use mini)
│   │   │   │── samples
│   │   │   │── sweeps
│   │   │   │── maps
│   │   │   │── v1.0-trainval 

重要!!!!!!
如果是nuscenes-mini数据集,需要修改文件
mmdet3d/datasets/nuscenes_dataset.py文件中的v1.0-trainval改成v1.0-mini即可
nuscenes-full无需修改,如下图所示:
在这里插入图片描述
生成pkl格式的数据集

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

或者直接修改create_data.py对应的输入参数,如下图所示:
在这里插入图片描述
注意:修改./mmdetection3d/tools/dataset_converters/update_infos_to_v2.py文件
dataroot = out_dir
在这里插入图片描述
否则会报错如下:
在这里插入图片描述
或者直接在终端运行:

python create_data.py nuscenes

成功生成标准数据显示如下:
在这里插入图片描述
运行完后 data/nuscenes目录如下所示:

nuscenes├── v1.0-mini├── maps├── nuscenes_dbinfos_train.pkl   # 新生成的文件├── nuscenes_gt_database         # 新生成的目录├── nuscenes_infos_train.pkl     # 新生成的文件├── nuscenes_infos_val.pkl       # 新生成的文件├── samples├── sweeps└── v1.0-mini

3 BEVFusion

3.1 训练

复制一份配置文件projects/BEVFusion/configs/bevfusion_lidar_voxel0075_second_secfpn_8xb4-cyclic-20e_nus-3d.py重命名为bevfusion_lidar.py

1. 只训练lidar数据集

# 配置文件中的max_epochs=2, batch_size=1, num_workers=0
# 上面三个参数按需更改,前期测试环境是否正常,可以按上面数字设置
bash tools/dist_train.sh projects/BEVFusion/configs/bevfusion_lidar.py 1
'''
正常训练时,终端会打印信息如下:
...
12/13 17:56:37 - mmengine - INFO - Epoch(train) [1][150/408]  lr: 1.0551e-04  eta: 0:38:26  time: 0.9984  
data_time: 0.0137  memory: 21795  grad_norm: 16.1443  loss: 12.3859  loss_heatmap: 2.6139  
layer_-1_loss_cls: 3.9985  layer_-1_loss_bbox: 5.7735  matched_ious: 0.0343
'''

配置如图:
在这里插入图片描述
成功训练如图:
在这里插入图片描述
2. lidar和相机数据共同训练

## 2.1 预训练权重
# 因为图像特征提取层配置的swin-transform需要下载预训练权重, 如果网络出问题, 可以加上代码下载即可
# 在bevfusion_lidar-cam.py配置文件全局搜索https://github.com,并在该地址前面加上https://mirror.ghproxy.com/即可## 2.2 训练
# bevfusion_lidar-cam.py配置文件是继承bevfusion_lidar.py所以batch_size,num_workers需要在bevfusion_lidar.py中修改### 2.2.1分布式训练
bash tools/dist_train.sh projects/BEVFusion/configs/bevfusion_lidar-cam.py 1### 2.2.2 单步训练 加载数据时比较慢,不是卡住了,只要报错和卡住就等着
python tools/train.py projects/BEVFusion/configs/bevfusion_lidar-cam.py

配置如下图:
在这里插入图片描述
训练成功如图:
在这里插入图片描述

训练完成结果(权重,配置文件,log,vis_data)后会保存在work_dirs目录下
官方提供了训练好的权重, 参考BEVFusion model
图像预训练权重:Swin pre-trained model

3.2 测试

bash tools/dist_test.sh work_dirs/bevfusion_lidar-cam/bevfusion_lidar-cam.py work_dirs/bevfusion_lidar-cam/epoch_2.pth 1

3.3 可视化

python projects/BEVFusion/demo/multi_modality_demo.py demo/data/nuscenes/n015-2018-07-24-11-22-45+0800__LIDAR_TOP__1532402927647951.pcd.bin demo/data/nuscenes/ demo/data/nuscenes/n015-2018-07-24-11-22-45+0800.pkl  work_dirs/bevfusion_lidar-cam/bevfusion_lidar-cam.py work_dirs/bevfusion_lidar-cam/epoch_6.pth --cam-type all --score-thr 0.2 --show

可视化结果如下:
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

dbc转换成excel

‌要将DBC文件转换为Excel格式,可以使用Canoe软件进行导出。‌ 使用Canoe软件将DBC文件导出为Excel格式的具体步骤如下: 打开Canoe软件,并在项目工程中加载或创建一个DBC文件。在主菜单中选择“文件”>“导出”>“数据库”选项。在打…

【Scala】Windows下安装Scala(全面)

目录 1.下载 2.安装 3.配置环境变量 1.新增系统环境变量 2.环境变量Path 4.验证 1.下载 官网下载地址:https://downloads.lightbend.com/scala/2.11.12/scala-2.11.12.msi 2.安装 双击下载的.msi文件: 勾选"I accept the terms in the Li…

前后端交互的路径怎么来的?后端解决cors问题的一种方法

背景:后端使用node.js搭建,用的是express 前端请求的路径baseURL怎么来的 ? 前后端都在同一台电脑上运行,后端的域名就是localhost,如果使用的是http协议,后端监听的端口号为3000,那么前端请求…

Django+Vue音乐推荐系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者&…

脚手架工具的应用(前端和后端搭建)

前端 一、安装 Node.js 环境 使用npm下载镜像 查看镜像:npm config get registry 切换淘宝镜像:npm config set registry https://registry.npmmirror.com 还原镜像:npm config set registry https://registry.npmjs.org 二、使用 Vue.js 脚…

智能停车场管理小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,车位信息管理,车位预订管理,系统管理 微信端账号功能包括:系统首页,地图,我的 开发系统:Windows 架构模式…

如何将开发工具设置成滚动鼠标改变字体大小

就在刚刚与温州那边技术开会,温州那边技术提出:字体太小,代码看不清,需要将字体放大。然后让我将IDE设置成按住键盘的Ctrl滚动鼠标,可以放大字体大小。。。顿时间的小小尴尬。下面我来记录一下究竟是怎么操作的&#x…

使用GitHub Actions的Self-hosted runner

登录github网站选择项目点击Settings按钮,进入设置页面点击actions/runners进入Runners页面点击New self-hosted runner按钮进入新增页面选择相应配置,生成相应的命令,在内网机器上运行 下载: # Create a folder $ mkdir actions-…

安装WMware和Ubuntu并使用xShell连接

0、我的电脑配置 设备名称 hello 处理器 Intel(R) Core(TM) i7-10700K CPU 3.80GHz 3.79 GHz 机带 RAM 16.0 GB (15.9 GB 可用) 设备 ID 541EC230-9910-418C-9043-5FBBF8ED320C 产品 ID 00330-80000-00000-AA846 系统类型 64 位操作系统, 基于 x64 的处理器 笔和触控 没有可…

汽车功能安全--TC3xx LBIST触发时机讨论

目录 1. LBIST架构 2. LBIST寄存器配置 3. LBIST触发时机 LBIST,全称Logic Built-in Self Test。 在TC3xx中,LBIST是一种硬件功能安全机制,目的是为了探测MCU内部逻辑电路的潜伏故障(latent faults)。 从使用者角度来看,只需…

NarratoAI —— 一站式AIGC自动化影视解说工具

随着人工智能技术的飞速发展,越来越多的工具开始涌现,旨在简化视频内容的创作过程。NarratoAI 就是一款基于先进AI大模型的自动化影视解说工具,它不仅能够自动生成视频脚本,还能完成视频剪辑、配音和字幕生成等一系列任务。本文将详细介绍 NarratoAI 的核心功能及其特色,帮…

网络安全售前入门06安全服务——基线检测服务方案

目录 1.服务概述 2.服务原则 3.服务内容 4.检查示例 ​​​​​​​5.服务输出 1.服务概述 安全基线检查可以帮助单位认清自身风险现状和漏洞隐患,使业务系统的风险维持在可控范围内。根本目的是保障业务系统的安全,是为了避免人为疏忽或错误,或使用默认的安全配置,给…

Native开发与逆向第四篇 - hook JNI函数GetStringUTFChars

修改测试demo 通过GetStringUTFChars 获取java层传入的字符串参数。 extern "C" JNIEXPORT jstring JNICALL Java_com_mycode_nativehello_MainActivity_stringFromJNI(JNIEnv* env,jobject /* this */,jstring s) {std::string hello env->GetStringUTFChars(s…

K8S 1.31 新功能: 跨核分发CPU

​在Kubernetes的最新版本1.31中,一个超酷的新功能,叫做CPUManager的静态策略,里面有个选项叫做distribute-cpus-across-cores。虽然这个功能现在还在测试阶段,也就是alpha版,而且默认是藏起来的,但它的目的…

腾讯提出一种新的针对风格化角色和逼真服装动画的生成3D运动转移方法,生成效果逼真!

来自腾讯XR视觉实验室的研究团队提出了一种创新的3D运动转移方法,专门针对风格化角色和逼真服装动画的生成。该方法能够将源动作准确地映射到目标角色上,同时考虑了角色身体的刚性变形和服装的局部物理动态变形。 与现有技术相比,这技术不仅…

docker Desktop报错 error pulling image configuration 处理

问题描述 在 docker 拉数据 出现以下错误 error pulling image configurarion: 这个问题 主要是 可能应该某些原因不能网络无法连上镜像 原因分析: 1。 2024年 5月以后 国内很多IP都 。。。懂的都懂,很多 VPN 也是。。。 懂的都懂&#x…

C++类和对象(5)——运算符重载(以日期类为例)

运算符重载的作用 假设我们此时实现了日期类的运算符重载,我们就可以 实现如图的很多功能,完成日期计算器的底层代码。 运算符重载关键字 运算符重载的关键字是operator。 比如你想重载‘’运算符,那么语法格式就是 返回类型 operator …

【Linux】系统管理(第六篇)

目录 1.ps命令详解:查看正在运行的进程 2.top命令详解:持续监听进程运行状态 3.pstree命令:查看进程树 4.lsof命令:列出进程调用或打开的文件信息 5.kill命令详解:终止进程 6.进程中常见得信号 7.Linux命令放入后…

跨境多账号登录如何防止IP、cookie和设备关联?

在当今数字化时代,拥有某个平台的多个账号是必要的,但如何防止这些账号之间产生关联,进而导致封号,却是一个需要谨慎对待的问题。 一、 多账号关联的主要因素 1. IP地址 2. Cookie和缓存 3. 设备指纹 二、如何防关联&#xff…

跨vue、react、angular框架渲染

应用场景 A 框架项目渐进式迁移到 B 框架一码多框架,开发一套组件,各个框架的应用复用;微前端实现【无沙箱能力】 思路 在 A 框架中渲染 B 框架的组件,将 B 框架的组件渲染成真实 dom 再挂载到对应位置。 实现demo 待补充&am…