MIT-BEVFusion训练环境安装以及问题解决记录


BEVFusion相关的其它文章链接:

  1. 【论文阅读】ICRA 2023|BEVFusion:Multi-Task Multi-Sensor Fusion with Unified Bird‘s-Eye View Representation
  2. MIT-BEVFusion训练环境安装以及问题解决记录
  3. 【MIT-BEVFusion代码解读】第一篇:整体结构与config参数说明
  4. 【MIT-BEVFusion代码解读】第二篇:LiDAR的encoder部分
  5. 【MIT-BEVFusion代码解读】第三篇:camera的encoder部分
  6. 【MIT-BEVFusion代码解读】第四篇:融合特征fuser和解码特征decoder

1. 基础环境

MIT的bevfusion训练代码对pytorch有要求,所以需要找到对应的CUDA版本,这里我安装的是11.3版本。

  • Linux(Ubuntu 18.04)
  • CUDA version:11.3

2. openmpi安装

下载安装openmpi,要不然会报mpi错误。

wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.4.tar.gz
解压
cd openmpi-4.1.4
 
./configure –prefix=/usr/local/openmpi
 
make -j8
 
sudo make install
 
~/.bashrc文件里添加环境变量:
 
MPI_HOME=/usr/local/openmpi
OMPI_MCA_opal_cuda_support=true
export PATH=${MPI_HOME}/bin:$PATH
export LD_LIBRARY_PATH=${MPI_HOME}/lib:$LD_LIBRARY_PATH
export MANPATH=${MPI_HOME}/share/man:$MANPATH

测试安装是否成功:

cd openmpi-x.x.x/examples
make
mpirun -np 4 hello_c

3. python类环境安装

照抄就行,经过验证。如果你的cuda不是11.03,可以进入pytorch官网查询需要安装的torch版本。

# 1 创建虚拟环境
conda create -n bevfusion python=3.8

# 2 激活虚拟环境
conda activate bevfusion

conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 cudatoolkit=11.3 -c pytorch -c conda-forge

pip install Pillow==8.4.0 tqdm torchpack nuscenes-devkit mpi4py==3.0.3 numba==0.48.0 setuptools==58.0.4 ninja==1.11.1 numpy==1.23.4 opencv-python==4.8.0.74 opencv-python-headless==4.8.0.74 yapf==0.40.1

# mmcv安装,注意cuda和torch版本号
# 可以进官网查询相应版本:https://mmcv.readthedocs.io/zh-cn/latest/get_started/installation.html#pip
pip install mmcv==1.4.0 -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.10/index.html
# 安装mmdet==2.20.0
pip install mmdet==2.20.0

4. 训练与评测

(1)数据预处理

#如果是正常版本,运行:
python tools/create_data.py nuscenes \
--root-path ./data/nuscenes \
--out-dir ./data/nuscenes \
--workers 16 \
--extra-tag nuscenes
 
#如果是mini版本,运行:
python tools/create_data.py  nuscenes --root-path ./data/nuscenes/ --version v1.0-mini --out-dir data/nuscenes/ --extra-tag nuscenes

(2) 训练

torchpack dist-run -np 8 python tools/train.py \
configs/nuscenes/det/transfusion/secfpn/camera+lidar/swint_v0p075/convfuser.yaml \
--model.encoders.camera.backbone.init_cfg.checkpoint \
pretrained/swint-nuimages-pretrained.pth \
--load_from pretrained/lidar-only-det.pth 

成功后效果如下:

在这里插入图片描述

(3) 评测

torchpack dist-run -np 8 python tools/test.py \
configs/nuscenes/det/transfusion/secfpn/camera+lidar/swint_v0p075/convfuser.yaml \
pretrained/bevfusion-det.pth \
--eval bbox

5. 报错及解决

(1)yapf版本问题

报错信息

TypeError: FormatCode() got an unexpected keyword argument ‘verify’

解决:yapf包的版本问题,降低为yapf==0.40.1

pip install yapf==0.40.1

(2)setuptools版本问题

报错信息

AttributeError: module ‘distutils’ has no attribute ‘version’

解决:setuptools版本过高导致

pip install setuptools==58.0.4

(3)spconv版本问题

报错信息

N > 0 assert faild. CUDA kernel launch blocks must be positive, but got N= 0

解决:setuptools版本过高导致

# cuda是10.2版本
pip install spconv-cu102
# cuda是11.3版本
pip install spconv-cu113

也可能是cuda与torch版本不匹配,需要进pytorch官网查询对应版本。

conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 cudatoolkit=11.3 -c pytorch -c conda-forge
### BevFusion 训练结果分析与优化 #### 训练结果分析 BevFusion 是一种基于鸟瞰图(Bird's Eye View, BEV)的多传感器融合方法,其核心在于通过全卷积网络实现特征融合并完成多种下游任务。在训练过程中,模型的表现可以通过以下几个方面来评估: 1. **池化预计算的效果** 池化预计算是 BevFusion 的一个重要特性,它能够有效减少冗余计算并加速推理过程。这种技术通过对输入数据的空间维度进行降采样,在保持语义信息的同时降低计算复杂度[^1]。 2. **多任务头的设计** 多任务学习使得 BevFusion 能够同时处理多个目标检测、分割和其他感知任务。实验表明,这种方法不仅提高了资源利用率,还增强了不同任务之间的协同作用[^2]。 3. **性能指标** 性能通常由 mAP (mean Average Precision) 和其他特定于任务的指标衡量。这些指标反映了模型在各种场景下的表现能力以及对噪声和遮挡的鲁棒性。 --- #### 优化策略 为了进一步提升 BevFusion训练效果,可以考虑以下几种优化方向: 1. **增强数据多样性** 使用更丰富的数据集或引入数据增强技术可以帮助模型更好地适应不同的驾驶环境。例如,随机裁剪、旋转和平移图像可以在一定程度上模拟真实世界中的变化条件。 2. **调整超参数** 学习率调度器的选择、批量大小设定以及正则化强度都会显著影响最终的结果。建议采用网格搜索或者贝叶斯优化的方法寻找最佳组合。 3. **改进损失函数设计** 针对不同子任务定制化的损失权重分配机制可能带来更好的整体表现。比如,对于较难收敛的任务给予更高的初始权重,随着训练进程动态调整比例关系。 4. **硬件加速支持** 利用 GPU 或 TPU 等专用硬件设备执行大规模矩阵运算可大幅缩短迭代周期时间,从而允许尝试更多次试验以找到最优解空间位置。 5. **迁移学习应用** 如果存在相似领域已有的高质量预训练模型,则可以直接加载它们作为初始化起点再微调至当前具体应用场景下,这样往往可以获得更快的学习速度及更高精度水平。 ```python import torch.optim as optim # 定义优化器及其学习率衰减策略 optimizer = optim.Adam(model.parameters(), lr=0.001) scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1) for epoch in range(num_epochs): scheduler.step() train_model(epoch) ``` 上述代码片段展示了如何配置 Adam 优化算法以及阶梯型学习率下降计划实例。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非晚非晚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值