AutoDL 上复现 MapQR:从环境配置到 nuScenes Mini 训练跑通

最近我在 AutoDL 上尝试复现 MapQR 项目。MapQR 是一个面向在线矢量化高精地图构建的模型,基于 MMDetection3D、BEVFormer 和 MapTRv2。本文记录从零开始配置环境、下载 nuScenes mini 数据、生成数据索引,到最终完成 24 epoch 训练的完整流程。

1. 创建 Conda 环境

MapQR 依赖的是比较老的一套 OpenMMLab 环境,因此不能直接使用 AutoDL 默认的新版本 PyTorch 镜像。我新建了一个 Python 3.8 环境:

conda create -n mapqr python=3.8 -y conda activate mapqr python -V

确认版本:

Python 3.8.20

2. 安装 PyTorch 和 OpenMMLab 依赖

安装 PyTorch 1.9.1 + CUDA 11.1:

pip install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 \ -f https://download.pytorch.org/whl/torch_stable.html

检查:

python -c "import torch; print(torch.__version__); print(torch.version.cuda); print(torch.cuda.is_available())"

输出:

1.9.1+cu111 11.1 True

安装 mmcv、mmdet、mmseg:

pip install mmcv-full==1.4.0 \ -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/index.html pip install mmdet==2.14.0 pip install mmsegmentation==0.14.1 pip install timm

检查:

python -c "import mmcv, mmdet, mmseg; print(mmcv.__version__, mmdet.__version__, mmseg.__version__)"

输出:

1.4.0 2.14.0 0.14.1

3. 下载 MapQR 代码

cd /root/autodl-tmp git clone https://github.com/HXMap/MapQR.git cd MapQR

目录结构如下:

assets docs figs LICENSE mmdetection3d projects README.md requirement.txt tools

4. 安装 mmdetection3d

cd /root/autodl-tmp/MapQR/mmdetection3d python setup.py develop

检查:

python -c "import mmdet3d; print(mmdet3d.__version__)"

输出:

0.17.2

5. 编译 MapQR 自定义 CUDA 算子

MapQR 使用了 GeometricKernelAttention 自定义 CUDA 扩展,需要单独编译:

cd /root/autodl-tmp/MapQR/projects/mmdet3d_plugin/maptr/modules/ops/geometric_kernel_attn python setup.py build install

之后发现运行时找不到 PyTorch 动态库 libc10.so,需要设置:

export LD_LIBRARY_PATH=/root/miniconda3/envs/mapqr/lib/python3.8/site-packages/torch/lib:$LD_LIBRARY_PATH echo 'export LD_LIBRARY_PATH=/root/miniconda3/envs/mapqr/lib/python3.8/site-packages/torch/lib:$LD_LIBRARY_PATH' >> ~/.bashrc

检查 CUDA 扩展:

cd /root/autodl-tmp/MapQR python -c "import GeometricKernelAttention; print('cuda op ok')"

输出:

cuda op ok

检查项目 plugin:

python -c "import projects.mmdet3d_plugin; print('plugin ok')"

输出:

plugin ok

6. 处理依赖兼容问题

过程中遇到了一些老项目常见的依赖问题,最终使用的关键包包括:

pip install plyfile==0.7.4 scikit-image==0.19.3 pip install networkx==2.5.1 pip install Pillow==8.4.0 pip install yapf==0.32.0 pip install future protobuf==3.19.6 tensorboard==2.10.1

由于项目只跑 nuScenes,不跑 Argoverse 2,因此注释掉了 AV2 数据集导入,避免 av2 与老版 numpy 的类型标注冲突:

sed -i 's/^from \.av2_map_dataset/# from .av2_map_dataset/' projects/mmdet3d_plugin/datasets/__init__.py sed -i 's/^from \.av2_offlinemap_dataset/# from .av2_offlinemap_dataset/' projects/mmdet3d_plugin/datasets/__init__.py

同时,为了让 Python 能找到 projects 包,设置:

export PYTHONPATH=/root/autodl-tmp/MapQR:$PYTHONPATH echo 'export PYTHONPATH=/root/autodl-tmp/MapQR:$PYTHONPATH' >> ~/.bashrc

7. 下载并解压 nuScenes Mini 数据

创建数据目录:

mkdir -p /root/autodl-tmp/data/nuscenes cd /root/autodl-tmp/data/nuscenes

下载 nuScenes mini:

wget -c --show-progress https://www.nuscenes.org/data/v1.0-mini.tgz tar -zxvf v1.0-mini.tgz

下载 map expansion:

wget -c --show-progress -O nuScenes-map-expansion-v1.3.zip \ "https://zenodo.org/records/15667707/files/nuScenes-map-expansion-v1.3.zip?download=1" unzip nuScenes-map-expansion-v1.3.zip

地图包解压后目录结构需要整理为:

/root/autodl-tmp/data/nuscenes/maps/expansion /root/autodl-tmp/data/nuscenes/maps/basemap /root/autodl-tmp/data/nuscenes/maps/prediction

因此执行:

mv /root/autodl-tmp/data/nuscenes/expansion /root/autodl-tmp/data/nuscenes/maps/ mv /root/autodl-tmp/data/nuscenes/basemap /root/autodl-tmp/data/nuscenes/maps/ mv /root/autodl-tmp/data/nuscenes/prediction /root/autodl-tmp/data/nuscenes/maps/

下载 CAN bus 数据:

cd /root/autodl-tmp/data wget -c --show-progress -O can_bus.zip \ "https://zenodo.org/records/15667420/files/can_bus.zip?download=1" unzip can_bus.zip

解压后发现多了一层目录,整理为:

mv /root/autodl-tmp/data/can_bus/can_bus/* /root/autodl-tmp/data/can_bus/ rmdir /root/autodl-tmp/data/can_bus/can_bus

最终数据目录包括:

/root/autodl-tmp/data/nuscenes/samples /root/autodl-tmp/data/nuscenes/sweeps /root/autodl-tmp/data/nuscenes/v1.0-mini /root/autodl-tmp/data/nuscenes/maps /root/autodl-tmp/data/can_bus

8. 生成 nuScenes Mini 数据索引

先生成基础 temporal info:

cd /root/autodl-tmp/MapQR python tools/create_data.py nuscenes \ --root-path /root/autodl-tmp/data/nuscenes \ --out-dir /root/autodl-tmp/data/nuscenes \ --extra-tag nuscenes \ --version v1.0-mini \ --canbus /root/autodl-tmp/data

生成结果:

nuscenes_infos_temporal_train.pkl nuscenes_infos_temporal_val.pkl nuscenes_infos_temporal_train_mono3d.coco.json nuscenes_infos_temporal_val_mono3d.coco.json

然后生成 MapQR/MapTR 所需的 map info。原脚本默认不支持 mini,需要修改 tools/maptrv2/custom_nusc_map_converter.py,增加 v1.0-mini 分支:

available_vers = ['v1.0-trainval', 'v1.0-test', 'v1.0-mini'] if version == 'v1.0-trainval': train_scenes = splits.train val_scenes = splits.val elif version == 'v1.0-test': train_scenes = splits.test val_scenes = [] elif version == 'v1.0-mini': train_scenes = splits.mini_train val_scenes = splits.mini_val else: raise ValueError('unknown')

并让 args.version == 'mini' 时直接使用:

version='v1.0-mini'

之后运行:

python tools/maptrv2/custom_nusc_map_converter.py \ --root-path /root/autodl-tmp/data/nuscenes \ --out-dir /root/autodl-tmp/data/nuscenes \ --extra-tag nuscenes_map \ --version mini \ --canbus /root/autodl-tmp/data

输出:

train sample: 323, val sample: 81

生成:

nuscenes_map_map_infos_temporal_train.pkl nuscenes_map_map_infos_temporal_val.pkl

9. 修改配置文件

修改配置:

projects/configs/mapqr/mapqr_nusc_r50_24ep.py

主要改三处。

数据路径:

data_root = '/root/autodl-tmp/data/nuscenes/'

训练/验证 pkl:

ann_file=data_root + 'nuscenes_map_map_infos_temporal_train.pkl' ann_file=data_root + 'nuscenes_map_map_infos_temporal_val.pkl'

预训练 ResNet50 权重:

pretrained=dict(img='ckpts/resnet50-19c8e357.pth')

下载权重:

cd /root/autodl-tmp/MapQR mkdir -p ckpts wget -c -O ckpts/resnet50-19c8e357.pth \ https://download.pytorch.org/models/resnet50-19c8e357.pth

10. 开始训练

由于 mini 数据暂时没有完整处理评估 json,所以先关闭验证:

cd /root/autodl-tmp/MapQR python tools/train.py projects/configs/mapqr/mapqr_nusc_r50_24ep.py --no-validate

训练成功启动后可以看到:

workflow: [('train', 1)], max: 24 epochs

最终完成 24 epoch:

Saving checkpoint at 24 epochs

训练产物保存在:

work_dirs/mapqr_nusc_r50_24ep

查看:

ls work_dirs/mapqr_nusc_r50_24ep

输出:

20260509_191052.log 20260509_191052.log.json 20260509_191327.log 20260509_191327.log.json epoch_24.pth latest.pth mapqr_nusc_r50_24ep.py tf_logs

其中:

epoch_24.pth latest.pth

就是训练得到的模型权重。

11. 当前结果

至此,MapQR 已经在 AutoDL 上使用 nuScenes mini 完成了完整训练闭环:

环境配置完成 CUDA 算子编译成功 nuScenes mini 数据准备完成 MapQR 数据索引生成完成 训练成功跑完 24 epoch checkpoint 成功保存

需要注意的是,mini 数据主要用于调通代码流程,不适合用于报告论文指标。如果要复现论文结果,还需要下载完整 nuScenes trainval 数据,并按照相同流程重新生成完整数据索引与训练。

相关推荐
小仙女的小稀罕1 小时前
会议记录工具评测对比解析,AI识别整理技术的实际优势
人工智能
何陋轩1 小时前
Spring AI Alibaba实战:通义千问与Java的完美融合
人工智能·后端·ai编程
F_U_N_1 小时前
打工人实测:PandaWiki,把知识管理变简单
人工智能·开源
SCKJAI1 小时前
算力轻量化赋能巡检升级!视程空间AIR SC6N0-C NX平台,打造高阶智能巡检机器狗
人工智能
逻辑君1 小时前
认知神经科学研究报告【20260043】
人工智能·机器学习
同元软控1 小时前
从 Copilot 到 Agent:MWORKS AI 全线升级,开启科学计算与系统建模仿真的智能体时代
人工智能·copilot
码农小白AI1 小时前
漏电流报告审核为何进入“新速度时代”?IACheck用AI报告审核重构效率与精度
人工智能·重构
王_teacher1 小时前
RNN 反向传播数学推导(BPTT 时间反向传播)
人工智能·rnn·深度学习