目录

前言

autodl租用

环境配置

数据集准备

Train和eval

总结


前言

由于本人目前在研究端到端自动驾驶,不过算力有限,因此打算在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

总结

基本上我遇到的所有坑都用红字提到了,大家多多点赞和关注!

更多推荐