作者:杨一飞
1 环境部署
1.1 开发机准备
为了顺利地使用工具链,地平线建议您选择的开发机应满足以下要求:
硬件/操作系统要求 CPUCPU I3 以上或者同级别 E3/E5 的处理器内存16G或以上级别 GPUCUDA11.8、驱动版本 Linux:>= 510.39.01*
(推荐驱动版本 Linux:520.61.05)
适配显卡包括但不限于:
1. GeForce RTX 3090
2. GeForce RTX 2080 Ti
3. NVIDIA TITAN V
4. Tesla V100S-PCIE-32GB
5. A100 系统原生 Ubuntu 22.04
1.2 Docker 容器部署
地平线要求的 Docker 基础环境如下,请提前在您的宿主机上完成安装:
- Docker(20.10.10或更高版本,建议安装20.10.10版本),详见 Docker安装手册 。
- NVIDIA Container Toolkit(1.13.5或更高版本,建议安装1.15.0),详见 NVIDIA Container Toolkit安装手册。
完成 Docker 基础环境安装后,还需要将无 root 权限的用户添加到 Docker 用户组中。参考命令如下:
sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo service docker restart
拉取 docker 镜像,并下载 OE 开发包,将 OE 开发包和 Nuscenes 数据集挂载到 docker 容器中。参考命令如下:
# GPU Docker
docker pull openexplorer/ai_toolchain_ubuntu_20_j6_gpu:{version}
# 手动启动 GPU Docker 镜像
docker run -it --rm
--network host \ # 调整网络模式为host
--gpus all \ # 在启动容器时,添加标记以启用GPU资源的访问
--shm-size=15g \ # 修改共享内存大小,切记修改不然默认64MB
-v {OE 包路径}:/open_explorer \ # 挂载 OE 包
-v {数据集路径}:/data/horizon_j6/data \ # 挂载数据集
openexplorer/ai_toolchain_ubuntu_20_j6_gpu:{version}
注意,“--gpus”参数一定要设置为 all,代表着在容器内能使用开发机所有的 GPU,“--shm-size”一定要修改,不然默认共享内存仅为64MB。
2 数据集准备
2.1 数据集下载
进入nuscenes官网,根据提示完成账户的注册,下载 Full dataset(v1.0)、CAN bus expansion和Map expansion(v1.3)、nuScenes-lidarseg 这四个项目下的文件。下载后的压缩文件为:
|-- nuScenes-map-expansion-v1.3.zip
|-- nuScenes-lidarseg-all-v1.0.tar.bz2
|-- can_bus.zip
|-- v1.0-mini.tar
|-- v1.0-trainval01_blobs.tar
|-- ...
|-- v1.0-trainval10_blobs.tar
`-- v1.0-trainval_meta.tar
Full dataset(v1.0)包含多个子数据集,如果不需要进行 v1.0-trainval 数据集的浮点训练和精度验证,可以只下载 v1.0-mini 数据集进行小场景的训练和验证。
2.2 Full dataset 版本数据集打包和 meta 文件夹构建
2.2.1 数据集打包
将下载完成的 v1.0-trainval01_blobs.tar~v1.0-trainval10_blobs.tar、nuScenes-lidarseg-all-v1.0.tar.bz2、v1.0-trainval_meta.tar、nuScenes-map-expansion-v1.3.zip和can_bus.zip 进行解压,解压后的目录如下所示:
|--nuscenes
|-- can_bus #can_bus.zip解压后的目录
|-- lidarseg #nuScenes-lidarseg-all-v1.0.tar.bz2解压后的目录
|-- maps #nuScenes-map-expansion-v1.3.zip解压后的数据
|-- samples #v1.0-trainvalXX_blobs.tar解压后的目录
| |-- CAM_BACK
| |-- ...
| |-- CAM_FRONT_RIGHT
| |-- ...
| `-- RADAR_FRONT_RIGHT
|-- sweeps
| |-- CAM_BACK
| |-- ...
| |-- CAM_FRONT_RIGHT
| |-- ...
| `-- RADAR_FRONT_RIGHT
|-- v1.0-trainval #v1.0-trainval_meta.tar解压后的数据
|-- attribute.json
| ...
`-- visibility.json
进入 horizon_model_train_sample/scripts
目录,使用以下命令将训练数据集和验证数据集打包,格式为 lmdb。如果将上述 nuscenes 文件夹放到上述目录内,下面 WORKSPACE 可替换为`pwd`。
#pack train_Set
python3 tools/datasets/nuscenes_packer.py --src-data-dir /WORKSPACE/nuscenes/ --pack-type lmdb --target-data-dir /WORKSPACE/tmp_data/nuscenes/v1.0-trainval --version v1.0-trainval --split-name train
#pack val_Set
python3 tools/datasets/nuscenes_packer.py --src-data-dir /WORKSPACE/nuscenes/ --pack-type lmdb --target-data-dir /WORKSPACE/tmp_data/nuscenes/v1.0-trainval --version v1.0-trainval --split-name val
打包结束生成目录如下所示。
|--scripts
|-- tmp_data
|-- nuscenes
|-- v1.0-trainval
|-- train_lmdb
| |--data.mdb
| |--lock.mdb
`-- train_lmdb
|--data.mdb
`--lock.mdb
- --src-data-dir为解压后的 nuscenes 数据集目录;
- --target-data-dir 为打包后数据集的存储目录;
- --version 选项为["v1.0-trainval", "v1.0-test", "v1.0-mini"],如果进行全量训练和验证设置为 v1.0-trainval,如果仅想了解模型的训练和验证过程,则可以使用 v1.0-mini 数据集;v1.0-test数据集仅为测试场景,未提供注释。
- 全量的 nuscenes 数据集较大,打包时间巨长,如果仅仅作为学习使用 mini 版就好。
2.2.2 meta文件夹构建
- 在
tmp_data/nuscenes
下创建 meta 文件夹,如果使用--version = "v1.0-mini",将解压后的 v1.0-mini 文件夹拷贝到tmp_data/nuscenes/meta
文件夹内,如果使用--version = "v1.0-trainval",将解压后的 v1.0-trainval 文件夹拷贝到tmp_data/nuscenes/meta
文件夹内; - 将解压后的maps文件夹拷贝到
tmp_data/nuscenes/meta
文件夹内; - 将解压后的lidarseg文件夹拷贝到
tmp_data/nuscenes/meta
文件夹内。
如果使用--version = "v1.0-trainval"ÿ