BEVFormer代码复现:从环境配置到数据集链接的完整指南

张开发
2026/4/19 11:36:44 15 分钟阅读

分享文章

BEVFormer代码复现:从环境配置到数据集链接的完整指南
1. 环境准备从零搭建BEVFormer开发环境第一次接触BEVFormer时我花了两天时间才把环境配好主要卡在CUDA版本和mmcv的兼容性问题上。为了避免大家走弯路我把完整的环境配置流程整理出来。建议使用Ubuntu 20.04系统实测这个版本对各种深度学习框架的支持最稳定。1.1 基础环境搭建推荐使用Anaconda管理Python环境它能有效隔离不同项目的依赖冲突。以下是具体操作步骤# 创建名为bevformer的Python3.8环境 conda create -n bevformer python3.8 -y conda activate bevformer安装PyTorch时要特别注意CUDA版本匹配。我的显卡是RTX 3090实测以下组合最稳定pip install torch1.10.0cu113 torchvision0.11.0cu113 -f https://download.pytorch.org/whl/torch_stable.html安装完成后务必验证CUDA是否可用import torch print(torch.cuda.is_available()) # 应该返回True print(torch.version.cuda) # 应该显示11.31.2 关键依赖安装BEVFormer依赖OpenMMLab系列工具包安装顺序很重要。先装mmcv-full再装其他组件# 必须指定版本号避免兼容性问题 pip install mmcv-full1.4.0 -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.10.0/index.html接着安装mmdetection和mmsegmentationpip install mmdet2.14.0 pip install mmsegmentation0.14.1其他必要依赖包括数据集处理工具pip install nuscenes-devkit1.1.10 lyft-dataset-sdk0.0.8 pip install scikit-image0.19.0 pandas1.4.42. 代码获取与编译2.1 克隆与版本控制直接从OpenMMLab官方仓库获取mmdetection3d代码git clone https://github.com/open-mmlab/mmdetection3d.git cd mmdetection3d git checkout v0.17.1 # 必须使用这个版本编译安装时建议添加--no-deps参数避免依赖冲突python setup.py develop --no-deps2.2 解决常见编译问题编译过程可能会遇到这两个典型问题ninja报错先确保安装了ninja构建工具pip install ninja版本冲突如果之前装过其他版本的mmdet3d务必先卸载干净pip uninstall mmdet3d -y我在RTX 4090上测试时发现需要额外安装一个补丁pip install --force-reinstall numpy1.23.5 # 解决最新显卡的兼容性问题3. 数据集准备与处理3.1 数据集目录结构BEVFormer主要使用nuScenes数据集建议按以下结构组织文件data/ ├── can_bus/ ├── nuscenes/ │ ├── maps/ │ ├── samples/ │ ├── sweeps/ │ └── v1.0-trainval/Windows用户可以用mklink创建符号链接节省空间mklink /j D:\project\data\can_bus E:\datasets\can_bus3.2 数据集预处理运行预处理脚本前需要设置Python路径export PYTHONPATH./ # 解决No module named tools错误然后生成数据集信息文件python tools/create_data.py nuscenes \ --root-path ./data/nuscenes \ --out-dir ./data/nuscenes \ --version v1.0 \ --canbus ./data/can_bus这个过程大约需要30分钟建议在服务器上执行。我遇到过一个坑如果数据集路径包含中文预处理会失败。4. 模型训练与调试4.1 预训练模型下载官方提供的预训练模型有两个下载渠道直接从GitHub下载wget https://github.com/zhiqi-li/storage/releases/download/v1.0/r101_dcn_fcos3d_pretrain.pth国内用户建议用百度网盘链接见文末下载后放到ckpts目录下文件结构应该是ckpts/ └── r101_dcn_fcos3d_pretrain.pth4.2 启动训练使用分布式训练能显著加快速度./tools/dist_train.sh configs/bevformer/bevformer_base.py 8这里的8表示使用8块GPU。如果只有单卡可以用python tools/train.py configs/bevformer/bevformer_base.py4.3 调试技巧在代码中插入断点import pdb; pdb.set_trace()查看张量形状时建议使用这个技巧def debug_hook(module, input, output): print(fShape: {output.shape}) model.layer.register_forward_hook(debug_hook)训练过程中如果出现NaN值可以尝试调小学习率或添加梯度裁剪optimizer dict( typeAdamW, lr2e-4, weight_decay0.01, paramwise_cfgdict( custom_keys{ img_backbone: dict(lr_mult0.1), }), grad_clipdict(max_norm35, norm_type2) )5. 常见问题解决方案5.1 CUDA内存不足如果遇到CUDA out of memory错误可以尝试减小batch size修改config中的samples_per_gpu使用梯度累积optimizer_config dict(typeGradientCumulativeOptimizerHook, cumulative_iters4)启用混合精度训练fp16 dict(loss_scale512.)5.2 数据集加载失败典型错误信息包括KeyError: gt_bboxes_3dAssertionError: Invalid sample index解决方法确保数据集版本是v1.0-trainval重新运行预处理脚本检查nuscenes_infos_train.pkl文件是否完整5.3 模型收敛问题如果训练loss不下降检查学习率策略lr_config dict( policystep, warmuplinear, warmup_iters500, warmup_ratio0.001, step[16, 22] )验证数据增强配置train_pipeline [ dict(typeLoadMultiViewImageFromFiles, to_float32True), dict(typePhotoMetricDistortionMultiViewImage), ... ]我在实际项目中发现适当调整BEV特征的维度可以提升小物体检测效果bev_h 200 # 原始值为128 bev_w 200百度网盘预训练模型下载链接https://pan.baidu.com/s/1abc123def456ghi (示例链接请替换为真实地址)

更多文章