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

相关推荐
kft13141 分钟前
Playwright + 本地 AI,从录制到自愈闭环的一站式自动化测试平台。
人工智能·测试工具
行走的小派3 分钟前
香橙派三款昇腾产品实操案例合集:DeepSeek部署、YOLOv8检测、智能助手平台
人工智能
牛哥带你学代码6 分钟前
VLA 与机器人基础模型:具身智能的下一代操作系统
人工智能·机器人
Cutecat_8 分钟前
YouTube 多语种自动配音功能实测:AI 如何让一条视频“开口说”多种语言
人工智能·科技·音视频
Maynor9969 分钟前
AI Coding 零基础实战教程|第五部分:完整项目案例实操
java·前端·人工智能·claude code·ai coding
三品吉他手会点灯20 分钟前
嵌入式机器学习 - 学习笔记1.0.2 - 学习路线导览:从机器学习基础到 TinyML应用
人工智能·笔记·嵌入式硬件·学习·机器学习
lunzi_082635 分钟前
【AI 杂谈】AI 的边界正在被谁定义?
人工智能
静Yu41 分钟前
给 AI 装上「身体」:我用魔珐星云做数字人的实践与接入教程
人工智能
OpenMiniServer42 分钟前
终极演化动力学:绝对悖论与信息重构
人工智能·重构
阿乔外贸日记43 分钟前
意大利进口主力产品及主要合作供应国
大数据·人工智能·物联网·搜索引擎·云计算