autodl部署复现UniAD--使用nuscenes v1.0-mini
目录
前言
由于本人目前在研究端到端自动驾驶,不过算力有限,因此打算在autodl上部署复现一下经典的UniAD,但是踩了许多坑。特此写下来记录一下(与官方文档不同的部分用红色标出),也方便大家复现,少走弯路。
在此先附上UniAD的官方文档链接:
https://github.com/OpenDriveLab/UniAD/blob/main/docs/INSTALL.md
autodl租用
由于UniAD推荐使用的环境是CUDA 11.1,使用4090D复现可能会出现一些问题,因此本人推荐第一次复现先使用3090(而且还便宜,哈哈)。
租用配置如下:

租用时直接选取python3.8和Cuda 11.1,与UniAD默认配置相同。
环境配置
此处参考自UniAD官方文档,部分细节根据autodl略有改动。
1. 学术资源加速
很多安装包即使换源下载速度还是很慢,可以执行autodl官方提供的命令来进行加速:
source /etc/network_turbo
2. 创建conda虚拟环境
autodl目前创建虚拟环境时,需要先执行:
conda init
再重新打开终端,这样就会在命令行最开始出现(base)字样,此时执行:
conda create -n uniad python=3.8 -y
conda activate uniad
就会进入uniad虚拟环境中。
3. 安装pytorch和torchvision
此处安装cuda 11.1和torch 1.9.1,直接使用官方文档命令即可:
conda install cudatoolkit=11.1.1 -c conda-forge
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
4. 安装mmcv-full,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
5. 安装mmdet3d
cd autodl-tmp
git clone https://github.com/open-mmlab/mmdetection3d.git
cd mmdetection3d
git checkout v0.17.1
pip install scipy==1.7.3
pip install scikit-image==0.20.0
pip install -v -e .
6. 安装UniAD
注意,这里有一个坑。官方文档给定的 requirements.txt 中,numpy是1.20.0。但是这个版本会与mmdet发生冲突,因此需要安装1.21.0版本。
首先,执行官方文档的命令:
cd autodl-tmp
git clone https://github.com/OpenDriveLab/UniAD.git
cd UniAD
pip install -r requirements.txt
之后,再执行下面的命令(会有warning,但不用管):
pip install numpy==1.21.0
7. 下载权重
官方提供了三个权重,分别是 bevformer, bevformer+Mapformer+trackformer,以及全流程的权重,下载在ckpts文件夹中:
mkdir ckpts && cd ckpts
# Pretrained weights of bevformer
# Also the initial state of training stage1 model
wget https://github.com/zhiqi-li/storage/releases/download/v1.0/bevformer_r101_dcn_24ep.pth
# Pretrained weights of stage1 model (perception part of UniAD)
wget https://github.com/OpenDriveLab/UniAD/releases/download/v1.0/uniad_base_track_map.pth
# Pretrained weights of stage2 model (fully functional UniAD)
wget https://github.com/OpenDriveLab/UniAD/releases/download/v1.0.1/uniad_base_e2e.pth
数据集准备
由于整个nuscenes数据集太大(大概400-500G左右),因此本文采取nuscenes v1.0-mini进行复现,因此需要比官方文档多做几个步骤。
1. 解压数据集
autodl租用时,自带了nuscenes数据集,位于 /root/autodl-pub/nuScenes 中。
首先,在UniAD文件夹下,建立data文件夹,再建立nuscenes文件夹:
cd UniAD
mkdir data && cd data
mkdir nuscenes && cd nuscenes
之后,先把 /root/autodl-pub/nuScenes中的CANbusexpansion里面的内容解压到nuscenes下:
cd /root/autodl-pub/nuScenes/CANbusexpansion
unzip can_bus.zip -d /root/autodl-tmp/UniAD/data/nuscenes
然后,在/root/autodl-tmp/UniAD/data/nuscenes下,新建maps文件夹,并解压Mapexpansion到这里:
cd /root/autodl-tmp/UniAD/data/nuscenes
mkdir maps
cd /root/autodl-pub/nuScenes/Mapexpansion
unzip nuScenes-map-expansion-v1.3.zip -d /root/autodl-tmp/UniAD/data/nuscenes/maps
最后,解压nuscenes v1.0-mini:
cd /root/autodl-pub/nuScenes/Fulldatasetv1.0/Mini
tar zxvf v1.0-mini.tgz -C /root/autodl-tmp/UniAD/data/nuscenes
至此,数据集构建完成。
2. 构建data info
因为我们要用nuscenes v1.0-mini数据集,因此需要重新构建data info。
首先把UniAD/tools/uniad_create_data.sh中,version改成v1.0-mini:
之后,运行该脚本,就可以生成train和eval的info:
./tools/uniad_create_data.sh
同时,应注释掉UniAD/projects/mmdet3d_plugin/datasets/pipelines中loading.py的第48行:

3. 下载 Motion Anchors
cd UniAD/data
mkdir others && cd others
wget https://github.com/OpenDriveLab/UniAD/releases/download/v1.0/motion_anchor_infos_mode6.pkl
最终,整体结构如下:
./data
├── infos
├── nuscenes
│ ├── can_bus
│ ├── maps
│ │ ├── basemap
│ │ ├── expansion
│ │ └── prediction
│ ├── samples
│ │ ├── CAM_BACK
│ │ ├── CAM_BACK_LEFT
│ │ ├── CAM_BACK_RIGHT
│ │ ├── CAM_FRONT
│ │ ├── CAM_FRONT_LEFT
│ │ ├── CAM_FRONT_RIGHT
│ │ ├── LIDAR_TOP
│ │ ├── RADAR_BACK_LEFT
│ │ ├── RADAR_BACK_RIGHT
│ │ ├── RADAR_FRONT
│ │ ├── RADAR_FRONT_LEFT
│ │ └── RADAR_FRONT_RIGHT
│ ├── sweeps
│ │ ├── CAM_BACK
│ │ ├── CAM_BACK_LEFT
│ │ ├── CAM_BACK_RIGHT
│ │ ├── CAM_FRONT
│ │ ├── CAM_FRONT_LEFT
│ │ ├── CAM_FRONT_RIGHT
│ │ ├── LIDAR_TOP
│ │ ├── RADAR_BACK_LEFT
│ │ ├── RADAR_BACK_RIGHT
│ │ ├── RADAR_FRONT
│ │ ├── RADAR_FRONT_LEFT
│ │ └── RADAR_FRONT_RIGHT
│ └── v1.0-mini
└── others
Train和eval
这里以e2e即整个训练或评估模型为例
评估时:
首先进行评估:
./tools/uniad_dist_eval.sh ./projects/configs/stage2_e2e/base_e2e.py ./ckpts/uniad_base_e2e.pth 1
之后,加入python绝对路径(否则会报错):
export PYTHONPATH=/root/autodl-tmp/UniAD:$PYTHONPATH
最后,进行可视化,会输出图片和视频:
python ./tools/analysis_tools/visualize/run.py --predroot ./output/results.pkl --out_folder ./output_visualize --demo_video test_demo.avi --project_to_cam True

训练时:
首先重新安装yapf,不然会因为版本出错:
pip uninstall yapf
pip install yapf==0.40.1
接着进行训练:
./tools/uniad_dist_train.sh ./projects/configs/stage2_e2e/base_e2e.py 1
总结
基本上我遇到的所有坑都用红字提到了,大家多多点赞和关注!
更多推荐



所有评论(0)