BEVfusion复现避坑指南:从数据集准备到可视化,我踩过的那些坑(Ubuntu 20.04 + RTX 3090)
BEVfusion复现避坑指南从数据集准备到可视化我踩过的那些坑Ubuntu 20.04 RTX 3090复现前沿论文是每个AI从业者的必修课但过程中总会遇到各种意想不到的坑。本文将分享我在Ubuntu 20.04系统、RTX 3090显卡环境下复现BEVfusion时遇到的实际问题及解决方案帮助后来者少走弯路。1. 环境配置那些隐藏的依赖陷阱在开始复现前确保你的基础环境已经准备好Ubuntu 20.04、Python 3.8、PyTorch 1.10.0、CUDA 11.3和cuDNN 8.6。但即使如此仍会遇到一些棘手的依赖问题。1.1 OpenMPI安装的两种方案标准安装命令看似简单sudo apt-get install wget libgl1-mesa-glx libglib2.0-0 openmpi-bin openmpi-common libopenmpi-dev libgtk2.0-dev git -y但如果没有sudo权限就需要手动编译安装cd /home/your_username wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.4.tar.gz tar zxf openmpi-4.1.4.tar.gz cd openmpi-4.1.4 ./configure --prefix/home/your_username/local/openmpi make -j8 make install别忘了在~/.bashrc中添加环境变量MPI_HOME/home/your_username/local/openmpi OMPI_MCA_opal_cuda_supporttrue export PATH${MPI_HOME}/bin:$PATH export LD_LIBRARY_PATH${MPI_HOME}/lib:$LD_LIBRARY_PATH1.2 Python包版本冲突BEVfusion对包版本极其敏感以下组合经过验证可行pip install Pillow8.4.0 tqdm torchpack nuscenes-devkit mpi4py3.0.3 numba0.48.0 setuptools56.1.0 ninja1.11.1 numpy1.23.4 opencv-python4.8.0.74 opencv-python-headless4.8.0.74 yapf0.40.1特别提醒mmcv-full和mmdet的版本必须严格匹配pip install mmcv-full1.4.0 pip install mmdet2.20.02. 代码修改那些不为人知的坑点2.1 SpConv算力设置RTX 30系列显卡需要使用sm_86算力。修改setup.py文件仅保留-gencodearchcompute_86,codesm_86同时需要修改mmdet3d/ops/spconv/src/indice_cuda.cu文件将所有4096改为256。2.2 循环导入问题训练时常见的报错ImportError: cannot import name feature_decorator_ext from mmdet3d.ops.feature_decorator解决方案注释掉mmdet3d/ops/init.py中的相关导入注释掉mmdet3d/ops/feature_decorator/init.py的第一行注释掉mmdet3d/models/backbones/init.py中的雷达编码器导入3. 数据集处理nuscenes的特殊要求3.1 文件结构安排正确的目录结构应该是data/nuscenes/ ├── maps/ ├── samples/ ├── sweeps/ └── v1.0-mini/特别注意需要将map expansion pack(v1.3)解压后的basemap、expansion、prediction三个文件夹复制到maps目录下。3.2 create_data.py常见错误遇到文件找不到错误时修改tools/data_converter/nuscenes_converter.py第95-100行为info_path osp.join(root_path, {}_infos_train.pkl.format(info_prefix)) mmcv.dump(data, info_path) data[infos] val_nusc_infos info_val_path osp.join(root_path, {}_infos_val.pkl.format(info_prefix))4. 训练与测试那些让人抓狂的报错4.1 训练配置调整建议首次运行时修改以下参数# configs/default.yaml max_epochs: 2 # 先试跑2个epoch # configs/nuscenes/det/centerhead/lssfpn/camera/256x704/swint/default.yaml samples_per_gpu: 1 # 降低batch size # configs/nuscenes/default.yaml workers_per_gpu: 0 # 单线程模式4.2 预训练权重问题如果自动下载失败需要手动下载Swin-T权重mkdir -p ~/.cache/torch/hub/checkpoints/ wget https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_tiny_patch4_window7_224.pth -O ~/.cache/torch/hub/checkpoints/swin_tiny_patch4_window7_224.pth4.3 学习率调度器问题遇到TypeError: CyclicLrUpdaterHook: __init__() got an unexpected keyword argument min_lr_ratio错误时注释掉configs/nuscenes/det/centerhead/lssfpn/default.yaml最后一行# min_lr_ratio: 1.0e-35. 可视化最后的难关5.1 修改可视化脚本修改tools/visualize.py中的导入# from torchpack.utils.tqdm import tqdm from tqdm import tqdm修改mmdet3d/models/vtransforms/base.py中的forward函数签名def forward(..., metas, **kwargs):5.2 解决相机特征错误遇到TypeError: get_cam_feats() takes 2 positional arguments but 3 were given错误时修改tools/visualize.py第73行附近代码为if args.mode pred: model build_model(cfg.model) fp16_cfg cfg.get(fp16, None) if fp16_cfg is not None: wrap_fp16_model(model) load_checkpoint(model, args.checkpoint, map_locationcpu)复现前沿论文从来不是一帆风顺的过程每个项目都有其独特的挑战。BEVfusion作为一个融合多模态信息的复杂模型对环境配置、代码理解和数据处理都有较高要求。希望本文的实践经验能帮助你顺利复现将更多精力投入到创新性工作中。