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

2024-08-31 16:12

本文主要是介绍【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

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

这篇关于【3D目标检测】MMdetection3d——nuScenes数据集训练BEVFusion的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1124372

相关文章

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

Rust中的BoxT之堆上的数据与递归类型详解

《Rust中的BoxT之堆上的数据与递归类型详解》本文介绍了Rust中的BoxT类型,包括其在堆与栈之间的内存分配,性能优势,以及如何利用BoxT来实现递归类型和处理大小未知类型,通过BoxT,Rus... 目录1. Box<T> 的基础知识1.1 堆与栈的分工1.2 性能优势2.1 递归类型的问题2.2

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

Redis的数据过期策略和数据淘汰策略

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录一、数据过期策略1、惰性删除2、定期删除二、数据淘汰策略1、数据淘汰策略概念2、8种数据淘汰策略

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

Python给Excel写入数据的四种方法小结

《Python给Excel写入数据的四种方法小结》本文主要介绍了Python给Excel写入数据的四种方法小结,包含openpyxl库、xlsxwriter库、pandas库和win32com库,具有... 目录1. 使用 openpyxl 库2. 使用 xlsxwriter 库3. 使用 pandas 库

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑