3、环境搭建:Ubuntu + CUDA + PyTorch环境配置、MMDetection3D安装、nuScenes数据集准备、Occ3D数据集准备

说实话,环境搭建这事儿,看着琐碎,但真能卡住不少人。我见过太多同学代码写好了,结果环境配了三天还没跑通。嗯,咱们今天就把这事儿捋清楚。

3.1 Ubuntu + CUDA + PyTorch 环境配置

我个人习惯用 Ubuntu 20.04 或 22.04。为什么?因为大部分自动驾驶开源项目都在这两个版本上测试过,省心。

3.1.1 安装显卡驱动

先确认你的显卡型号。我建议用 nvidia-smi 检查驱动是否已装。如果没装,别去官网瞎找,直接用 Ubuntu 的「软件和更新」里的附加驱动,选个推荐版本就行。

# 查看显卡信息
lspci | grep -i nvidia

# 查看驱动版本
nvidia-smi
注意: 我曾经遇到过驱动版本太高,导致 CUDA 不兼容的情况。建议驱动版本选 525 或 535 系列,比较稳。

3.1.2 安装 CUDA

CUDA 版本我推荐 11.7 或 11.8。为什么?因为 PyTorch 1.13 和 2.0 对这两个版本支持最好。你想想看,如果选了 CUDA 12.x,很多旧版算子可能编译不过。

# 下载 CUDA 11.7
wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux.run

# 安装(注意不要装驱动)
sudo sh cuda_11.7.0_515.43.04_linux.run --toolkit --silent --override

# 配置环境变量
echo 'export PATH=/usr/local/cuda-11.7/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

3.1.3 安装 PyTorch

我个人习惯用 conda 管理环境。说白了,conda 能帮你隔离不同项目的依赖,避免「装了这个包,那个包就崩了」的尴尬。

# 创建 conda 环境
conda create -n bev_occ python=3.8 -y
conda activate bev_occ

# 安装 PyTorch 1.13.1(CUDA 11.7)
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117
小技巧: 安装完后,用 python -c "import torch; print(torch.cuda.is_available())" 验证。如果返回 True,恭喜你,环境通了。

3.2 MMDetection3D 安装

MMDetection3D 是 OpenMMLab 家族的一员。说实话,它的安装比纯 PyTorch 要复杂一些,因为涉及很多 C++ 编译的算子。

3.2.1 安装 MMCV

MMCV 是基础库。版本一定要和 PyTorch 匹配。我建议用 mim 工具安装,它会自动帮你匹配版本。

# 安装 mim
pip install openmim

# 安装 mmcv-full(自动匹配 PyTorch 版本)
mim install mmcv-full

3.2.2 安装 MMDetection3D

从源码安装是最稳妥的方式。为什么?因为 pip 安装的版本可能缺少一些最新的特性。

# 克隆仓库
git clone https://github.com/open-mmlab/mmdetection3d.git
cd mmdetection3d

# 安装依赖
pip install -r requirements/build.txt
pip install -v -e .
避坑指南: 我曾经在编译时遇到 nvcc fatal 错误,原因是 CUDA 路径没配好。检查一下 /usr/local/cuda 软链接是否指向了正确的版本。

3.2.3 验证安装

# 运行测试
python -c "from mmdet3d.apis import init_model; print('MMDetection3D installed successfully!')"

3.3 nuScenes 数据集准备

nuScenes 是自动驾驶领域最常用的数据集之一。它包含 1000 个场景,每个场景 20 秒,标注了 3D 边界框和雷达点云。

3.3.1 下载数据集

去 nuScenes 官网注册账号,下载完整数据集。注意,完整版大概 400GB,建议用 wgetaria2c 断点续传。

# 使用官方下载工具
pip install nuscenes-devkit

# 下载(需要替换 YOUR_TOKEN)
python -m nuscenes.scripts.download --token YOUR_TOKEN --version v1.0-trainval

3.3.2 数据目录结构

我个人习惯把数据放在 /data/nuscenes 下。目录结构如下:

/data/nuscenes/
├── v1.0-trainval/
│   ├── maps/
│   ├── samples/
│   ├── sweeps/
│   └── v1.0-trainval_meta/
└── can_bus/

3.3.3 生成数据索引

MMDetection3D 需要生成数据索引文件。说白了,就是把数据路径和标注信息整理成 .pkl 文件。

# 生成训练集索引
python tools/create_data.py nuscenes --root-path /data/nuscenes --out-dir /data/nuscenes --version v1.0-trainval
提示: 生成索引大概需要 30 分钟。你可以先去喝杯咖啡。我一般会同时准备 Occ3D 的数据,这样不浪费时间。

3.4 Occ3D 数据集准备

Occ3D 是 nuScenes 的语义占用网格标注版本。说白了,就是把 3D 空间划分成小格子,每个格子标注是什么物体(车、路、行人等)。

3.4.1 下载 Occ3D 标注

Occ3D 的标注文件可以从 GitHub 仓库下载。注意,它依赖 nuScenes 的原始数据。

# 克隆 Occ3D 仓库
git clone https://github.com/Tsinghua-MARS-Lab/Occ3D.git
cd Occ3D

# 下载标注文件(约 10GB)
wget https://occ3d.com/data/occ3d-nuscenes.tar.gz
tar -xzf occ3d-nuscenes.tar.gz -C /data/occ3d

3.4.2 数据目录结构

/data/occ3d/
├── occ3d-nuscenes/
│   ├── gts/
│   │   ├── scene-0001/
│   │   ├── scene-0002/
│   │   └── ...
│   └── meta/
└── nuscenes/  (软链接到 nuScenes 数据)

3.4.3 验证数据完整性

我建议用脚本检查一下数据是否完整。不然训练到一半发现缺文件,那才叫崩溃。

# 检查标注文件数量
ls /data/occ3d/occ3d-nuscenes/gts/ | wc -l
# 应该输出 850(训练集 700 + 验证集 150)
注意: Occ3D 的标注是基于 nuScenes 的 6 个相机和 5 个雷达生成的。如果你只下载了部分传感器数据,可能会报错。

3.5 环境验证

最后,跑一个简单的测试脚本,确保所有组件都能正常工作。

# 测试 MMDetection3D 能否加载 nuScenes 数据
python tools/test.py configs/nuscenes/detection/pointpillars.py \
    --checkpoint checkpoints/pointpillars.pth \
    --show-dir results/
总结一下: 环境搭建的核心是版本匹配。CUDA、PyTorch、MMCV、MMDetection3D 的版本要一一对应。我建议用 conda 环境隔离,这样即使某个项目环境崩了,也不影响其他项目。

嗯,到这里环境就搭好了。下一章咱们开始讲数据加载和预处理,那才是真正有意思的部分。