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 数据,并按照相同流程重新生成完整数据索引与训练。

相关推荐
冬奇Lab8 小时前
Agent 系列(23):Web Agent——让 Agent 真正浏览网页
人工智能·llm·agent
冬奇Lab8 小时前
每日一个开源项目(第135篇):codebase-memory-mcp - 给 AI Agent 一张代码库的知识图谱
人工智能·开源·llm
IT_陈寒11 小时前
JavaScript的闭包把我坑惨了,说好的内存会自动回收呢?
前端·人工智能·后端
哥布林学者13 小时前
深度学习进阶(三十一)FlashAttention:IO 感知的精确注意力
机器学习·ai
jooloo14 小时前
Codex 间歇性 400 之谜:一条对话里,它为什么有时候用 chat/completions,有时候切到 responses?
人工智能
用户51914958484515 小时前
OpenSSL PKCS#12 PBMAC1 堆栈缓冲区溢出漏洞 (CVE-2025-11187) 分析与验证
人工智能·aigc
用户51914958484516 小时前
HP Sound Research SECOMNService 权限提升漏洞利用工具
人工智能·aigc
用户0183493016916 小时前
给 AI 智能体能力包一层 BFF,前端只调一个接口
人工智能